Контроллер с портом ДД и 16 сервопортами на основе M128-S

Правила форума
Правила раздела OpenRobotics

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение =DeaD= » 19 мар 2010, 16:59

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

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение pashteet » 19 мар 2010, 17:07

Протестируй, плиз, на "помехозащещенность", т.е. как себя будет вести дальномер, если крутить сервой (т.е. меняются ли его показания)
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение =DeaD= » 19 мар 2010, 17:10

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

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение pashteet » 19 мар 2010, 20:48

ну если не отловишь, тогда и Бог с ним =))))
Аватара пользователя
pashteet
 
Сообщения: 930
Зарегистрирован: 28 авг 2009, 12:50
Откуда: Волжский
Skype: pashok0988
ФИО: Павел Петрович

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение boez » 08 апр 2010, 13:42

Сюда вот напишу, это ж вроде уже не поддержка, а обсуждение решений.

В общем предложение у меня немного поменять идеологию работы со счетчиками в сервоконтроллерах - в обоих, и на 32 сервы, и на 16. Приведенный вариант - модификация 4017/servo_lld.c на 32 сервы, откусив лишнее - получим на 16.

Основные моменты организации существующей прошивки: сброс счетчиков происходит единожды при инициализации, затем просто на каждый счетчик выдается цикл импульсов - 8 штук с заданными интервалами от 500 до 2500 мкс, затем еще 2 подряд и ждем остаток до 20500 мкс, все это делается в обработчиках OUTPUT_COMPAREXX. Режим таймеров - свободный счет (WGMx = 0000).

Я предлагаю такую последовательность: 500 мкс в состоянии 0 - синхронно все счетчики, затем 8 интервалов с заданными временами, отдельно на каждом счетчике, затем остаток до 21000 - общий для всех счетчиков (досчитавшие свою последовательность счетчики сидят в состоянии 9) и затем сброс. Достичь этого можно двумя путями:

1. Перевести таймеры в режим CTC по ICRx. Синхронный старт, одинаковый период - по идее они должны оставаться синхронными все время. Плюсы - четкий период 21 мс, минусы - нифига не понятно из даташита, будет ли это вообще работать. А именно, можно ли пользоваться всеми тремя OCRxy в режиме WGMx = 1100 и что с ними всеми будет происходить при TCNTx=ICRx, когда таймер перещелкивается на 0. Возможно, они просто еще раз щелкнут - ну значит надо ими щелкнуть обратно и только затем дать сброс.

2. Повесить обработчик на свободный Compare (OCR1B у целого контроллера и OCR3B у половинки) на 21000 мкс и в нем вписывать 0 прямо в счетчики таймеров. Плюсы - работать будет гарантированно. Минусы - период будет больше на время обработки прерывания - это будет заметно в случае если прерывания запрещены на какое-то время.

В любом случае выкидывается расчет calc_ocr[block][8], в восьмые ячейки по старту вписывается 21 мс и всегда там лежит, это гарантирует что девятый раз OCRxy не вызовется, период таймера наступит раньше. И проверка на восьмую ячейку из process_timer тоже уходит. В периоде таймера сбрасываются счетчики и ставятся все Compare на 500 мс (а можно меньше).

Приаттачены примерные исходники обоих вариантов. Компилилось и тестилось все исключительно собственным мозгом, так что могут быть любые баги :)
Вложения
servo_lld_icr3.c
(3.94 КиБ) Скачиваний: 526
servo_lld_compare1b.c
(3.92 КиБ) Скачиваний: 528
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение blindman » 08 апр 2010, 14:27

Что-то как-то сложно все. Надо оставить все как есть, только в одном из обработчиков прерываний добавить генерацию импульса сброса в момент, когда счетчик перешел из 9 в 0. Для этого обработчика чуть скорректировать начальное значение OCRxx чтобы этот обработчик срабатывал позже других, когда все счетчики уже гарантированно находятся в состоянии 0. Тогда импульс сброса не будет портить импульсы на выходах.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение boez » 08 апр 2010, 14:50

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

А переход из 9 в 0 в существующей версии не годится для сброса - он же плавающий по времени, он идет в начале "остаточного" интервала - может быть у одного счетчика через 8*0.5=4 мс от начала, а у другого через 8*2.5=20 мс. Жестко можно привязать только конец остаточного интервала - а в нем уже нужен переход 0-1, а не 9-0. Вот для этого я и добавил кусочек в 500 мкс после окончания остаточного интервала.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Контроллер с портом ДД и 16 сервопортами на основе M128-

Сообщение =DeaD= » 18 июл 2012, 19:00

Схема версии с энкодерами
Вложения
OR-AVR-M128-DS-v2e.pdf
(135.29 КиБ) Скачиваний: 0
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.

Вернуться в Разработка модулей

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

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