Changes by last author:
Changed:
Set how large the integral is allowed to build up. This value is what is added/subtracted to the reference dutycycle in order to reach boost target. In effect setting this to 0 will disable the boost control PID regulation completely and you will just send reference dutycycle to the boost control valve.
(needs some explanation of how much x of max is, like what is normal limit, etc) * Why should 0 I not allow any P to be calculated? Seems like an error in the code based on regular PID control loops if that is so. - Gunni |
Set how large the integral is allowed to build up. This value is what is added/subtracted to the reference dutycycle in order to reach boost target.
* Setting this to 0 disables the I term (important note: NOT the boost control PID regulation !) completely. |
* boost_P_effect = (MAP - boost_target_raw*16) * config.boost_pid_kp / 8
** The boost_P_effect doesn´t seem to math out to what happens in the ecu. I can see it work like so , KPA_ERROR * kp / 100 / 32 , when Error is 10kpa, kp is 100 , then output P is 0.3125%, The above would be for example. ((190-200)*16) * 100 / 8 = -2000. Please explain further. I can also not see where the amount of error influences the output of the integral output. |
** boost_integral += error / 128 every time (eg. 40 times per sec) where error is in 1/4 kPa units. So for 10 kPa error and 40Hz configured, boost_integral changes with a rate= 10*4 / 128 *40 = 12.5 / sec (inside the ECU it's 128 times higher precision than logged, but that's not interesting as far as VT concerned).
* boost_P_effect = (boost_target_raw*16 - MAP) * config.boost_pid_kp / 4 / 32 *100/256 need update and benchtest (MAP - boost_target_raw*16) * config.boost_pid_kp / 8 ** The unit is not kPa but 1/4 kPa for MAP (and 4 kPa for boost_target_raw, that's why the *16 - only applies locally, *16 MUST not be applied to MAP !) ** So for kp=100, with MAP 10 kPa below target: ((190-200)*4) * 100 / -2048 = 1.95 (/256 of full range, so 0.76 %) ** perceived : KPA_ERROR * kp / 100 / 32 , when Error is 10kpa, kp is 100 , then output P is 0.3125% *** Where did you see 0.3125 % ? Although internally higher resolution, don't you see output DC in 0.39% steps ? Maybe you mean 31.25 / 256 = 10 * 100 /32 / 256 = = 12.2% |
---- |
[VT playground] for testing with new variables for gauges that can be selected ( also, the custom variables can be used to test new formulas in ini file - very useful ). |
Gunni - |
---- |
I´m writing a complete boost control guide for VEMS´s new setup, but have found the following: |
Gunni is writing a complete boost control guide for VEMS´s new setup, but have found the following: |
*** The Integral limit should be a totally independent value from the ki value. I.e If I want to have aggressive ki yet limit the integral to 10% winding then I should be able to set the limit so, then when I adjust the ki it will have no effect on the limit just changes the amount of correction per amount of error, the limit still remaining 10%. This is how it should be, but is not currently. I don´t have a bench ecu anymore to test with so can´t create a log for you. I see no reason for why the ki can influence the amount if integral limit. |
** We are aware of "I_limit would better be final contribution DC % instead DC / ki". But changing would break compatibility and hundreds of tuned boost/iac setups (and noone would be able to tune the PID who cannot tune this way). Yes, it would be nice if integral limit would be duty % (not changing when changing ki value), but with the automatic integral limit it matters none. The non-invasive solution now is more likely displaying integral_limit * ki * constant in duty percentage, which represents the final DC% and updates automatically if either integral_limit or ki reconfigured. Alternatively integral_limit could be automatically adjusted when ki changed - maybe a bit superfluous. |
So far I can see
P value: Approximate P_DC% = 0.314 * P * ErrorKpa/100 - Disregard I can now see it works like so P_DC% = KpaError*kp/32/100 , I tested this on the bench. |
Benchtesting shows clearly
* P_DC = KpaError*kp / 32 ( KpaError*kp / 32 *100 /256 when viewed in % ) ** exactly: kPa is 1/8 kPa inside boostcontrol (MAP target), and *8 / 256 = /32 so (after correcting some likely typos) theory and measurement matches fine |
* the update rate is as configured (eg. 40 Hz is 40/ second that is 25 msec) |
* the update rate is as configured
** eg. 40 Hz boost_out PWM frequency is 40/ second that is 25 msec; internally the integral is updated every period (error is added) |
** Where is the rate configured? Is the ki the rate? And the ecu applies a fixed increment per update perhaps? |
**it´s no help logging 0-255 values that don´t represent the applied duty cycle. |
** the applied duty cycle can be represented as 0-100%, or 0-255 it's the same thing, with a constant factor (like kPa or PSI - both arbitrary choice; 0-100 is also arbitrary choice, 256 being 2's power is more natural) Boost duty DC is historically displayed as 0-100% - likely to stay that way, maybe not reasonable to waste time on that. |
Percentages / Engineering values :
0-255 values don´t represent any engineering values and are not much help when calibrating. Neither do 0-255 input values. This is why calibration inputs and outputs should be real world engineering values always. |
Calibration inputs and outputs should be ALSO DISPLAYED in real world engineering values |