Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2020, 15:09

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: ПИД регулирование помогите разобраться на примере AVR
СообщениеДобавлено: 22 янв 2020, 09:49 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1554
Привет!

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

Посидел поискал на Гите разные варианты реализации, нашел вот этот пример
Show (Пид АВР)


Не совсем понятен принцип воздействия.
На сколько я понимаю есть 2 варианта:
1) Есть время грубо 2 минуты, за эти 2 минуты я должен нагреть до 150 градусов.
2) Есть температура 150 градусов, которую нужно достичь максимально быстро, но при этом не выходя за скорость нагрева 3гр/сек
Исходя из задачи должны быть разные методики воздействия.
Общее для обоих вариантов только временная составляющая (в моем случае 2 секунды), 1 раз в 2 секунды запускается, анализ температуры, вычисляется приращение и ошибка и исходя из этого необходимая длительность включения Тэна
Непонятно
1) Коэффициент масштабирования (SCALING_FACTOR) - почему его используют для библиотеки ведь проще было сразу перемножить коэффициенты и успокоиться или он просто для удобства ?
2) reference value - в описании сказано, что значение может быть постоянным к примеру 150 градусов, или меняться в ходе времени - это получаются просто разные методы воздействия ?
3 Input value на сколько понял это температура входящая.
4) TIME_INTERVAL - это период с какой частотой у нас происходит запуск вычисления \воздействия.

P\S закипаю, так как по идее функция температуры должна вычислятьс диф уравнением в любой промежуток времени а тут блин ото так не получается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПИД регулирование помогите разобраться на примере AVR
СообщениеДобавлено: 22 янв 2020, 13:44 
Старожил
Аватара пользователя

Зарегистрирован: 08 сен 2011, 13:39
Сообщения: 985
Откуда: Беларусь, Гомель
Я не разбирался в коде, но и не об этом. Задача ПИД - установить нулевую ошибку рассогласования. Т.е. ошибка появилась - устраняем согласно коэффициентов, все.
А вот термопрофиль должен приходить ему с заданием. Т.е. это отдельный модуль, который выдает задание на ПИД.
Если нужно достичь заданной температуры не превышая скорость нагрева - опять же на вход должна подаваться линейная функция от текущей температуры до заданной с нужным наклоном.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПИД регулирование помогите разобраться на примере AVR
СообщениеДобавлено: 23 янв 2020, 08:20 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2587
А если PIDу в качестве "задания" выдавать не текущую температуру, а скорость её изменения.
Пусть поддерживает скорость изменения температуры заданное время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПИД регулирование помогите разобраться на примере AVR
СообщениеДобавлено: 23 янв 2020, 09:44 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1554
Pingvin писал(а):
А если PIDу в качестве "задания" выдавать не текущую температуру, а скорость её изменения.
Пусть поддерживает скорость изменения температуры заданное время.


К сожалению не получится, у нас же система представляет из себя диф уравнение зависимости изменение температуры от приложенной мощности нагревателя где верхний и нижний пределы соответсвуют максимально и минимально допустимым скоростям изменения температуры в 3 градуса (максимум) и 1 градус (минимум), а зависимость температуры от приложенной мощности по времени не является линейной и сильно зависит как от напряжения в сети так и от загрузки печки.

Ну в общем то после просмотра нескольких учебных пособий по ПИДам стало проще когда понял для себя, что абревиатуру можно изменить на:
Пропорциональный = настоящее
Интегральный = прошлое
Дифференцирующий = будущее

Ну и формулы воздействия получаются:

error= Tset - Tout; (температура которая нужно получить и температура которая сейчас есть)
P=Pk * error;
Isum=Isum+error;
D=Dk * (Uold-Uout);
Uold=Uout;
( где Pk, Dk коэффициенты задаются исходя из инерционности системы)

методичка:

оттуда же взят пример.
единственное коэффициенты у меня не дробные и от Float я ушел на uint32
Тестовый стенд с лампой накаливания и NTC резистором соберу на выходных думаю.

P\S Формат кадров которые сейчас использую для управления по USART:

0xff 0xff 0x01 0x03 0xYY 0x0D 0x0A - запрос чтения данных
0xff 0xff - преамбула
0x0D 0x0A - окончание передачи кадра
0x01 - адрес устройства (можно убрать)
0x03 - команда чтения
0xYY - номер настройки, 00..04 - термопрофиля, 05 - конфигурация

Ответ для термопрофиля:
0xff 0xff 0x01 0x03 0xYY 0xT1 0xT1 0xS1 0xT2 0xT2 0xS2 0xPP 0x0D 0x0A
YY - номер термо-профиля 0...4 , T1 - температура 1, S1 - время 1, T1 - температура 2, S1 - время 2, PP - мощность

Ответ для конфигурации
0xff 0xff 0x01 0x03 0xYY 0xUU 0xSS 0xMP 0xSP 0x00 0x00 0x00 0x0D 0x0A
YY - конфигурация = 0x05, UU - USART OUT ON\OFF, SS -SPEED, MP - Max Power, SP - PID ON / OFF

Запись данных для профиля № ZZ :
0xff 0xff 0x01 0x16 0xZZ 0xT1 0xT1 0xS1 0xT2 0xT2 0xS2 0xPP 0x0D 0x0A
ZZ - номер термо-профиля 0...4 , T1 - температура 1, S1 - время 1, T1 - температура 2, S1 - время 2, PP - мощность

Запись данных для конфигурации RR:
0xff 0xff 0x01 0x03 0xRR 0xUU 0xSS 0xMP 0xSP 0x00 0x00 0x00 0x0D 0x0A
RR - конфигурация = 0x05, UU - USART OUT ON\OFF, SS -SPEED, MP - Max Power, SP - PID ON / OFF

Если USART включен для вывода информации во время работы, то как только активируется нагрев каждую секунду идет пакет следующего содержания:

0xFF 0xFF, time , temp , dtemp, Power, 0x0D 0x0A
0xFF 0xFF - преамбула.
time,Temp - uint16_t
dtemp,Power - uint8_t
0x0D 0x0A - конец передачи.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


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


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

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB