roboforum.ru

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

ПИД (на ПИКе)

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

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

Сообщение Duhas » 01 апр 2011, 08:20

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

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

Сообщение dccharacter » 01 апр 2011, 14:05

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

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

Сообщение boez » 01 апр 2011, 16:12

А у тебя какая-то болтанка странная с частотой f_cycle/2 - откуда берется, непонятно. А если без регулятора, с фиксированным ШИМ крутить - она есть на показаниях скорости или нету? Если есть, надо искать откуда, если нету - наверное регулятор возбуждается, причем не из-за интеграла, а из-за задержки в цикле. Уменьшать П и Д или увеличивать частоту цикла регулирования.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

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

boez писал(а):А у тебя какая-то болтанка странная с частотой f_cycle/2 - откуда берется, непонятно. А если без регулятора, с фиксированным ШИМ крутить - она есть на показаниях скорости или нету? Если есть, надо искать откуда, если нету - наверное регулятор возбуждается, причем не из-за интеграла, а из-за задержки в цикле. Уменьшать П и Д или увеличивать частоту цикла регулирования.

Так, про болтанку. У меня ПИд вызывается каждый раз при переполнении регистра таймера. В этот же момент я фиксирую значение енкодера и вывожу его в консоль. Из значений в консоли строю график в екселе. Т.е. у меня каждое новое значение получается не через f_cycle/2, а с частотой, собственно, обновления.

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

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

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

Сообщение boez » 01 апр 2011, 18:31

dccharacter писал(а):Почему колебания. Потому что движок абсолютно неинертный. Соответственно при недолете мы ШИМим - и за время до следующего обновления движок успевает сильно перелететь, проверяем - ошибка отрицательная, ставим ШИМ в ноль (даже не в обратную сторону!!!! просто в ноль) - и он успевает оттормозиться.
Можно увеличивать частоту, но, соответственно падает число тиков, которые успевает энкодер натикать за период обновления. Можно движок взять побольше - поинертнее.

Ааа, ну тогда полюбому надо частоту регулятора повышать. Пусть будет меньше тиков, но управление станет плавнее. По крайней мере попробовать стоит. Дело в том, что регулятору можно давать задание в нецелых тиках :) Щас попробую объяснить на пальцах. Вот у нас сейчас пусть частота регулирования 30 Гц, задание 57 тиков и скорость тоже 57 тиков. А теперь берем и увеличиваем частоту в 10 раз, до 300 Гц, и число с энкодера перед подачей на регулятор умножаем тоже на 10. За 1/30 секунды энкодер даст 57 тиков, которые раскидаются по циклам 1/300 секунды как 6-6-5-6-6-5-6-6-5-6 или подобным образом. На регулятор в качестве ОС будет подано 7 раз 60 и 3 раза 50. Интеграл 7 раз получит приращение ki*(57-60), в целом -ki*21, а 3 раза ki*(57-50), в целом ki*21. Т.е. за 10 циклов вернется в свое исходное состояние. Пропорционал тоже выдаст 3 раза 7*kp и 7 раз -3*kp на мотор, который массой ротора успешно это усреднит в 0. Дифференциалу от такой скачки будет немного хреновато, но в принципе там на нем фильтр есть, ну а среднее у него тоже будет 0. Таким образом, получаем, что дискретность по скорости не ухудшилась, регулятор как держал 57 тиков за 1/30 сек, так и держит, а скорость отработки возмущений возросла в 10 раз. То есть если с энкодера пришло вдруг 7 тиков - ШИМ уменьшится уже в следующую 1/300 секунды, система не будет дожидаться пока пройдет 1/30 и натикает 70 с лишним тиков.

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

Как минимум - попробуй так сделать и посмотри что получится.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение dccharacter » 01 апр 2011, 23:44

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

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

Сообщение boez » 02 апр 2011, 00:59

dccharacter писал(а):Ощутимо лучше работает, но сужу я об этом только по осциллографу. Так загрузил ПИД мой камень, что байт отослать некогда. А ведь там должно будет ДВА пида крутиться + UART + i2c... Нестыковочка...

Ну вот теперь начинай оптимизировать :) Для начала Д составляющую обнули, если сильно хуже не станет - выкидывай нафиг соответствующий код, процентов 50 сэкономишь. А что конкретно за проц? Неужели сильно слабее аврки?

У меня конкретно этот пид крутился на атмеге 16 МГц совершенно ненапряжно в цикле 1 мс. Причем он там был не один, еще кучка кода была. Параллельно шел обмен с четырьмя слейвами по RS485/RS422, причем с одним по одному протоколу и на 115200, а с тремя другими - по другому и на 19200 :) Полный круг опроса порядка 15 мс. И еще сидел двухканальный ЦАП на SPI, на который собсно шел выход этого пида, там Lenze висели мелкие с асинхронными моторчиками по полкиловатта, и держал этот пид даже не скорость, а фазу вращающегося девайса.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение dccharacter » 02 апр 2011, 01:02

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

Re: Календарь roboforum.ru

Сообщение dccharacter » 10 апр 2011, 19:27

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

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

Re: Календарь roboforum.ru

Сообщение =DeaD= » 10 апр 2011, 19:34

(Ща ПИД отделю)

А что, у тебя где ПИД - на МК? Или на ПК?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Календарь roboforum.ru

Сообщение dccharacter » 10 апр 2011, 19:44

=DeaD= писал(а):(Ща ПИД отделю)

А что, у тебя где ПИД - на МК? Или на ПК?

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

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

Сообщение =DeaD= » 10 апр 2011, 19:54

Перенес. А сейчас какая частота выдачи отладки, частота вызова регулятора и частота срабатываний энкодера?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение dccharacter » 10 апр 2011, 20:27

=DeaD= писал(а):Перенес. А сейчас какая частота выдачи отладки, частота вызова регулятора и частота срабатываний энкодера?

вызов регулятора - 32Гц
Частота срабатываний энкодера - 64 грани, при максимальном напряжении и максимальном ШИМе частота следования граней 3,3кГц.
Выдача отладки с частотой вызова регулятора.

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

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

Сообщение =DeaD= » 10 апр 2011, 20:36

А чего у тебя слишком быстро мелькает? Закинь в лог файл, и построй графики. Или так проанализируй.
Ты на ходу что-ли пытаешься понять, чего там мельтешит? :shock:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение dccharacter » 10 апр 2011, 20:41

=DeaD= писал(а):А чего у тебя слишком быстро мелькает? Закинь в лог файл, и построй графики. Или так проанализируй.
Ты на ходу что-ли пытаешься понять, чего там мельтешит? :shock:

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

Пред.След.

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

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

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