Page 1 of 1

Understanding how Boost mode works in fw

Posted: Fri Oct 23, 2020 3:26 pm
by rstevens81
Hi, before proceeding to blow stuff up .... (will test at low voltage of course), i thought it wasbest to understand how the code works for charging.

My intension is to use gen 3 inverter to firstly boost using the motor coils ( i now understand that this wouldnt work on a gen 2 as you have a single line that is either high or low, whilst the gen 3 has sperate pins for for the high/low igbt's).

Then to use the main dc-dc to buck the hv down to battery voltage (building on work of celeron55), the reason for this in the UK is there is no 3 hase at ahome without spending £1000's and the voltage tends to be slightly higher at 240v therefore 240x 1.41 = 338v circa 3,5v a cell so no use when nearly flat.
(dont wory no hv testing will de done for ages :D and till im confident its safe)

from the paramters i can see the following are used:

chargemode 0 4 0 0=Off, 3=Boost, 4=Buck
chargecur 0 50 0 Charge current setpoint. Boost mode: charger INPUT current. Buck mode: charger output current
chargekp 0 100 80 Charge controller gain. Lower if you have oscillation, raise if current set point is not met
chargeflt 0 10 8 Charge current filtering. Raise if you have oscillations
chargemax % 0 99 90 Charge mode duty cycle limit. Especially in boost mode this makes sure you don't overvolt you IGBTs if there is no battery connected.

Am i right "udcmax" does absolutely nothing in charge mode?
To my understang i could limit chargemax to limit the output boost voltage however this would lead to a poorer power factor as this would limit the boosting in the lower parts of the sinewave?

looking at the code i can see the following:

else if (MOD_BOOST == opmode || MOD_BUCK == opmode)
{
s32fp chargeCur = Param::Get(Param::chargecur);
s32fp tempDerate = FP_FROMINT(100);

Throttle::TemperatureDerate(Param::Get(Param::tmphs), Param::Get(Param::tmphsmax), tempDerate);
chargeCur = FP_MUL(tempDerate, chargeCur) / 100;

if (chargeCur < chargeCurRamped)
chargeCurRamped = chargeCur;
else
chargeCurRamped = RAMPUP(chargeCurRamped, chargeCur, 1);
PwmGeneration::SetChargeCurrent(chargeCurRamped);
}

This is where the current regulation, occurs and the temperature de-rating, this likes it would be a good placeto add voltage regulation by incerperating it into the throttle part?

Any thoughts and pointers are appreciated ... im trying to get my head around code before proceeding to some (low volatge testing).

Re: Understanding how Boost mode works in fw

Posted: Fri Oct 23, 2020 5:07 pm
by celeron55
Has anyone tried a voltage doubling rectifier for this purpose yet?

Re: Understanding how Boost mode works in fw

Posted: Sat Oct 24, 2020 6:10 am
by RetroZero
Funny that. Seems there are 3 posts with similar questions, hence Johu's latest video? I too am having trouble understanding voltage regulation (or not). I thought you couldn't go simply recharging a 6v battery with a 12v charger, even with low amps. So how about voltage devider? We know the voltage in, and we know the max voltage of battery pack(voltage out) . So we calculate the difference and put in resistors?
Then regulating current is not an issue?

Re: Understanding how Boost mode works in fw

Posted: Sat Oct 24, 2020 8:54 am
by johu
Indeed udcmax does nothing but would be an easy addition. I always relied on a BMS to stop the charging so could never be bothered. You could just call Throttle::UdcLimitCommand().
I think the buck converter could be programmed between fixed 70% and fixed 100% duty cycle once sufficient battery voltage has been reached. That way the boost mode can do the current regulation.

My first charger from EMW actually used voltage doubling to 640V and then bucked down to 500V (Polo). It works but I suspect it to be fairly inefficient, in summer the charger went into temperature derating every 15 minutes or so.