void RPMBoostController::setSetpointMap ( uint8_t gear, uint8_t mode, uint16_t *data ) {
	gear = constrain (gear, 0, GEARS-1);
	for ( uint8_t i = 0 ; i<16 ; i++ ) {
		if ( mode == 0 )
			lowboost_pid_boost[gear]->data[i] = fixedintb1002float( *(data+i) );
		else
			highboost_pid_boost[gear]->data[i] = fixedintb1002float( *(data+i) );
	}
}
void RPMBoostController::setN75Params (uint16_t *data) {
	aKp = fixedintb1002float ( *data );
	++data;
	aKi = fixedintb1002float ( *data );
	++data;
	aKd = fixedintb1002float ( *data );
	++data;
	cKp = fixedintb1002float ( *data );
	++data;
	cKi = fixedintb1002float ( *data );
	++data;
	cKd = fixedintb1002float ( *data );
	++data;
	apidActivationThresholdFactor = fixedintb1002float ( *data );
	++data;
	cpidActivationThresholdFactor = fixedintb1002float ( *data );
	++data;
	if ( ((uint8_t) (*data)) & 1 )
		usePID = true;
	else
		usePID = false;
	uint8_t* t = (uint8_t*) data;
	++t;
	data = (uint16_t*) t;
	n75_max_boost = fixedintb1002float ( *data );
}
void RPMBoostController::loadParamsFromEEprom () {
	uint16_t raw = 0;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_aKp);
	if ( raw < 0xFFFF )
		aKp = fixedintb1002float(raw);
	else
		aKp = 4;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_aKd);
	if ( raw < 0xFFFF )
		aKd = fixedintb1002float(raw);
	else
		aKd = 0.2;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_aKi);
	if ( raw < 0xFFFF )
		aKi = fixedintb1002float(raw);
	else
		aKi = 1;

	raw = EEPROMReaduint16 (EEPROM_N75_PID_cKp);
	if ( raw < 0xFFFF )
		cKp = fixedintb1002float(raw);
	else
		cKp = 1;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_cKd);
	if ( raw < 0xFFFF )
		cKd = fixedintb1002float(raw);
	else
		cKd = 0.05;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_cKi);
	if ( raw < 0xFFFF )
		cKi = fixedintb1002float(raw);
	else
		cKi = 0.25;

	raw = EEPROMReaduint16 (EEPROM_N75_PID_aAT);
	if ( raw < 0xFFFF )
		apidActivationThresholdFactor = fixedintb1002float(raw);
	else
		apidActivationThresholdFactor = 0.5;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_cAT);
	if ( raw < 0xFFFF )
		cpidActivationThresholdFactor = fixedintb1002float(raw);
	else
		cpidActivationThresholdFactor = 0.85;

	uint8_t b = EEPROM.read(EEPROM_N75_ENABLE_PID);
	if (b==0 || b==255)
		usePID = false;
	else
		usePID = true;

	uint16_t t2 = EEPROMReaduint16(EEPROM_N75_MAX_BOOST);
	if ( t2 < 0xFFFF )
		n75_max_boost = fixedintb1002float(t2);
	else
		n75_max_boost = 1.8;
}
示例#4
0
void BoostController2::setN75Params (uint16_t *data) {
	aKp = fixedintb1002float ( *data );					//aggressive
	++data;
	aKi = fixedintb1002float ( *data );					//aggressive
	++data;
	aKd = fixedintb1002float ( *data );					//aggressive
	++data;
	cKp = fixedintb1002float ( *data );					//conservative
	++data;
	cKi = fixedintb1002float ( *data );					//conservative
	++data;
	cKd = fixedintb1002float ( *data );					//conservative
	++data;
	apidActivationThresholdFactor = fixedintb1002float ( *data );
	++data;
	cpidActivationThresholdFactor = fixedintb1002float ( *data );
	++data;
	if ( ((uint8_t) (*data)) & 1 )
		usePID = true;
	else
		usePID = false;
}
示例#5
0
void BoostController2::loadFromEeprom () {
	n75_pwm = EEPROM.read (EEPROM_N75_PWM);
	uint16_t t2 = EEPROMReaduint16(EEPROM_N75_BOOST);
	if ( t2 < 0xFFFF )
		n75_boost = fixedintb1002float(t2);
	else
		n75_boost = 1.0;

	//equal to MD code
	uint16_t raw = 0;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_aKp);	//aggressive
	if ( raw < 0xFFFF )
		aKp = fixedintb1002float(raw);				//aggressive
	else
		aKp = 2;									//aggressive
	raw = EEPROMReaduint16 (EEPROM_N75_PID_aKd);
	if ( raw < 0xFFFF )
		aKd = fixedintb1002float(raw);
	else
		aKd = 1;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_aKi);
	if ( raw < 0xFFFF )
		aKi = fixedintb1002float(raw);
	else
		aKi = 5;

	raw = EEPROMReaduint16 (EEPROM_N75_PID_cKp);	//conservative
	if ( raw < 0xFFFF )
		cKp = fixedintb1002float(raw);				//conservative
	else
		cKp = 1;									//conservative
	raw = EEPROMReaduint16 (EEPROM_N75_PID_cKd);
	if ( raw < 0xFFFF )
		cKd = fixedintb1002float(raw);
	else
		cKd = 0.5;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_cKi);
	if ( raw < 0xFFFF )
		cKi = fixedintb1002float(raw);
	else
		cKi = 3;

	raw = EEPROMReaduint16 (EEPROM_N75_PID_aAT);
	if ( raw < 0xFFFF )
		apidActivationThresholdFactor = fixedintb1002float(raw);
	else
		apidActivationThresholdFactor = 0.5;
	raw = EEPROMReaduint16 (EEPROM_N75_PID_cAT);
	if ( raw < 0xFFFF )
		cpidActivationThresholdFactor = fixedintb1002float(raw);
	else
		cpidActivationThresholdFactor = 0.85;

	uint8_t b = EEPROM.read(EEPROM_N75_ENABLE_PID);
	if (b==0 || b==255)
		usePID = false;
	else
		usePID = true;

	t2 = EEPROMReaduint16(EEPROM_N75_MAX_BOOST);
	if ( t2 < 0xFFFF )
		n75_max_boost = fixedintb1002float(t2);
	else
		n75_max_boost = 1.1;
}