Контроллер RealRobot

Материал из roboforum.ru Wiki
Версия от 08:54, 22 сентября 2009; Setar (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск


Контроллер RealRobot версии 1.0 - Применение

Внешний вид контроллера

Назначение

Взаимодействие через радиоканал Bluetooth ПК\Ноутбука\КПК\Сотика с низкоуровневыми устройствами (двигателями постоянного тока, модельными сервоприводами, ИК-дальномерами, бамперами, сонарами, компасом и т.п.). Подключение контроллера к ПК выполняется через Bluetooth-порт, для этого потребуется Bluetooth-USB-Dongle (скорость обмена при этом 115200Кбит). Разумеется допустимо автономное использование контроллера без какой-либо связи с ПК, в этом случае непосредственно программируем его через стандартные средства разработки и прошивки МК. Модуль изначально разрабатывался для использовании в роботе RealRobot, однако полностью соответствует архитектуре Open Robotics.

Основные параметры

  • Габариты: 65х65мм
  • МК: ATMega128

Возможности

  • 8 цифровых входов-выходов (доступны 3 режима работы - цифровой вход, цифровой выход, управление сервоприводом);
  • 8 аналоговых входов / цифровых выходов (доступны 4 режима работы - аналоговый вход, цифровой вход, цифровой выход, управление сервоприводом);
  • 4 выхода для управления двигателями;
  • 2 входа от одинарных энкодеров для обратной связи с двигателями;
  • i2c шина (взаимодействие с любыми i2c устройствами с ПК);

Распиновка и расположение разъемов

Расположение разъемов
  • Программатор - стандартный IDC6 описанный в AVR910;
  • i2c шина - 2-пиновый (SCL,SDA);
  • enc-1, enc-2 - 4-пиновые разъемы для энкодера (?);

Формат обмена данными

При обмене данными ПК и контроллера, ПК считается управляющим, а контроллер управляемым устройством. Единственное сообщение отсылаемое по инициативе контроллера - сообщение "Ready!\n" о готовности выполнять команды при включении, все остальные сообщения контроллера являются ответами на команды ПК.

Команды, отдаваемые ПК все имеют одну и ту же форму Q{AA}{RR}[{WW}*], в которой {AA} - адрес, {RR} - сколько байт хотим получить обратно, {WW}* - отсылаемые нами байты.

Ответ приходит в формате R[{EE}*], где {EE}* - байты ответа, которые мы запрашивали. В случае ошибки возвращается X{EE}{Description}, где {EE} - код ошибки, а {Description} - её текстовое описание.

Подробнее использование этой универсальной команды расписано ниже:

Команда Формат Входные параметры
Отправить по i2c несколько байт и получить несколько байт в ответ Qaarr{w}
  • aa - адрес 00h..7Fh устройства на шине i2c
  • rr - сколько байт получить от устройства
  • ww - байты которые нужно передать устройству
Установить режим работы порта ввода-вывода QFF00ppmm
  • pp - номер порта 00h..0Fh увеличенный на 20h (например, для порта 0Fh это будет 2Fh, порты 00h..07h - аналогов-цифровые, 08h..0Fh - только цифровые)
  • mm - режим работы (0 - цифровой вход, 1 - цифровой выход, 2 - управление сервоприводом, 3 - аналоговый вход - последний режим будет работать только для портов в которых есть эта возможность)
Установить значение на выходе порта QFF00ppvv
  • pp - номер порта 00h..0Fh
  • vv - значение (для цифровых выходов - 0/1, для управления сервоприводом - 17h..85h
Получить значение со входа порта QFF01pp
  • pp - номер порта 00h..0Fh увеличенный на 80h (например, для порта 0Ch это будет 8Ch)

обратно получим 1 байт - 0/1, если цифровой вход, либо 00h..FFh - если аналоговый (00h соответствует 0V, FFh соответствует 5V), либо если тип порта - выход - получим то, что туда отправляли.

Установить направление вращения двигателя QFF00mmdd
  • mm - номер двигателя 00h..01h умноженный на 2 и увеличенный на 10h (например, для двигателя 1 это будет 12h)
  • dd - направление вращения 00h - СТОП, 01h - ВПЕРЕД, 02h - НАЗАД
Установить скорость вращения двигателя QFF00mmss
  • mm - номер двигателя 00h..01h умноженный на 2 и увеличенный на 11h (например, для двигателя 1 это будет 13h)
  • ss - скорость от 00h до FFh, в точности соответствует скважности выдаваемого на двигатели ШИМ-сигнала.
Управление очередью команд для шасси (одновременное управление левым и правым двигателем) QFF0014[ttaabbccdd]*
  • tt - время выполнения команды в 1/50 секунды
  • aa - начальная скорость левого колеса;
  • bb - начальная скорость правого колеса;
  • cc - конечная скорость левого колеса;
  • dd - конечная скорость правого колеса;

Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад.

Максимально можно отправить одновременно 7 команд (иначе переполнится буфер приёма UART - легко расширить до 15-20 команд).

Если нужно сбросить очередь команд - отправляем просто QFF0014 без команд.

Расположение разъемов на модуле

Прошивка контроллера (актуальная версия)

Файл прошивки версии 0.60 реализующий указанные выше в протоколе функции работы с двигателями, портами ввода-вывода и шлюза i2c:

  • - будет выложена Прошивка v0.60.
  • - будут выложены Исходники v0.60 (WinAVR[1]).

Ссылки

  1. Статья в AvrFreaks Wiki: Documentation:AVR_GCC/Winavr