1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tom_code-pid

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 4.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 08:36 6b882f9

PID-контроль: реализация на языке C

1. Принцип работы PID-алгоритма

PID-управление — это пропорциональное интегрально-дифференциальное управление, широко применяемое в управлении процессами. Хотя этот алгоритм кажется простым, для его эффективной реализации требуется приложить некоторые усилия. Процесс реализации PID-алгоритма также очень прост и прямолинеен: он использует информацию обратной связи для получения информации об ошибке измерения и, наконец, использует эту информацию для точного управления контролируемой величиной. Сам контроллер объединяет три основных компонента: пропорцию, интеграцию и дифференциацию. Его функциональная блок-схема выглядит следующим образом:

1

2. Математическое выражение PID

Математическое выражение PID выглядит следующим образом:

3. Дискретизация PID

Для реализации в компьютерном программировании необходимо дискретизировать эту формулу, чтобы упростить реализацию кода.

При достаточно малом периоде выборки можно использовать следующее приближение:

T — период выборки; k — номер выборки, k = 0, 1, 2, ...

Используя этот метод приближения, можно получить две формы цифрового PID-управления: позиционное и инкрементное PID-управление.

4. Позиционное PID

u(k) — выходной прирост, может быть положительным или отрицательным; Kp, Ki, Kd — настраиваемые параметры.

5. Инкрементное PID

Окончательный вывод представляет собой прирост u(k).

6. Реализация на C

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;

7. Результаты тестирования

// имитированные значения, собранные датчиком, не являются фактическими значениями
float test[] = {40,45,46,47,48,50,51,52,50,53,56,60,50};

Тестовые значения могут быть не совсем научными, они просто используются для простой проверки наличия проблем в коде.

(1) Позиционное тестирование

Ожидаемое значение: 50. Можно видеть, что когда тестовое значение меньше ожидаемого, прирост положительный, а когда оно больше, прирост отрицательный. Это указывает на то, что эффект PID уже проявляется, и можно сделать вывод, что реализация алгоритма в основном правильная.

(2) Инкрементное тестирование

Есть вопросы? Пожалуйста, оставьте комментарий для исправления.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/tom_code-pid.git
git@api.gitlife.ru:oschina-mirror/tom_code-pid.git
oschina-mirror
tom_code-pid
tom_code-pid
master