Например TDA7294

Форум РадиоКот • Просмотр темы - PID-регулятор на языке C.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 20, 2024 18:38:33

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 59 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Сб май 14, 2022 22:32:31 
Открыл глаза

Зарегистрирован: Ср сен 24, 2014 12:30:09
Сообщений: 62
Рейтинг сообщения: 0
Цитата:
А для вас сильно принципиально написать функцию ПИД регулятора самостоятельно?


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

Цитата:
Неужели так сложно найти и прочитать статьи о настройке ПИД-регуляторов?


Пример можно? В том, что читал я, нет ни слова о выборе времени дискрета. Везде говорят, что чем оно меньше, тем лучше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 08:16:44 
Потрогал лапой паяльник
Аватар пользователя

Карма: -6
Рейтинг сообщений: -1
Зарегистрирован: Вс апр 03, 2022 07:01:29
Сообщений: 362
Рейтинг сообщения: 0
Однако, согласитесь, что выполнять ПИД-регулирование в 10 раз чаще чем можно выдать регулирующий импульс на тиристор - это не дело. 9 из 10 подсчетов пропадут даром.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 09:55:06 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
да, слишком часто - тоже плохо, нотне с математической т.з., а с инженерной:
1) нагрузка на процессор (иногда бесполезная, как в данном случае)
2) шумы и дискретизация данных - т.к. в компоненте Д, dt стоит в знаменателе, то уменьшение шага увеличивает влияние dL на выход ПИД и если величина изменений пропорционально прошедшему времени и компенсирует уменьшение dt, то ошибки измерения не зависят от прошедшего времени и при уменьшении dt зтановятся заметнее

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 10:14:15 
Потрогал лапой паяльник
Аватар пользователя

Карма: -6
Рейтинг сообщений: -1
Зарегистрирован: Вс апр 03, 2022 07:01:29
Сообщений: 362
Рейтинг сообщения: 0
Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ, у которого коэфф Ki нужно занизить и ввести ограничение на макс. I. При этом, из-за пониженного Ki вклад отдельных измерений весьма незначителен.

А в библиотеке CMSIS DSP действительно есть ф-ции готового ПИД, можете оттудава взять.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 11:27:49 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ, у которого коэфф Ki нужно занизить и ввести ограничение на макс. I. При этом, из-за пониженного Ki вклад отдельных измерений весьма незначителен.
Примерно так и есть. Ki должен быть очень малым (много меньше Kp). Потому и говорю, что дифф.компоненту можно выкинуть, функционирование упростится, станет более предсказуемым, устойчивее к случайным шумам и настройка регулятора упростится.
А "плохо с инженерной точки зрения" - легко решаемо, оптимизацией алгоритма. Которую ТС никак не хочет. Как уже показал выше - легко оптимизировать на много порядков по скорости.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 12:01:40 
Потрогал лапой паяльник
Аватар пользователя

Карма: -6
Рейтинг сообщений: -1
Зарегистрирован: Вс апр 03, 2022 07:01:29
Сообщений: 362
Рейтинг сообщения: 0
Есть ПИД регулятор, а есть ПИ-регулятор. У каждого свои плюсы и минусы, своё применение. Но это ещё не значит, что из ПИД получится сделать ПИ просто сократив интервалы вызова алгоритма до исчезновения дифф.составляющей.
То есть, ПИ должен делаться методом Kd = 0 и убиранию расчёта дифф., а не получением нулевой разницы между соседними выборками.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 14:02:02 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
Lum1noFor писал(а):
В том, что читал я, нет ни слова о выборе времени дискрета. Везде говорят, что чем оно меньше, тем лучше.

Значит, не то читали. Период расчёта выходного воздействия зависит, например, от транспортной задержки.

Добавлено after 40 minutes 8 seconds:
Ну, если в Гугле вас всех забанили, то можете как пример почитать тут:


Вложения:
30-33.PDF [280.05 KiB]
Скачиваний: 176


Последний раз редактировалось tonyk Вс май 15, 2022 15:23:08, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 14:23:29 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Скажем проще: слишком частое ПИД-ирование по отношению к отклику системы, когда разница соседних замеров измеряемой величины нулевая (или почти нулевая) при любых условиях, приводит к неиспользованию дифф.компоненты, а ПИД превращается в ПИ.
не только, ещё, когда дискретная величина перешагнёт на следующий шаг - этот шаг будет многократно усилен делением на малую величину и вместо Д компоненты получаем "сильно икающий 0" :)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 16:28:03 
Это не хвост, это антенна

Карма: 15
Рейтинг сообщений: 177
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1326
Откуда: Тюмень
Рейтинг сообщения: 0
Прошу помощи в настройке PID-регулятора

https://habr.com/ru/post/145991/

http://pidcontrol.narod.ru/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 17:21:44 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
Прошу помощи в настройке PID-регулятора

https://habr.com/ru/post/145991/

http://pidcontrol.narod.ru/


По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 18:24:33 
Это не хвост, это антенна

Карма: 15
Рейтинг сообщений: 177
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1326
Откуда: Тюмень
Рейтинг сообщения: 0
По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.

Для кого как... :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс май 15, 2022 19:59:37 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
По этим ссылкам нет методик определения параметров регулятора, посему и ценность их, увы, нулевая.

Для кого как... :)

Где? Не вижу. Выше я показал пример расчёта коэффициентов ПИД-регулятора по методу AMIGO (Астрома-Хагглунда). В приведённых ссылках ничего подобного нет. Не нужно вводить людей, тем более не сведующих в вопросе, в заблуждение.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вт май 17, 2022 11:50:04 
Открыл глаза

Зарегистрирован: Ср сен 24, 2014 12:30:09
Сообщений: 62
Рейтинг сообщения: 0
Всех благодарю - ответы на интересующие меня вопросы я получил. Дальше только практика.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Пт май 20, 2022 11:02:32 
Первый раз сказал Мяу!

Карма: -1
Рейтинг сообщений: 1
Зарегистрирован: Вт май 17, 2022 09:49:48
Сообщений: 26
Рейтинг сообщения: 0
Тоже заинтересовала эта тема. Как советовали скачал библиотеку 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

Я таких не видел. И как она в действии?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Чт июн 02, 2022 16:40:47 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А попробуй раскрыть скобки и увидишь, то это всё та-же, только оптимизированная для вычисления контроллером формула ПИД регулятора...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Сб июн 04, 2022 15:59:02 
Опытный кот
Аватар пользователя

Карма: 16
Рейтинг сообщений: 166
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 826
Откуда: Уже не город Белых гор
Рейтинг сообщения: 0
Сколько не раскрывал скобок, так и не понял логику этих формул. Заработало только с классическим видом формул регулятора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Сб июн 04, 2022 18:19:46 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
перепишем, вставивив все переменные:
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
П.С.знаю, что с т.з. строгой математики тут не совсем всё точно (но в данном контексте оно не сильно испортило бы картину)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс июн 05, 2022 07:16:59 
Опытный кот
Аватар пользователя

Карма: 16
Рейтинг сообщений: 166
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 826
Откуда: Уже не город Белых гор
Рейтинг сообщения: 0
Ivanoff-iv, Большое спасибо за разъяснения. Стало намного понятнее. Однако, в этих формулах жёстко закреплены постоянные времени интегрирования и дифференцирования. И они напрямую связаны с периодом работы самого ПИД регулятора. Мне для настройки было понятнее задавать постоянные интегрирования и дифференцирования независимо от периода работы ПИД регулятора. Также приходилось периодически обнулять И составляющую для уменьшения колебательного процесса.
Но я всё равно благодарен вам за точные разъяснения, сам не додумался бы до такого.
ЗЫ. Так это ПИД по скорости регулирования! Я то разбирался с ним, как с ПИД по смещению :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Вс июн 05, 2022 07:27:21 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ну, мне просто было лень печатать... можешь dt до самого финиша тащить, результат от этого не изменится...
хотя... я понял мысль... в исходной формуле нигде не учитывается время между циклами... т.е. оно считается константой

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

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 59 ]    , , 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y