Шлюз-контроллер GATE-A8D8M2 — различия между версиями
=DeaD= (обсуждение | вклад) (→Принципиальная схема и печатная плата) |
Setar (обсуждение | вклад) |
||
(не показана 41 промежуточная версия 3 участников) | |||
Строка 1: | Строка 1: | ||
+ | [[Category:Проекты компонентов|Проекты компонентов]] | ||
+ | '''===========================================================================================================''' | ||
+ | |||
+ | '''ВНИМАНИЕ!!! Проект больше не развивается и не поддерживается, весь функционал переведен в проект [[Open Robotics]]!''' | ||
+ | |||
+ | '''===========================================================================================================''' | ||
+ | |||
== Шлюз-контроллер GATE-A8D8M2 версии 0.9 - Применение == | == Шлюз-контроллер GATE-A8D8M2 версии 0.9 - Применение == | ||
Строка 4: | Строка 11: | ||
=== Назначение === | === Назначение === | ||
− | Взаимодействие ПК с низкоуровневыми устройствами (двигателями постоянного тока, модельными сервоприводами, ИК-дальномерами, бамперами, сонарами, компасом и т.п.). Подключение шлюз-контроллера к ПК выполняется через стандартный последовательный COM-порт (скорость 9600Кбит). | + | Взаимодействие ПК\Ноутбука\КПК с низкоуровневыми устройствами (двигателями постоянного тока, модельными сервоприводами, ИК-дальномерами, бамперами, сонарами, компасом и т.п.). Подключение шлюз-контроллера к ПК выполняется через стандартный последовательный COM-порт (скорость 9600Кбит). Исторически этот модуль является развитием модуля [[Шлюз-контроллер GATE-A8D16]] и следствием смены приоритетов разработчика на компактных роботов. Разумеется допустимо автономное использование контроллера без какой-либо связи с ПК, в этом случае непосредственно программируем его через стандартные средства разработки и прошивки МК. Модуль изначально разрабатывался для использовании в архитектуре [[Open Robotics]]. |
+ | |||
+ | === Основные параметры === | ||
+ | * Габариты: 64х64мм | ||
+ | * МК: ATMega16/32/644 | ||
=== Возможности === | === Возможности === | ||
Строка 11: | Строка 22: | ||
* 2 выхода для управления двигателями с обратной связью по сдвоенным энкодерам; | * 2 выхода для управления двигателями с обратной связью по сдвоенным энкодерам; | ||
* i2c шина (взаимодействие с любыми i2c устройствами с ПК); | * i2c шина (взаимодействие с любыми i2c устройствами с ПК); | ||
+ | |||
+ | === Распиновка разъемов === | ||
+ | * Программатор - стандартный IDC10 описанный в AVR910; | ||
+ | * i2c шина - 4-пиновый стандартный Devantech (GND,SCL,SDA,VCC); | ||
+ | * uart - 4-пиновый разъем RX (на МК), TX (из МК), GND, VCC; | ||
+ | * enc-1, enc-2 - 4-пиновые разъемы для энкодера (GND, VCC, EN1, EN2); | ||
=== Формат обмена данными === | === Формат обмена данными === | ||
− | При обмене данными ПК и шлюз-контроллера ПК считается управляющим, а шлюз-контроллер управляемым устройством. Единственное сообщение отсылаемое по инициативе шлюз-контроллера - сообщение "Ready!\n" о готовности выполнять команды при включении, все остальные сообщения шлюз-контроллера являются ответами на команды ПК. | + | При обмене данными ПК и шлюз-контроллера ПК считается управляющим, а шлюз-контроллер управляемым устройством. Единственное сообщение отсылаемое по инициативе шлюз-контроллера - сообщение <code>"Ready!\n"</code> о готовности выполнять команды при включении, все остальные сообщения шлюз-контроллера являются ответами на команды ПК. |
− | Команды, отдаваемые ПК все имеют одну и ту же форму | + | Команды, отдаваемые ПК все имеют одну и ту же форму <code>'''Q'''{AA}{RR}[{WW}*]</code>, в которой '''{AA}''' - адрес, '''{RR}''' - сколько байт хотим получить обратно, '''{WW}*''' - отсылаемые нами байты. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Ответ приходит в формате '''R'''[{EE}*], где '''{EE}*''' - байты ответа, которые мы запрашивали. В случае ошибки возвращается '''X'''{EE}{Description}, где '''{EE}''' - код ошибки, а '''{Description}''' - её текстовое описание. | |
− | ww - байты которые нужно передать устройству | + | Подробнее использование этой универсальной команды расписано ниже: |
+ | {| class="standard" | ||
+ | ! Команда | ||
+ | ! Формат | ||
+ | ! Входные параметры | ||
+ | |- | ||
+ | | Отправить по i2c несколько байт и получить несколько байт в ответ | ||
+ | | <code>'''Q'''aarr{w}</code> | ||
+ | | | ||
+ | * '''aa''' - адрес 00h..7Fh устройства на шине i2c | ||
+ | * '''rr''' - сколько байт получить от устройства | ||
+ | * '''ww''' - байты которые нужно передать устройству | ||
|- | |- | ||
− | |Установить режим работы порта ввода-вывода | + | | Установить режим работы порта ввода-вывода |
− | | | + | | <code>'''QFF00'''ppmm</code> |
− | |pp - номер порта 00h.. | + | | |
+ | * '''pp''' - номер порта 00h..0Fh увеличенный на 20h (например, для порта 0Fh это будет 2Fh) | ||
+ | * '''mm''' - режим работы (0 - цифровой вход, 1 - цифровой выход, 2 - управление сервоприводом, 3 - аналоговый вход - последний режим будет работать только для портов в которых есть эта возможность) | ||
+ | |- | ||
+ | | Установить значение на выходе порта | ||
+ | | <code>'''QFF00'''ppvv</code> | ||
+ | | | ||
+ | * '''pp''' - номер порта 00h..0Fh | ||
+ | * '''vv''' - значение (для цифровых выходов - 0/1, для управления сервоприводом - 17h..85h | ||
+ | |- | ||
+ | | Получить значение со входа порта | ||
+ | | <code>'''QFF01'''pp</code> | ||
+ | | | ||
+ | * '''pp''' - номер порта 00h..0Fh увеличенный на 80h (например, для порта 0Ch это будет 8Ch) | ||
− | + | обратно получим 1 байт - 0/1, если цифровой вход, либо 00h..FFh - если аналоговый (00h соответствует 0V, FFh соответствует 5V), либо если тип порта - выход - получим то, что туда отправляли. | |
+ | |- | ||
+ | | Установить направление вращения двигателя | ||
+ | | <code>'''QFF00'''mmdd</code> | ||
+ | | | ||
+ | * '''mm''' - номер двигателя 00h..01h умноженный на 2 и увеличенный на 10h (например, для двигателя 1 это будет 12h) | ||
+ | * '''dd''' - направление вращения 00h - СТОП, 01h - ВПЕРЕД, 02h - НАЗАД | ||
|- | |- | ||
− | |Установить | + | | Установить скорость вращения двигателя |
− | | | + | | <code>'''QFF00'''mmss</code> |
− | | | + | | |
+ | * '''mm''' - номер двигателя 00h..01h умноженный на 2 и увеличенный на 11h (например, для двигателя 1 это будет 13h) | ||
+ | * '''ss''' - скорость от 00h до FFh, в точности соответствует скважности выдаваемого на двигатели ШИМ-сигнала. | ||
+ | |- | ||
+ | | Управление очередью команд для шасси (одновременное управление левым и правым двигателем) | ||
+ | | <code>'''QFF0014'''[ttaabbccdd]*</code> | ||
+ | | | ||
+ | * '''tt''' - время выполнения команды в 1/50 секунды | ||
+ | * '''aa''' - начальная скорость левого колеса; | ||
+ | * '''bb''' - начальная скорость правого колеса; | ||
+ | * '''cc''' - конечная скорость левого колеса; | ||
+ | * '''dd''' - конечная скорость правого колеса; | ||
− | + | Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад. | |
− | + | ||
− | + | Максимально можно отправить одновременно 7 команд (иначе переполнится буфер приёма UART - легко расширить до 15-20 команд). | |
− | |||
− | |||
− | + | Если нужно сбросить очередь команд - отправляем просто QFF0014 без команд. | |
|} | |} | ||
Строка 55: | Строка 103: | ||
* На плате не предусмотрены подтягивающие резисторы для шины i2c. Так же некритичная ошибка, в следующей версии будет исправлено. | * На плате не предусмотрены подтягивающие резисторы для шины i2c. Так же некритичная ошибка, в следующей версии будет исправлено. | ||
* Не сделана кнопка сброса. Для планируемых целей не критично, теоретически можно вывести кнопку припаяв пару проводков в соответствующие места платы, в следующей версии будет исправлено. | * Не сделана кнопка сброса. Для планируемых целей не критично, теоретически можно вывести кнопку припаяв пару проводков в соответствующие места платы, в следующей версии будет исправлено. | ||
+ | * Дырочки под диоды оказались маловаты, в следующей версии увеличим. Немного напрягающий косяк, но нас спасёт надфиль и немного терпения. | ||
+ | * Выяснил печальные подробности про драйвер двигателей L293 - на нём падение напряжения порядка 1.5В, что довольно неприятно сказывается на его рабочей температуре при хорошем потреблении тока и на том, сколько мощности не попадает на двигатели при малом напряжении питания. Хотя особо это не мешает тем задачам, которые ставились - всё работает, шасси довольно шустро гоняет даже при напряжении питания 4.8В. | ||
=== Принципиальная схема и печатная плата === | === Принципиальная схема и печатная плата === | ||
− | Доступны к скачке схема и разведенная печатная плата в формате EAGLE (включая подготовленные файлы Gerber и Excellon для производства печатной платы): | + | Доступны к скачке схема и разведенная печатная плата в формате [[Eagle|EAGLE]] (включая подготовленные файлы Gerber и Excellon для производства печатной платы): [http://www.roboforum.ru/download/file.php?id=4080 Скачать]. |
{|border=0 | {|border=0 | ||
− | |[[Изображение:Gate-A8D8M2-v0.9-scheme. | + | |[[Изображение:Gate-A8D8M2-v0.9-scheme.gif|thumb|300px|Принципиальная схема (25Кб)]] |
− | |[[Изображение:Gate-A8D8M2-v0.9-board. | + | |[[Изображение:Gate-A8D8M2-v0.9-board.gif|thumb|200px|Разводка печатной платы (70Кб)]] |
|[[Изображение:Gate-A8D8M2-v0.9-board-photo.jpg|thumb|200px|Готовая печатная плата (104Кб)]] | |[[Изображение:Gate-A8D8M2-v0.9-board-photo.jpg|thumb|200px|Готовая печатная плата (104Кб)]] | ||
− | |} | + | |} |
+ | |||
+ | === Прошивка шлюз-контроллера (актуальная версия) === | ||
+ | Файл прошивки версии 0.60 реализующий указанные выше в протоколе функции работы с двигателями, портами ввода-вывода и шлюза i2c: | ||
+ | * [http://www.roboforum.ru/download/file.php?id=4488 Прошивка v0.60]. | ||
+ | * [http://www.roboforum.ru/download/file.php?id=4489 Исходники v0.60] ([[WinAVR]]<ref>Статья в AvrFreaks Wiki: [[avrfreaks:Documentation:AVR_GCC/Winavr|Documentation:AVR_GCC/Winavr]]</ref>). | ||
− | === | + | === Старые прошивки === |
− | + | Прошивка v0.50 - только базовые функции ввода-вывода и управление двигателями по отдельности и без обратной связи: | |
+ | * [http://www.roboforum.ru/download/file.php?id=4284 Прошивка - v0.50]. | ||
+ | * [http://www.roboforum.ru/download/file.php?id=4285 Исходники - v0.50] ([[WinAVR]]<ref>Статья в AvrFreaks Wiki: [[avrfreaks:Documentation:AVR_GCC/Winavr|Documentation:AVR_GCC/Winavr]]</ref>). | ||
=== Используемые компоненты === | === Используемые компоненты === | ||
− | + | {| class="standard" | |
− | + | ! Наименование | |
− | + | ! Кол-во | |
− | + | |- | |
− | + | | Контроллер ATMega16/32/644 <ref>Документация: [http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf ATMega16], [http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ATMega32], [http://www.atmel.com/dyn/resources/prod_documents/doc2593.pdf ATMega644] </ref> в [[w:ru:DIP|DIP корпусе]] | |
− | + | | 1 | |
− | + | |- | |
− | + | | Драйвер двигателей L293D в [[w:ru:DIP|DIP корпусе]] | |
− | + | | 1 | |
− | + | |- | |
+ | | Кварц 16МГц<ref>для ATMega644 можно 20МГц</ref> | ||
+ | | 1 | ||
+ | |- | ||
+ | | Диоды шоттки 1N5817 или 1N5818 или 1N5819 | ||
+ | | 12 | ||
+ | |- | ||
+ | | ЧИП-Конденсаторы размера 1206 керамические 27пФ | ||
+ | | 2 | ||
+ | |- | ||
+ | | Конденсаторы 25V, 100мкФ | ||
+ | | 2 | ||
+ | |- | ||
+ | | ЧИП-Резисторы размера 1206 на 5.1кОм | ||
+ | | 2 | ||
+ | |- | ||
+ | | Разъемы штыревые сдвоенные, 20x2 контактов | ||
+ | | 1 | ||
+ | |- | ||
+ | | Разъемы штыревые одинарные, 34x2 контактов | ||
+ | | 1 | ||
+ | |- | ||
+ | | Разъем IDC10 | ||
+ | | 1 | ||
+ | |} | ||
+ | |||
+ | == Ссылки == | ||
+ | <references /> |
Текущая версия на 08:55, 22 сентября 2009
===========================================================================================================
ВНИМАНИЕ!!! Проект больше не развивается и не поддерживается, весь функционал переведен в проект Open Robotics!
===========================================================================================================
Содержание
Шлюз-контроллер GATE-A8D8M2 версии 0.9 - Применение
Назначение
Взаимодействие ПК\Ноутбука\КПК с низкоуровневыми устройствами (двигателями постоянного тока, модельными сервоприводами, ИК-дальномерами, бамперами, сонарами, компасом и т.п.). Подключение шлюз-контроллера к ПК выполняется через стандартный последовательный COM-порт (скорость 9600Кбит). Исторически этот модуль является развитием модуля Шлюз-контроллер GATE-A8D16 и следствием смены приоритетов разработчика на компактных роботов. Разумеется допустимо автономное использование контроллера без какой-либо связи с ПК, в этом случае непосредственно программируем его через стандартные средства разработки и прошивки МК. Модуль изначально разрабатывался для использовании в архитектуре Open Robotics.
Основные параметры
- Габариты: 64х64мм
- МК: ATMega16/32/644
Возможности
- 8 цифровых входов-выходов (доступны 3 режима работы - цифровой вход, цифровой выход, управление сервоприводом);
- 8 аналоговых входов / цифровых выходов (доступны 4 режима работы - аналоговый вход, цифровой вход, цифровой выход, управление сервоприводом);
- 2 выхода для управления двигателями с обратной связью по сдвоенным энкодерам;
- i2c шина (взаимодействие с любыми i2c устройствами с ПК);
Распиновка разъемов
- Программатор - стандартный IDC10 описанный в AVR910;
- i2c шина - 4-пиновый стандартный Devantech (GND,SCL,SDA,VCC);
- uart - 4-пиновый разъем RX (на МК), TX (из МК), GND, VCC;
- enc-1, enc-2 - 4-пиновые разъемы для энкодера (GND, VCC, EN1, EN2);
Формат обмена данными
При обмене данными ПК и шлюз-контроллера ПК считается управляющим, а шлюз-контроллер управляемым устройством. Единственное сообщение отсылаемое по инициативе шлюз-контроллера - сообщение "Ready!\n"
о готовности выполнять команды при включении, все остальные сообщения шлюз-контроллера являются ответами на команды ПК.
Команды, отдаваемые ПК все имеют одну и ту же форму Q{AA}{RR}[{WW}*]
, в которой {AA} - адрес, {RR} - сколько байт хотим получить обратно, {WW}* - отсылаемые нами байты.
Ответ приходит в формате R[{EE}*], где {EE}* - байты ответа, которые мы запрашивали. В случае ошибки возвращается X{EE}{Description}, где {EE} - код ошибки, а {Description} - её текстовое описание.
Подробнее использование этой универсальной команды расписано ниже:
Команда | Формат | Входные параметры |
---|---|---|
Отправить по i2c несколько байт и получить несколько байт в ответ | Qaarr{w}
|
|
Установить режим работы порта ввода-вывода | QFF00ppmm
|
|
Установить значение на выходе порта | QFF00ppvv
|
|
Получить значение со входа порта | QFF01pp
|
обратно получим 1 байт - 0/1, если цифровой вход, либо 00h..FFh - если аналоговый (00h соответствует 0V, FFh соответствует 5V), либо если тип порта - выход - получим то, что туда отправляли. |
Установить направление вращения двигателя | QFF00mmdd
|
|
Установить скорость вращения двигателя | QFF00mmss
|
|
Управление очередью команд для шасси (одновременное управление левым и правым двигателем) | QFF0014[ttaabbccdd]*
|
Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад. Максимально можно отправить одновременно 7 команд (иначе переполнится буфер приёма UART - легко расширить до 15-20 команд). Если нужно сбросить очередь команд - отправляем просто QFF0014 без команд. |
Шлюз-контроллер GATE-A8D8M2 версии 0.9 - Внутреннее устройство
Недостатки модуля
К основным недостаткам можно отнести:
- Допущенная ошибка при разработке печатной платы - пропущена дорожка, поэтому при пайке требуется на обратной стороне платы припаивать перемычку длиной 5мм. Абсолютно некритичная ошибка, в следующей версии будет исправлено.
- На плате не предусмотрены подтягивающие резисторы для шины i2c. Так же некритичная ошибка, в следующей версии будет исправлено.
- Не сделана кнопка сброса. Для планируемых целей не критично, теоретически можно вывести кнопку припаяв пару проводков в соответствующие места платы, в следующей версии будет исправлено.
- Дырочки под диоды оказались маловаты, в следующей версии увеличим. Немного напрягающий косяк, но нас спасёт надфиль и немного терпения.
- Выяснил печальные подробности про драйвер двигателей L293 - на нём падение напряжения порядка 1.5В, что довольно неприятно сказывается на его рабочей температуре при хорошем потреблении тока и на том, сколько мощности не попадает на двигатели при малом напряжении питания. Хотя особо это не мешает тем задачам, которые ставились - всё работает, шасси довольно шустро гоняет даже при напряжении питания 4.8В.
Принципиальная схема и печатная плата
Доступны к скачке схема и разведенная печатная плата в формате EAGLE (включая подготовленные файлы Gerber и Excellon для производства печатной платы): Скачать.
Прошивка шлюз-контроллера (актуальная версия)
Файл прошивки версии 0.60 реализующий указанные выше в протоколе функции работы с двигателями, портами ввода-вывода и шлюза i2c:
Старые прошивки
Прошивка v0.50 - только базовые функции ввода-вывода и управление двигателями по отдельности и без обратной связи:
Используемые компоненты
Наименование | Кол-во |
---|---|
Контроллер ATMega16/32/644 [3] в DIP корпусе | 1 |
Драйвер двигателей L293D в DIP корпусе | 1 |
Кварц 16МГц[4] | 1 |
Диоды шоттки 1N5817 или 1N5818 или 1N5819 | 12 |
ЧИП-Конденсаторы размера 1206 керамические 27пФ | 2 |
Конденсаторы 25V, 100мкФ | 2 |
ЧИП-Резисторы размера 1206 на 5.1кОм | 2 |
Разъемы штыревые сдвоенные, 20x2 контактов | 1 |
Разъемы штыревые одинарные, 34x2 контактов | 1 |
Разъем IDC10 | 1 |
Ссылки
- ↑ Статья в AvrFreaks Wiki: Documentation:AVR_GCC/Winavr
- ↑ Статья в AvrFreaks Wiki: Documentation:AVR_GCC/Winavr
- ↑ Документация: ATMega16, ATMega32, ATMega644
- ↑ для ATMega644 можно 20МГц