Реализация D (дифференциация) в PID


8

Я внедряю ПИД-регулятор для управления скоростью двигателя. Я закончил с внедрением управления 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.


Попробуйте встроенный.com/ design/ prototyping- and- development/ 4211211/… "PID без PhD". Существует четкий раздел о реализации производной.
Скотт Сейдман

2
Когда вы объявляете Old_Feedback = CurrentFeedback () неправильно. Вы должны прочитать значение с помощью CurrentFeedback () и сохранить его в temp. переменная CurrentFeedback_tmp, затем используйте это значение каждый раз в этом ISR, потому что каждый раз, когда вы вызываете функцию fct CurrentFeedback (), она получает фактическое значение, которое будет отличаться при каждом его вызове.
Марко Буршич

«результаты с добавлением D - это не то, что я предсказал» - что вы предсказали? Почему они разные?
Грег д'Эн

Здесь есть большой потенциал для целочисленных переполнений. Каковы типы задействованных переменных и рассматривали ли вы их максимальные значения?
Лундин

s, D представляет собой S32, KP, Td и N U16. время выборки - U32. Я рассмотрел максимальные значения переменных в соответствии с максимально возможным значением для определенных типов данных.
SPP

Ответы:


1

У меня есть 3 балла, чтобы поделиться:

1-Я расскажу вам, почему люди связываются с D-символами, PID = P + I + D, но D = kd * (error -olderror) и контролем положения, если вы приближаетесь к заданному значению, всегда старше <ошибка, поэтому D term будет отрицательным, и, таким образом, он уменьшит выходной сигнал и предотвратит выброс.

2-Что касается времени, не делите или используйте время. Поскольку вы используете встроенный микроконтроллер, просто сделайте постоянную времени и отмените ее из всех уравнений: например, используйте прерывание по таймеру, чтобы сгенерировать постоянную времени 1 мс и вызвать вашу функцию внутри.

3-Почему вы используете PID для управления скоростью, 90% времени PI достаточно для управления скоростью, поскольку D здесь больше похоже на управление ускорением.

надеюсь, это поможет

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.