Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Пользовательские блоки ПИД регуляторов, прочих регуляторов и для работы с ШИМ выходами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

Добрый день.
Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом. Сделаны на классическом разностном уравнение.
Программа и блоки прикреплены к сообщению или можно скачать с диска.
Если есть желание посмотреть/послушать теорию как работают, то [spoiler][spoiler] https://youtu.be/qJt-AtaccJE[/spoiler]
Реакция на ступенчатые воздействия одновременно трех регуляторов [spoiler]https://youtu.be/wOkgx-CpU2E[/spoiler]
Как устроены данные блоки [spoiler]https://youtu.be/IGRu5TuGrNI[/spoiler]
Развлекательно-позновательное видео про настройку регуляторов [spoiler]https://youtu.be/4onoTH0-eqg[/spoiler]
Как влияют параметры ПИД-регулятора на процесс [spoiler]https://youtu.be/CgKPvyRrpzo
Диск [spoiler]https://drive.google.com/open?id=1J4dnb ... 2T1HMz4arO[/spoiler]
[/spoiler]

04.01.2019 Добавил версию регулятора c аналоговым выходом _V1. Теперь не требуется подача внешнего импульса 100 мс по фронту. Всё в одном блоке.
05.01.2019 Добавил версию регулятора c ШИМ выходом _V1. Теперь не требуется подача внешнего импульса 50 мс по фронту. Всё в одном блоке.
06.01.2019 Добавил версию регулятора c трехпозиционным выходом _V1. Теперь не требуется подача внешнего импульса 100 мс по фронту. Всё в одном блоке. См. сообщение №5 ниже.
09.01.2019 Добавил версию регулятора c аналоговым выходом _V11. Расширены ограничения на время цикла (от 0,05 сек), время исполнительного механизма (от 0,05 сек), время интегрирования Ти (от 0,05 сек). См. сообщение №11 ниже.
27.01.2019 Добавил версию регулятора с ШИМ выходом_V12. См. сообщение №28 ниже. Добавлен для информации выход текущей мощности в % (НЕ ИСПОЛЬЗОВАТЬ ДЛЯ УПРАВЛЕНИЯ АНАЛОГОВЫМИ МЕХАНИЗМАМИ!!!!) и возможность изменения мин. длительности импульса от 0 до Цикл/2 сек в режиме РЕЛЕ.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось dimalimite 23 май 2020, 21:46, всего редактировалось 8 раз.
Muxaul
Рядовой
Сообщения: 44
Зарегистрирован: 02 окт 2018, 12:38
Имя: Михаил

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Muxaul »

Неплохо было бы либо тут либо в описании блока описать входы и выходы блока.
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение AlexCrane »

[ref]Muxaul[/ref], Если зайти в редактирование блока, то там все входа и выхода подробно расписаны.
Конечно не удобно, но все-же лучше чем ничего.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Muxaul
Рядовой
Сообщения: 44
Зарегистрирован: 02 окт 2018, 12:38
Имя: Михаил

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Muxaul »

AlexCrane писал(а): 29 дек 2018, 18:46Если зайти в редактирование блока
Спасибо, да, я просто не знал что блоки можно редактировать. Потом увидел.
Спасибо за оперативный отзыв
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

Не получилось прикрепить файл к исходному сообщению. Прикрепляю сюда.
Может быть кто-нибудь подскажет в чём проблема? Или больше 5 вложений делать нельзя?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Dmabst
Сержант
Сообщения: 176
Зарегистрирован: 08 дек 2018, 16:49
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Dmabst »

Посоветуйте пожалуйста блок для реализации регулировки (периодического ступенчатого снижения) и стабилизации на этих уровнях в течении 2-3 минут числа оборотов двигателя постоянного тока 24В, 200мА, 90 об/мин. Уровни приблизительно составляют 90, 75, 65, 57, 51, 46, 42, 38, 35, 33, 31, 29, 27, 26, 24, 23, 22, 21, 20 об/мин и зависят в небольших пределах от числа оборотов другого двигателя - 725
об/мин (стабильность которого, в свою очередь, определяется стабильностью сети 220В). Данную зависимость учёл в формуле вычисления вышеприведенных ступенчато изменяющихся задаваемых чисел оборотов (уставки). Каким способом, пользуясь Вашими блоками, можно реализовать данную задачу - ШИМ или аналоговым?
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref]Dmabst[/ref], день добрый.
Аналоговым регулятором, если у вас есть обратный сигнал по скорости этого двигателя. А на выходе вы чем управлять хотите? Можете более подробно описать.
Мой ШИМ блок- это, так называемый, "медленный ШИМ" для объектов типа электротэн или наподобие такого.

Отправлено спустя 5 минут 41 секунду:
И ещё для любого регулятора самым сильным возмущающим воздействие является изменение уставки. И я вам рекомендую в своей формуле это учесть, то есть не ступенчато выдавать переход скорости например с 90 на 75, а более-менее плавной рампой.
Dmabst
Сержант
Сообщения: 176
Зарегистрирован: 08 дек 2018, 16:49
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Dmabst »

Обратный сигнал по скорости двигателей в моей схеме дают оптопары. При помощи скоростных счётчиков считываются периоды оборотов. Данные поступают в математические блоки суммирования, деления и умножения, где вычисляется уставка - требуемый период оборотов 24-х вольтного мотор-редуктора. Эти значения могут иметь только дискретное значение. Предполагаю, что придётся сильно уменьшить время VALVE (CYCLE?) и подобрать коэффициенты ПИД-регулятора. Исходя из того, что Вы рекомендуете воспользоваться блоком аналогового регулятора, планирую применить 12-битный ЦАП MCP4725. Благо блок на него имеется в Flprog.
На ANALOG_OUT_MIN и ANALOG_OUT_MAX нужно ввести константы сразу 0 и 4095, или 0 и 255, с последующим их переносом блоком SCALE к величинам 0 и 4095 (подключив его на выход Вашего аналогового блока)?
К выходу ЦАП планирую подключить следующую схему: ШИМ сигнал управляет микросхемой LM317T, посредством которой и будет осуществляться регулировка числа оборотов мотор-редуктора.
Как Вы считаете, данное решение будет оптимальным?
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref]Dmabst[/ref], вечер добрый!
"Эти значения могут иметь только дискретное значение." - вот эту фразу я не понял. Поясните.
У меня в блоке (ANALOG_PID_V1_(CODE).ubi) ограничения на мин. время привода (VALVE-это в вашем случае разгон от 0 до макс. скорости 4095, от 15 до 250 секунд) и цикл (CYCLE-время квантования или между соседними измерениями и корректировкой воздействия, от 1 до 25 секунд) заданы просто на основание моего опыта и + это защита от деления на 0.
Если вы хотите быстрее, то это можно без проблем сделать убрав или скорректировав вот эти две строки:
CYCLE = constrain( CYCLE, (1.0), (25.0) ); // Цикл 1...25.0 сек;
VALVE = constrain( VALVE, (15.0), (250.0) ); // Время привода 15...250.0 сек.
Не забудьте, что эти значение задаются в секундах (float, то есть если хотите 100 мс цикл или скорость привода, то это 0,1 сек). Главное не задавайте нули!!!! Ну и CYCLE должен быть больше или, как минимум, равен циклу измерения скорости и циклу самой программы.
Посмотрел вашу ссылку на схему (только она же 11,25 В может дать на выходе, а вам же 24 нужно. или может я что-то не правильно понял) . Если вас не устраивает встроенный 8-битный 0-255 ШИМ на выходе Ардуино, то можете и 12-битный 0-4095 MCP4725 использовать. Присваиваете сразу ANALOG_OUT_MIN=0 и ANALOG_OUT_MAX=4095 (или 255). Единственно нужно перевести выходной сигнал регулятора ANALOG_OUT float в int (блок конвертация типов).
Так же при настройке коэффициентов не забудьте, что Кр будет измеряться в ШИМ/обороты. То есть, например при Кр=1 и отклонение 1 оборот изменение выхода ШИМ будет 1. Вообще настройка будет достаточно простой, т.к. практически отсутствует какое-либо запаздывание. Если Ти=1 сек будет много, то тоже скорректируйте строку:
K_I = constrain( K_I, (1.0), (9999.0) ); // Ти 1...9999.0 сек.
На сколько будет оптимально - это уже вам решать нужно, т.к. я процесс ваш не представляю:).
Dmabst
Сержант
Сообщения: 176
Зарегистрирован: 08 дек 2018, 16:49
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Dmabst »

Вы предугадали мой вопрос! Я как раз хотел спросить об увеличении скорости реакции, т.к. она не превышает 6-7% в сек. при любых настройках. Спасибо за развёрнутый ответ, буду пробовать.
Дискретные значения - это ряды (слои) намотки на катушку свитого в витую пару изолированного провода. Для свивки и намотки планирую использовать устройство из двух двигателей - шуруповёрта и мотор-редуктора, соответственно. По мере намотки свитого провода на катушку нужно с каждым новым слоем уменьшать угловую скорость (число оборотов) на рассчитанную величину, чтобы поддерживать линейную скорость, и, соответственно, шаг свивки - постоянными.
По поводу схемы управления двигателем - планирую увеличить её напряжение питания до 28 вольт.
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref]Dmabst[/ref], день добрый.
Всё правильно, вы упирались вот сюда:
D_T_MAX = (ANALOG_OUT_MAX - ANALOG_OUT_MIN) * CYCLE / VALVE; // Максимальное приращение на текущем шагу регулирования выходных единиц
При CYCLE=1 и VALVE=15 и при работе от 0 до 100 получается 6% максимум, т.к. "регулятор считает", что ваш механизм быстрее не сможет.
Я просто ориентируюсь на более медленные процессы и исполнительные механизмы.
Но я думаю, что стоит расширить диапазон применения. Думаю, что 50 мсек (0,05 сек) будет вполне достаточно.
См. приложение. Изменил:
K_P = constrain( K_P, (-999.0), (999.0) ); // Кр -999.0...999.0 выходные единицы/измеряемые еденицы, знак + для нагревателя, знак - для холодильника
K_I = constrain( K_I, (0.05), (9999.0) ); // Ти 0.05...9999.0 сек
CYCLE = constrain( CYCLE, (0.05), (25.0) ); // Цикл 0.05...25.0 сек
VALVE = constrain( VALVE, (0.05), (250.0) ); // Время привода 0.05...250.0 сек

Отправлено спустя 14 минут 25 секунд:
Конечно надо пробовать, но скачком менять задание для регулятора не лучшее решение. Хотя для вашей задачи Тд можно вполне 0 поставить и не такая большая реакция на скачки будет.
Если не будет получаться нормально получаться мотать из-за этих скачков, то можно придумать более "хитрый" алгоритм.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Dmabst
Сержант
Сообщения: 176
Зарегистрирован: 08 дек 2018, 16:49
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Dmabst »

dimalimite добрый вечер.
Благодаря внесённым Вами в блок расширенным настройкам появилась возможность использовать данный блок для управления быстрыми процессами и быстрыми исполнительными механизмами. Пока опробовал на Arduino Mega без подключения двигателей. Впечатлён возможностями настроек. На днях попробую с двигателями.
Аватара пользователя
Phazz
Полковник
Сообщения: 3120
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 232 раза
Поблагодарили: 112 раз

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Phazz »

[ref]dimalimite[/ref], Есть предложение добавить в блок PWM_PID выход текущей нагрузки.
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref=#404040]Phazz[/ref], Вечер добрый.
Блок в приложение.
Добавил строчку:
// Текущая мощность в %
POWER = SUM_D_T_S * 100.0 / CYCLE;
"В обратную" сторону рассчитал, т.к. только чтобы в режиме РЕЛЕ корректно отображалось потому что там мин. выход и прерывание сигнала 0,5 сек. Вообще конечно для такого типа регулятора реле лучше не использовать :) Умрет быстро. Если в режиме РЕЛЕ поставить CYCLE=1 сек, то выход будет или 0, или 0,5 сек, или 1 сек (0, 50, 100%). Если на выходе реле, то тогда хотя бы CYCLE=2 сек, что хоть было 0, или 0,5-1,5, или 2 сек (0, 25-75, 100%).
Как-то так.
Уже много их разных "наплодил":). Может вообще всё в 1 запихнуть и чтобы выбор был по какому алгоритму работать? Но он весить много будет :(((.

27.01.2019 Перезалил файл в связи с необъяснимым багом (см. ниже сообщения). Если кто-то столкнулся с такой проблемой инструкция по устранению ниже или перекачать файл.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось dimalimite 27 янв 2019, 19:17, всего редактировалось 2 раза.
Аватара пользователя
Phazz
Полковник
Сообщения: 3120
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 232 раза
Поблагодарили: 112 раз

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Phazz »

[ref]dimalimite[/ref], Не компилируется, потому что не задекларирована переменная MILLIS_FLOAT_1_144659106_144659106_1
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref=#404040]Phazz[/ref], проверил действительно какая-то ерунда!!!
Я этот блок сделал из PWM_PID_V1 просто добавлением одной строки.
Там такой проблемы нет.
Я сейчас ещё поковыряю, но похоже это ошибка FLProg.
MILLIS_FLOAT_1_144659106_144659106_1 - ТАКОЙ ПЕРЕМЕННОЙ ВООБЩЕ НЕТ!
Вот что есть:
float MILLIS_FLOAT_144659106_1; // Системное время мсек
float MILLIS_FLOAT_SEK_144659106_1; // Системное время сек
float MILLIS_FLOAT_1_144659106_1; // Метка времени сек текущего шага
Это он объявляет, а далее в теле программы почему-то заменяет переменную MILLIS_FLOAT_144659106_1, какой-то MILLIS_FLOAT_1_144659106_144659106_1.
Руками заменил эту ерунду на нужную и всё работатет.
ВОТ ЭТО (НЕТ ТАКОЙ ПЕРЕМЕННОЙ):
MILLIS_FLOAT_1_144659106_144659106_1 = float(millis()); // Перевод системного времени мсек в тип float
ЗАМЕНИТЬ НА:
MILLIS_FLOAT_144659106_1 = float(millis()); // Перевод системного времени мсек в тип float
И работает.
Попробую разобраться в чём суть.
Аватара пользователя
Phazz
Полковник
Сообщения: 3120
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 232 раза
Поблагодарили: 112 раз

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Phazz »

Сейчас перезагрузил программу ошибка пропала

Отправлено спустя 1 минуту 45 секунд:
А еще я поставил в блоке использовать один раз
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref=#404040]Phazz[/ref], Я сейчас написал самой первой строкой кода комментарий:
//Программа
Пересохранил блок ещё раз и уже вот такой MILLIS_FLOAT_1_144659106_144659106_1 штуки не было.
Это какой-то баг похоже...

Отправлено спустя 53 секунды:
[ref=#404040]Phazz[/ref], Работает? Всё нормально?

Отправлено спустя 4 минуты 29 секунд:
[ref=#404040]Phazz[/ref], Использовать 1 раз - вообще не принципиально для этого блока. Можно хоть 10 раз, если памяти хватит:)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
dimalimite
Рядовой
Сообщения: 53
Зарегистрирован: 03 дек 2018, 00:26
Имя: Дмитрий

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение dimalimite »

[ref=#404040]Phazz[/ref], будет возможность, отпишитесь по работоспособности.
Аватара пользователя
Phazz
Полковник
Сообщения: 3120
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 232 раза
Поблагодарили: 112 раз

Цифровой ПИД регулятор с аналоговым, трехпозиционным и ШИМ выходом

Сообщение Phazz »

Ошибок нет, а вот с логикой работы непонятное происходит. Температура уже равняется уставке, а мощность все равно на 100%

Отправлено спустя 4 минуты 46 секунд:
[ref]dimalimite[/ref], Если мне нужна только пропорциональная составляющая, то на интегральную можно в 0 поставить или нужно максимальное большое число ставить?
Ответить

Вернуться в «ПИД регуляторы (PID), блоки для ШИМ»

Кто сейчас на конференции

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