前言
学习永无止境!本篇是通信协议之多摩川编码器协议,主要介绍RS485硬件层以及软件层帧格式。
注:本文章为学习笔记,部分图片与文字来源于网络/应用手册,如侵权请联系!谢谢!
一、多摩川协议概述
1.1 多摩川协议简介
多摩川协议是基于485硬件接口的标准NRZ协议,通讯波特率为固定的2.5MHz,所以其硬件接口也就只有数据线(data wire)和电源线(supply wire),不需要时钟线(clk wire)。
内容 |
规格 |
传送方式 |
半双工串行通信 |
同步方式 |
起止同步(1bit起始、8bit数据、1bit停止) |
通信波特率 |
2.5Mbps |
传送顺序 |
LSB在前 |
传送代码 |
NRZ |
传送错误校验方式 |
CRC-8(X^8 + 1) |
1.2 RS485简介
- 简介:RS485是半双工异步串行通信,其使用差分信号,逻辑1(压差在 +2V~+6V ),逻辑0(压差在 -2V~-6V );
- 发送与接收:使用 485 收发器来转换 TTL 电平和 RS485 电平,发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上,接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。
- 硬件原理图
引脚名称 |
功能 |
RO |
接RX,输出引脚 |
RE |
接收使能(低电平有效) |
DE |
发送使能(高电平有效) |
DI |
接TX,输入引脚 |
A |
同向输入/输出 |
B |
反向输入/输出 |
VCC |
+3.3V |
GND |
GND |

二、多摩川协议帧详解
2.1 数据帧构成
- 命令字(Command)格式:1bit起始、3bit固定、4bit数据ID、1bit校验、1bit停止;

数据位 |
校验位 |
ID |
命令字 |
作用 |
CC0 |
CC1 |
CC2 |
CC3 |
CC4 |
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0x02 |
获取一圈数据 |
1 |
0 |
0 |
0 |
1 |
1 |
0x8A |
获取多圈数据 |
0 |
1 |
0 |
0 |
1 |
2 |
0x92 |
获取编码器编号 |
1 |
1 |
0 |
0 |
0 |
3 |
0x1A |
获取全部数据 |
0 |
1 |
1 |
0 |
0 |
6 |
0x32 |
写EEPROM |
1 |
0 |
1 |
1 |
1 |
D |
0xEA |
读EEPROM |
1 |
1 |
1 |
0 |
1 |
7 |
0xBA |
重置ERROR |
0 |
0 |
0 |
1 |
1 |
8 |
0xC2 |
重置圈数 |
0 |
0 |
1 |
1 |
0 |
C |
0x62 |
重置圈数+EEPROM |
- 数据字(Data)格式:1bit起始、8bit数据、1bit停止、低位先行;

- 状态字(State)格式:1bit起始、4bit信息(默认0)、2bitERROR、2bitALARM、1bit停止;

数据位 |
bit |
内容 |
ea0 |
1 |
计数错误 |
ea1 |
1 |
具体有过热、多圈、电池灯报警 |
ca0 |
1 |
请求帧偶校验错误 |
ca1 |
1 |
请求帧分隔符错误 |
- 警报字(ALMC)格式:1bit起始、8bit报警、1bit停止;

数据位 |
bit |
内容 |
dn0 |
1 |
速度异常 |
dn1 |
1 |
超速 |
dn2 |
1 |
计数错误 |
dn3 |
1 |
多圈计数器溢出 |
dn4 |
1 |
过热 |
dn5 |
1 |
多圈错误 |
dn6 |
1 |
电池错误 |
dn7 |
1 |
电池警报 |
- EEPROM地址格式:ADDX:0x00~0x1E,BUSY:读写状态;

- 校验(CRC)格式:G(x) = X^8 + 1 (X = rc0 ~ rc7);

2.2 数据帧格式
2.2.1 获取编码器数据
- 发送数据:CMD;
- 接收数据:CMD+STS+(D0~D7)+CRC;
- CMD与(D0~D7)的关系如下:ABS0~ABS2(单圈),ABM0~ABM2(多圈);

CMD |
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
0x02 |
ABS0 |
ABS1 |
ABS2 |
|
|
|
|
|
0x8A |
ABM0 |
ABM1 |
ABM2 |
|
|
|
|
|
0x92 |
ENID |
|
|
|
|
|
|
|
0x1A |
ABS0 |
ABS1 |
ABS2 |
ENID |
ABM0 |
ABM1 |
ABM2 |
ALMC |
0xBA |
ABS0 |
ABS1 |
ABS2 |
|
|
|
|
|
0xC2 |
ABS0 |
ABS1 |
ABS2 |
|
|
|
|
|
0x62 |
ABS0 |
ABS1 |
ABS2 |
|
|
|
|
|
2.2.2 写入EEPROM
- 发送:CMD+A0+D0+CRC;
- 接收:CMD+A0+D0+CRC;

2.2.3 读取EEPROM
- 发送:CMD+A0+CRC;
- 接收:CMD+A0+D0+CRC;

待续...