Перейти к содержанию

Глава 3. Системы управления образовательного комплекта

Контроллер OpenCM9.04

Программируемый контроллер OpenCM9.04 (рис. 3.1), входящий в состав образовательного комплекта «СТЕМ Мастерская», представляет собой контроллер с открытым исходным кодом, ориентированный на применение совместно с компонентами и программными продуктами, предлагаемыми компанией ROBOTIS. По своей структуре контроллер OpenCM9.04 является Arduino-подобной платой, но предоставляет более широкие возможности по сравнению со стандартной платформой Arduino. Контроллер OpenCM9.04 позволяет подключать к себе не только фирменные компоненты ROBOTIS, но также датчики и компоненты сторонних производителей – т.е., по сути, может быть использован как плата сбора данных. В то же время набор стандартных интерфейсов контроллера может быть применим для управления и взаимодействия с различными внешними устройствами, например, модулями беспроводной связи, сложными комплексными устройствами и т.д.

Рис. 3.1. Внешний вид контроллера OpenCM9.04

Основой этой аппаратной платформы является 32х битный микроконтроллер ARM Cortex-M3. Схема питания организована так, что напряжение может быть стабилизировано на двух уровнях – 5В и 3,3В. Таким образом, микроконтроллер питается от 3,3В, а 5В используется в TTL шине для управления сервоприводами. Также оба варианта питания доступны для использования при питании внешних устройств. Для подключения к ПК и загрузки управляющей программы используется micro-USB порт стандарта USB2.0.

Технические характеристики контроллера OpenCM9.04

Микроконтроллер STM32F103CB (ARM Cortex-M3)
Рабочее напряжение 5В – 16В (USB 5В, DYNAMIXEL 7~12В)
Рекомендованное напряжение 5 - 7,4 В
Внешние порты ввода-вывода 26
Таймеры 8
Аналоговый входы 10 (12-битный АЦП)
Flash память 128 Кбайт
SRAM память 20 Кбайт
Тактовая частота 72 МГц
USB порт 1 (2.0)
CAN 1
USART 3
SPI 2
I2C(TWI) 2
Отладочные порты JTAG & SWD
TTL порт XL-типа (3 пина) 4 (XL)
Внешние порты для датчиков (5 пинов) 4 (Совместимы с датчиками ROBOTIS)
Размеры 27 х 66,5 мм
Вес 13 г

Устройство контроллера OpenCM9.04

Рис. 3.2. Устройство контроллера OpenCM9.04

Устройство контроллера OpenCM9.04 приведено на рисунке 3.2. На нем изображены:

  1. Переключатель питания. Переключатель используется для включения внешнего питания платы и питания портов. При подключении к USB порту ПК, контроллер OpenCM всегда запитан.
  2. Порты для подключения двух внешних LB-041 литий-ионных батарей.
  3. 3х пиновый TTL порт. Используется для последовательного подключения сервоприводов, использующих 3х пиновый кабель.
  4. Коммуникационный порт. Используется для организации как проводного, так и беспроводного соединения с применением периферийных устройств, таких как: ZIG-110A, BT-210, BT-410, LN-101 и т.д. Программно данный порт является Serial2 (USART2). Распиновка коммуникационного порта приведена на рисунке 3.3.

Схема организации связи с пультом RC-100B через коммуникационный порт приведена на рисунке 3.4

Рис. 3.3. Распиновка коммуникационного порта

Рис. 3.4. Схема организации связи с пультом RC-100B через коммуникационный порт

  1. Программируемая кнопка. Данная кнопка может быть использована или запрограммирована пользователем на определенное действие. В программном коде обращение к ней выглядит как обращение к 23 пину или к переменной BOARD_BUTTON_PIN. Инициализация в функции setup() выглядит как pinMode(23, INPUT_PULLDOWN). Также кнопка используется в случае, когда управляющая программа не загружается в OpenCM. В случае если прошивка не загружается в плату, необходимо отключить плату от ПК, зажать кнопку и подключить плату к ПК. Индикатор статуса загорится зеленым, и загрузка программы станет возможной.
  2. Перемычка для изменения опорного напряжения АЦП. Используется для изменения опорного напряжения АЦП между 3,3В и 5В. По умолчанию, установлено положение в 3,3В (рис. 3.5).

Рис. 3.5. Схема организации опорного напряжения на контроллере OpenCM9.04

  1. Порт micro-USB. Используется для загрузки управляющих программ в OpenCM9.04, а также для коммуникации с другими устройствами посредством USB, в то же время питаясь напряжением в 5В. При подключении внешнего источника питания (батарей) 5В, питание из USB автоматически отключается и плата начинает питаться только от батарей. Если при питании возникает повышенное токопотребление, внутренний предохранитель отключает питание USB (5В) для защиты компьютера пользователя от повреждений.
  2. Индикатор состояния. Индикатор может быть использован для отладки управляющих OpenCM9.04 программ. Индикатор загорается как pin 14 или переменная BOARD_LED_PIN, когда находится в состоянии HIGH, и индикатор выключается, когда состояние меняется на LOW. Возможно управление с использованием PWM сигнала.
  3. Кнопка перезагрузки. Используется для перезагрузки микроконтроллера.
  4. 4х пиновый JTAG/SWD разъем. Используется для подключения внешнего программатора или отладчика. Данный порт используется продвинутыми пользователями в своих собственных разработках.
  5. 5-ти пиновый порт для подключения 5-ти пиновых устройств, производимых компанией ROBOTIS. Схемы расположения и инициализации соединения по портам представлены на рисунке 3.6 и в таблице 3.1.

Рис. 3.6. Схема расположения 5-ти пиновых портов

Тип датчика Порт 1 Порт 2 Порт 3 Порт 4
ИК датчик + Х Х +
Датчик расстояния + + + +
Гироскоп + + + +
Датчик касания + + + +
Датчик цвета Х + + Х
Датчик магнитного поля + + + +
Датчик температуры + + + +
Датчик ИК излучения + + + +
Светодиодный модуль Х + + Х

Таблица 3.1. Совместимость датчиков по портам

  1. Порты ввода-вывода. Микроконтроллер OpenCM9.04 обладает большим количеством GPIO выводов. 26 GPIO выводов (0 - 25) являются цифровыми линиями ввода-вывода и работают в диапазоне напряжения до 3,3В. Цифровые уровни имеют следующие значения: HIGH при 3,3В или LOW при 0В. Максимальная частота, с которой могут работать цифровые входы – 18 МГц, кроме выводов 22 и 23, которые работают на частоте до 2 МГц. Большинство цифровых выводов могут использоваться только с напряжением до 3,3В. При подаче на них напряжения выше 3,3В может быть поврежден сам микроконтроллер OpenCM9.04. Выводы, поддерживающие 5В, следующие: 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21. Максимально допустимый ток на цифровых выводах – 25 мА, за исключением выводов 22 и 23 – они выдерживают только ток в 3 мА. Все GPIO выводы могут находится в двух состояниях – подтянутом и отпущеном, и это состояние может быть изменено программно. Подтягивание выполняется путем программного подключения резистора номиналом 40 кОм.

Расположение GPIO выводов на плате OpenCM9.04

  • Последовательная шина (USART): 11(TX1), 12(RX1), 4(TX2), 5(RX2), 24(TX3), 25(RX3)
  • Выводы с поддержкой ШИМ (PWM): 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12, 13, 14
  • Шина SPI: 0(SS1), 1(SCK1),6(MISO1), 7(MOSI1), 18(SS2),19(SCK2), 20(MISO2), 21(MOSI2)
  • Светодиодные индикаторы (LED): 14 (переменная BOARD_ LED_PIN определена как 14)
  • Кнопка: 23 (переменная BOARD_BUTTON_PIN определена как 23)
  • Шина TWI(I2C): 24(SCL2),25(SDA2).

Рис. 3.7. Схема расположения портов ввода-вывода на OpenCM9.04

Описание контактов на плате OpenCM9.04 (рис. 3.7)

  • RST – контакт сигнала на перезагрузку микроконтроллера.
  • 5V – контакт вывода стабилизированных 5В, активен только когда к плате подключено внешнее питание. Когда плата запитана от USB, вывод не активен.
  • 3.3V – контакт вывода стабилизированных 3,3В, когда плата запитана от внешнего источника питания или от USB.
  • GND – вывод «земля».
  • A0 – контакт цифрового ввода\вывода и аналогового ввода.
  • А1 – контакт цифрового ввода\вывода и аналогового ввода. Может быть использован как 1й SCK вывод шины SPI.
  • A2 – контакт цифрового ввода/вывода и аналогового ввода. Поддерживает ШИМ (PWM).
  • A3 – контакт цифрового ввода/вывода и аналогового ввода. Поддерживает ШИМ (PWM).
  • A4 – контакт цифрового ввода/вывода и аналогового ввода. Поддерживает ШИМ (PWM). Может быть использован как TXD вывод шины USART2 (Serial2) и зеркально выведен на 4х пиновый коммуникационный порт как TX2.
  • A5 – контакт цифрового ввода/вывода и аналогового ввода. Поддерживает ШИМ (PWM). Может быть использован как RXD вывод шины USART2 (Serial2) и зеркально выведен на 4х пиновый коммуникационный порт как RX2.
  • А6 – контакт цифрового ввода/вывода и аналогового ввода. Может быть использован как 1й MISO вывод шины SPI.
  • А7 – контакт цифрового ввода/вывода и аналогового ввода. Может быть использован как 1й MOSI вывод шины SPI.
  • A8 – контакт цифрового ввода/вывода и аналогового ввода. Поддерживает ШИМ (PWM).
  • A9 – контакт цифрового ввода/вывода и аналогового ввода. Поддерживает ШИМ (PWM).
  • D10 - контакт цифрового ввода/вывода. Поддерживает ШИМ (PWM).
  • D11 - контакт цифрового ввода/вывода. Поддерживает ШИМ (PWM). Может быть использован как TX вывод шины USART1 (Serial1). Не может одновременно использоваться с шиной Dynamixel TTL.
  • D12 - контакт цифрового ввода/вывода. Поддерживает ШИМ (PWM). Может быть использован как RX вывод шины USART1 (Serial1). Не может одновременно использоваться с шиной Dynamixel TTL.
  • D13 - контакт цифрового ввода/вывода. Поддерживает ШИМ (PWM).
  • D14 - контакт цифрового ввода/вывода. Поддерживает ШИМ (PWM). Вывод подключен к светодиодному индикатору состояния. Заранее определен переменной BOARD_LED_PIN.
  • D15 - контакт цифрового ввода/вывода.
  • VCC(+) – «плюс» напряжения питания платы. Имеется 2 таких вывода. Соединен с «плюсом» разъема для подключения внешних батарей.
  • VCC(-) – «минус» напряжения питания платы. Имеется 2 таких вывода. Соединен с «минусом» разъема для подключения внешних батарей.
  • TTL – линия данных шины Dynamixel TTL. Используется для обмена данными с 3х контактными сервоприводами DYNAMIXEL.
  • D – контакт относится к шине Dynamixel TTL и используется для выбора TX и RX.
  • X – TX вывод шины Dynamixel TTL.
  • L – RX вывод шины Dynamixel TTL.
  • D16 - контакт цифрового ввода/вывода.
  • D17 - контакт цифрового ввода/вывода.
  • D18 - контакт цифрового ввода/вывода.
  • D19 – контакт цифрового ввода/вывода. Может быть использован как 2й SCK вывод шины SPI.
  • D20 – контакт цифрового ввода/вывода. Может быть использован как 2й MISO вывод шины SPI.
  • D21 – контакт цифрового ввода/вывода. Может быть использован как 2й MOSI вывод шины SPI.
  • D22 – контакт цифрового ввода/вывода. Максимальный выходной ток на выводе может достигать 3мА, а максимальная частота срабатывания – 2МГц.
  • D23 – контакт цифрового ввода/вывода. Выведен на программируемую пользователем кнопку. Если кнопку зажать при подключении питания платы, то плата перейдет режим аварийного восстановления. Максимальный выходной ток на выводе может достигать 3 мА, а максимальная частота срабатывания – 2 МГц.
  • D24 – контакт цифрового ввода/вывода. Может быть использован как SLC вывод I2C шины или как TX вывод шины USART3 (Serial3).
  • D25 – контакт цифрового ввода/вывода. Может быть использован как SDA вывод I2C шины или как RX вывод шины USART3 (Serial3).
  • 5V – контакт 5ти вольтового вывода. Перемыкатель JP2 может быть использован для подключения его к контакту AREF и изменению стандартного напряжения АЦП с 3,3В до 5В.
  • AREF – контакт, подключенный к выводу опорного напряжения микроконтроллера. Используется для изменения величины опорного напряжения перемычкой JP2.

Питание контроллера OpenCM9.04

Платформа OpenCM9.04 может быть запитана тремя разными способами (рис. 3.8 - 3.11):

  1. Через порты для подключения литий-ионных батарей LBS-40.
  2. С помощью подключения внешнего источника питания к контактам «+» и «-».
  3. С помощью USB кабеля.

Рис. 3.8. Схема расположения портов для подачи питания на контроллер OpenCM9.04

Рис. 3.9. Схема питания контроллера OpenCM9.04 и сервопривода с подключением литий-ионных батарей

Если контроллер OpenCM9.04 используется с сервоприводами мощнее, чем DYNAMIXEL XL-320 серии, то рекомендуется подключать внешнее питание от аккумулятора (рис. 3.10).

Рис. 3.10. Схема питания контроллера OpenCM9.04 и мощного сервопривода c подключением внешнего аккумулятора

Рис. 3.11. Схема подключения внешнего питания к контроллеру OpenCM9.04

Нельзя одновременно подключать внешние источники питания к разным портам, а также нельзя комбинировать источники питания. Однако, разрешается одновременно использовать подключение платы к ПК по USB кабелю и использовать какой-либо источник внешнего питания (рис. 3.12).

Рис. 3.12. Недопустимые схемы подключения питания к контроллеру OpenCM9.04

Максимальное напряжение, при котором контроллер не выйдет из строя – 16В. При напряжении выше возможен выход платы из строя. При питании контроллера через USB, сервоприводы запитаны не будут, однако, все коммуникационные порты и порты ввода-вывода будут работать нормально. Обратите внимание – нельзя заряжать внешние источники питания в виде аккумуляторов, при этом одновременно запитывая ими контроллер.

Встраиваемый одноплатный микрокомпьютер

Данный микрокомпьютер является опциональным устройством. Встраиваемый одноплатный микрокомпьютер, производства ООО «Прикладная робототехника», представляет собой компактный модуль, с размещенными на нем процессором, памятью, модулями беспроводных интерфейсов, а также имеющий набор выводов GPIO, позволяющих обмениваться данными с другими устройствами по типовым интерфейсам, либо использовать их для взаимодействия с внешними периферийными модулями, такими как различные сенсоры и датчики.

Управляется данный микрокомпьютер операционной системой Yocto Linux, позволяющей осуществлять управление устройством таким же образом и на обычном ПК. Модуль поставляется уже с установленной на нем операционной системой и в связи с этим не требует дополнительной настройки.

Технические характеристики микрокомпьютера

Процессор Allwinner H3, Quad-core Cortex-A7 Up to 1.2GHz
Рабочее напряжение
Объем памяти 8GB eMMC
ОЗУ 512Mb
Тактовая частота 1.2GHz на ядро
USB порт 1 (2.0)
Интерфейсы UART, SPI, I2C, WiFi, Bluetooth, DVP, IO
Дополнительное хранилище MicroSD Slot
Размеры 40x40мм
Вес 10 г

Устройство микрокомпьютера

Основные элементы для взаимодействия со встраиваемым микрокомпьютером показаны на рисунке 3.13.

Здесь:

  1. – разъем под карты памяти формата MicroSD. Данный модуль поддерживает карты памяти объемом до 64Гб. При установке в данный разъем карты памяти с загрузочным образом OC, подходящей для модуля, загрузка произойдет именно с него. Таким образом, данный разъем можно использовать для перезаписывания образа системы, хранящегося в eMMC памяти.
  2. – разъем для подключения внешней Wi-Fi антенны. Для корректной работы модуля на нем должна быть установлена Wi-Fi антенна. При отсутствии этой антенны модуль будет постоянно писать в отладочный порт информацию об ошибке.
  3. – разъем для подключения DVP камеры. Через данный разъем можно подключить модуль с матрицей и объективом для реализации системы технического зрения.
  4. – индикационные светодиоды. Мигающий синий светодиод показывает корректную загрузку модуля.
  5. – USB порт. В состоянии по умолчанию он настроен как Mass Storage устройство, но при необходимости может быть настроен пользователем в требуемый режим. Например, в режим эмуляции Ethernet порта с помощью g-ether. В таком случае, при подключении модуля к ПК он будет видеться как удаленное NDIS-устройство, и к нему можно будет подключиться посредством ssh соединения.

Рис. 3.13. Основные элементы встраиваемого микрокомпьютера

Расположение GPIO выводов на микрокомпьютере

Расположение GPIO выводов микрокомпьютера показано на рисунке 3.14. Таким образом, на выводах микрокомпьютера находятся следующие линии:

Выводы питания 3,3В и 5В, причем отдельные выводы имеются для входа напряжения, они обозначаются как IN, и отдельные – для выхода (OUT). В связи с чем, надо всегда контролировать нагрузку, подключаемую напрямую к модулю, во избежание его выхода из строя.

Линии для вывода на внешние USB-порты для подключения различной периферии, такой как веб-камера, флешка, принтер и т.п.

Рис. 3.14. Расположение GPIO выводов микрокомпьютера

Интерфейс I2S для подключения цифровой аудио периферии. Интерфейс I2C для подключения различной сетевой периферии. Аналоговые аудио вход и выход для подключения микрофона и динамиков.

3 последовательных интерфейса UART, один из которых является отладочным портом модуля по умолчанию (UART0), а два других могут быть использованы требуемым пользователю способом.

Интерфейс SPI для подключения внешней периферии.

В кастомизированной версии модуля также имеются линии, организующие внешнее Ethernet соединение, и установленный по умолчанию на плату I2C микрофон.

Помимо организации линий в интерфейсы, практически каждая линия GPIO может быть использована в отдельности, исходя из настроек, установленных пользователем.

Часть интерфейсов, имеющихся на модуле, выведены на внешние разъемы периферийной платы STEM Board. Такими интерфейсами являются 2 линии USB 2.0, аудио линии микрофона и динамиков, отладочный UART в виде microUSB, UART в виде 3х пинового Dynamixel интерфейса, Ethernet. Таким образом, использование встраиваемого микрокомпьютера совместно с периферийной платой STEM Board обеспечивает корректное питание модуля и позволяет пользоваться большинством интерфейсов, используя для этого стандартные способы подключения к ним.

Питание микрокомпьютера

Питание микрокомпьютера осуществляется путем подачи напряжения в 5В на линию 5В IN, причем источник напряжения должен обеспечивать на старте модуля ток свыше 2А. Подача недостаточного тока при включении может привести к выходу модуля из строя. В связи с этим не рекомендуется использовать модуль встраиваемого микрокомпьютера без электронной обвязки, обеспечивающей необходимое питание. Для корректного функционирования модуля рекомендуется использовать периферийную плату STEM Board, в которой реализована необходимая схема питания, а также имеются необходимые для работы аппаратные реализации.

Периферийная плата STEM Board

Периферийная плата STEM Board, производства ООО «Прикладная робототехника», является основной платой, объединяющей контроллер OpenCM9.04 и встраиваемый микрокомпьютер на аппаратном уровне.

Помимо аппаратного объединения данная плата обеспечивает каждый установленный на ней модуль необходимым питанием, а также позволяет подавать питание и на управляемый объект – манипуляционный РТК. Помимо питания, на плате STEM Board выведены необходимые для работы интерфейсы со встраиваемого микрокомпьютера в виде популярных разъемов, а также штыревые гнезда с GPIO от контроллера OpenCM9.04.

Технические характеристики платы STEM Board

Габариты (ДхШхВ) 90х70 мм.
Диапазон входного напряжения питания от внешнего источника 6,8 - 12 В.
Разъем для подключения аккумулятора 1 шт.
Разъем для подключения внешнего блока питания 1 шт.
Переключатель ВКЛ/ВЫКЛ 1 шт.
Количество цифровых портов В/В 16 шт (функционирует при встроенном OpenCM9.04-С).
Количество аналоговых портов 10 шт (функционирует при встроенном OpenCM9.04-С).
Порт 3.3В 1 шт.
Интерфейс UART 3 шт (входит в состав портов В/В, функционирует при встроенном OpenCM9.04-С).
Интерфейс SPI 2 шт (входит в состав портов В/В, функционирует при встроенном OpenCM9.04-С).
Интерфейс I2C 1 шт (входит в состав портов В/В, функционирует при встроенном OpenCM9.04-С).
Интерфейс USB 2.0 3 шт (функционирует при встроенном одноплатном микрокомпьютере).
Разъем для подключения микрофона 1 шт (функционирует при встроенном одноплатном микрокомпьютере).
Разъем для подключения динамика 1 шт (функционирует при встроенном одноплатном микрокомпьютере).
Интерфейс TTL 2 шт (функционирует при встроенном OpenCM9.04-С).
Интерфейс RS485 1 шт (функционирует при встроенном OpenCM9.04-С).
Количество PWM портов 4 шт (функционирует при встроенном OpenCM9.04-С).
Интерфейс Ethernet 1 шт (функционирует при встроенном одноплатном микрокомпьютере).
Количество разъемов для подключения контроллера 2х20 шт.
Количество разъемов для подключения одноплатного микрокомпьютера 2х24 шт.

Устройство периферийной платы STEM Board

В настоящее время существует 2 ревизии данной периферийной платы, не отличающиеся кардинальным образом друг от друга. Обозначаются эти версии как 2.6 и 2.7, соответственно. Их внешний вид показан на рис. 3.15 - рис. 3.16.

Рис. 3.15. STEM Board (версия 2.6.)

Рис. 3.16. STEM Board (версия 2.7.)

Здесь:

  1. – Вход питания от аккумуляторной батареи. Поддерживаются стандартные аккумуляторные батареи Li-Po формата 3S. Не рекомендуется использовать питание от аккумулятора при большом количестве подключенных внешних устройств.
  2. – Вход питания от преобразователя напряжения. Рекомендуется использовать преобразователь напряжения, способный выдать ток силой не менее 3А.
  3. – Включатель питания силовой части платы. При подключении платы с установленным на ней контроллером OpenCM, к компьютеру будет подано питание на все вычислительные модули платы. Однако, для подачи питания на внешние устройства, подключенные к плате (например, манипулятор), необходимо включить питание силовой части данным переключателем.
  4. – microUSB разъем, позволяющий подключиться к отладочному UART0 встраиваемого микрокомпьютера (стандартные параметры терминал – скорость 115200).
  5. – 3х пиновый разъем типа «Molex»для подключения внешних Dynamixel-совместимых устройств по TTL интерфейсу. Данный разъем управляется контроллером OpenCM9.04 физической шиной 3 (#define DEVICE_NAME «3»)
  6. – 4х пиновый разъем типа «Molex» для подключения внешних Dynamixel-совместимых устройств по RS485 интерфейсу. Данный разъем управляется контроллером OpenCM9.04 физической шиной 3 (#define DEVICE_NAME «3»)
  7. – Ethernet разъем для подключения встраиваемого микрокомпьютера к локальной сети.
  8. – аудио выход на динамики с микрокомпьютера. Позволяет подключить внешние динамики с отдельным питанием к микрокомпьютеру и выводить на них звук.
  9. – аудио вход микрокомпьютера. Позволяет подключить устройство записи звука.
  10. – 2 разъема USB2.0 для подключения внешней периферии – Flash-накопитель, веб-камеры и т.п.
  11. 3х пиновый разъем типа «Molex» для подключения внешних Dynamixel-совместимых устройств по TTL интерфейсу. Данный разъем управляется от встраиваемого микрокомпьютера.
  12. – программируемая кнопка. Данная кнопка заведена на линию GPIO A3 встраиваемого микрокомпьютера.
  13. – программируемый светодиод. Данный светодиод управляется линией GPIO A6 встраиваемого микрокомпьютера.
  14. – перемыкатель сигнальной линии для работы с Dynamixel-совместимыми устройствами от контроллера OpenCM9.04. В левом положении связь обеспечивается физической шиной 3 (#define DEVICE_NAME «3»), при этом, остальные перемыкатели должны стоять также в левом положении. В правом положении связь обеспечивается физической шиной 1 (#define DEVICE_NAME «1»). Остальные перемыкатели при этом должны быть сняты.
  15. – перемыкатели UART3 для формирования физической шины 3 (#define DEVICE_NAME «3»). При снятом положении пользователю становятся доступны полноценный UART3 (D24\D25\TXD3\RXD3) либо i2c шина.
  16. – 4х пиновый разъем типа «Jst» для подключения внешних Dynamixel-совместимых устройств по RS485 интерфейсу. Данный разъем управляется контроллером OpenCM9.04 физической шиной 3 (#define DEVICE_NAME «3»)
  17. – 3х пиновый разъем типа «Jst» для подключения внешних Dynamixel-совместимых устройств по TTL интерфейсу. Данный разъем управляется контроллером OpenCM9.04 физической шиной 3 (#define DEVICE_NAME «3»)
  18. выводы для подключения устройств к микрокомпьютеру по интерфейсу I2S.
  19. 3х пиновый разъем типа «Jst» для подключения внешних Dynamixel-совместимых устройств по TTL интерфейсу. Данный разъем управляется от встраиваемого микрокомпьютера

Расположение GPIO выводов на плате STEM Board

По бокам периферийной платы STEM Board версии 2.6. имеются 2 трехрядных разъема, на которые продублированы GPIO контроллера OpenCM9.04. Помимо самих сигнальных линий, к каждой линии размещены питание и земля – для лучшей совместимости с популярными 3х пиновыми аналоговыми и цифровыми ардуино-совместимыми датчиками (рис. 3.17). В нижней части правого разъема расположен блок портов для подключения модулей, требующих 12В напряжения и большой токоотдачи. Таким образом, к этим разъемам можно подключить сервоприводы и управлять ими с помощью PWM сигнала. Также, для удобства, отдельно выведены гнезда с питанием 3,3В и линии UART3 от контроллера OpenCM9.04.

Рис. 3.17. Распиновка боковых разъемов периферийной платы STEM Board версии 2.6. и STEM Board версии 2.7.

В плате STEM Board версии 2.7. GPIO выводов платы показаны на рисунке 3.17. В отличии от версии 2.6. линии питания и земля отсутствуют.

Питание периферийной платы STEM Board

Номинальным напряжением питания платы STEM Board является значение в 12В. Поскольку данная плата применяется для питания внешних устройств с большим токопотреблением, то для питания рекомендуется использовать входящий в состав комплекта с манипуляционным РТК блок питания, способный выдать напряжение 12В при 5А. Не рекомендуется использовать блоки питания с токоотдачей ниже 3А, поскольку это может привести к некорректной работе управляемого манипуляционного РТК.

В случае, если система управления (STEM Board c установленными на ней контроллером OpenCM и микрокомпьютером, далее – контроллер) используется для управления небольшим количеством исполнительных устройств (сервоприводов), либо же для управления маломощными сервоприводами, то допускается в качестве источника питания использовать Li-Po 3S аккумулятор. Рекомендуется использовать аккумуляторную батарею LIPO Battery 11.1V 1000 mAh LB-010, производства компании ROBOTIS.

Несмотря на то, что при подключении к ПК происходит подача питания как на OpenCM, так и на микрокомпьютер, не рекомендуется работать с контроллером без внешнего питания.

Универсальный контроллер DXL-IoT

В состав образовательного комплекта «СТЕМ Мастерская», помимо контроллера OpenCM9.04 и одноплатного микрокомпьютера nanoPi-AR, также входит компактный контроллер DXL-IoT. Данный контроллер, производимый ООО «Прикладная робототехника», ориентирован на использование в проектах концепции «Интернета Вещей». В связи с чем, он обладает компактными габаритами и необходимыми интерфейсами для подключения к сети. Данный универсальный вычислительный модуль, предназначенный для взаимодействия с Dynamixel-совместимыми устройствами, представляет собой электронную плату с размещенным на ней вычислительным микроконтроллером Atmega2560, чипом беспроводной связи по интерфейсам Wi-Fi и Bluetooth, набором цифровых и аналоговых линий передачи связи, а также портами для подключения Dynamixel-совместимых устройств (рис. 3.18).

Рис. 3.18. Программируемый контроллер DXL-IoT

Технические характеристики контроллера DXL-IoT

Габариты – 40х40 мм

Номинальное напряжение питания – 12В

Флеш-память - 256 KB (из которых 8 КB используются для загрузчика) ОЗУ - 8 KB

Энергонезависимая память - 4 KB Тактовая частота - 16 МГц

Количество 3х пиновых портов Dynamixel – 2 шт.

Количество портов USB 2.0 – 2 шт.

Количество линий ввода-вывода – 40 шт.

В том числе: Линия «земля» - 1 шт.

Линия +3.3В - 1 шт.

Линия +5В – 1 шт.

Линия +12В – 1 шт.

Интерфейс SPI – 1 шт.

Интерфейс I2C – 1 шт.

Интерфейс UART – 1 шт.

Цифровые линии ввода-вывода – 12 шт.

Аналоговые линии ввода – 16 шт.

Индикаторы – 2 шт (5В).

Беспроводные интерфейсы – Wi-Fi, Bluetooth.

Органы управления (кнопки) – 3 шт.

Рис. 3.19. Расположение основных элементов на контроллере DXL-IoT

Основные элементы контроллера следующие (рис. 3.19):

  1. miniUSB порт для подключения к ПК и программирования основного контроллера – Atmega2560. Данный порт может использоваться для подачи на модуль питания 5В.
  2. miniUSB порт для подключения к ПК и программирования модуля беспроводной связи Bluetooth и Wi-Fi. Данный порт может использоваться для подачи питания на модуль питания 5В.
  3. 3х пиновые DXL-порты. Используются для подключения контроллера в цепь как Dynamixel-совместимого устройства. Контроллер DXL-IoT может быть использован и как ведущее Dynamixel-совместимое устройство (с его помощью можно управлять подключенными к нему сервоприводами Dynamixel), так и как ведомое (модуль может выступать в качестве Dynamixel-совместимого устройства и обмениваться данными с внешним контроллером через протокол Dynamixel. Данные порты также могут использоваться для подачи на модуль питания 12В. При использовании контроллера в качестве Dynamixel-совместимого устройства наличие внешнего источника питания 12В обязательно.
  4. Индикационный светодиод линии 5В.
  5. Штыревой разъем, содержащий интерфейсы I2S и CAN.
  6. Гнезда с выводами для подключения внешних устройств и плат расширения.
  7. Программируемый светодиод. Подключен к линии PB7 (D13) микроконтроллера Atmega2560.
  8. Кнопка перезагрузки микроконтроллера Atmega2560.
  9. Кнопка перезагрузки модуля беспроводной связи.
  10. Кнопка ввода в режим загрузчика модуля беспроводной связи.

Распиновка боковых штыревых разъемов показана на рисунке 3.20:

Рис. 3.20. Распиновка боковых разъемов контроллера DXL-IoT

Для работы с данным контроллером в среде программирования Arduino IDE в качестве платы необходимо выбирать Arduino Mega 2560. Данный модуль является ее аналогом.

Для расширения функционала контроллера DXL-IoT существует ряд модулей расширения.

Плата расширения контроллера DXL-IoT с адаптером Ethernet

Данный модуль позволяет выполнить подключение контроллера к сети с помощью интерфейса Ethernet, а также позволяет подключать и работать с картами памяти формата microSD (рис. 3.21).

Рис. 3.21. Плата расширения контроллера DXL-IoT с адаптером Ethernet

Основные элементы данной платы расширения следующие:

  1. Ethernet-разъем.
  2. Индикационные светодиоды, сигнализирующие о работе сетевого соединения.
  3. Разъем для установки microSD карты.
  4. Кнопка для перезагрузки модуля.

Гнезда под штыревые разъемы, размещенные на данной плате расширения, являются сквозными для подключения к основному контроллеру DXLIoT и его силовой плате расширения.

Характеристики данного модуля следующие:

Габариты – 40х40 мм.

Напряжение питания, номинальное – 5В. Количество Ethernet разъемов – 1 шт.

Внутренний буфер 16 КБ.

Скорость подключения - 10/100 МБит/с. Количество одновременных подключений – 4 шт.

Поддержка протоколов - TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet. Режимы – полудуплекс и полный дуплекс.

Интерфейс SPI – 1 шт.

Количество microSD разъемов – 1 шт.

Поддержка карт памяти microSD объемом до 16 Гб. Индикаторы – 4 шт. (SPD, LINK, RX, TX).

Органы управления (кнопки) – 1 шт.

Плата расширения контроллера DXL-IoT с адаптером Ethernet полностью совместима со стандартными библиотеками и примерами в Arduino IDE для работы с Ethernet-шилдами, разработанными на чипе W5500.

Программная составляющая работы с контроллером DXL-IoT

Контроллер DXL-IoT является подобной Arduino Mega 2560 платой. С помощью среды Arduino IDE для него можно разрабатывать код, применяя те же подходы и библиотеки, что и для Arduino Mega 2560. Отличительной особенностью этого контроллера является поддержка интерфейса Dynamixel, и для работы с ним разработаны специальные библиотеки. Данные библиотеки можно скачать с сайта appliedrobotics.ru из раздела «Учебные материалы» – «Программное обеспечение». Существует 2 способа работы данного контроллера в цепи Dynamixel–совместимых устройств: в качестве мастер-устройства (ведущий контроллер) и slave-устройства (ведомое Dynamixel-совместимое устройство).

Работа с устройствами ROBOTIS Dynamixel, библиотека DxlMaster

Устройства ROBOTIS Dynamixel: сервоприводы и датчики, поддерживающие протокол Dynamixel, подключаются к интерфейсу на основе последовательного порта UART в режиме полудуплекса. Для управления Dynamixel-cовместимыми устройствами с контроллера DXL-IoT необходимо использовать библиотеку «DxlMaster», которую можно скачать с сайта компании ООО «Прикладная робототехника» (раздел «Программное обеспечение»). Данная библиотека поставляется в виде zip-библиотеки Arduino и устанавливается штатными средствами Arduino IDE (Меню

«Скетч» -> «Подключить библиотеку» -> «Добавить .ZIP библиотеку»).

Библиотека содержит следующие примеры (меню «Файл» -> «Примеры»):

  • blink_led – включение и выключение светодиодов сервоприводов Dynamixel.
  • change_baudrate – изменение скорости передачи данных на шине Dynamixel.
  • console – терминал, позволяющий из командной строки найти и настроить Dynamixel-совместимые устройства в сети.
  • joint_mode – управление сервоприводами по положению (режим шарнирного сочленения).
  • wheel_mode – управление сервоприводами по скорости (режим колеса).
  • wheel_mode_low_level – управление сервоприводами на низком уровне (изменением значений регистров).

Инициализация библиотеки

Перед использованием данной библиотеки, её необходимо добавить в программу и инициализировать. Для добавления библиотеки

«DxlMaster» необходимо добавить заголовочный файл в начале программы:

#include «DxlMaster.h»

При добавлении заголовочного файла библиотеки становится доступен глобальный объект DxlMaster, который необходимо инициализировать следующим образом:

DxlMaster.begin(int baudrate);

где baudrate – скорость обмена данными с устройствами на шине Dynamixel (см. документацию к конкретной модели привода). Чаще всего используются скорости 57 600 бод и 1 000 000 бод. Скорость обмена данными с Dynamixel-совместимым устройством может быть изменена через программу ROBOTIS Dynamixel Wizard.

Подключение произвольных устройств, класс DynamixelDevice

Обмен данными с Dynamixel-совместимым устройством происходит путем записи и чтения регистров в памяти такого устройства. Для этого предназначен класс DynamixelDevice библиотеки DxlMaster.

Общие методы класса DxlMaster:

  • DxlMaster(uint8_t id) – конструктор, id – уникальный номер Dynamixel-совместимого устройства в сети (см. документацию на устройство). Может быть изменен в программе ROBOTIS Dynamixel Wizard.
  • DynamixelStatus init() – поиск и инициализация устройства. Если найдено устройство с адресом id и скоростью обмена, соответствующей текущим настройкам шины, возвращает 0, иначе – код ошибки.
  • DynamixelStatus changeId(uint8_t id) - изменение id устройства (для этого устройство все равно должно быть инициализировано с исходным id).
  • uint16_t model() – возвращает номер модели устройства.
  • uint8_t firmware() – возвращает версию прошивки устройств.
  • void communicationSpeed(uint32_t aSpeed) – изменение скорости обмена данными с устройством.

Обмен данными:

Все методы для обмена данными возвращают статус выполнения команды DynamixelStatus, принимающий значение «0» в случае успеха или выдающий номер стандартной ошибки шины Dynamixel, в случае сбоя обмена данными.

Методы чтения данных выполнены в виде шаблонов для чтения регистров разной длины (чаще всего в Dynamixel-совместимых устройствах применяются регистры типов uint8_t, uint16_t), например:

template DynamixelStatus read(uint8_t aAddress, T& aData) – шаблон метода для чтения регистра произвольного типа T по адресу aAddress.

Пример использования:

uint16_t pos; 
device.read(DYN_ADDRESS_CURRENT_POSITION, pos);
После успешного выполнения команды в переменной pos окажется значение 16-ти разрядного регистра DYN_ADDRESS_CURRENT_POSITION, который занимает в памяти сервопривода 2 байта.

Методы для обмена данными:

  • DynamixelStatus read(uint8_t aAddress, T& aData) – чтение регистра типа T по адресу aAddress с записью результата в переменную aData.
  • DynamixelStatus read(uint8_t aAddress, uint8_t size, uint8_t *ptr) – чтение массива из регистров в количестве size по адресу aAddress с записью результата в массив по адресу ptr.
  • DynamixelStatus write(uint8_t aAddress, const T& aData) – запись в регистр типа T по адресу aAddress значения aData.
  • DynamixelStatus write(uint8_t aAddress, uint8_t size, const uint8_t *ptr) - запись в массив регистров, длиной size, по адресу aAddress значений из локального массива с указателем ptr.
  • DynamixelStatus regWrite(uint8_t aAddress, const T& aData) – команда отложенной записи в регистр типа T по адресу aAddress значения aData. Значение передается на устройство, но применяется к регистру только после команды action().
  • DynamixelStatus regWrite(uint8_t aAddress, uint8_t size, const uint8_t*ptr) - команда отложенной записи в массив регистров длиной size по адресу aAddress значений из локального массива по указателю ptr.
  • DynamixelStatus action() – команда, получив которую все устройства в сети применяют значения регистров, полученные с командой отложенной записи. Функция применяется для организации синхронной работы сервоприводов: вначале всем сервоприводам рассылаются целевые значения (положение, скорость), а затем широковещательной командой action приводы запускаются.
  • DynamixelStatus ping() – команда для проверки наличия устройства в сети. В случае, если устройство найдено, возвращает «0», иначе – код ошибки.

Примечание: для отправки широковещательных команд необходимо создать абстрактное устройство DynamixelDevice с широковещательным адресом.

Пример низкоуровнего управления сервоприводом DYNAMIXEL MX-28.

#include «DxlMaster.h» // Добавление библиотеки

DynamixelDevice device(1); // Создание объекта управления с адресом id = 1

void setup() {

DxlMaster.begin(1000000); // Инициализация шины со скоростью 1000000 бод

device.init(); // Поиск в сети и инициализация устройства 
device.write(DYN_ADDRESS_ENABLE_TORQUE, 1); // Включение момента

uint16_t zero_limit = 0;

device.write(DYN_ADDRESS_CW_LIMIT, zero_limit); // Очистка ограничения вращения по часовой стрелке

device.write(DYN_ADDRESS_CCW_LIMIT, zero_limit); // Очистка ограничения вращения против часовой стрелки

}

void loop() {

int16_t speed = 1000;

device.write(DYN_ADDRESS_GOAL_SPEED, speed); // Установка скорости

}

Подключение сервоприводов, класс DynamixelMotor

Для более удобного управления сервоприводами ROBOTIS DYNAMIXEL необходимо применять ориентированный на такое использование класс DynamixelMotor, наследующий класс DynamixelDevice вместе со всеми представленными в предыдущем разделе методами. Дополнительно к методам класса DynamixelDevice в классе DynamixelMotor реализованы следующие специальные методы.

  • void wheelMode() – настраивает регистры привода для работы в режиме колеса.
  • void jointMode(uint16_t aCWLimit=0, uint16_t aCCWLimit=0x3FF) – настраивает привод для управления по положению (режим шарнирного сочленения) с ограничениями углов поворота по и против часовой стрелки aCWLimit и aCCWLimit соответственно.
  • void enableTorque(bool aTorque=true) – включает момент, регистр целевого положения принимает значение текущего положения и сервопривод удерживает текущее положение.
  • void speed(int16_t aSpeed) – задает скорость вращения привода в режиме колеса либо максимальную скорость вращения в режиме сочленения.
  • void goalPosition(uint16_t aPosition) – задает целевое положение при управлении по положению.
  • void led(uint8_t aState) – управляет светодиодом сервопривода: aState = 0 – выключение светодиода, aState = 1 – включение светодиода.
  • uint16_t currentPosition() – опрашивает и возвращает показания о текущем угловом положении сервопривода.
  • DynamixelStatus getCurrentPosition(uint16_t &pos) – метод аналогичен предыдущему, но возвращает статус выполнения команды для построения более надежных систем управления.

Пример управления мотором.

#include «DxlMaster.h» // Добавление библиотеки

DynamixelMotor motor(1); // Создание объекта класса сервопривода с адресом 1

void setup() {

DxlMaster.begin(1000000); // Инициализация шины Dynamixel со скоростью 1000000 бод

motor.enableTorque(); // Включение момента привода 
motor.jointMode(2000, 14000); // Включение режима сочленения с

угловыми ограничениями

motor.speed(100); // Задание максимальной скорости вращения привода

}

void loop() {

motor.goalPosition(123); // Задание положения привода

}
Более подробно с возможностями библиотеки DxlMaster можно познакомиться в примерах среды Arduino IDE (Меню «Файл» -> «Примеры» -> «DxlMaster»).

Работа контроллера в качестве Dynamixel-совместимого устройства, библиотеки DxlSlave и DxlSlave2

Программируемый контроллер DXL-IoT подключается в сеть Dynamixel-совместимых устройств в качестве ведомого, отвечает на запросы по протоколам Dynamixel 1.0 и Dynamixel 2.0 и передает данные на управляющий контроллер более высокого уровня через интерфейс, выполненный на основе последовательного порта UART в режиме полудуплекса.

Для работы интерфейса и предоставления доступа к данным для опроса по протоколам Dynamixel 1.0 и 2.0 необходимо использовать библиотеки «DxlSlave» и «DxlSlave2.0», соответственно. Данные библиотеки можно скачать с сайта компании ООО «Прикладная робототехника» (Раздел «Учебные материалы» -> «Программное обеспечение»). Библиотеки поставляются в виде zip-библиотек Arduino и устанавливаются штатными средствами Arduino IDE (Меню «Скетч» -> «Подключить библиотеку» -> «Добавить .ZIP библиотеку»).

Библиотека содержит следующие примеры (меню «Файл» -> «Примеры»):

  • allRegs – организация Dynamixel-совместимого устройства с произвольным набором данных.
  • setEepromDefault – очистка энергонезависимой памяти, используемой для хранения значений регистров Dynamixel.
  • ax12a (только в DxlSlave) – эмуляция сервопривода ROBOTIS DYNAMIXEL AX-12A.
  • xl320 (только в DxlSlave2) – эмуляция сервопривода ROBOTIS DYNAMIXEL XL320.

Стандартная организация адресного пространства Dynamixel

В библиотеках организовано регистровое управление, аналогичное устройствам Dynamixel – данные, доступные внешними устройствами, необходимо хранить в выделенной области памяти библиотеки в 255 байт (регистров), каждый из которых имеет адрес от 0 до 255.

Некоторые регистры по стандартным адресам должны содержать типовые для Dynamixel-совместимых устройств значения и заполняются библиотекой автоматически, другие отведены для пользовательских задач. Адресное пространство и назначение регистров приведено в таблице:

Инициализация библиотеки

Во всех случаях использования библиотеку необходимо предварительно добавить в программу и инициализировать. Для добавления библиотеки необходимо подключить заголовочный файл в начале программы.

Для работы с протоколом Dynamixel 1.0:

#include «DxlSlave.h»

Для работы с протоколом Dynamixel 2.0:

#include «DxlSlave2.h»

При добавлении заголовочного файла библиотеки становится доступен глобальный объект DxlSlave (одинаковый для любой версии протокола), который необходимо инициализировать следующим образом:

DxlSlave.begin(uint16_t model_number, uint8_t fw_version);

где model_number – номер модели устройства, и fw_version – версия программного обеспечения, которые будут показаны внешним устройствам.

Работа с интерфейсом, класс DxlSlave

После инициализации библиотека работает в фоновом режиме и автоматически отвечает на запросы внешних устройств, отправляя данные из регистров или устанавливая их новые значения. Изменение значений системных (стандартных) регистров с настройками параметров передачи данных (ID устройства, baud rate, return delay time, status return level) автоматически приводит к изменению этих параметров. Изменение значений пользовательских регистров фиксируется в виде их адресов в кольцевом буфере (очереди). Таким образом, обмен данными необходимо выполнять в следующей последовательности:

  • чтобы предоставить данные управляющему устройству, необходимо записать их в регистр, и они автоматически будут отправлены управляющему устройству по запросу;
  • чтобы узнать об изменениях регистров, выполненных управляющим устройством, и произвести соответствующие действия, необходимо проверить наличие необработанных изменений в очереди (polling).

Для работы с интерфейсом необходимо использовать класс DxlSlave, предоставляющий следующие методы:

  • void begin(uint16_t model_number, uint8_t fw_version) -инициализация библиотеки. Значения model_number и fw_version записываются в регистры Model Number и Version of Firmware в соответствии с таблицей стандартных регистров. После вызова метода, устройство начинает отвечать и автоматически (в фоновом режиме) реагировать на запросы Dynamixel.
  • void set_id(uint8_t id) - записывает ID в соответствии с таблицей регистров. После этого устройство автоматически меняет адрес доступа.
  • void set_baud(uint8_t baud) - записывает Baud Rate в соответствии с таблицей регистров. После этого устройство меняет скорость передачи данных (baud rate).
  • void set(uint8_t addr, uint8_t val) - записывает значение val в регистр по адресу addr. Значение не перезаписывается в EEPROM, если равно уже записанному. При изменении значений регистров, отвечающих за настройки протокола, автоматически меняются соответствующие пара- метры передачи данных.
  • uint8_t get(uint8_t addr) - возвращает значение, записанное в регистре по адресу addr.
  • void set_mode(uint8_t addr, uint8_t mode) - настраивает режим доступа mode (0 – R (чтение), 1 - RW (чтение и запись)) к регистру по адресу addr.
  • void set_mode16(uint8_t addr, uint8_t mode) - настраивает режим доступа к 2-м регистрам подряд, начиная с адреса addr.
  • void set16(uint8_t addr, uint16_t val) - записывает 16-ти разрядное значение в 2 регистра, расположенных по адресу addr. Последовательность байт: младший байт первый. Значение не должно перезаписываться в EEPROM, если равно уже записанному.
  • uint16_t get16(uint8_t addr) - возвращает 16-ти разрядное значение, записанное в 2-х регистрах (первый байт младший).
  • uint8_t poll() - возвращает «1», если со стороны ведущего устройства через протокол Dynamixel было изменено значение какого-либо регистра (очередь измененных регистров не пуста); «0», если изменений нет (очередь пуста).
  • uint8_t scan() - возвращает адрес первого в очереди (кольцевом буфере) измененного через протокол Dynamixel регистра и удаляет его из очереди (смещает указатель кольцевого буфера на следующий измененный регистр).

Примеры работы с библиотеками DxlSlave и DxlSlave2

В следующем примере показана организация Dynamixel-совместимого устройства с произвольным набором данных. В этом примере при изменении ведущим устройством регистра разрабатываемого ведомого устройства, ведомое устройство выводит в терминал адрес и значение измененного регистра.

#include <DxlSlave.h> // Подключение библиотеки

#define IS_INITED_REG 23 // Адрес регистра для проверки 1-го запуска 
void setup() {

DxlSlave.begin(1234, 12); // Инициализация интерфейса (номер модели 1234, версия 12)

Serial.begin(9600); // Инициализация отладочного последовательного порта для вывода

if(!DxlSlave.get(IS_INITED_REG)) { // Инициализация EEPROM при 1-м запуске

for(int i = 6; i < 23; i++) {

DxlSlave.set(i, i); // Заполнение регистров EEPROM произвольными значениями

DxlSlave.set(IS_INITED_REG, 1); // Установка флага «1-я инициализация выполнена»

}

}

for(int i = 24; i < 255; i++) {

DxlSlave.set(i, i); // Заполнение регистров RAM произвольными значениями

}

}

void loop() {

while(DxlSlave.poll()) { // Проверка наличия изменений регистров ведущим устройством

uint8_t addr = DxlSlave.scan(); // Получение адреса измененного регистра из очереди

Serial.print(« The value at address «); // Вывод информации Serial.print(addr);

Serial.print(« was changed by master. New value is «); Serial.println(DxlSlave.get(addr));

}

}
Подробнее возможности библиотеки представлены в примерах (Меню «Файл» -> «Примеры» -> «DxlSlave»).

Для очистки EEPROM устройства, в том числе для очистки флага и вызова 1-й инициализации EEPROM при изменении программы, необходимо использовать пример setEepromDefault.

Организация произвольного Dynamixel-совместимого устройства с использованием более разнообразных команд приведена в стандартном примере allRegs библиотеки.

Возможности библиотеки DxlSlave продемонстрированы также в примере ax12a, где эмулируется сервопривод ROBOTIS DYNAMIXEL AX- 12A, распознаваемый стандартными утилитами ROBOTIS.

Аналогичный пример эмуляции сервопривода XL-320 с протоколом Dynamixel 2.0 приведен в библиотеке DxlSlave2.