Технический форум по робототехнике.
dccharacter » 29 мар 2011, 22:37
Начал разбираться с ПИДом, и что-то уперся сам не пойму во что. Объясните логику, плз.
Имеем - движок с энкодером, энкодер считает количество фронтов в одинаковый промежуток времени (actual). Мы задаем количество фронтов, которые надо крутить (target). Алгоритм сравнивает target vs actual, получаем ошибку (error). Если error положительная, то имеем недолет по оборотам, алгоритм задает некий положительный ШИМ, который по идее должен раскрутить движок, чтобы достичть желаемых оборотов (target). ЧТо происходит, когда у нас перелет (error < 0)??? Отключаем ШИМ, чтобы движок сам притормозил до нужных оборотов?
Вопрос возник, потому что перечитал аппноутов, в том числе микрочиповских. В частности, в одном из них два входа управляются одним и тем же ШИМ сигналом, только на один вход подается прямой ШИМ, а на второй - инвертированный. Мне это мозг разорвало окончательно - при таком раскладе, как я понимаю, активную часть периода движок тянет в одну сторону, а в неактивную - в другую. В предисловии к аппноуту скромно упоминаются "повышенные потери на ереключение". Нифига себе "повышенные потери". Да это ППЦ ИМХО.
Добавлено спустя 2 минуты 14 секунд:
Хм, только что дошло, что у меня движок малоинерционный, и он скорее похож не на мотор с редуктором из статьи из вики о ПИДах, а скорее на систему точного позиционирования. ВОт у меня его и качает тудыть-растудыть...
Добавлено спустя 3 минуты 14 секунд:
Вот так выглядит раскачка, причем идет она ниже target-уровня. И чем меньше p-коэффициент, тем сильнее отклонение от target.
- Вложения
-
Duhas » 29 мар 2011, 22:38
эхх, как бы я был рад, еслиб у всех стоял матлаб с симулинком..
разница между заданием и ОС подается на регулятор, тот в свою очередь обязан сделать все, чтобы она была равна нулю..
регулятор можно настроить по разному.. если есть перелеты - значит есть перерегулирование...
число колебаний около задания - колебательностью.. играй параметрами можно настроить ПИД как надо.. так воть, по идее, пока разница велика, регулятор должен давать на двигатель большое напряжение, как она спадает - меньшее... и так далее.. но тогда подход будет более долгим.. обычно система настраивается так, что при близком подходе регулятор уже дает на разогнанный двигатель отрицательное напряжение, и тормозит его. тогда чуток перелетаем задание и возращаемся назад..
мой слегка сонный моск такое вот сумбурное объяснение родил..
AndreiSk » 29 мар 2011, 22:55
По идее настраивать надо постоянно.
В процессе работы батарея садится,
напряжение просело.
И то что раньше работало хорошо,
пойдет вразнос.
dccharacter » 29 мар 2011, 23:00
Duhas писал(а):обычно система настраивается так, что при близком подходе регулятор уже дает на разогнанный двигатель отрицательное напряжение, и тормозит его.
Вот в этом у меня собственно вопрос был... Все-таки активно подтормаживаем, да?
Добавлено спустя 59 секунд:AndreiSk писал(а):По идее настраивать надо постоянно.
До этого мне еще ой как нескоро... Тут пока в лабораторных условиях движок до потолка скачет...
Добавлено спустя 56 секунд:Duhas писал(а):эхх, как бы я был рад, еслиб у всех стоял матлаб с симулинком..
На картинке график из экселя.... Матлаб в руках уже лет 12-ть не держал.
Duhas » 29 мар 2011, 23:07
конечно активно.. все просто, пишите регулятор чтобы он мог давать как положительное так и отрицательное задание на двигатель.. для начала просто П регулятор... потом И добавить..
dccharacter » 30 мар 2011, 00:21
Никак все-таки не пойму, что происходит, смотрите:
target = 40 (коеффициент только пропорциональный)
actual error P CCPRxL
.054, -014, -030, 030
.056, -016, -033, 033
.054, -014, -030, 030
.056, -016, -033, 033
.054, -014, -030, 030
.056, -016, -033, 033
.054, -014, -030, 030
.056, -016, -033, 033
.054, -014, -030, 030
.056, -016, -033, 033
Ну и вот так оно пляшет вокруг 55. Почему вокруг 55 - не пойму. По идее, если я неправильно направление движка задаю, оно долно улетать к границе регулирования, если правильно - то плясать должно вокруг target.... Бред какой-то.
Duhas » 30 мар 2011, 00:28
ну в таких разрешениях ничего наверно особо и не нарегулируется.... код регулятора бы еще ...
dccharacter » 30 мар 2011, 00:37
Duhas писал(а):ну в таких разрешениях ничего наверно особо и не нарегулируется.... код регулятора бы еще ...
да прям из вики скопировал, только double поменял на int....
- Код: Выделить всё • Развернуть
signed int UpdatePID(SPid * pid, signed int error, signed int position)
{
signed int pTerm, dTerm, iTerm, Term;
pTerm = (pid->pGain * error); // calculate the proportional term
pid->iState += error; // calculate the integral state with appropriate limiting
if (pid->iState > pid->iMax)
pid->iState = pid->iMax;
else if (pid->iState < pid->iMin)
pid->iState = pid->iMin;
iTerm = pid->iGain * pid->iState; // calculate the integral term
dTerm = pid->dGain * (position - pid->dState);
pid->dState = position;
return (pTerm);
}
Duhas » 30 мар 2011, 00:41
чес слова муть для меня какая-то
dccharacter » 30 мар 2011, 00:44
для меня тоже
((
Добавлено спустя 2 минуты:Но смотри, я использую только P-cjcтавляющую, т.е. функция тупо возвращает ошибку помноженную на коэффициент и я результат тупо пихаю в CCPRxL (дьюти ШИМа). Т.е. чем больше ошибка, тем сильнее должны шимить. Если знак ошибки поменялся - изменили направление шима. Господи, блуждать-то не где, я четвертый час бьюсь. Ей-ей дерево.
Duhas » 30 мар 2011, 00:48
предлагаю
свернуть в трубочку и раскурить... у них описано все адекватно.. если с английским все плохо завтра могет найду лекции по тау...
dccharacter » 30 мар 2011, 01:00
с английским все значительно лучше чем со всем остальным вместе взятым
avr123.nm.ru » 30 мар 2011, 09:54
dccharacter писал(а):Начал разбираться с ПИДом, и что-то уперся сам не пойму во что. Объясните логику, плз.
www.PIDcontrol.narod.ru там и логика кратко и примеры с кодом и моделированием.
dccharacter » 30 мар 2011, 11:21
avr123, за что тебя еще очень люблю, так это за тонкое чувство цвета, кегля и стиля
))
avr123.nm.ru » 30 мар 2011, 12:06
Ща без кегля никуда !