реклама на сайте
подробности

 
 
> Структурная реализация ПИД, как организовать?
_Ivana
сообщение Mar 24 2016, 09:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Думаю реализовать ПИД-регулятор на АВР Тини-13. Хочу уточнить, правильно ли я выбираю структуру реализации.

Сначала инициализирую все что надо, читаю по трем АЦП значения, задающие 3 коэффициента ПИД. Запускаю таймер с требуемой частотой опроса датчика, устанавливаю по нему прерывание. В прерывании читаю показания АЦП датчика и выставляю флаг, что пришло новое значение. В мэйне в бесконечном цикле жду пока не установится этот флаг, а как он установился - рассчитываю управляющее воздействие и кладу его в ШИМ, сбрасываю флаг. Все красиво, но непонятно одно - у меня один единственный таймер - он определяет частоту опроса и он же определяет частоту ШИМ. Частота прерываний больше или равна частоте ШИМ, поскольку ШИМ крутит счетчик от 0 до 255, а прерывание - от заданного мной значения до 255. И вообще, если я буду опрашивать датчик чаще, чем выводить управляющее воздействие, будет имхо как-то не комильфо.
Вижу 2 варианта
1) запускать таймер на полный счетчик, чтобы частота опроса равнялась частоте выдачи ШИМ. Но не знаю, будет ли успевать обновляться значение ШИМ, оно там вроде как буферизуется, может не успеет обновиться как уже новое пора - и так каждый раз.
2) запустить таймер на частоте раза в 4 выше требуемой частоты опроса датчика, шим будет генерироваться с этой частотой - 4 раза подряд одно и то же значение, но больше гарантия что оно обновится. А в прерывании поставить еще один счетчик, и опрашивать датчик/выставлять флаг/рассчитывать выходное значение только каждое четвертое прерывание таймера

Что скажете, господа?
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
MrYuran
сообщение Mar 24 2016, 09:26
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(_Ivana @ Mar 24 2016, 12:02) *
Что скажете, господа?

Лично я ничего не понял sad.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Mar 24 2016, 09:28
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Хорошо, тогда поставим вопрос иначе - как вы видите оптимальную структуру реализации моей задачи на данном МК - какую периферию / прерывания и как использовать?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 24 2016, 10:01
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Что это за пид, который надо с частотой шима крутить? Разве что управление рулями ракеты sm.gif
Как по мне, тайминги на порядки отличаются.

А вообще, исходить надо из задачи. А о ней ни слова.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 24 2016, 11:02
Сообщение #5


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



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

Когда то брал за основу аппликейшен Атмела:
AVR221: Discrete PID controller

там к нему идут коды на Си в комплекте.
Почитайте, разберитесь, модифицируйте под свою задачу.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Mar 24 2016, 11:06
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Задача - повторить (возможно с вариациями) что-то подобное http://ww1.microchip.com/downloads/en/AppNotes/00964A.pdf на АВР тини 13.
Частота опроса датчика / расчета / выдачи управляющего сигнала (частота петли управления) - 256 Гц +- лапоть (или два лаптя).
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 24 2016, 11:15
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Я бы начал с определения значений коэффициентов П, И и Д.
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 24 2016, 11:26
Сообщение #8


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(_Ivana @ Mar 24 2016, 13:06) *
Задача - повторить (возможно с вариациями) что-то подобное http://ww1.microchip.com/downloads/en/AppNotes/00964A.pdf на АВР тини 13.
Частота опроса датчика / расчета / выдачи управляющего сигнала (частота петли управления) - 256 Гц +- лапоть (или два лаптя).

"Перевернутый маятник" - да, это быстрый объект управления.
Но зато есть все: описание, код на асме и код на си на выбор.

У вас есть два варианта решения:

1. Разобраться с теорией, с реализацией, взять основные идеи и реализовать похоже на Тиньке13.

2. Тупо портировать код с PIC16F684 на Tiny13
Типичный инженерный подход sm.gif
Нужно детально разобраться и с PIC16F684 и с Tiny13, т.к. ресурсов очень мало и не факт, что они однозначно взаимозаменяемы.

А вообще препод хорошо придумал, интересно - одобряю sm.gif
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 24 2016, 11:33
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(_Ivana @ Mar 24 2016, 12:02) *
Что скажете, господа?

Если контроллер занят только этим, то пусть работает на максимальной скорости.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Mar 24 2016, 11:55
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Tarbal, эти значения будут считываться через отдельные ножки по АЦП с резистивных делителей при инициализации и затем использоваться при управлении. Надо поменять - отключаем питание (т.к. ресет занят под вход), крутим ручки, включаем питание - коэффициенты поменялись. Собственно в коде по моей ссылке так и сделано.

Baser препод в данном случае я, хочу со старшим сыном сделать интересную вещь. Я хочу пойти по первому из ваших вариантов. А для этого мне в том числе надо понять простую вещь: как подружить опрос по прерыванию таймера с ШИМ на одном таймере. Еще раз - пусть таймер работает с частотой 256^2 Гц. Частота обновления ШИМ тогда равна 256 Гц - правильно? Прерывания же по переполнению генерятся в зависимости от стартового значения счетчика, но НЕ медленнее 256 Гц, возможно быстрее. Таким образом у меня частота опроса превышает частоту обновления выходного сигнала канала управления. Я не разобрался, как это решено в проекте по моей ссылке, но предположил 2 варианта решения в стартовом посте.

Tanya пусть, я не против. Только частота опроса должна быть постоянной, для корректного дифференцировани/интегрирования. И я ее могу выбрать максимально возможной, при которой будет успевать рассчитываться управление. Но частота оновления ШИМ должна быть как минимум не меньше, о чем я и озадачиваюсь.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 24 2016, 12:13
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



В оригинальном AN964 PWM работает на 31.2 KHz, а цикл PID - на 256 Hz. Делайте выводы sm.gif
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Mar 24 2016, 12:17
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



XVR, вот спасибо, Айболит sm.gif Осталось мне разобраться, как удалось достичь этого. Может там 2 таймера, один из которых работает на PWM а другой с другим прескалером - на задание частоты опроса? В статье это явно не упомянуто вроде, а в код я сильно не вчитывался еще и не понял. Но в любом случае у меня в тиньке 13 один таймер, и придется извернуться/уложиться в него.
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 24 2016, 12:26
Сообщение #13


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(_Ivana @ Mar 24 2016, 13:55) *
препод в данном случае я, хочу со старшим сыном сделать интересную вещь.

Ну не угадал laughing.gif

Цитата
Я хочу пойти по первому из ваших вариантов. А для этого мне в том числе надо понять простую вещь: как подружить опрос по прерыванию таймера с ШИМ на одном таймере. Еще раз - пусть таймер работает с частотой 256^2 Гц. Частота обновления ШИМ тогда равна 256 Гц - правильно? Прерывания же по переполнению генерятся в зависимости от стартового значения счетчика, но НЕ медленнее 256 Гц, возможно быстрее. Таким образом у меня частота опроса превышает частоту обновления выходного сигнала канала управления.

Только частота опроса должна быть постоянной, для корректного дифференцировани/интегрирования. И я ее могу выбрать максимально возможной, при которой будет успевать рассчитываться управление. Но частота оновления ШИМ должна быть как минимум не меньше, о чем я и озадачиваюсь.

Вам нужно разобраться с синхронизацией процессов в вашей программе.
Могу дать только общие рекомендации, ибо на память не помню реализации таймеров и АЦП ни в PIC16F684 ни в Tiny13

1. Частота вашего прерывания по переполнению таймера = тактовая таймера / 256 (это если таймер 8-и битный и прескалер =1)
Это же время = один полный период ШИМа. Чаще его значение изменять нет смысла.

2. Если АЦП не имеет автозапуска и его нужно каждый раз запускать вручную, нужно настроить его на работу с такой частотой, чтобы одно измерение производилось за время меньше, чем период прерывания.

3. Таким образом, в прерывании:
- читаем предыдущее измеренное значение АЦП
- запускаем новое измерение АЦП
- взводим флаг обработки

4. В главном цикле ждем флаг, по флагу:
- вычисляем ПИД, выходное воздействие
- изменяем ШИМ (если таймер с буферированием)
- сбрасываем флаг
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Mar 24 2016, 12:36
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Baser вот этот вариант я и имел в виду под номером 1 в стартовом посте. Мне конечно ВРОДЕ КАК нет смысла менять ШИМ чаще, чем период ПИД. Но если его запускать с той же частотой, то изменение будет отставать на целый один период опроса (не знаю насколько это критично), и я не смогу плавно менять период опроса - таймер будет гонять прерывание от 0 до 255 как ШИМ. Но может мне эта плавность и не потребуется. Но самое главное - мне бы гарантию, что при такой конфигурации у меня вообще будет меняться ШИМ - может там какая двойная буферизация, и изменение значения выхода ШИМ происходит только через 2 такта после обновления его в регистре - тогда у меня просто не будет успевать обновляться ШИМ из-за низкой частоты его настройки. Поэтому я и хотел с запасом частоту ШИМ увеличить по сравнению с частотой опроса датчика. И информация от XVR тоже не противоречит этому. А как это сделать на одном таймере - об это я попытался простыми словами написать в варианте 2 первого поста.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 24 2016, 12:51
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(_Ivana @ Mar 24 2016, 14:55) *
Tanya пусть, я не против. Только частота опроса должна быть постоянной, для корректного дифференцировани/интегрирования. И я ее могу выбрать максимально возможной, при которой будет успевать рассчитываться управление. Но частота оновления ШИМ должна быть как минимум не меньше, о чем я и озадачиваюсь.

Так забудьте о таймере... Сделайте сигма-дельта модулятор. Вычисляется воздействие - кладется (суммируется) в конденсатор, смотрим туда и либо ножку вверх и вычитаем константу, либо вниз и не вычитаем. Это если управляем только в одну сторону - нагреватель, к примеру. Если управление в разные стороны может действовать, то немного думаем...
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016