Например TDA7294

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





Текущее время: Чт апр 25, 2024 15:23:56

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


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



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

Зарегистрирован: Ср сен 24, 2014 12:30:09
Сообщений: 62
Рейтинг сообщения: 0
dt это время прошедшее между замерами - чтобы узнать скорость, нужно знать путь и время, можно измерять скорость за весь путь, а можно за короткий его участок, причём чем эти участки короче, тем "живей" (менее сглаженным) будет график скорости, математики хотят убавить этот участок до нуля, но на нулевом участке не измерить скорости, поэтому математики согласились просто сделкть его очень маленьким.... а инженеры (и программисты) оптимальным - чтобы и обсчитывать было проще и "задумчивости" не возникало

Добавлено after 3 minutes 21 second:
dt из программы выкинуть ни-как не получится! но, если dt всегда равен 0,01с (или другому значению, важно, что он постоянен) то его можно учесть в прикомпонентных коэффициентах вот и весь фокус...



Это более-менее понятно, но почему его тогда можно исключить?

Цитата:
dt из программы выкинуть ни-как не получится! но, если dt всегда равен 0,01с (или другому значению, важно, что он постоянен) то его можно учесть в прикомпонентных коэффициентах вот и весь фокус...


Ага, вот это я уже понял! Из аппнота ATMEL'а. Спасибо! Моя задача сейчас разобраться, как работает PID-алгоритм, а не сделать сверхэффективную программу. Почему я делаю это так? Без понтов типа структур и тому подобного? Потому что так нагляднее лично для меня. Я много лет писал ПИКи на ассемблере, и язык C для меня пока сложноват. Поэтому я принципиально не использую HAL, структуры и тому подобное - мне это глаз режет. Пишу только на регистрах.


Последний раз редактировалось Lum1noFor Пт май 13, 2022 16:15:46, всего редактировалось 1 раз.

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

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

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


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

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



Убрал D-компоненту. Происходит именно то, что Вы описали - ткнул паяльником в Розе, температура упала на 15 градусов ниже уставки, а затем взлетела на 80 градусов выше уставки.


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

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

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

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

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


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Пт май 13, 2022 16:34:45 
Открыл глаза

Зарегистрирован: Ср сен 24, 2014 12:30:09
Сообщений: 62
Рейтинг сообщения: 0
Пробовал, на первый взгляд работает. Но мне не хотелось бы бездумно копировать чужой код, поэтому сначала нужно обдумать, что же всё-таки Вы там наделали :). Теперь уже до понедельника, ушел с работы. А таскать с собой 250-ваттный трансформатор - то ещё удовольствие. Пока будет время проанализировать Ваше решение


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Пт май 13, 2022 18:02:42 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 97
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1155
Рейтинг сообщения: 1
почему Вы говорите, что можно просто взять и убрать dt. Если есть время и возможность - объясните, пожалуйста!
Ув. Ivanoff-iv уже объяснил. Вкратце, если переписать вычисление интегральной как я советовал, то будет:
Integral += error * dt * Ki;
где: dt * Ki - const. А зачем многократно вычислять одно и то же, если его можно вычислить только один раз - при настройке Ki? А если учесть, что само значение Ki - это просто безразмерный коэффициент, не имеющий физического выражения (в метрах/кг/etc.) и Вы его просто подбираете каким-то методом, то просто отбрасывайте dt из формулы и подбирайте Ki.

Цитата:
Во-вторых: Здесь интегральную составляющую лучше считать так:
Integral += error * Ki;
Далее - ограничение. Это и будет I.

А почему именно так? Из соображений производительности, или есть какие-то другие причины? Почему не "в лоб", вот так:

Код:
Integral += error * dt;

if (Integral > max/Ki) {
   Integral = max/Ki;
} else if (Integral < -max/Ki) {
   Integral = -max/Ki;
}

I = Ki*Integral;

Ну во-первых: значительно меньше вычислений. Сами сравните.
Во-вторых: в этом Вашем коде - представьте, что система регулирования в каком-то режиме не может обеспечить минимизацию error. Например - из-за ограничений интегральной составляющей. Тогда ошибка будет всегда присутствовать. Integral будет расти и расти постоянно со знаком направленным в сторону error. И в конце-концов всё равно произойдёт или переполнение Integral (float тоже не бесконечен). Или потеря точности (тогда содержимое Integral дорастёт до такого уровня, что оно перестанет реагировать на изменение входного error, так как величина error будет меньше веса минимального разряда Integral) и интегральная составляющая вашего ПИД-регулятора навечно защёлкнется в фиксированном положении. Это как раз тот момент, о котором я говорил:
И к тому же - в плавающей точке приколов тоже не меньше. И переполнения там имеются, и всякие особые значения (денормированные, "нечисла", +-бесконечности). Только начинающие о них никогда не задумываются.


Но даже если переполнения или потери точности не произойдёт, то в вашем методе ограничения Integral, будет присутствовать значительный гистерезис. Например долго стояла положительная ошибка, Integral выросло (например стало == +1e6), но ограничение стоит например == +100. А потом error стало отрицательным, но небольшим по величине. И теперь пока оно не выберет весь этот накопленный +1e6, на входе у вас будет стоять максимальное положительное значение == +100.


Последний раз редактировалось jcxz Пт май 13, 2022 18:24:12, всего редактировалось 1 раз.

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

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

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


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

Карма: -10
Рейтинг сообщений: 97
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1155
Рейтинг сообщения: 0
то компонента Д необходима как для подавления этого эффекта, так и для устранения вызванных им колебаний.
Не очень понятно как тут поможет Д? Оно тут, имхо, вообще не при чём.
Дифференциальная компонента нужна для ускорения реакции на быстропроисходящие процессы. В задаче ТС она просто приведёт к увеличению шума.

Добавлено after 3 minutes 26 seconds:
нет, тут защелкивания не произойдёт, т.к. ограничитель срезает именно аккумулятор, а не вычисляемую из него величину I.
Да, сорри, это я просмотрел что ТС потом в этот же Integral и сохраняет.
Отвлекают, блин....... :dont_know:

Добавлено after 2 minutes 2 seconds:
а вот вычислений, действительно, в несколько раз больше...
И к тому-же: среди них присутствуют деления, что ещё хуже.


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

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

P=L*Kp; (где L - отклонение от цели), аналогия - пружина с жесткостью Kp.
В устаканенном состоянии (при L=0) бездействует. Колебания не подавляет (вспомните пружинный маятник), а может даже усиливать из-за того, что реакция регулятора, в отличии от пружины, не мгновенна.

I=En*Ki; En=E(n-1)+L*dt; аналогия - воздушный шар, его подъёмная сила не зависит от положения, а зависит от наполненности теплым воздухом, скорость наполнения/опорожнения пропорциональна отклонению.
(переход от скорости изменения состояния к состоянию есть первообразная).
(воздушный шар ведёт себя лучше, чем И компонента регулятора из-за того, что наполнение его происходит по более сложным алгоритмам, чем простое сложение отклонений), ещё: если бы шар, находящийся в точке равновесия не остужался внешним воздухом, то для его удержания не потребовалась бы работа горелок, так и в регуляторе в устаканенном состоянии (скорость и отклонение равны 0) всё воздействие берёт на себя И компоента. Колебания не подавляет т.к. слишком инерционна.

D=V*Kd; V=dL/dt =(L(n-1) - Ln)/(t(n-1)-tn); (V - расстояние, пройденное за единицу времени, т.е. скорость, скорость - есть производная от положения) т.е. компонента Д "борется" только со скоростью, пытаясь затормозить объект, куда бы тот ни двигался. аналогия - вязкая среда или амортизатор.
В устаканенном состоянии бездействует, но первая начнёт компенсировать внешнее воздействие, если правильно настроена - подавляет колебания, не требуется если регулируемый объект сам не склонен к колебаниям (медленные безинерционные процессы).

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


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

Зарегистрирован: Вс окт 25, 2015 19:09:46
Сообщений: 17
Рейтинг сообщения: 0
ТС рулит синусоидой пропорционально шимом, вроде. Что даст сильно нелинейную зависимость задание-мощность. Тяжко пиду будет. А в целом - главное уже описали, но немного добавлю. Д компонента сильно не любит шум, особенно если разрешение сигнала грубое. Может сильно дёргать задание. Танцы с интегральный суммой есть суть защита от насыщения регулятора. Вариантов масса, в т. Ч. Фирменные патентованные. Например: если общее задание вылазит за пределы-приближаем интегральную сумму к 0 тем или иным способом (отнять или прибавить удвоенную текущую ошибку).


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

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 1
Н-да-а-а-а... А чё, почитать учебники впадлу?

Откуда взялся период в 10мс? Вообще-то, период вычисления- это величина расчётная. Неужели так сложно почитать об инженерных методах настройки регуляторов? В любом случае, вне зависимости от метода настройки, сначала снимается разгонная характеристика объекта, по которой определяется период регулирования и тем или иным методом первое приближение коэффициентов ПИД-регулятора. Кстати, и период снятия отсчётов с АЦП тоже берётся не от фонаря, а связан и с периодом регулирования, и с частотой сети.

На практике я пользовался методами Зиглера-Никольсона и Астрома-Хагглунда. З-Н относится к числу "жёстких" методов, поэтому даёт быстрый выход на режим, но большое перерегулирование и склонен к колебаниям. А-Х относится к "мягким", в которых перерегулирование меньше, но время выхода больше. На печках А-Х давал мне сразу очень хорошие значения коэффициентов регулятора, близкие к оптимальным для решения задачи. Как верно замечено выше, Д-компонента очень чувствительна к шуму, поэтому с ней нужно быть внимательным, возможно, даже занулить, а потом добавлять понемногу и смотреть реакцию объекта.

Добавлено after 2 minutes 4 seconds:
Проблему интегрального насыщения решал простым ограничением значения интегральной составляющей, ибо это предельно просто и не требует серьёзных вычислений..


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

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5598
Откуда: Minsk
Рейтинг сообщения: 0
И в конце-концов всё равно произойдёт или переполнение Integral (float тоже не бесконечен).

Не вникая в конкретную программу, а чисто по логике: для переполнения float при суммировании не заоблачных значений понадобятся годы сутки как минимум :o

_________________
Изображение


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

Зарегистрирован: Ср сен 24, 2014 12:30:09
Сообщений: 62
Рейтинг сообщения: 0
jcxz писал(а):
Ув. Ivanoff-iv уже объяснил. Вкратце, если переписать вычисление интегральной как я советовал, то будет:
Integral += error * dt * Ki;
где: dt * Ki - const. А зачем многократно вычислять одно и то же, если его можно вычислить только один раз - при настройке Ki? А если учесть, что само значение Ki - это просто безразмерный коэффициент, не имеющий физического выражения (в метрах/кг/etc.) и Вы его просто подбираете каким-то методом, то просто отбрасывайте dt из формулы и подбирайте Ki.


Вот Ваше бы это объяснение, да на недельку пораньше мне! Я столько времени потратил на то, чтобы это найти и понять. А то, думаю, в каких-то статьях dt есть, в каких-то нету. На eevblog народ тоже долго разбирался, почему так. Спасибо!

rusl32 писал(а):
ТС рулит синусоидой пропорционально шимом, вроде. Что даст сильно нелинейную зависимость задание-мощность. Тяжко пиду будет.


Да, это я понимаю. Ибо прирост мощности не линеен после половины полупериода. Но в этом-то и есть интерес, как это будет работать. Это мой личный проект, ни на работу, ни на учебу, никуда. Не получится - ну и фиг с ним. Главное, опыт получен, что так делать не надо :).

Остался один непонятный для меня вопрос: ув. tonyk говорил, что:

Цитата:
Откуда взялся период в 10мс? Вообще-то, период вычисления- это величина расчётная. Неужели так сложно почитать об инженерных методах настройки регуляторов?


Но во всех источниках, которые я читал по ПИД-регуляторам (книжек там не было, да, ибо там жесткий матанализ), рекомендуют как можно чаще вызывать ПИД-алгоритм. В некоторых случаях он даже крутится в бесконечном цикле. А здесь, благодаря вам всем, я начинаю что-то подозревать, что это далеко не так. Вы можете мне ткнуть носом, какие книжки читать, либо вкратце рассказать, как выбирать этот самый дискрет? Методом тыка я понял, что 1 мс и 10 мс - слишком мало для моего случая, и незначительное изменение измеряемой величины за время dt приводит к сильному "дерганию" регулятора. При значении 100 мс все гораздо лучше.

Цитата:
Кстати, и период снятия отсчётов с АЦП тоже берётся не от фонаря, а связан и с периодом регулирования, и с частотой сети.


Я выкладывал уже код, в котором показано, как у меня это работает. Значение с термопары считывается по срабатыванию таймера дискрета, и сразу же передается в PID-алгоритм. Это правильно? А вот как это может быть связано с частотой сети - я не понимаю. У меня Zero-cross работает вообще независимо от пида, это железка. Он только 50 раз в секунду берет высчитанное значение с выхода ПИД-алгоритма.


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

Карма: -10
Рейтинг сообщений: 97
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1155
Рейтинг сообщения: 0
Не вникая в конкретную программу, а чисто по логике: для переполнения float при суммировании не заоблачных значений понадобятся годы сутки как минимум :o
О размерах входной ошибки и входного значения dt в задаче ТС - нам ничего не известно. Поэтому не знаю как Вы смогли посчитать скорость переполнения. :dont_know:
К тому же (как писал уже): кроме переполнения собственно всего float, может быть переполнение только его мантиссы. Возможно это правильнее назвать "потеря точности". Мантисса всего = 23 бита размером. Поэтому если предположим: какое-то время будет (error * dt)==1000 и всё это время Integral наращивать на +1000 каждую итерацию, то примерно через всего ~84 секунды (2^23/1000*.01=~84), содержимое Integral превысит 2^23 и если после этого вдруг (error * dt) станет небольшой отрицательной величиной, например ==-1, то прибавление оного к Integral не должно никак изменять его значения. Может это случится чуть позже (на один двоичный порядок позже, не через 84 секунды, а через 168 секунд - это не принципиально), но явно - годы не нужны для этого.
Это я и имел в виду, говоря о "защёлкивании".

PS: Как писал выше - всё это справедливо если бы ограничение выполнялось для Integral, используемого для дальнейших расчётов, не влияя на само значение Integral. Если ограничивать саму Integral, то тогда такого эффекта не будет. В последнем коде ТС ограничение Integral выполняется правильно. Только неоптимально.


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

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5598
Откуда: Minsk
Рейтинг сообщения: 0
переполнение только его мантиссы. Возможно это правильнее назвать "потеря точности".

Вот о таком явлении "переполнение мантиссы" впервые слышу. Это, наверно, какая-то супер-новая плавучка (причём сделанная через ###у). В нормальной - мантисса сдвигается вправо, инкрементируется порядок - и все довольны. "Потеря точности" - да, это серьёзно... при расчёте траектории "Прогресса" для стыковки с МКС. А когда входные данные о температуре - плюс-минус лапоть... Да, получить точность в 0.01 градуса - сложняк неимоверный.
:(
Это сарказм. :(

_________________
Изображение


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

Карма: -10
Рейтинг сообщений: 97
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1155
Рейтинг сообщения: 0
Но во всех источниках, которые я читал по ПИД-регуляторам (книжек там не было, да, ибо там жесткий матанализ), рекомендуют как можно чаще вызывать ПИД-алгоритм. В некоторых случаях он даже крутится в бесконечном цикле. А здесь, благодаря вам всем, я начинаю что-то подозревать, что это далеко не так. Вы можете мне ткнуть носом, какие книжки читать, либо вкратце рассказать, как выбирать этот самый дискрет? Методом тыка я понял, что 1 мс и 10 мс - слишком мало для моего случая, и незначительное изменение измеряемой величины за время dt приводит к сильному "дерганию" регулятора.
Вообще-то - это так и есть: чем чаще вызывать алгоритм - тем лучше. А дёрганья - это видимо реакция дифф.составляющей на шумы во входном сигнале (как уже писали выше).
Частота вызова ПИД-регулятора должна быть намного выше инерционности управляемой системы.
Я у себя не использую дифф.компоненту. И наблюдаю, что чем выше частота обработки ПИ-регулятора -> тем лучше работает регулирование. Правда у меня не нагреватель управляется, но тоже довольно инерционная система. И у меня ПИ-регулятор вызывается с частотой ~10кГц. :)


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

Карма: -6
Рейтинг сообщений: -1
Зарегистрирован: Вс апр 03, 2022 07:01:29
Сообщений: 362
Рейтинг сообщения: 0
Цитата:
чем чаще вызывать алгоритм - тем лучше.

Да прям уж :) Температуру кубового бойлера каждые 10 мс ПИД-ить? :))) Отсюда и растет безмерно интегральная составляющая. Интерг.сост. - это же сумма ошибки регулирования при каждом вызове алгоритма. Представляете, сколько там наберется, если за 20 минут, требуемые для нагрева, каждые 10 мс будет суммироваться ошибка регулирования. Поэтому, нет никакого смысла вызывать очень часто алгоритм, если инерция системы настолько высока, что дифф.составляющая будет почти нулевая, а интегр.составляющая будет овер-дофига. Время интегрирования и интервал дифференцирования - это расчетные величины, а не взятые отфанаря и как можно чаще.

И совершенно верно там tonyk пишет. Вначале надо определить свойства объекта регулирования, его инертность, отклик на регулирующее воздействие. И интервалы вызова алгоритма ПИД должны быть равномерными, поскольку параметр времени в регулировании играет далеко не последнюю роль. Прокручивание алгоритма в цикле main не будет давать постоянного интервала между вызовами. А если у вас интервалы времени будут плавать, тогда и значения дифф. и интегр. так же будут плавать, выдавая на выход ложную информацию. Как результат, система будет дергаться, и вы потратите много времени на попытки её отстроить, но результат будет случайным.


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

Зарегистрирован: Вс окт 25, 2015 19:09:46
Сообщений: 17
Рейтинг сообщения: 1
Но во всех источниках, которые я читал по ПИД-регуляторам (книжек там не было, да, ибо там жесткий матанализ), рекомендуют как можно чаще вызывать ПИД-алгоритм. В некоторых случаях он даже крутится в бесконечном цикле. А здесь, благодаря вам всем, я начинаю что-то подозревать, что это далеко не так. Вы можете мне ткнуть носом, какие книжки читать, либо вкратце рассказать, как выбирать этот самый дискрет? Методом тыка я понял, что 1 мс и 10 мс - слишком мало для моего случая, и незначительное изменение измеряемой величины за время dt приводит к сильному "дерганию" регулятора. При значении 100 мс все гораздо лучше.


Чаще чем 1 раз в полупериод - нет смысла. Новое значение внутри полупериода никому не нужно. Это нижняя граница времени. Вместе с тем глупо запускать новый расчет если температура заведомо не успеет подняться, минимум, на один отсчет. Холодный паяльник ткнем на полную на 10с (для примера). Наблюдаем за температурой и находим на сколько в пике она поднимется (чуть позже момента выключения). Считаем на сколько единиц показания АЦП выросли и делим время включения на этот рост. Получим оценку времени включения на полную для роста на 1 значение АЦП. Чаще этого времени тоже нет смысла считать - температура не может вырасти на деление или более. Период в 3-7 таких интервалов - для начала будет неплохой оценкой периода расчета пид.


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

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 2
Люди, вы чё в Инете только голых девок разглядывать умеете?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PID-регулятор на языке C.
СообщениеДобавлено: Сб май 14, 2022 21:42:05 
Родился
Аватар пользователя

Зарегистрирован: Вт май 07, 2019 12:55:34
Сообщений: 6
Откуда: 62
Рейтинг сообщения: 0
Lum1noFor, А для вас сильно принципиально написать функцию ПИД регулятора самостоятельно?
В пакете драйверов от СТМ есть DSP библиотека, в в ней уже готовая реализация ПИД регулятора, даже три - под разные типы переменных есть для float и для фиксированной точки на 16 и на 32 бита.
Расчет уже по максимуму оптимизирован - используется рекуррентная формула. Единственное о чем нельзя забывать - это при подборе коэффициентов нельзя обнулять Ki, потому что рекуррентная формула получается через подстановку интегральной составляющей с предыдущей итерации. Если обнулить Ki рекуррентная формула будет давать непредсказуемый результат.

_________________
Зачем делать сложным, то что проще простого...


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

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


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

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


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

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


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