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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Структурная реализация ПИД, как организовать?
_Ivana
сообщение Mar 25 2016, 11:26
Сообщение #31


Местный
***

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



MrYuran поясните подробнее. Мне нужно вызывать некую процедуру каждые 256 Гц, при этом таймер у меня будет работать, допустим, на 256*256*n Гц, где n выберу от 2 до .... Останавливать/перезапускать таймер я опасаюсь - нужен гарантированный перманентный ШИМ.

ЗЫ по поводу структуры и логики работы мне сейчас вроде все понятно (хотя могут внезапно появиться вопросы, которые сейчас не подозреваю), остались детали - аналоговая схема управления двигателем от двух 256-битных шимов, сколько брать бит от АЦП, где и как ограничивать аддитивные составляющие ПИД. В конце концов какой взять двигатель и как реализовать механику, может приклеить по кругу резиновую зубчатую полоску и ездить по ней шестеренкой на двигателе, для отсутствия проскальзывания. Копировать код и реализацию один в один с прототипа не хочу.
Go to the top of the page
 
+Quote Post
EmbedElektrik
сообщение Mar 25 2016, 11:34
Сообщение #32


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 30-07-08
Из: Тверь, Россия
Пользователь №: 39 321



имхо проще врубить автостарт ацп и в его прерываниях считать коэффициенты. фактически появляется второй таймер.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 25 2016, 11:37
Сообщение #33


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

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



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


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


Местный
***

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



EmbedElektrik спасибо, хорошая мысль, думал ее. У меня в рабочем режиме один датчик (коэффициенты получаю по другим ножкам через АЦП при инициализации после включения), переключать входы АЦП не надо, значит можно запустить режим автоопроса одного канала. Если можно установить нужную его частоту, то должно сработать.

MrYuran спасибо, понятно. Получается уже 3 хороших варианта, как обойтись одним таймером и гарантировать строгую периодичность опроса.
ЗЫ хотя в этой ситуации непонятно, как мне продолжать декрементировать счетчик этого нужного количества периодов ШИМ, когда я начал рассчитывать результат ПИД. Его же надо продолжать декрементировать. Вариант с прерываниями мне все-таки более понятен.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 25 2016, 15:29
Сообщение #35


Гуру
******

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



Цитата(MrYuran @ Mar 25 2016, 14:37) *
В общем цикле (main loop) занимаетесь своими мелкими делами и между делом опрашиваете флаг переполнения таймера ШИМ.
По флагу переставляете счетчик (оптимально декрементировать до нуля), по достижению нужного колиества циклов выполняете основную функцию ПИД.

Если частота ШИМа будет большая можно пропустить несколько переполнений - потеряется равномерность цикла ПИД.
Лучше оставить счетчик в прерывании
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 31 2016, 18:36
Сообщение #36


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

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



Цитата(_Ivana @ Mar 24 2016, 16:17) *
XVR, вот спасибо, Айболит sm.gif Осталось мне разобраться, как удалось достичь этого. Может там 2 таймера, один из которых работает на PWM а другой с другим прескалером - на задание частоты опроса? В статье это явно не упомянуто вроде, а в код я сильно не вчитывался еще и не понял. Но в любом случае у меня в тиньке 13 один таймер, и придется извернуться/уложиться в него.


Если у таймера есть несколько output compare устройств, то достаточно одного таймера. Потратьте время изучите как это работает -- окупится.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Apr 7 2016, 13:02
Сообщение #37


Местный
***

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



Tarbal, давно не заходил на форум, не видел ваш ответ. Спасибо, попробую изучить. Сейчас изучаю ассортимент и выбираю интернет-магазин, где закупить все сразу - двигатели с редукторами (разные штук 5 на пробу), их ШИМ-контроллеры, колеса и прочую механику. С механикой у меня всегда нелегко идет, собственно электроника легче sm.gif
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Apr 7 2016, 13:52
Сообщение #38


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

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



Цитата(MrYuran @ Mar 25 2016, 15:37) *
В общем цикле (main loop) занимаетесь своими мелкими делами и между делом опрашиваете флаг переполнения таймера ШИМ.
По флагу переставляете счетчик (оптимально декрементировать до нуля), по достижению нужного колиества циклов выполняете основную функцию ПИД. Не будет накладных расходов на прерывание.


Ой!!!

Не надо так делать. В прерывании, а не в главном цикле.

Цитата(_Ivana @ Apr 7 2016, 17:02) *
Tarbal, давно не заходил на форум, не видел ваш ответ. Спасибо, попробую изучить. Сейчас изучаю ассортимент и выбираю интернет-магазин, где закупить все сразу - двигатели с редукторами (разные штук 5 на пробу), их ШИМ-контроллеры, колеса и прочую механику. С механикой у меня всегда нелегко идет, собственно электроника легче sm.gif


С механикой у всех нелегко идет, зато на форуме механиков с электроникой нелегко идет, а с механикой легче.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Apr 7 2016, 14:57
Сообщение #39


Гуру
******

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



Цитата(_Ivana @ Mar 24 2016, 12:02) *
Думаю реализовать ПИД-регулятор на АВР Тини-13. Хочу уточнить, правильно ли я выбираю структуру реализации.

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


Что скажете, господа?

Вижу третий.
В бесконечном цикле
Считываем АЦП1- П-компонента. Потенциометры на питание - 3 штуки.
Считываем АЦП2- И-компонента
Считываем АЦП3- Д-компонента
Обновляем константы ПИДа
Считываем АЦП4- разбаланс
Считаем воздействие. 1 или 0
Выдаем воздействие.
-----------------------------------
Экономим целый таймер. И ШИМ.
Параметры считываем в цикле, так как тут нужно глазами смотреть...
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Apr 7 2016, 20:29
Сообщение #40


Местный
***

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



Вы уже предлагали такой вариант, но мне кажется, что он полон недостатков. Возможно я чего-то не понимаю, но при таком подходе:
1) будут большие задержки, т.к. после переключения единственного АЦП на разные входы надо вроде как выжидать паузы. Или будет большая погрешность АЦП. Поэтому лучше при инициализации прочитать коэффициенты и в дальнейшей работе оставить АЦП только на входе датчика.
2) если количество тактов расчета не будет постоянным (а при наличии разных нормализаций по условиям превышения порогов оно постоянным не будет) - то И и Д компонента будет работать плохо, т.к. не выдержим строго постоянное время опроса датчика

К тому же у меня есть бортовой ШИМ - зачем его экономить? А про таймер 2 варианта вроде теоретически есть - использовать таймер АЦП при периодическом опросе или опрашивать каждый 4-й такт основного таймера.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Apr 8 2016, 10:11
Сообщение #41


Гуру
******

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



Цитата(_Ivana @ Apr 7 2016, 23:29) *
Вы уже предлагали такой вариант, но мне кажется, что он полон недостатков. Возможно я чего-то не понимаю, но при таком подходе:
1) будут большие задержки, т.к. после переключения единственного АЦП на разные входы надо вроде как выжидать паузы. Или будет большая погрешность АЦП. Поэтому лучше при инициализации прочитать коэффициенты и в дальнейшей работе оставить АЦП только на входе датчика.
2) если количество тактов расчета не будет постоянным (а при наличии разных нормализаций по условиям превышения порогов оно постоянным не будет) - то И и Д компонента будет работать плохо, т.к. не выдержим строго постоянное время опроса датчика

К тому же у меня есть бортовой ШИМ - зачем его экономить? А про таймер 2 варианта вроде теоретически есть - использовать таймер АЦП при периодическом опросе или опрашивать каждый 4-й такт основного таймера.

Про экономию ШИМа - шутка, в которой есть доля шутки. Каков у Вас период ШИМа предполагается?
А вместо потенциометра и АЦП можно сделать кнопки - увеличить и уменьшить.
А время вычислений легко сделать постоянным.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Apr 8 2016, 11:08
Сообщение #42


Местный
***

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



Цитата(Tanya @ Apr 8 2016, 13:11) *
Каков у Вас период ШИМа предполагается?

При частоте опроса датчика 256Гц (ориентируясь на прототип, может сделаю и в 2-4 раза меньше) частота таймера ШИМ пусть в 4 раза больше - 1кГц. Каждый 4-й тик полного счетчика таймера считаю управление. Если, конечно, мой выбранный драйвер на L298N будет нормально работать на такой частоте ШИМа. Если пищать будет - пока думаю что некритично.
Цитата(Tanya @ Apr 8 2016, 13:11) *
А вместо потенциометра и АЦП можно сделать кнопки - увеличить и уменьшить.

Можно. К тому же я предполагаю снимать коэффициенты в 6 бит (64 варианта от 0 до 100%), с одной стороны можно было бы и побольше, но так я гарантированно уложусь в 2 байта результата при однобайтном значении ошибки каждой составляющей и сумме трех умноженных на коэффициенты ошибок. Но тогда возникает вопрос визуализации значений коэффициентов - переменный резистор отличный прибор задания значения и визуализации его же забесплатно (можно хоть круговую шкалу нарисовать), кнопки и всякие энкодеры в этом отношении проигрывают.
Цитата(Tanya @ Apr 8 2016, 13:11) *
А время вычислений легко сделать постоянным.

Наверное. Если закопаться в математику и написать чисто линейный алгоритм нормализаций и масштабирований значений в диапазоны безо всяких условных переходов, который будет на порядок сложнее и неочевиднее.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Apr 8 2016, 12:40
Сообщение #43


Гуру
******

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



Цитата(_Ivana @ Apr 8 2016, 14:08) *
При частоте опроса датчика 256Гц (ориентируясь на прототип, может сделаю и в 2-4 раза меньше) частота таймера ШИМ пусть в 4 раза больше - 1кГц. Каждый 4-й тик полного счетчика таймера считаю управление. Если, конечно, мой выбранный драйвер на L298N будет нормально работать на такой частоте ШИМа. Если пищать будет - пока думаю что некритично.

Можно новые значения считывать с потенциометров при нажатии кнопочки. Только нужно плавно двигать ручки или держать маятник рукой...
Не читала про этот драйвер. Используем от TI. Allegro почему-то умирают. Для сохранения их жизни используем компаратор контроллера, подключенный к шунту. Вроде бы в драйвере примерно так и сделано, но горят иногда. Все же рекомендую сделать небольшую аналоговую добавку для интегрирования тока.
А почему Вам не взять нормальный быстрый контроллер? STM32F303, например. Все текущие проблемы отодвинутся очень далеко. Там к нему в ДСП-библиотеке есть несколько вариантов ПИДа (подразумевается управление моторами). И ДМА раскладывает все числа по полочкам. И ЦАП в комплекте.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Apr 8 2016, 13:04
Сообщение #44


Местный
***

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



Ну вот я и планирую новые значения считывать с потенциометров при нажатии кнопочки - только кнопочка называется Power Off sm.gif И Держать рукой, да.
Можно взять нормальный контроллер, можно ардуину, можно вообще готовый ПИД или сразу все готовое купить и не мучиться sm.gif
Пока я пытаюсь определиться с заказом комплектующих - у меня нет опасений, что выбранного контроллера мне не хватит. Может, когда дойдет до практики, они появятся.
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 Текстовая версия Сейчас: 28th July 2025 - 08:53
Рейтинг@Mail.ru


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