PID-регулятор на языке C.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Lum1noFor
Открыл глаза
Сообщения: 65
Зарегистрирован: Ср сен 24, 2014 12:30:09

Re: PID-регулятор на языке C.

Сообщение Lum1noFor »

А для вас сильно принципиально написать функцию ПИД регулятора самостоятельно?
Моя задача не столько сделать готовое работающее устройство, сколько разобраться, как это все работает. Поэтому мне хотелось бы написать все самому. Именно для наглядности для меня я не убираю dt из I и D составляющих. Поэтому прошу всех присутствующих больше не указывать мне, что код неоптимален с точки зрения производительности. Если бы это была реальная задача, я бы взял какого-нибудь монстра PIC32 с FPU, а не STM32 низшего сегмента. Скажу лишь то, что за период дискрета в 10 мс я успеваю 20 раз передать данные по SPI с термопары, посчитать все float'ы от ПИД-регулятора, и вывести 35 символов на LCD. И все это вместе взятое не занимает и 5 мс, то есть запас еще 5 мс до следующего срабатывания таймера. Напомню, что МК у меня не делает больше ничего кроме перечисленного. За наводку на готовый алгоритм Вам спасибо, гляну.
Неужели так сложно найти и прочитать статьи о настройке ПИД-регуляторов?
Пример можно? В том, что читал я, нет ни слова о выборе времени дискрета. Везде говорят, что чем оно меньше, тем лучше.
Реклама
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Re: PID-регулятор на языке C.

Сообщение НовыйДень »

Однако, согласитесь, что выполнять ПИД-регулирование в 10 раз чаще чем можно выдать регулирующий импульс на тиристор - это не дело. 9 из 10 подсчетов пропадут даром.
Реклама
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: PID-регулятор на языке C.

Сообщение Ivanoff-iv »

да, слишком часто - тоже плохо, нотне с математической т.з., а с инженерной:
1) нагрузка на процессор (иногда бесполезная, как в данном случае)
2) шумы и дискретизация данных - т.к. в компоненте Д, dt стоит в знаменателе, то уменьшение шага увеличивает влияние dL на выход ПИД и если величина изменений пропорционально прошедшему времени и компенсирует уменьшение dt, то ошибки измерения не зависят от прошедшего времени и при уменьшении dt зтановятся заметнее
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Re: PID-регулятор на языке C.

Сообщение НовыйДень »

Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ, у которого коэфф Ki нужно занизить и ввести ограничение на макс. I. При этом, из-за пониженного Ki вклад отдельных измерений весьма незначителен.

А в библиотеке CMSIS DSP действительно есть ф-ции готового ПИД, можете оттудава взять.
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: PID-регулятор на языке C.

Сообщение jcxz »

[uquote="НовыйДень",url="/forum/viewtopic.php?p=4231889#p4231889"]Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ, у которого коэфф Ki нужно занизить и ввести ограничение на макс. I. При этом, из-за пониженного Ki вклад отдельных измерений весьма незначителен.[/uquote]Примерно так и есть. Ki должен быть очень малым (много меньше Kp). Потому и говорю, что дифф.компоненту можно выкинуть, функционирование упростится, станет более предсказуемым, устойчивее к случайным шумам и настройка регулятора упростится.
А "плохо с инженерной точки зрения" - легко решаемо, оптимизацией алгоритма. Которую ТС никак не хочет. Как уже показал выше - легко оптимизировать на много порядков по скорости.
Реклама
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Re: PID-регулятор на языке C.

Сообщение НовыйДень »

Есть ПИД регулятор, а есть ПИ-регулятор. У каждого свои плюсы и минусы, своё применение. Но это ещё не значит, что из ПИД получится сделать ПИ просто сократив интервалы вызова алгоритма до исчезновения дифф.составляющей.
То есть, ПИ должен делаться методом Kd = 0 и убиранию расчёта дифф., а не получением нулевой разницы между соседними выборками.

Для убирания случайных помех может применяться аналоговое и/или цифровое фильтрование сигнала.
А дифф. компонента отражает динамическое изменение системы, например охлаждение извне.
На примере паяльника таким изменением будет касание жалом спаиваемых деталей и последующий отрыв жала. Теплоемкость системы меняется, скорость изменения температуры будет меняться. И дифф. компонента помогает быстрее следить за динамическим изменениями. У интегральный компоненты задача другая - постепенно подводить к заданному значению систему в статическом состоянии. Попытка заставить интегральную составляющую выполнять роль дифыеренциальной будет хуже работать
Реклама
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: PID-регулятор на языке C.

Сообщение tonyk »

Lum1noFor писал(а): В том, что читал я, нет ни слова о выборе времени дискрета. Везде говорят, что чем оно меньше, тем лучше.
Значит, не то читали. Период расчёта выходного воздействия зависит, например, от транспортной задержки.

Добавлено after 40 minutes 8 seconds:
Ну, если в Гугле вас всех забанили, то можете как пример почитать тут:
Вложения
30-33.PDF
(280.05 КБ) 293 скачивания
Последний раз редактировалось tonyk Вс май 15, 2022 15:23:08, всего редактировалось 1 раз.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: PID-регулятор на языке C.

Сообщение Ivanoff-iv »

[uquote="НовыйДень",url="/forum/viewtopic.php?p=4231889#p4231889"]Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ.[/uquote]не только, ещё, когда дискретная величина перешагнёт на следующий шаг - этот шаг будет многократно усилен делением на малую величину и вместо Д компоненты получаем "сильно икающий 0" :)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1621
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: PID-регулятор на языке C.

Сообщение VNS »

[uquote="Lum1noFor",url="/forum/viewtopic.php?p=4231012#p4231012"]Прошу помощи в настройке PID-регулятора[/uquote]
https://habr.com/ru/post/145991/

http://pidcontrol.narod.ru/
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: PID-регулятор на языке C.

Сообщение tonyk »

[uquote="VNS",url="/forum/viewtopic.php?p=4232044#p4232044"][uquote="Lum1noFor",url="/forum/viewtopic.php?p=4231012#p4231012"]Прошу помощи в настройке PID-регулятора[/uquote]
https://habr.com/ru/post/145991/

http://pidcontrol.narod.ru/[/uquote]

По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1621
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: PID-регулятор на языке C.

Сообщение VNS »

[uquote="tonyk",url="/forum/viewtopic.php?p=4232060#p4232060"]По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.[/uquote]
Для кого как... :)
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: PID-регулятор на языке C.

Сообщение tonyk »

[uquote="VNS",url="/forum/viewtopic.php?p=4232085#p4232085"][uquote="tonyk",url="/forum/viewtopic.php?p=4232060#p4232060"]По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.[/uquote]
Для кого как... :)[/uquote]
Где? Не вижу. Выше я показал пример расчёта коэффициентов ПИД-регулятора по методу AMIGO (Астрома-Хагглунда). В приведённых ссылках ничего подобного нет. Не нужно вводить людей, тем более не сведующих в вопросе, в заблуждение.
Lum1noFor
Открыл глаза
Сообщения: 65
Зарегистрирован: Ср сен 24, 2014 12:30:09

Re: PID-регулятор на языке C.

Сообщение Lum1noFor »

Всех благодарю - ответы на интересующие меня вопросы я получил. Дальше только практика.
Viktorkin
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Вт май 17, 2022 09:49:48

Re: PID-регулятор на языке C.

Сообщение Viktorkin »

Тоже заинтересовала эта тема. Как советовали скачал библиотеку CMSIS DSP. Интересная там формула
y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
A0 = Kp + Ki + Kd
A1 = (-Kp ) - (2 * Kd )
A2 = Kd
Я таких не видел. И как она в действии?
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: PID-регулятор на языке C.

Сообщение Ivanoff-iv »

А попробуй раскрыть скобки и увидишь, то это всё та-же, только оптимизированная для вычисления контроллером формула ПИД регулятора...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: PID-регулятор на языке C.

Сообщение GARMIN »

Сколько не раскрывал скобок, так и не понял логику этих формул. Заработало только с классическим видом формул регулятора.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: PID-регулятор на языке C.

Сообщение Ivanoff-iv »

перепишем, вставивив все переменные:
Y:=Y+(Kp+Ki+Kd)*(X2)+(-Kp-2Kd)*(X1)+Kd*(X0);
X2 - текущее, X1 - прошлое, X0 - позапрошлое положения.
приведем переменные к одной точке:
X1=X2-V2*dt; X0=X1-V1*dt; V1=V2-A2*dt;
X0=X2-2*V2*dt+A2*dt^2;
вставим в уравнение:
dY*dt=(Kp+Ki+Kd)*(X2)+(-Kp-2Kd)*(X2-V2*dt)+Kd*(X2-2*V2*dt+A2*dt^2);
чтоб проще было считать — упростим, примем:
dt=1 и.е.
dY*dt=Vy; скорость изменения выхода
X2=X; текущее отклонение
V2*dt=V; текущая скорость изменения отклонения
A2*dt^2=A; текущая скорость изменения скорости (ускорение) отклонения
тогда:
Vy=(Kp+Ki+Kd)*(X)+(-Kp-2Kd)*(X-V)+Kd*(X-2*V+A);
Vy=KpX+KiX+KdX -KpX-2KdX+KpV+2KdV +KdX-2KdV+KdA;
Vy=Ki*X+Kp*V+Kd*A; вуаля! ;)
если всё это проинтегрировать:
Y=Ki*I+Kp*X+Kd*V; где I — первообразная от X
П.С.знаю, что с т.з. строгой математики тут не совсем всё точно (но в данном контексте оно не сильно испортило бы картину)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: PID-регулятор на языке C.

Сообщение GARMIN »

Ivanoff-iv, Большое спасибо за разъяснения. Стало намного понятнее. Однако, в этих формулах жёстко закреплены постоянные времени интегрирования и дифференцирования. И они напрямую связаны с периодом работы самого ПИД регулятора. Мне для настройки было понятнее задавать постоянные интегрирования и дифференцирования независимо от периода работы ПИД регулятора. Также приходилось периодически обнулять И составляющую для уменьшения колебательного процесса.
Но я всё равно благодарен вам за точные разъяснения, сам не додумался бы до такого.
ЗЫ. Так это ПИД по скорости регулирования! Я то разбирался с ним, как с ПИД по смещению :(
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: PID-регулятор на языке C.

Сообщение Ivanoff-iv »

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

Добавлено after 8 minutes 4 seconds:
я И не обнуляю, а только ограничиваю...
раньше ограничивал константой, теперь придумал новый, более гибкий способ (который я тут, на 1 странице предложил) только его надо немного допилить - ввести граничные условия, чтобы П+Д компонентами И в минуса не угнало...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Ответить

Вернуться в «Разные вопросы по МК»