|
@@ -0,0 +1,37 @@
|
|
|
+Взято тут:
|
|
|
+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
|