Dynamixel-Shield-Arduino扩展板

小芽科技 2021-12-01 09:22:29
Categories: Tags:

产品介绍

img

立刻购买goumai

DYNAMIXEL Shield的创建是为了在arduino板上使用RC-100遥控器和DYNAMIXEL舵机。我们为DYNAMIXEL Shield提供了dynamixel库,它可以帮助您轻松使用dynamixel 舵机。

jingshi 此产品不包含Arduino控制板,请另外选购Arduono控制板。

规格

名目 描述
操作电压 5 V (XL-330) ~ 24 V (PRO / X Series)
最大支持电流 1 A(Arduino), 10 A (Terminal Connector)

支持的DYNAMIXEL的舵机型号

DYNAMIXEL Series
AX AX-12W AX-12+/12A AX-18F/18A
RX biaoji RX-10 RX-24F RX-28 RX-64
DX biaoji DX-113 DX-116 DX-117
EX biaoji EX-106+
MX MX-12W MX-28, MX-28(2.0) MX-64, MX-64(2.0) MX-106, MX-106(2.0)
XL XL320 XL430-W250 XL330-M077 XL330-M288 2XL430-W250
XC XC330-T288 XC330-T181 XC330-M288 XC330-M181 XC430-W150 XC430-W240 2XC430-W250
XM XM430-W210 XM430-W350 XM540-W150 XM540-W270
XH XH430-W210 XH430-W350 XH430-V210 XH430-V350 XH540-W150 XH540-W270 XH540-V150 XH540-V270
XD XD430-T210-R XD430-T350-R XD540-T150-R XD540-T270-R
XW XW430-T333-R XW430-T200-R XW540-T140-R XW540-T260-R
PRO H H42-20-S300-R H54-100-S500-R H54-200-S500-R
PRO M M42-10-S260-R M54-40-S250-R M54-60-S250-R
PRO Lbiaoji L42-10-S300-R L54-30-S500-R L54-30-S400-R L54-50-S500-R L54-50-S290-R
PRO H(A) H42-20-S300-R(A) H54-100-S500-R(A) H54-200-S500-R(A)
PRO M(A) M42-10-S260-R(A) M54-40-S250-R(A) M54-60-S250-R(A)
PH PH42-020-S300-R PH54-100-S500-R PH54-200-S500-R
PM PM54-060-S250-R PM54-040-S250-R PM42-010-S260-R

biaoji 默认情况下,由于RX、DX、EX系列停产,所以此板对它们处于禁用状态,如需使用,请在DynamicXel2Arduino中修改config.h

产品细节展示

img

DYNAMIXEL Shield的引脚位置与Aruduino UNO相同。要查找引脚图,请参阅Arduino官方页面.

管脚标号 管脚名称 描述
0 HW UART RX DXL_RX
1 HW UART TX DXL_TX
2 HW UART DIR DXL_DIR(DXL_TX_EN)
7 SW UART RX jinggao警告2 SoftwareSerial
8 SW UART TX jinggao警告2 SoftwareSerial
名目 描述 备注
DYNAMIXEL Port TTL, TTL(XL-320), RS485 jinggao警告3
Power Switch Power SW (DYNAMIXEL Port Power Switch) -
UART Switch UART SW (Upload or DYNAMIXEL Select Switch) jinggao警告1
Jumper Cap Power Source Selection Read ‘Connecting Power’

jinggao 警告1 使用Ardino IDE通过USB端口上载固件程序时,应将波动开关UART SW切换到Upload模式。程序上载完毕之后,将UART SW选择为Dynamixel模式,可以控制Dynamixel舵机;也就是说,上传程序和控制舵机使用的是同一串口,两种行为不可以同时使用,只能选其一。

jinggao 警告2 如果您使用的电路板不支持SoftwareSerial(如SAMD等),则不能将引脚7和8用于UART。

jinggao 警告3 TTL、TTL(XL-320)和RS485连接器均在一个串行中并联连接。

DYNAMIXEL Shield在使用IDE串行监视器时该注意的问题

zhuyi**注意: **DynamixelShield使用与Arduino Uno/Mega相同的串行引脚(0,1)。使用串行监视器时,由于端口冲突,可能会导致电路板中的数据出现意外问题。

为了防止电路板发生端口冲突,请务必仔细阅读下面章节:DYNAMIXEL Shield 如何使用串行监视器

DYNAMIXEL Shield 如何使用串行监视器

zhuyi**注意: **检查arduino板的类型,并选择所列解决方案中对应的一种,最好是能够了解所使用控制板硬件串口情况,然后再决定使用哪种方案来使用串口监视器(或串口助手),以免出现无法显示或者反馈乱码等问题。

  1. [推荐] #define DEBUG_SERIAL

    • 请在Arduino IDE中DynamixelShield Examples查阅 #define DEBUG_SERIAL的定义和使用 。
  2. 使用DYNAMIXEL Shield的UART口(AVR 8位板,包括Uno/Mega板)

    • AVR 8 位板,比如Arduino Uno和Mega, 可以利用DYNAMIXEL Shield的管脚来是使用串行监视器(串口工具),这个串口将监视串行信息,如下图所示:

      power_polarity

    : 可以使用Dynamicxel Shield自带的串行端口,但要确保使用’SoftwareSerial’库,该库就是为了能把通用管脚作为串行端口使用而设计的。对于该端口,推荐使用的通信模块:BT-210, BT-410, LN-101。当然,符合TTL通信的设备也是可以使用的。

  3. 使用USB口

    • 当您使用Uno和Mega以外的其他arduino板时(当然,该板必须存在多个硬件串口),这时候可以考虑用USB端口进行串行监视。
  4. 使用USB串口转换器

    • 你可以使用 SoftwareSerial 或者 HardwareSerial 的方式。 请查阅 Arduino Reference page of Serial, 并确定你的板子是否支持这两种方式 (SoftwareSerial 或者 HardwareSerial).
  5. 使用 UART Port

    • DYNAMIXEL Shield 包含了UART管脚: 7(RX), 8(TX) 。 它仅与AVR 8位板兼容,比如Arduino Uno 和Arduino Mega。为了使用这类型的端口,可以考虑使用其他硬件串行管脚替代 7(RX), 8(TX)。要确定这些板是否具有硬件串行管脚,请参阅 Arduino Reference page of Comunication.

连接电源

连接跳帽 断开跳帽
img img

img

拨动开关

img

程序上载和Dyamixel舵机控制开关

DYNAMIXEL 电源开关

DYNAMIXEL Shield 库

特点

库安装

这里有三种方式把库添加到 Arduino IDE.

Arduino官方指南详细描述了每种安装方式的流程

下面是通过库管理器安装的方式演示:

img

在Library Manager中查找dynamixel shield,然后选择最新版本安装。

img

点击 Install all 去安装依赖库Dynamixel2Arduino.

img

如果你成功安装了这两个库,你将能在Examples中找到关于DynamixelShield的一些例程。

img

Library API

DYNAMIXELShield(v0.1.0 或更高)

注意 : 使用DYNAMIXEL Shield library(v0.1.0 或更高), 必须安装DYNAMIXEL2Arduino库。

Dynamixel2Arduino Class

Master Class

Dynamixel2Arduino类从主类继承以下公共函数。

RobotisRemoteController Class

DynamixelShield(v0.0.5)

WARNING : 此版本的Dynamixel Shield API已弃用,不再维护。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
bool begin(uint32_t baud_rate = 57600, uint8_t protocol_version = DXL_PACKET_VER_2_0);

bool scan(void);
bool ping(uint8_t id = DXL_GLOBAL_ID);
bool addMotor(uint8_t id, uint8_t model);
bool setProtocolVersion(uint8_t version);
bool write(uint8_t id, uint16_t addr, uint8_t *p_data, uint16_t length, uint32_t timeout);
bool read(uint8_t id, uint16_t addr, uint8_t *p_data, uint16_t length, uint32_t timeout);

uint8_t getDxlCount(void);
uint8_t getDxlID(uint8_t index);
uint32_t getErr(void);
void clearErr(void);

bool reboot(uint8_t id);
bool reset(uint8_t id);

bool setID(uint8_t id, uint8_t new_id);
bool setBaud(uint8_t id, uint32_t new_baud);

bool ledOn(uint8_t id);
bool ledOff(uint8_t id);

bool torqueOn(uint8_t id);
bool torqueOff(uint8_t id);

bool setJointMode(uint8_t id);
bool setWheelMode(uint8_t id);

bool setGoalPosition(uint8_t id, uint32_t position);
int32_t getGoalPosition(uint8_t id);
int32_t getCurPosition(uint8_t id);

bool setGoalSpeed(uint8_t id, int32_t speed);
int32_t getGoalSpeed(uint8_t id);
int32_t getCurSpeed(uint8_t id);

bool setGoalAngle(uint8_t id, int32_t angle);
int32_t getGoalAngle(uint8_t id);
int32_t getCurAngle(uint8_t id);

bool syncWriteBegin(void);
bool syncWriteEnd(void);