-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Реализация ПИД-регулятора #12
Comments
Дополнение к задачеУстановлены предварительные требования к целочисленным вычислениям формулы ПИД-регулятора.
Пример анализа формулы ПИД-регулятораОбозначения
Пользуясь пунктом 0, введем обозначения: Перепишем формулу ПИД-регулятора:
При вводе
Представляя Есть вероятность, что представление всех коэффициентов в виде степеней двоек не даст исчерпывающей точности. Однако перебором этих коэффициентов в небольшом диапазоне можно подобрать уже необходимые константные поправочные множители. АнализПусть С первым членом суммы ситуация аналогична. Разрядность числа Не стоит забывать, что чаще всего (при более или менее стабильном режиме работы) величины |
#20 -- реализовано. |
Концепция ПИД-регуляции была понята неверно. "Память" регулятора бесконечно велика. К реализации |
0cfd1ee исправляет проблему. Память теперь понимается бесконечной. |
Данные
ПИД-регулятор, Пропорциональный интегрально-дифференцирующий регулятор -- один из простейших статических регуляторов с обратной связью.
Его простейшая форма -- ПИ-регулятор -- представляется уравнением регулятора:
u[n+1] = K_p e[n] + K_p K_i T sum_(m=(n-M)..n) e[m]
где
u[n+1]
-- вычисленная величина следующего управляющего сигнала,e[n]
-- текущая статическая ошибка регулирования, определяемая как разностьe[n] = f[n] - f[n-1]
,f[n]
-- обратная связь -- текущее значение управляемой величины,M
-- "размер" памяти системы.Коэффициенты
K_p
иK_i
, а такжеM
-- параметры ПИ-регулятора. В сумме они задают степень "инертности" регулятора, т.е. направленность регулирования в сторону большей чувствительности к мгновенным изменениям значения управляемой величины или в сторону большей чувствительности к общей тенденции изменения величины.(За уточнением формулы и ее трактовки следует обратиться к ТАУ.)
Основная проблема программной реализации алгоритма заключается в отсутствии в
ATmega8A
аппаратной поддержки вычислений с плавающей точкой. Поддержка реализована посредством компилятора, а значит крайне не эффективна. В то время как операции с целыми числами выполняются за один такт, операции с плавающей точкой могут выполняться десятки тактов. Поэтому требуется реализовать алгоритм регулятора в целых числах.При реализации алгоритма следует помнить о разрядности
int
, равной 16, а не 32 бит. Соответственно, диапазон значенийint
вATmega8A
есть-32768..0..+32767
, что есть крайне мало. Для того, чтобы не наступило переполнение типа при суммировании, требуется ограничится достаточно малымM
и достаточно малымиK_p
,K_i
.Также следует понимать, что допускается понижение точности данных с 10-разрядного АЦП с целью увеличения возможного качества регулирования путем отбрасывания нескольких младших из 10 значимых разрядов получаемого кода (побитовый сдвиг вправо на s+1, что эквивалентно делению на 2^s).
Задача
Реализовать алгоритм ПИ-регулирования:
The text was updated successfully, but these errors were encountered: