Я внедряю ПИД-регулятор для управления скоростью двигателя. Я закончил с внедрением управления PI, и он прекрасно работает для меня. В спецификации мне было сказано реализовать метод фильтрации с помощью следующего уравнения для части D:
Теперь, что я понимаю, так это то, что s
представляет в "dx/dt"
целом, что соответствует скорости изменения ошибки, но здесь я могу связать это со скоростью изменения обратной связи. Td/N
для ограничения общего выхода усиления (надеюсь, я понял это правильно). Теперь, чтобы представить это в терминах кода C, я попробовал следующий способ:
s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback
s = s*1000/sampleTime; //1000 is multiplied because sampleTime is in milliseconds
D = (Td*s)/(1+(s*Td/N));
D = D*KP; //Kp is multiplied as per the standard pid equation.
Old_Feedback = CurrentFeedback();
PID = P+I-D;
Что ж, результаты с добавлением D - это не то, что я предсказал. Я просто хочу знать, правильно ли я реализовал уравнение порции D? Я делаю какие-либо ошибки в моем понимании основных математических разделений?
ПРИМЕЧАНИЕ: я не могу изменить пересчет kp, ti, td, так как он исходит непосредственно от VFD.
источник
Ответы:
У меня есть 3 балла, чтобы поделиться:
1-Я расскажу вам, почему люди связываются с D-символами, PID = P + I + D, но D = kd * (error -olderror) и контролем положения, если вы приближаетесь к заданному значению, всегда старше <ошибка, поэтому D term будет отрицательным, и, таким образом, он уменьшит выходной сигнал и предотвратит выброс.
2-Что касается времени, не делите или используйте время. Поскольку вы используете встроенный микроконтроллер, просто сделайте постоянную времени и отмените ее из всех уравнений: например, используйте прерывание по таймеру, чтобы сгенерировать постоянную времени 1 мс и вызвать вашу функцию внутри.
3-Почему вы используете PID для управления скоростью, 90% времени PI достаточно для управления скоростью, поскольку D здесь больше похоже на управление ускорением.
надеюсь, это поможет
источник