MiniBot-SerControl — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
м
Строка 7: Строка 7:
 
=== Возможности ===
 
=== Возможности ===
 
* [[w:I2C|I2C]] Шина<ref name="not-impl">Пока не поддерживается.</ref>
 
* [[w:I2C|I2C]] Шина<ref name="not-impl">Пока не поддерживается.</ref>
<!-- * [[w:SPI|SPI]] Шина<ref name="spi">Пока не поддерживается.</ref> -->
+
<!-- * [[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>
+
* Опрос датчиков линии<ref name="not-impl"></ref>
* Опрос бамперов<ref name="not-impl">Пока не поддерживается.</ref>
+
* Опрос бамперов<ref name="not-impl"></ref>
* Получение RC5 посылок пультов<ref name="not-impl">Пока не поддерживается.</ref>
+
* Получение 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''' - константа, равена ASCII 'M'
+
* '''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>
  • adr - uint8 - адрес 00h..7Fh устройства на шине i2c
  • req - uint8 - сколько байт получить от устройства
  • bo - uint8 - байты которые нужно передать устройству
  • bi - uint8 - полученные байты (в ответе будет req байт)
Установить направление

вращения двигателя

<nobr>QFF00{mot}{dir}</nobr> <nobr>R</nobr>
  • mot - uint8 - двигатель, 10h - ЛЕВЫЙ, 12h - ПРАВЫЙ
  • dir - uint8 - направление вращения, 01h - ВПЕРЕД, 02h - НАЗАД, СТОП не поддерживается.
Установить скорость

вращения двигателя

<nobr>QFF00{mot}{pwm}</nobr> <nobr>R</nobr>
  • mot - uint8 - двигатель, 11h - ЛЕВЫЙ, 13h - ПРАВЫЙ
  • pwm - uint8 - скорость, в точности соответствует скважности выдаваемого на двигатели ШИМ-сигнала.
Управление очередью

команд для шасси

<nobr>QFF0014[{tim}{ls}{rs}{lf}{rf}]*</nobr> <nobr>R</nobr>
  • tim - uint8 - время выполнения команды в tim * 1/56 секунды
  • ls - int8 - начальная скорость левого колеса;
  • rs - int8 - начальная скорость правого колеса;
  • lf - int8 - конечная скорость левого колеса;
  • rf - int8 - конечная скорость правого колеса;

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

Максимально можно отправить одновременно 12 команд.

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

Получить состояние

энкодеров

<nobr>QFF08F0</nobr> <nobr>R{lenc}{renc}</nobr>
  • lenc - int32 - состояние левого энкодера
  • renc - int32 - состояние правого энкодера
Получить состояние

датчиков линии[1]

<nobr>QFF01F1</nobr> <nobr>R{sflag}</nobr>
  • sflag - uint8 - состояние
    • Бит 4 - ЛЕВЫЙ датчик
    • Бит 3 - ЦЕНТРАЛЬНЫЙ датчик
    • Бит 0 - ПРАВЫЙ датчик
Получить версию прошивки,

уникальный идентификатор

<nobr>QFF08FF</nobr> <nobr>R{cn}{mj}{mi}{rv}{dvid}</nobr>
  • cn - uint8 - константа, равна ASCII 'M'
  • mj - uint8 - старший номер (мажорный)
  • mi - uint8 - младший номер (минорный)
  • rv - uint8 - ревизия
  • dvid - uint16 - Уникальный идентификатор

См. также

Сноски

  1. 1 2 3 4 5 Пока не поддерживается.
  2. В этом режиме ПИД-регулятор отключается