Как реализовать регулятор процессов в C/C++?
Вопрос довольно прост, и я не знаю, где и как реализовать функции передачи.
Допустим, у меня есть классическая система
где P имеет передаточную функцию второго порядка с zita=0,7, F=1 и C - регулятор процесса.
Я хотел бы реализовать этот регулятор на контроллере, как ATMega128P в C или C++.
Передаточная функция процесса определяется экспериментальными методами, и регулятор может варьироваться в зависимости от передаточной функции процесса.
С чего мне начать?
1 ответ
Если у вас есть передаточная функция в непрерывном времени (Laplace), вам необходимо преобразовать ее в дискретное время (Z-Transform), используя один из методов дискретизации (прямая разность, обратная разность, трапеция).
Как только вы получите дискретную передаточную функцию, вам нужно будет применить обратное Z-преобразование, чтобы получить уравнение системы во временной области. Далее вам нужно будет определить шаг дискретизации.
Если у вас есть эти данные, вы можете довольно легко реализовать эту систему на микроконтроллере, поскольку практически вы будете реализовывать только простое уравнение, которое, вероятно, будет периодически считывать датчик через вход АЦП и в соответствии с этим и предыдущим входом (y[k] Значения y, [k-1], ...) будут генерировать управляющее значение (u[k]) в соответствии с его опорным значением (r[k]).
АЦП (y[k]) может быть считан с использованием прерывания по таймеру, установленного на срабатывание в соответствии с вашим шагом дискретизации. Как только значение прочитано, вы можете вычислить u [k] и соответственно установить элемент выполнения.
Для реализации я бы порекомендовал C, так как C++, вероятно, был бы немного излишним в этом случае (большинство встроенных систем, которые реализуют такую систему, как эта, программируются с использованием ANSI C или MISRA C - особенно в автомобильной промышленности).
Прежде чем перейти к C, я сначала попробую проверить, правильно ли я получил расчеты, и симулировал ли бы систему в Simulink (MATLAB) или Scilab.
Для настройки реальной встроенной системы я бы порекомендовал прочитать о методе Циглера-Николса.
http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
Информация о дискретности:
http://www-verimag.imag.fr/~tdang/DocumentsCours/Discretization.pdf