|
Структурная реализация ПИД, как организовать? |
|
|
|
Mar 24 2016, 09:02
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Думаю реализовать ПИД-регулятор на АВР Тини-13. Хочу уточнить, правильно ли я выбираю структуру реализации.
Сначала инициализирую все что надо, читаю по трем АЦП значения, задающие 3 коэффициента ПИД. Запускаю таймер с требуемой частотой опроса датчика, устанавливаю по нему прерывание. В прерывании читаю показания АЦП датчика и выставляю флаг, что пришло новое значение. В мэйне в бесконечном цикле жду пока не установится этот флаг, а как он установился - рассчитываю управляющее воздействие и кладу его в ШИМ, сбрасываю флаг. Все красиво, но непонятно одно - у меня один единственный таймер - он определяет частоту опроса и он же определяет частоту ШИМ. Частота прерываний больше или равна частоте ШИМ, поскольку ШИМ крутит счетчик от 0 до 255, а прерывание - от заданного мной значения до 255. И вообще, если я буду опрашивать датчик чаще, чем выводить управляющее воздействие, будет имхо как-то не комильфо. Вижу 2 варианта 1) запускать таймер на полный счетчик, чтобы частота опроса равнялась частоте выдачи ШИМ. Но не знаю, будет ли успевать обновляться значение ШИМ, оно там вроде как буферизуется, может не успеет обновиться как уже новое пора - и так каждый раз. 2) запустить таймер на частоте раза в 4 выше требуемой частоты опроса датчика, шим будет генерироваться с этой частотой - 4 раза подряд одно и то же значение, но больше гарантия что оно обновится. А в прерывании поставить еще один счетчик, и опрашивать датчик/выставлять флаг/рассчитывать выходное значение только каждое четвертое прерывание таймера
Что скажете, господа?
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Mar 24 2016, 13:00
|

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

|
Цитата(XVR @ Mar 24 2016, 14:13)  В оригинальном AN964 PWM работает на 31.2 KHz, а цикл PID - на 256 Hz Цитата(_Ivana @ Mar 24 2016, 14:36)  А как это сделать на одном таймере Вынудили меня все таки посмотреть даташиты  PIC16F684 покруче будет, у него три таймера и один из них 16-и разрядный. И памяти поболе раза в два. Так что советую не заниматься мазохизмом, а взять МК чуть получше. Делать на одном таймере 31 kHz - это 32 мкс период прерывания - и в нем счетчик/делитель на 120 - конечно можно, но все будет впритирку, могут быть пропуски обработки. Все это не слишком критично, но выглядит не очень красиво.
|
|
|
|
|
Mar 24 2016, 13:05
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Tanya про модулятор не понял, но идею забыть о таймере уловил. Если действительно вычислять не по прерыванию таймера, а сразу как закончилось предыдущее вычисление - то есть без прерываний гонять цикл постоянно, может с добивкой фиктивными операциями для замедления, то пропорциональная составляющая должна отлично это перенести, вот с остальными похуже. Но если у меня один цикл вычисления (в зависимости от разных условных переходов) будет выполняться примерно одинаковое количество тактов, то можно и так попробовать. Но скорее всего это будет плавать, и Д/И составляющие будут сильно скакать, особенно Д. Все-таки я склоняюсь к своему же варианту 2 - таймер на частоту побольше для ШИМ, а запрашивать датчик и вычислять значение каждое n-е прерывание по этому же таймеру. Причем, n может быть и 255. Baser вот, вижу поняли мой стартовый посыл первого поста  Не очень красиво, говорите? А что там - 100 раз ввалиться в прерывание таймера просто декрементировать счетчик, проверить на 0 и выйти если не 0 - неужели так будет мешать? Ну там несколько тактов на переход по icall/reti... Имхо, на данном камне - самый компромиссный вариант? Лучше, чем ШИМ с частотой опроса и опрос в цикле без таймера имхо. ЗЫ к тому же не обязательно разгонять ШИМ до 31 КГц, может и 1 КГц при 256 Гц частоте опроса хватит. А это всего 3 лишних раза ввалиться в прерывание декрементировать счетчик - и снова вернуться к прерванному на середине расчету выходного значения  Если будет пищать на этих 1 КГц - будет не баг а фича
|
|
|
|
|
Mar 24 2016, 19:45
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Tanya ну в интегральном смысле у меня резких бросков не должно быть - параметры непрерывны, результирующее управление тоже, переход с плюса на минус плавный... В смысле мгновенных значений - да, ШИМ, но может индуктивность обмоток сгладит. Хотя если механическая инерция системы будет велика, то токи в обмотках могут скакать сильно. да.
amaora Формальского читал, линеаризованную модель составлял, оптимальное управление рассчитывал (через моменты инерции и т.п.), но в данном конкретном случае - Вы правы, простейший ПИД с настройкой коэффициентов безо всякой сложной теории. Если удастся победить управление двигателем постоянного тока через ШИМ, то остальное думаю осилю.
|
|
|
|
|
Mar 25 2016, 11:02
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата ...возьмите XXX ... ...не мучаясь... Отстаньте вы от человека! Он же сразу сказал - это спорт такой. Что-то вроде "я напишу hello world в N байт", только следующий уровень :-) Если _Ivana хватит упорства и знаний затолкать всё это в тиньку, он будет на порядок больше молодец, чем реализация того же ПИДа на stm32discovery.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|