Код:
static void Atomizer_NegativeFeedback(uint16_t adcValue, uint32_t unused) {
uint16_t curVolts;
if(Atomizer_curState == POWEROFF) {
// Powered off, nothing to do
return;
}
// Calculate current voltage
curVolts = ATOMIZER_ADC_VOLTAGE(adcValue);
if(curVolts == Atomizer_targetVolts) {
// Target reached, nothing to do
return;
}
if(curVolts < Atomizer_targetVolts) {
if(Atomizer_curState == POWERON_BUCK) {
if(Atomizer_curCmr == 479) {
// Reached maximum for buck, switch to boost
Atomizer_curState = POWERON_BOOST;
Atomizer_ConfigureConverters(0, 1);
}
else {
// In buck mode, increased duty cycle = increased voltage
Atomizer_curCmr++;
}
}
else if(Atomizer_curCmr > 80) {
// Boost duty cycle must be greater than 80
// In boost mode, decreased duty cycle = increased voltage
Atomizer_curCmr--;
}
}
else {
if(Atomizer_curState == POWERON_BOOST) {
if(Atomizer_curCmr == 479) {
// Reached minimum for boost, switch to buck
Atomizer_curState = POWERON_BUCK;
Atomizer_ConfigureConverters(1, 0);
}
else {
// In boost mode, increased duty cycle = decreased voltage
Atomizer_curCmr++;
}
}
else {
if(Atomizer_curCmr <= 10) {
// Buck duty cycles below 10 are forced to zero
Atomizer_curCmr = 0;
}
else {
// In buck mode, decreased duty cycle = decreased voltage
Atomizer_curCmr--;
}
}
}