_SKU_DFR0057_SDB_V2.0_传感器驱动板 - jimaobian/DFRobotWikiCn GitHub Wiki
概述
SDB传感器驱动板作为主控板和传感器之间的桥梁,在整个系统中非常重要。通过SDB 传感器驱动板,可以将以上接口的所有传感器数据采集回来,通过RS23串口发送给主控PC或者嵌入式系统。同时SDB板也带两路直流电机驱动,具备两路旋转编码器接口,内带PID电机控制算法。主控可通过串口精确控制两路电机速度。SDB板的IO0到IO7可设置为舵机控制口,这在机器人系统内带例如舵机云台,机械手夹持的情况下是非常有用的。物理尺寸兼容PC104安装孔,在其上面可以方便叠加PC104工控板。 SDB直接支持的传感器有: 1.I2C总线通讯协议的传感器:Devantech公司的SRF04 / SRF05 / SRF08 / SRF10 超声波传感器,SP03 TTS,CMP03电子罗盘等。 2.RS485总线传感器,例如URM04超声波,ADIO扩展板等。 3.SPI接口。 4.CAN工业总线接口。 5.模拟量输出传感器:GP2D12等红外距离传感器,IDG300陀螺仪传感器,加速度传感器,光敏传感器等。 6.开关量输出的传感器,例如红外开关,碰撞模块,跌落传感器等。
技术规格
- 工作电源:内带稳压电路,宽工作电压6V-12V(极限电压15V)
- 工作电流:150mA(供电电压12V)
- 工作温度范围 :-10~+70℃
- 使用Cortex-M3内核 ARM 32BIT处理器,运算速度90MIPS,总线间通信均采用DMA(存储器直接访问)方式,通信和处理速度更快
- 与主控通信接口方式:RS232串口或者TTL电平串口。波特率可设置为9600、19200、38400和115200BPS
- 具备8路12BIT高精度模数转换
- 11路数字输入/输出接口,其中8路(IO0-IO7)可设置为舵机控制口
- 8路舵机控制口可控制舵机的度数及其旋转速度
- 1路I2C总线
- 1路RS485总线
- 1路CAN总线(2.2版本未使用)
- 1路SPI总线(2.2版本未使用)
- 两路直流电机控制,每通道4A电流,具有AB两相旋转编码器接口,内部集成参数可调整的PID算法,可精确控制电机转速。可读取回电机旋转圈数用于里程计数。电机电流可读取,可用于电流保护
- 尺寸:长96mm,宽90mm,高20mm。安装孔兼容PC104结构。
- 重量:约87g
输出引脚图
应用电源
SDB板的电源只需在标有“接地”的螺丝端子的接地线连接,然后从你的供应标有“+12 V的”螺丝端子连接正极线。 注意:不要使用超过15V直流电压。
串行硬件配置
SDB板支持RS232/TTL接口。 RS232/TTL输出模式通过跳线选择。
命令集
- 所有命令都以十六进制格式。
- 所有响应终止0x0A返回在年底的数据(换行)。
配置私服控制方式
Header | Add | Length | Cmd | I/O status | SUM | |
0x55 | 0xaa | 0x10 | 0x01 | 0x01 | IO7~IO0 | SUM |
使用此命令配置的DIO伺服控制模式。
计算的I / O状态字节位0位7映射IO0-IO7。
IO7 | IO6 | IO5 | IO4 | IO3 | IO2 | IO1 | IO0 |
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
当IO位设置为1,伺服模式已启用。当IO位设置为0,伺服模式将被禁用。
例子:
-
例如,设置为伺服模式IO3和IO4位表是以下:
I / O状态=为0x18:
IO7 | IO6 | IO5 | IO4 | IO3 | IO2 | IO1 | IO0 |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
:与I / O状态字节是00011000=为0x18。
::
-
将0x550XAA为0x100X010X01为0x000x11的(禁用所有伺服控制模式)
将0x550XAA为0x100X010X01(IO0配置到伺服控制方式)0X010X12
将0x550XAA为0x100X010X010x03的0x14(配置IO0和IO1当作伺服控制模式)
将0x550XAA为0x100X010X01为0x180x29(配置IO3和IO4伺服控制模式)
将0x550XAA为0x100X010X01(配置所有DIO0-7伺服控制模式)0x7F的0x91
返回:
-
没有
DIO 输入/输出模式设置
Header | Add | Length | Cmd | I/O status H | I/O status L | SUM | |
0x55 | 0xaa | 0x10 | 0x02 | 0x02 | IO10~IO8 | IO7~IO0 | SUM |
此命令是用来单独设置数字引脚输入或输出模式。
I / O的状态L
IO7 | IO6 | IO5 | IO4 | IO3 | IO2 | IO1 | IO0 |
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
I / O的状态Ĥ
N/A | N/A | N/A | N/A | N/A | IO10 | IO9 | IO8 |
N/A | N/A | N/A | N/A | N/A | Bit2 | Bit1 | Bit0 |
''注意:在配置此DIO的模式,必须先禁用伺服控制模式。“
例子: 要设置为输出IO1,2,9,其余作为输入的IO。
:I / O的状态L=0x06
IO7 | IO6 | IO5 | IO4 | IO3 | IO2 | IO1 | IO0 |
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
:I / O状态高=0X02
N/A | N/A | N/A | N/A | N/A | IO10 | IO9 | IO8 |
N/A | N/A | N/A | N/A | N/A | 0 | 1 | 0 |
发送:
-
将0x550XAA为0x100X020X020X020x06的0x1B
:返回:
-
NONE(无)
设置DIO输出
Header | Add | Length | Cmd | I/O Value H | I/O Value L | SUM | |
0x55 | 0xaa | 0x10 | 0x02 | 0x03 | IO10~IO8 | IO7~IO0 | SUM |
I / O的值L
IO7 | IO6 | IO5 | IO4 | IO3 | IO2 | IO1 | IO0 |
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
I / O的值 H
N/A | N/A | N/A | N/A | N/A | IO10 | IO9 | IO8 |
N/A | N/A | N/A | N/A | N/A | Bit2 | Bit1 | Bit0 |
当该位设置为1,产量高,当该位被设置为0,输出为低。
注意:如果将DIO配置为数字输入模式,设置的命令,其输出将是无效的。
例子:
-
将0x550XAA为0x100X010X01为0x000x11的(禁用伺服控制模式)
0XAA将0x550x10的0X020X02为0x00为0x000x13中(配置为输出模式IO0-10)
将0x550XAA为0x100x02的0x03的将0x55写入0x55 SUM(设置IO输出将0x55写入0x55)
“提示:这是鼓励禁用,然后再执行任何操作上的DIO的伺服控制模式''
返回:
-
没有
读取DIO输入
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x04 | SUM |
这个命令读取DIO的值时,他们都配置为输入模式。
返回数据:
Header | Add | Length | Cmd | High Byte | Low Byte | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x04 | IO10~IO8 | IO7~IO0 | SUM |
例子:
发送:
-
将0x550XAA为0x100X010X01为0x000x11的(禁用伺服控制模式)
将0x550XAA为0x100x02的0x02的值为0xFF0xFF的0x11的(配置为输入模式IO0-10)
0XAA将0x55为0x10为0x000x04的0x13中(DIO的输入)
:返回:
-
将0x550XAA为0x100x02的0x04的为0x070xFF的0x1B0x0A返回
私服控制
Header | Add | Length | Cmd | S0 Pos | S0 Speed | ... | S10 Pos | S10 Speed | SUM | |
0x55 | 0xaa | 0x10 | 0x22 | 0x05 | 0xD0 | 0xS0 | ... | 0xD10 | 0xS10 | SUM |
此命令将在特定的速度伺服。
配置DIO0-7伺服控制模式后,该命令是用来玩的位置和速度控制的伺服。
“S0的POS”是伺服位置值。该值是从0到180,和90对应的中心位置。 “S0的速度”是伺服的速度值。该值是从0到0xFF和0xFF看台的最高速度。
例子:
-
启用伺服控制模式
0XAA将0x550x10的0X010X010xff的为0x10
-
移动伺服0和1的中心位置在最大速度,最大速度与增量位置移动伺服2-5
将0x550XAA为0x10为0x100x05的为0x5A为0xFF为0x5A为0xFF0x20的值为0xFF0x30处为0xFF0x40的值为0xFF0x50的0xFF的地址0x60为0xFF0x700xFF的0x7E的
返回:
-
没有
阅读模拟输入(12位)
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x06 | SUM |
这个命令读取模拟引脚上的值。
返回:
Header | Add | Length | Cmd | AD0H | AD0L | ... | AD7H | AD7L | SUM | |
0x55 | 0xaa | 0x10 | 0x16 | 0x06 | H | L | ... | H | L | SUM |
返回的模拟值由高、低两个字节组成。 0xFF的映射到3.3V和0x00映射到0V。 ''注意:如果模拟输入电压超过3.36V,返回的数据可能不正确。 “
例子:
发送:
-
阅读模拟输入
将0x550X机管局为0x100X000X060X15
:返回:
-
0XAA将0x55为0x10为0x10为0x060x05的0x1B为0x070x78为0x080x7F的为0x070XE0为0x080xAF为0x07答0xFA回应0X090xED字符0x0D0X240x11的0x0A
配置RS485波特率
Header | Add | Length | Cmd | Baud Rate | SUM | |
0x55 | 0xaa | 0x10 | 0x01 | 0x07 | Baud | SUM |
此命令用于设置波特率的RS485总线。
波特率:
- 为0x00:2400 bps的
- 0X01:9600
- 0x02:将19200个基点
- 0x03的:38400 bps的
- 0x04的:115200
例子:
发送:
-
设为RS485波特率为115200bps
0XAA将0x550x10的0X01为0x070x04的0x1B
:返回:
-
没有
RS485通讯
发送:
Header | Add | Length | Cmd | Data 0 | ... | Data n | SUM | |
0x55 | 0xaa | 0x10 | N | 0x08 | Data 0 | ... | Data n | SUM |
此命令从RS232/TTL通过RS485总线的数据传输。数据的长度不得超过64个。
返回:
Header | Add | Length | Cmd | Data 0 | ... | Data n | SUM | |
0x55 | 9xaa | 0x10 | N | 0x08 | Data 0 | ... | Data n | SUM |
响应数据传送到RS232/TTL。
例子:
发送:
-
触发URM04超声波传感器(设备地址0x11的)
0XAA将0x55为0x10为0x06为0x08将0x550XAA0x11的0X000X010x11的0x3F的
返回:
-
没有
发送:
-
阅读URM04数据(如需这个命令的详细信息,请参阅URM04手册)
0XAA将0x55为0x10为0x06为0x08将0x550XAA0x11的0X000X020X12是0x41
返回:
-
0XAA将0x55为0x10为0x08为0x08写入0x550XAA0x11的0X020X02为0x000X090x1D0x590x0A返回
0X000X09的回报,这是9厘米的距离数据。
通过I2C写数据
Header | Add | Length | Cmd | Device Add | Start Add | Data 0 | ... | Data n | SUM | |
0x55 | 0xaa | 0x10 | N | 0x09 | Deviceaddr | StartAddr | Data0 | ... | Data n | SUM |
此命令将数据写入器件通过I2C。总的数据长度必须小于64个字节。
通过I2C读数据
Header | Add | Length | Cmd | Address | Start Add | Data Length | SUM | |
0x55 | 0xaa | 0x10 | 0x03 | 0x0A | Deviceaddr | StartAddr | Len | SUM |
此命令通过I2C从设备读取数据。总的数据长度是少于4个字节。
例子:
:阅读:
-
触发SRF02超声波传感器的读数(设备地址:0XE0)
将0x550XAA为0x100x03的0X090XE0为0x000x510x4C
-
阅读SRF02数据(更多细节,请参阅SRF02手册)
0XAA将0x55为0x100x03的0x0A返回0XE00X020X02为0x00
:返回:
-
将0x550XAA为0x100x04的0x0A返回0XE00X02为0x000xAC0xAB0x0A返回
(为0x000xAC是回报的距离是172厘米)
:阅读:
-
阅读CMPS03Compass数据(设备地址:为0xC0)
0XAA将0x55为0x100x03的0x0A返回为0xC00X010X010xde
-
阅读HMC6343罗盘数据(设备地址:0x32十六)
0XAA将0x55为0x100x03的0x0A返回0x32十六0x50的0x06的0xa4
:返回:
-
将0x550XAA为0x10为0x080x0A返回0x32十六0x50的为0x00为0x080xFF的0XF00xFF的0xFB的才能0x94的0x0A返回
设置电机参数
Header | Add | Length | Cmd | ENCODER_PPR | GearRatio | WheelPerimeter | SUM | ||||
0x55 | 0xaa | 0x10 | 0x06 | 0x0B | H | L | H | L | H | L | SUM |
该命令设置为直流电动机速度控制的参数。
ENCODER_PPR:每旋转编码器的脉冲。 (默认值12) 齿轮比GearRatio:。对于一个64:0的齿轮比,该值应该是640(0X020x80的)。 (默认值640) WheelPerimeter:周长和车轮(默认值502毫米)
设置电机速度
Header | Add | Length | Cmd | M1_SPEED | M2_SPEED | MOTO_DIR | SUM | ||||
0x55 | 0xaa | 0x10 | 0x05 | 0x0C | H | L | H | L | DIR | SUM |
此命令用于设置电机的转速。
- M1_SPEED/M2_SPEED由两个字节(高和低)。为132厘米/秒的速度,M1_SPEED将是0x00的0x84。
- MOTO_DIR是方向控制。字节的低4位的是电机1的方向。字节的高4位的是电机2的方向。
Motor 2 | Motor 1 | ||||||
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0是向前,F是落后的。例如,设置电机1前进而设置的电机向后移动。在MOTO_DIR将看起来像:
Motor 2 | Motor 1 | ||||||
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
实际价值的MOTO_DIR将0XF0。
例子:
发送:
-
设为在4厘米/ s的电机转速(前锋)
将0x550XAA为0x100x05的0x0C为0x000x04的为0x000x04的为0x00为0x28
-
设为在4厘米/ s的电机转速(向后)
将0x550XAA为0x100x05的0x0C为0x000x04的为0x000x04的值为0xFF0x27的
:返回:
-
没有
读取电机转速
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x0D | 0x1C |
返回:
Header | Add | Length | Cmd | M1_PV_CPS | M2_PV_CPS | SUM | |||
0x55 | 0xaa | 0x10 | 0x04 | 0x0D | H | L | H | L | SUM |
读电机电流
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x0E | 0x1D |
此命令读取电机的电流。
返回:
Header | Add | Length | Cmd | M1_Curent | M2_Curent | SUM | |||
0x55 | 0xaa | 0x10 | 0x04 | 0x0E | H | L | H | L | SUM |
当前值是16位,其中包括两个字节(高和低)。目前的单位是毫安。
设置PID参数
Header | Add | Length | Cmd | P | I | D | SUM | |
0x55 | 0xaa | 0x10 | 0x03 | 0x0F | Kprop | Krate | Kint | SUM |
kprop:比例增益 krate:微分增益 编制品:积分增益
''注意:增益值10多个。例如,如果实际的K是0.1,然后Kprop必须是0.1x101(0x01)的。 “
设置电动机驱动模式
Header | Add | Length | Cmd | Drive Mode | SUM | |
0x55 | 0xaa | 0x10 | 0x01 | 0x10 | Mode | SUM |
This command sets the motor driven mode. 模式: :值:0X00 :PID速度控制。这是一个闭环控制方法。电机参数必须设置适当的速度控制。 :值:0X11 :直接功率控制。这是一个开环控制方法;参数不影响电机。
例子:
发送:
-
设置电机驱动模式直接功率控制模式
0XAA将0x550x10的0X010x10的0x11的成0x31
-
设置电机向前移动4%的电力
将0x550XAA为0x100x05的0x0C为0x000x04的为0x000x04的为0x00为0x28
:返回:
-
没有
设置电机功率
Header | Add | Length | Cmd | Motor 1 Power Ratio | Motor 2 Power Ratio | SUM | |
0x55 | 0xaa | 0x10 | 0x02 | 0x11 | S1 | S2 | SUM |
此命令用于设置电机的功率。
值功率比的S1/S2是从0-200。 100(0x64)的代表一个句号。 200(TWDR的),代表最大的前进的动力。 0(0X00),代表最大的后退动力。
读取编码器数据
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x12 | 0x21 |
返回:
Header | Add | Length | Cmd | M1_ENCODE | M2_ENCODE | SUM | |||
0x55 | 0xaa | 0x10 | 0x04 | 0x12 | H | L | H | L | SUM |
M1_ENCODE,M2_ENCODE:两个字节16位值代表电机的旋转计数器。
改变电机方向时,编码器需要重置。
例子:
-
阅读编码器
将0x550XAA为0x100X000X120×21
返回:
-
将0x550XAA为0x100x04的0X12为0x000x3C0x03的0x530xB70x0A
重置编码器
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0x13 | 0x22 |
这个命令重置编码器的柜台。
例子 :
-
重置编码器的计数器
将0x550XAA为0x10为0x000x13中0x22
返回:
-
没有
阅读版本
Header | Add | Length | Cmd | SUM | |
0x55 | 0xaa | 0x10 | 0x00 | 0xFF | 0x0E |
此命令读取版本。
返回数据:
Header | Add | Length | Cmd | Board Code | Version | Revision | SUM | |
0x55 | 0xaa | 0x10 | 0x03 | 0xFF | 0x01 | V1 | V2 | SUM |
板代码:0X01(SDB board)
例子 :
-
将0x550XAA为0x10为0x000xff的0x0E的
返回:
-
将0x550XAA为0x100x03的值为0xFF0x010x020X02为0x160x0A
Version | Date | Author | Content |
0.1 | 2010/4/25 | Chen | Create Document |
1.0 | 2010/6/1 | Chen | First Version Released |
购买 SDB V2.0 传感器驱动板 (SKU:DFR0057)
category: Product Manual category: DFR Series category: Motor Controllers