p_volt_control.txt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. Взято тут:
  2. Buck-boost преобразователь с цифровым управлением на STM32F334 в режиме CC/CV
  3. https://habr.com/ru/post/508768/
  4. напишем простой П-регулятор:
  5. // Текущее значение коэффициента заполнения для ШИМ-сигнала
  6. uint16_t dutyPWM = 0;
  7. // Задаем значение, которое нужно поддерживать на выходе
  8. const float referenceOutputVoltage = 10.0f;
  9. // Устанавливаем значение пропорционального коэффициента
  10. const float Kp = 1.0f;
  11. // Настраиваем прерывание по таймеру, например, на 1 кГц
  12. void sTim3::handler (void) {
  13. float outputVoltage = GetOutputVoltage();
  14. float error = referenceOutputVoltage - outputVoltage;
  15. dutyPWM += Kp * error;
  16. }
  17. Собственно что тут происходит… Мы вычисляем ошибку и если реальное измеренное
  18. напряжение на выходе будет больше заданного, то ошибка примет отрицательное
  19. значение, а дальше мы ее суммируем к текущему значению заполнения ШИМ
  20. (dutyPWM) и в случае топологии buck это приведет к уменьшению заполнения и,
  21. следовательно, к уменьшению напряжения на выходе. Если же измеренное
  22. напряжение окажется меньше, чем заданное (reference), то ошибка примет
  23. положительное значение и при суммировании с dutyPWM это приведет к увеличению
  24. заполнения ШИМ сигнала на затворе реального транзистора и тем самым увеличит
  25. выходное напряжение.
  26. Реализация ПИД-регулятора на С++
  27. https://github.com/RedCommissary/mppt-2420-firmware/blob/master/firmware/library/dsp/Pid.h