12345678910111213141516171819202122232425262728293031323334353637 |
- Взято тут:
- Buck-boost преобразователь с цифровым управлением на STM32F334 в режиме CC/CV
- https://habr.com/ru/post/508768/
- напишем простой П-регулятор:
- // Текущее значение коэффициента заполнения для ШИМ-сигнала
- uint16_t dutyPWM = 0;
- // Задаем значение, которое нужно поддерживать на выходе
- const float referenceOutputVoltage = 10.0f;
- // Устанавливаем значение пропорционального коэффициента
- const float Kp = 1.0f;
- // Настраиваем прерывание по таймеру, например, на 1 кГц
- void sTim3::handler (void) {
- float outputVoltage = GetOutputVoltage();
- float error = referenceOutputVoltage - outputVoltage;
- dutyPWM += Kp * error;
- }
- Собственно что тут происходит… Мы вычисляем ошибку и если реальное измеренное
- напряжение на выходе будет больше заданного, то ошибка примет отрицательное
- значение, а дальше мы ее суммируем к текущему значению заполнения ШИМ
- (dutyPWM) и в случае топологии buck это приведет к уменьшению заполнения и,
- следовательно, к уменьшению напряжения на выходе. Если же измеренное
- напряжение окажется меньше, чем заданное (reference), то ошибка примет
- положительное значение и при суммировании с dutyPWM это приведет к увеличению
- заполнения ШИМ сигнала на затворе реального транзистора и тем самым увеличит
- выходное напряжение.
- Реализация ПИД-регулятора на С++
- https://github.com/RedCommissary/mppt-2420-firmware/blob/master/firmware/library/dsp/Pid.h
|