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; }
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; }
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; }