MiniBot-SerControl — различия между версиями
Vooon (обсуждение | вклад) м |
Vooon (обсуждение | вклад) |
||
| Строка 7: | Строка 7: | ||
=== Возможности === | === Возможности === | ||
* [[w:I2C|I2C]] Шина<ref name="not-impl">Пока не поддерживается.</ref> | * [[w:I2C|I2C]] Шина<ref name="not-impl">Пока не поддерживается.</ref> | ||
| − | <!-- * [[w:SPI|SPI]] Шина<ref name=" | + | <!-- * [[w:SPI|SPI]] Шина<ref name="not-impl"></ref> --> |
* Очередь команд управления моторами с [[ru:ПИД|ПИД]] регулированием по встроенным энкодерам. | * Очередь команд управления моторами с [[ru:ПИД|ПИД]] регулированием по встроенным энкодерам. | ||
* Прямое управление моторами<ref name="direct-mot">В этом режиме ПИД-регулятор отключается</ref> | * Прямое управление моторами<ref name="direct-mot">В этом режиме ПИД-регулятор отключается</ref> | ||
| − | * Опрос датчиков линии<ref name="not-impl"> | + | * Опрос датчиков линии<ref name="not-impl"></ref> |
| − | * Опрос бамперов<ref name="not-impl"> | + | * Опрос бамперов<ref name="not-impl"></ref> |
| − | * Получение RC5 посылок пультов<ref name="not-impl"> | + | * Получение RC5 посылок пультов<ref name="not-impl"></ref> |
=== Отличия === | === Отличия === | ||
| Строка 48: | Строка 48: | ||
| Отправить по i2c несколько байт и | | Отправить по i2c несколько байт и | ||
получить несколько байт в ответ | получить несколько байт в ответ | ||
| − | | <code>Q{adr}{req}({bo})+</code> | + | | <nobr><code>Q{adr}{req}({bo})+</code></nobr> |
| − | | <code>R({bi})*</code> | + | | <nobr><code>R({bi})*</code></nobr> |
| | | | ||
* '''adr''' - '''uint8''' - адрес 00h..7Fh устройства на шине i2c | * '''adr''' - '''uint8''' - адрес 00h..7Fh устройства на шине i2c | ||
| Строка 58: | Строка 58: | ||
| Установить направление | | Установить направление | ||
вращения двигателя | вращения двигателя | ||
| − | | <code>QFF00{mot}{dir}</code> | + | | <nobr><code>QFF00{mot}{dir}</code></nobr> |
| − | | <code>R</code> | + | | <nobr><code>R</code></nobr> |
| | | | ||
* '''mot''' - '''uint8''' - двигатель, 10h - ЛЕВЫЙ, 12h - ПРАВЫЙ | * '''mot''' - '''uint8''' - двигатель, 10h - ЛЕВЫЙ, 12h - ПРАВЫЙ | ||
| Строка 66: | Строка 66: | ||
| Установить скорость | | Установить скорость | ||
вращения двигателя | вращения двигателя | ||
| − | | <code>QFF00{mot}{pwm}</code> | + | | <nobr><code>QFF00{mot}{pwm}</code></nobr> |
| − | | <code>R</code> | + | | <nobr><code>R</code></nobr> |
| | | | ||
* '''mot''' - '''uint8''' - двигатель, 11h - ЛЕВЫЙ, 13h - ПРАВЫЙ | * '''mot''' - '''uint8''' - двигатель, 11h - ЛЕВЫЙ, 13h - ПРАВЫЙ | ||
| Строка 74: | Строка 74: | ||
| Управление очередью | | Управление очередью | ||
команд для шасси | команд для шасси | ||
| − | | <code>QFF0014[{tim}{ls}{rs}{lf}{rf}]*</code> | + | | <nobr><code>QFF0014[{tim}{ls}{rs}{lf}{rf}]*</code></nobr> |
| − | | <code>R</code> | + | | <nobr><code>R</code></nobr> |
| | | | ||
* '''tim''' - '''uint8''' - время выполнения команды в '''tim * 1/56''' секунды | * '''tim''' - '''uint8''' - время выполнения команды в '''tim * 1/56''' секунды | ||
| Строка 89: | Строка 89: | ||
Если нужно сбросить очередь команд - отправляем просто <code>QFF0014</code> без команд. | Если нужно сбросить очередь команд - отправляем просто <code>QFF0014</code> без команд. | ||
|- | |- | ||
| − | | Получить состояние энкодеров | + | | Получить состояние |
| − | | <code>QFF08F0</code> | + | энкодеров |
| − | | <code>R{lenc}{renc}</code> | + | | <nobr><code>QFF08F0</code></nobr> |
| + | | <nobr><code>R{lenc}{renc}</code></nobr> | ||
| | | | ||
* '''lenc''' - '''int32''' - состояние левого энкодера | * '''lenc''' - '''int32''' - состояние левого энкодера | ||
* '''renc''' - '''int32''' - состояние правого энкодера | * '''renc''' - '''int32''' - состояние правого энкодера | ||
| + | |- | ||
| + | | Получить состояние | ||
| + | датчиков линии<ref name="not-impl"></ref> | ||
| + | | <nobr><code>QFF01F1</code></nobr> | ||
| + | | <nobr><code>R{sflag}</code></nobr> | ||
| + | | | ||
| + | * '''sflag''' - '''uint8''' - состояние | ||
| + | ** Бит 4 - ЛЕВЫЙ датчик | ||
| + | ** Бит 3 - ЦЕНТРАЛЬНЫЙ датчик | ||
| + | ** Бит 0 - ПРАВЫЙ датчик | ||
|- | |- | ||
| Получить версию прошивки, | | Получить версию прошивки, | ||
уникальный идентификатор | уникальный идентификатор | ||
| − | | <code>QFF08FF</code> | + | | <nobr><code>QFF08FF</code></nobr> |
| − | | <code>R{cn}{mj}{mi}{rv}{dvid}</code> | + | | <nobr><code>R{cn}{mj}{mi}{rv}{dvid}</code></nobr> |
| | | | ||
| − | * '''cn''' - '''uint8''' - константа, | + | * '''cn''' - '''uint8''' - константа, равна ASCII 'M' |
* '''mj''' - '''uint8''' - старший номер (мажорный) | * '''mj''' - '''uint8''' - старший номер (мажорный) | ||
* '''mi''' - '''uint8''' - младший номер (минорный) | * '''mi''' - '''uint8''' - младший номер (минорный) | ||
Версия 06:32, 3 октября 2008
MiniBot SerControl
Это порт микропрограммы GATE-A8D8M2 на аппаратную платформу МиниБота. Формат обмена и базовые комманды совпадают.
Возможности
- I2C Шина[1]
- Очередь команд управления моторами с регулированием по встроенным энкодерам.
- Прямое управление моторами[2]
- Опрос датчиков линии[1]
- Опрос бамперов[1]
- Получение RC5 посылок пультов[1]
Отличия
- Отличаются коды/описания ошибок
- Внешний кварц на 14,7456 МГц (необходимо припаять)
- Скорость обмена по USART 115200 бод
- Единица времени не 1/50, а 1/56 секунды
- В одном пакете управления двигателем можно передать 12 комманд (13 если не отправлять
'\n') - Очередь комманд хранит до 20-и комманд (можно расширить изменив MOT_MAX_QSIZE)
- В случае, если пришедшие комманды не влезли в очередь будет сообщено начиная с какой комманды не влезло. (
X10MotQueueOvf %d) - Если номер ошибки больше X09, то вернется два сообщения об ошибке:
X{no}{descr}
X09ReqProc
Комманды
Комманды передаются в текстовом режиме.
Формат посылки: Q{adr}{req}[{by}]*
Каждый байт передаетя в шеснадцатеричной записи.
Если в ответе возвращается параметр больше чем один байт, то сначала идут младшие байты (Little Endian)
Принимаемые и возвращаемые типы:
- uint8 - беззнаковне целое 8 бит
00h..FFh - int8 - знаковое целое 8 бит
-128(80h)..0(0h)..127(7Fh) - uint16 - беззнаковое целое 16 бит
0000h..FFFFh - int32 - знаковое целое 32 бита
80000000h..0h..7FFFFFFFh
| Команда | Запрос | Ответ | Параметры |
|---|---|---|---|
| Отправить по i2c несколько байт и
получить несколько байт в ответ |
<nobr>Q{adr}{req}({bo})+</nobr>
|
<nobr>R({bi})*</nobr>
|
|
| Установить направление
вращения двигателя |
<nobr>QFF00{mot}{dir}</nobr>
|
<nobr>R</nobr>
|
|
| Установить скорость
вращения двигателя |
<nobr>QFF00{mot}{pwm}</nobr>
|
<nobr>R</nobr>
|
|
| Управление очередью
команд для шасси |
<nobr>QFF0014[{tim}{ls}{rs}{lf}{rf}]*</nobr>
|
<nobr>R</nobr>
|
Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад. Максимально можно отправить одновременно 12 команд. Если нужно сбросить очередь команд - отправляем просто |
| Получить состояние
энкодеров |
<nobr>QFF08F0</nobr>
|
<nobr>R{lenc}{renc}</nobr>
|
|
| Получить состояние
датчиков линии[1] |
<nobr>QFF01F1</nobr>
|
<nobr>R{sflag}</nobr>
|
|
| Получить версию прошивки,
уникальный идентификатор |
<nobr>QFF08FF</nobr>
|
<nobr>R{cn}{mj}{mi}{rv}{dvid}</nobr>
|
|