Как реализовать регулятор процессов в 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

Другие вопросы по тегам