ORFA Servo driver — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Драйвер сервоприводов)
м
 
(не показано 20 промежуточных версий 4 участников)
Строка 1: Строка 1:
 +
[[Категория:Open Robotics]]
 +
{{устаревшая статья}} <!-- OR-AVR-M32-D -->
 +
 +
== Коротко об управлении сервоприводами ==
 +
Модельные (RC) [[серво]]приводы управляются прямоугольными сигналами частотой 50Гц и скважность (временем, которое на линии высокое напряжение) от 1 до 2мс. Поэтому не зная характеристик конкретного подключенного сервопривода часто приходится говорить о положении сервопривода, указывая лишь скважность управляющего сигнала. Например, 1200мкс, это означает что если сервопривод поворачивается на угол <math>\pm 75^\circ</math> при управляющих сигналах 1мс и 2мс соответственно, тогда 1200мкс соответствует примерно <math>-75^\circ + \frac{2 \cdot 75^\circ (1200-1000)}{2000-1000} = -45^\circ</math>.
 +
 
== Драйвер сервоприводов ==
 
== Драйвер сервоприводов ==
 
Драйвер позволяющий управлять сервоприводами, подключенными к портам RoboGPIO или RoboServo, в зависимости от контроллера.
 
Драйвер позволяющий управлять сервоприводами, подключенными к портам RoboGPIO или RoboServo, в зависимости от контроллера.
  
В этом драйвере всегда 2 регистра. Далее будем считать, что начальный регистр этого драйвера - XX, второй регистр YY.
+
В этом драйвере всегда 2 регистра. Далее будем считать, что начальный регистр этого драйвера — XX, второй регистр YY.
 +
 
 +
Количество управляемых сервоприводов — 16 для драйвера с UID=0x31, 32 для драйвера с UID=0x30.
  
Количество управляемых сервоприводов - 16 для драйвера с UID=0x31, 32 для драйвера с UID=0x30.
+
Для OR-AVR-M32-D установлено следующеее соответствие между номерами серво и портами ввода-вывода:
 +
 
 +
{| class="standard"
 +
!Номер серво
 +
!Порт вывода
 +
|-
 +
|0 
 +
|PORTA.0
 +
|-
 +
|1 
 +
|PORTA.1
 +
|-
 +
|2 
 +
|PORTA.2
 +
|-
 +
|3 
 +
|PORTA.3
 +
|-
 +
|4 
 +
|PORTA.4
 +
|-
 +
|5 
 +
|PORTA.5
 +
|-
 +
|6 
 +
|PORTA.6
 +
|-
 +
|7 
 +
|PORTA.7
 +
|-
 +
|8 
 +
|PORTC.7
 +
|-
 +
|9 
 +
|PORTC.6
 +
|-
 +
|10
 +
|PORTC.5
 +
|-
 +
|11
 +
|PORTC.4
 +
|-
 +
|12
 +
|PORTB.3
 +
|-
 +
|13
 +
|PORTB.2
 +
|-
 +
|14
 +
|PORTD.5
 +
|-
 +
|15
 +
|PORTD.4
 +
|}
  
 
Типы запросов (регистр, данные…):
 
Типы запросов (регистр, данные…):
# <code>XX M1 M2</code> с помощью побайтовой маски M1 M2 установить, какие сервоприводы включить, а какие выключить. (для драйвера с UID=0x31, а для драйвера с UID=0x30 все порты сервоприводов всегда включены).
+
# <code>XX M1 M2</code> — с помощью побайтовой маски M1 M2 установить, какие сервоприводы включить, а какие выключить. (для драйвера OR-AVR-M32-D (с UID=0x31), а для драйвера OR-AVR-M128-S (с UID=0x30) все порты сервоприводов всегда включены).
# <code>YY [{aa} {bb} {cc}]*</code> установить положения сервоприводов (сервопривод {aa} в положение 0x{cc}{bb}).
+
# <code>YY [{aa} {bb} {cc}]*</code> — установить положения сервоприводов (сервопривод {aa} в положение 0x{bb}{cc}).
  
==Примеры==
+
== Примеры ==
 +
'''ВНИМАНИЕ! Все команды должны оканчиваться переводом строки, который означает окончание команды и передачу её на исполнение!'''
  
===Определяем сколько драйверов в устройстве===
+
=== Включаем 2й и 3й порты OR-AVR-M32-D для управления сервоприводами ===
  
 
Запрос:
 
Запрос:
 
  L40
 
  L40
  S40 00 00 S41 01 P
+
  S40 10 0C 00 P
  
 
Ответ:
 
Ответ:
 
  L40
 
  L40
  SWAASR06P
+
  SWAAAP
  
 
Разбор:
 
Разбор:
* Первый запрос - L40 - установить адрес локального устройства в 0x40. Ответ - L40 - адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
+
* Первый запрос — L40 — установить адрес локального устройства в 0x40. Ответ — L40 — адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
* Второй запрос - S40 00 00 - отправим в устройство 0x40 номер регистра 00 и тип запроса 00 - получить количество драйверов, S41 01 - получить ответ 1 байт, P - конец запроса. Ответ: SW - начали запись в устройство, AA - подтверждения записи 2 байт в устройство, SR - начали получать ответ от устройства, 06 - получили 1 байт ответа (количество драйверов), P - конец ответа.
+
* Второй запрос — S40 10 0C 00 P — отправим в устройство 0x40 номер регистра 10 и маску 0C 00 — установить как выходы для управления сервоприводами порты 2 и 3, P — конец запроса. Ответ: SW — начали запись в устройство, AAA — подтверждения записи 3 байт в устройство, P — конец ответа.
  
===Определяем информацию об одном из драйверов===
+
=== Установим положение 2-го сервопривода OR-AVR-M32-D в 1200мс ===
  
 +
Запрос:
 +
L40
 +
S40 11 02 04B0 P
 +
 +
Ответ:
 +
L40
 +
SWAAAP
 +
 +
Разбор:
 +
* Первый запрос — L40 — установить адрес локального устройства в 0x40. Ответ — L40 — адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
 +
* Второй запрос — S40 11 02 04 B0 P — отправим в устройство 0x40 номер регистра 17(0x11) — установить положение сервоприводов и номер + положение сервопривода 02 04B0 (сервопривод 0x02, положение 0x04B0 = 1200мс), P — конец запроса. Ответ: SW — начали запись в устройство, AAA — подтверждения записи 3 байт в устройство, P — конец ответа.
 +
 +
=== Установим положение 2-го сервопривода OR-AVR-M128-S в 1200мс ===
  
 
Запрос:
 
Запрос:
 
  L40
 
  L40
  S40 00 02 S41 06 P
+
  S40 0D 02 04B0 P
  
 
Ответ:
 
Ответ:
 
  L40
 
  L40
  SWAASR003101001002P
+
  SWAAAP
  
Разбор:
+
Разбор: Аналогично предыдущему примеру, просто стартовый регистр драйвера сервоприводов в этом контроллере 0x0C.
* Первый запрос - L40 - установить адрес локального устройства в 0x40. Ответ - L40 - адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
 
* Второй запрос - S40 00 02 - отправим в устройство 0x40 номер регистра 00 и тип запроса 02 - получить информацию о драйвере 0x02, S41 01 - получить ответ 6 байт, P - конец запроса. Ответ: SW - начали запись в устройство, AA - подтверждения записи 2 байт в устройство, SR - начали получать ответ от устройства, 003101001002 - получили 6 байт ответа (информация о драйвере - 0x0031 - идентификатор тип драйвера, 0x01.0x00 - версия драйвера, 0x10 - номер первого регистра драйвера, 0x02 - количество регистров драйвера), P - конец ответа.
 

Текущая версия на 12:12, 5 февраля 2010


Коротко об управлении сервоприводами

Модельные (RC) сервоприводы управляются прямоугольными сигналами частотой 50Гц и скважность (временем, которое на линии высокое напряжение) от 1 до 2мс. Поэтому не зная характеристик конкретного подключенного сервопривода часто приходится говорить о положении сервопривода, указывая лишь скважность управляющего сигнала. Например, 1200мкс, это означает что если сервопривод поворачивается на угол <math>\pm 75^\circ</math> при управляющих сигналах 1мс и 2мс соответственно, тогда 1200мкс соответствует примерно <math>-75^\circ + \frac{2 \cdot 75^\circ (1200-1000)}{2000-1000} = -45^\circ</math>.

Драйвер сервоприводов

Драйвер позволяющий управлять сервоприводами, подключенными к портам RoboGPIO или RoboServo, в зависимости от контроллера.

В этом драйвере всегда 2 регистра. Далее будем считать, что начальный регистр этого драйвера — XX, второй регистр YY.

Количество управляемых сервоприводов — 16 для драйвера с UID=0x31, 32 для драйвера с UID=0x30.

Для OR-AVR-M32-D установлено следующеее соответствие между номерами серво и портами ввода-вывода:

Номер серво Порт вывода
0 PORTA.0
1 PORTA.1
2 PORTA.2
3 PORTA.3
4 PORTA.4
5 PORTA.5
6 PORTA.6
7 PORTA.7
8 PORTC.7
9 PORTC.6
10 PORTC.5
11 PORTC.4
12 PORTB.3
13 PORTB.2
14 PORTD.5
15 PORTD.4

Типы запросов (регистр, данные…):

  1. XX M1 M2 — с помощью побайтовой маски M1 M2 установить, какие сервоприводы включить, а какие выключить. (для драйвера OR-AVR-M32-D (с UID=0x31), а для драйвера OR-AVR-M128-S (с UID=0x30) все порты сервоприводов всегда включены).
  2. YY [{aa} {bb} {cc}]* — установить положения сервоприводов (сервопривод {aa} в положение 0x{bb}{cc}).

Примеры

ВНИМАНИЕ! Все команды должны оканчиваться переводом строки, который означает окончание команды и передачу её на исполнение!

Включаем 2й и 3й порты OR-AVR-M32-D для управления сервоприводами

Запрос:

L40
S40 10 0C 00 P

Ответ:

L40
SWAAAP

Разбор:

  • Первый запрос — L40 — установить адрес локального устройства в 0x40. Ответ — L40 — адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
  • Второй запрос — S40 10 0C 00 P — отправим в устройство 0x40 номер регистра 10 и маску 0C 00 — установить как выходы для управления сервоприводами порты 2 и 3, P — конец запроса. Ответ: SW — начали запись в устройство, AAA — подтверждения записи 3 байт в устройство, P — конец ответа.

Установим положение 2-го сервопривода OR-AVR-M32-D в 1200мс

Запрос:

L40
S40 11 02 04B0 P

Ответ:

L40
SWAAAP

Разбор:

  • Первый запрос — L40 — установить адрес локального устройства в 0x40. Ответ — L40 — адрес установлен. (Можно не делать, если вы уже установили адрес локального устройства ранее).
  • Второй запрос — S40 11 02 04 B0 P — отправим в устройство 0x40 номер регистра 17(0x11) — установить положение сервоприводов и номер + положение сервопривода 02 04B0 (сервопривод 0x02, положение 0x04B0 = 1200мс), P — конец запроса. Ответ: SW — начали запись в устройство, AAA — подтверждения записи 3 байт в устройство, P — конец ответа.

Установим положение 2-го сервопривода OR-AVR-M128-S в 1200мс

Запрос:

L40
S40 0D 02 04B0 P

Ответ:

L40
SWAAAP

Разбор: Аналогично предыдущему примеру, просто стартовый регистр драйвера сервоприводов в этом контроллере 0x0C.