roboforum.ru

Технический форум по робототехнике.

ПИД (на ПИКе)

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

ПИД (на ПИКе)

Сообщение dccharacter » 29 мар 2011, 22:37

Начал разбираться с ПИДом, и что-то уперся сам не пойму во что. Объясните логику, плз.

Имеем - движок с энкодером, энкодер считает количество фронтов в одинаковый промежуток времени (actual). Мы задаем количество фронтов, которые надо крутить (target). Алгоритм сравнивает target vs actual, получаем ошибку (error). Если error положительная, то имеем недолет по оборотам, алгоритм задает некий положительный ШИМ, который по идее должен раскрутить движок, чтобы достичть желаемых оборотов (target). ЧТо происходит, когда у нас перелет (error < 0)??? Отключаем ШИМ, чтобы движок сам притормозил до нужных оборотов?

Вопрос возник, потому что перечитал аппноутов, в том числе микрочиповских. В частности, в одном из них два входа управляются одним и тем же ШИМ сигналом, только на один вход подается прямой ШИМ, а на второй - инвертированный. Мне это мозг разорвало окончательно - при таком раскладе, как я понимаю, активную часть периода движок тянет в одну сторону, а в неактивную - в другую. В предисловии к аппноуту скромно упоминаются "повышенные потери на ереключение". Нифига себе "повышенные потери". Да это ППЦ ИМХО.

Добавлено спустя 2 минуты 14 секунд:
Хм, только что дошло, что у меня движок малоинерционный, и он скорее похож не на мотор с редуктором из статьи из вики о ПИДах, а скорее на систему точного позиционирования. ВОт у меня его и качает тудыть-растудыть...

Добавлено спустя 3 минуты 14 секунд:
Вот так выглядит раскачка, причем идет она ниже target-уровня. И чем меньше p-коэффициент, тем сильнее отклонение от target.
Вложения
PID.png
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение Duhas » 29 мар 2011, 22:38

эхх, как бы я был рад, еслиб у всех стоял матлаб с симулинком..

разница между заданием и ОС подается на регулятор, тот в свою очередь обязан сделать все, чтобы она была равна нулю..

регулятор можно настроить по разному.. если есть перелеты - значит есть перерегулирование...

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

мой слегка сонный моск такое вот сумбурное объяснение родил..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: ПИД (на ПИКе)

Сообщение AndreiSk » 29 мар 2011, 22:55

По идее настраивать надо постоянно.
В процессе работы батарея садится,
напряжение просело.
И то что раньше работало хорошо,
пойдет вразнос.
Аватара пользователя
AndreiSk
 
Сообщения: 2639
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: ПИД (на ПИКе)

Сообщение dccharacter » 29 мар 2011, 23:00

Duhas писал(а):обычно система настраивается так, что при близком подходе регулятор уже дает на разогнанный двигатель отрицательное напряжение, и тормозит его.

Вот в этом у меня собственно вопрос был... Все-таки активно подтормаживаем, да?

Добавлено спустя 59 секунд:
AndreiSk писал(а):По идее настраивать надо постоянно.
До этого мне еще ой как нескоро... Тут пока в лабораторных условиях движок до потолка скачет...

Добавлено спустя 56 секунд:
Duhas писал(а):эхх, как бы я был рад, еслиб у всех стоял матлаб с симулинком..

На картинке график из экселя.... Матлаб в руках уже лет 12-ть не держал.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение Duhas » 29 мар 2011, 23:07

конечно активно.. все просто, пишите регулятор чтобы он мог давать как положительное так и отрицательное задание на двигатель.. для начала просто П регулятор... потом И добавить..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: ПИД (на ПИКе)

Сообщение 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.... Бред какой-то.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение Duhas » 30 мар 2011, 00:28

ну в таких разрешениях ничего наверно особо и не нарегулируется.... код регулятора бы еще ...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: ПИД (на ПИКе)

Сообщение 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);
}
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение Duhas » 30 мар 2011, 00:41

чес слова муть для меня какая-то
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: ПИД (на ПИКе)

Сообщение dccharacter » 30 мар 2011, 00:44

для меня тоже :-(((

Добавлено спустя 2 минуты:
Но смотри, я использую только P-cjcтавляющую, т.е. функция тупо возвращает ошибку помноженную на коэффициент и я результат тупо пихаю в CCPRxL (дьюти ШИМа). Т.е. чем больше ошибка, тем сильнее должны шимить. Если знак ошибки поменялся - изменили направление шима. Господи, блуждать-то не где, я четвертый час бьюсь. Ей-ей дерево.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение Duhas » 30 мар 2011, 00:48

предлагаю свернуть в трубочку и раскурить... у них описано все адекватно.. если с английским все плохо завтра могет найду лекции по тау...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: ПИД (на ПИКе)

Сообщение dccharacter » 30 мар 2011, 01:00

с английским все значительно лучше чем со всем остальным вместе взятым :P
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение avr123.nm.ru » 30 мар 2011, 09:54

dccharacter писал(а):Начал разбираться с ПИДом, и что-то уперся сам не пойму во что. Объясните логику, плз.


www.PIDcontrol.narod.ru там и логика кратко и примеры с кодом и моделированием.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: ПИД (на ПИКе)

Сообщение dccharacter » 30 мар 2011, 11:21

avr123.nm.ru писал(а):http://www.PIDcontrol.narod.ru

avr123, за что тебя еще очень люблю, так это за тонкое чувство цвета, кегля и стиля :-)))
:beer:
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ПИД (на ПИКе)

Сообщение avr123.nm.ru » 30 мар 2011, 12:06

Ща без кегля никуда ! :)
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

След.

Вернуться в Новичкам или основы основ роботостроения.

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

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