PID-контроль: реализация на языке C
PID-управление — это пропорциональное интегрально-дифференциальное управление, широко применяемое в управлении процессами. Хотя этот алгоритм кажется простым, для его эффективной реализации требуется приложить некоторые усилия. Процесс реализации PID-алгоритма также очень прост и прямолинеен: он использует информацию обратной связи для получения информации об ошибке измерения и, наконец, использует эту информацию для точного управления контролируемой величиной. Сам контроллер объединяет три основных компонента: пропорцию, интеграцию и дифференциацию. Его функциональная блок-схема выглядит следующим образом:
Математическое выражение PID выглядит следующим образом:
Для реализации в компьютерном программировании необходимо дискретизировать эту формулу, чтобы упростить реализацию кода.
При достаточно малом периоде выборки можно использовать следующее приближение:
T — период выборки; k — номер выборки, k = 0, 1, 2, ...
Используя этот метод приближения, можно получить две формы цифрового PID-управления: позиционное и инкрементное PID-управление.
u(k) — выходной прирост, может быть положительным или отрицательным; Kp, Ki, Kd — настраиваемые параметры.
Окончательный вывод представляет собой прирост u(k).
typedef struct PID_
{
float actual_value; // фактическое значение, возвращаемое каждым обратным сигналом, или значение, собранное датчиком за каждый цикл
float error; // значение отклонения
float Kd, Ki, Kp; // коэффициенты пропорциональности, интегрирования и дифференцирования
float P, I, D; // компоненты пропорциональности, интегрирования и дифференцирования
float error_pre; // E[k-1] // ошибка предыдущего периода
float error_pre_pre; // E[k-2] // ошибка позапрошлого периода
float set_value; // заданное значение, ожидаемое системой
float integral; // значение интегрирования
}PID;
// имитированные значения, собранные датчиком, не являются фактическими значениями
float test[] = {40,45,46,47,48,50,51,52,50,53,56,60,50};
Тестовые значения могут быть не совсем научными, они просто используются для простой проверки наличия проблем в коде.
Ожидаемое значение: 50. Можно видеть, что когда тестовое значение меньше ожидаемого, прирост положительный, а когда оно больше, прирост отрицательный. Это указывает на то, что эффект PID уже проявляется, и можно сделать вывод, что реализация алгоритма в основном правильная.
Есть вопросы? Пожалуйста, оставьте комментарий для исправления.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )