Цитата (ADMIN)
MAX - максимальное воздействие - 100% (значение 255 для команды HPWM) - то есть постоянный импульс с выхода ШИМ (в Picbasic это выглядит как HPWM 1,255,1000) MIN - минимальное воздействие - 0% (значение 0) - отсутствие импульса (в Picbasic это выглядит как HPWM 1,0,1000) err = РП - ТП ' вычислить текущую ошибку - в данном случае это значит вычесть из требуемой температуры текущую - получим разницу (err) между ними ' УВ - управляющее воздействие if (MIN < УВ < MAX) then 'если УВ не достигло предела, то integral = integral + error ' то добавить ошибку в сумму ошибок Endif 'Рассчитаем предварительный результат: УВ_temp = Kp*err + Ki*integral*t_step + Kd*(err - pre_err)/t_step 'Это сама формула для вычисления ПИД.(но как я уже говорил, вся сложность в том, что она не идеальна для всех случаев, поэтому я и говорил про "сказку") 'Осталось подобрать эти коэффициенты, в чем и заключается сложность. 'Вычисляем непосредственное значение УВ (так как оно может выходить за максимальный или минимальный диапазон после вычислений) If УВ_temp > MAX then УВ = MAX endif If УВ_temp < MIN then УВ = MIN pre_err = err ' текущая ошибка стала "ошибкой предыдущего вычисления" для следующего вычисления
Эту конструкцию повторил и опробовал! Работает. Но как Максим и говорил есть трудности с подбором коэф. Ладно если бы их было хотя бы 2.
На работе мне приходится софтить ПЛК ОВЕН. Разработчики для этой железяки написали много библиотек в том числе и ПИД регуляторы с различными выходными воздействиями. Есть даже с двумя выходами для трехходовый клапанов. 1 фаза открыть, вторая закрыть. Но это так, к слову.
Есть один ПИД с функцией автонастройки коэф. Регулятор раскачивает систему: перерегулирует, потом недорегулирует, приэтом измеряет период. В результате нескольких макушем синусоиды, если позволите, автонастройка заканчивается и ПИД выходит в режим регулярования. Иногда очень полезно, но при очень инертной системе, например, поддерживание температуры в торговом центре, практицески не подходит.
В общем решил написать что-то подобное. Покапал и понял, что автоматику в университете нам практицески не дали. Вот теперь коэф сижу подбираю и мечтаю всеже написать автонастройщика.