多摩川协议是什么?与SSI/BISS对比怎么选,有免电池方案吗?有齿轮多圈绝对值方案吗?
关于多摩川协议被问及Top3的问题的是:
- 多摩川协议帧格式/CRC怎么算,STM32代码怎么写?
- 多摩川协议有没有齿轮多圈(免电池)编码器?
- 多摩川TS5700/TS5667怎么用国产编码器直接替换?
下面逐一拆解。
一、多摩川协议到底是什么?帧格式/CRC怎么算?
核心定义:多摩川协议是日本多摩川精机专为其绝对值编码器研发的私有串行通信协议,基于RS485半双工差分传输,主打高速、可靠的位置反馈,固定波特率2.5Mbps,是伺服系统、机器人、机床的“标配协议”,本质就是“编码器和驱动器的对话语言”。
1. 帧格式
多摩川协议采用“主从一问一答”模式,主机(驱动器/MCU)发1字节命令,从机(编码器)返回多字节响应,帧格式固定,无需复杂配置,具体如下(实操必背):
① 主机发送帧(1字节):仅包含命令码(如0x02读位置、0xBA清除报警),无需额外冗余字节,极简高效;
② 从机响应帧(N字节):命令码(回声)+ 状态字 + 位置数据(单圈+多圈) + CRC8校验字节,总长度根据命令不同略有差异,读取一次全部数据仅需60μS左右,完全满足伺服高速响应需求。
补充:帧结构细节——起始位1bit + 8bit数据位 + 1bit停止位,无奇偶校验,采用NRZ编码,通信距离可达20米,适配工业现场布线需求。
2. CRC8校验
多摩川协议采用CRC8校验(多项式X⁸+1,即0x01),初始值0x00,很多工程师因为CRC计算错误,导致通信失败、数据跳变,这里直接给出可直接复制的代码(C语言),无需自己推导:
// 多摩川协议CRC8计算(适配所有型号,实测可用)
unsigned char CRC8_MAXIM(unsigned char *dat, unsigned int len){
unsigned char crc_value = 0x00, j;
unsigned int i;
for i=0; i <len; i + + {
crc_value ^= *dat++;
for j=0; j <8; j + + {
if (crc value&0X80){crc value=(crc value <<1)0X01 ;
} else {
crc Value=(CRC value<<1);
}
}
}
return crc_value;
}
关键提醒:校验范围是“命令码+状态字+位置数据”,最后一个字节是CRC校验值,接收端需先校验,再解析数据,否则会出现“数据乱码、偶尔跳数”的问题。
二、协议对比:多摩川 vs. SSI/BiSS,到底选哪个?
多摩川协议、SSI、BISS-C选择哪种协议更适合自己的项目?
这一点其实没有最好的协议,只有最适配的场景:
| 协议类型 | 核心优势 | 核心短板 | 适配场景 |
| 多摩川协议 | 硬件简单(普通RS485)、2.5Mbps高速、CRC强校验、状态反馈丰富、伺服兼容性极强 | 私有协议、不适合长距离(>20m)、不支持多主站 | 伺服电机、机器人、机床、精密设备(绝对值反馈场景) |
| SSI协议 | 抗干扰强、点对点通信、结构简单 | 无校验、无状态反馈、只能读位置、需时钟同步 | 普通精度、干扰小的简单定位场景 |
| BiSS-C协议 | 开源、多主站、双向通信、高速通讯、CRC校验 | 硬件复杂(需FPGA)、开发成本高、生态不如多摩川 | 高端工业机器人、复杂多轴系统 |
三、上位机使用Control Field(CF)通信示例
3.1编码器绝对位置信息读取(分辨率17位、21位、23位)
| 功能指令 | 02(16进制) | 指令说明 | 读编码器绝对值 |
| 数据范围 | 0 ~ X (X为单圈分辨率) | 读/写 | 仅读 |
| 数据类型 | 无符号整数 | 记忆 | 掉电记忆 |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位 |
说明:编码器当前角度 = 编码值 * 360 / 分辨率,编码值为3987732,单圈分辨率为2^23(8388608),编码器当前角度为 3987732 * 360 / 8388608 ≈ 171.13°。
通信示例:
Tx(发送): 02
Rx(接收): 02 00 14 D9 3C F3
注:接收的数据中“02”为CF (命令类型),“00”为SF(编码器状态),“14 D9 3C”为ABS(单圈编码值)换算时低位在前,高位在后(3C D9 14),“F3”为CRC校验,通过换算当前编码值为3987732。
3.2编码器多圈信息读取(分辨率17位、21位、23位)
| 功能指令 | 8A(16进制) | 指令说明 | 读编码器多圈信息 |
| 数据范围 | 0 ~ 65536 | 读/写 | 只读 |
| 数据类型 | 无符号整数 | 记忆 | 掉电清零 |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位 |
说明:多圈编码值 = 圈数 * 分辨率 + 当前编码值,当前编码值为3987732,圈数为2,编码器分辨率为2^23(8388608),多圈值为 2 * 8388608 + 3987732 = 20764948。
通信示例:
Tx(发送): 8A
Rx(接收): 8A 00 02 00 00 88
注:接收的数据中“8A”为CF(命令类型),“00”为SF(编码器状态),“02 00 00”为ABM(圈数)换算时低位在前,高位在后(00 00 02),“88”为CRC校验,通过换算当前圈数为2。
3.3编码器ID信息读取(分辨率17位、21位、23位、25位)
| 功能指令 | 92(16进制) | 指令说明 | 编码器ID信息获取 |
| 数据范围 | 0 ~ X(X为编码器分辨率) | 读/写 | 只读 |
| 数据类型 | 无符号整数 | 记忆 | 掉电记忆 |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位、25位 |
说明:编码器的ID即代表其单圈分辨率
通信示例:
Tx(发送): 92
Rx(接收): 92 00 17 85
注:接收的数据中“92”为CF(命令类型),“00”为SF(编码器状态),“17”为编码器ID,“85”为CRC校验,通过换算编码器ID为23,也代表编码器分辨率为2^23。
3.4编码器全部数据读取(分辨率17位、21位、23位)
| 功能指令 | 1A(16进制) | 指令说明 | 读取全部数据 |
| 数据范围 | – | 读/写 | 只读 |
| 数据类型 | 无符号整数 | 记忆 | 部分掉电清零 |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位 |
通信示例:
Tx(发送): 1A
Rx(接收): 1A 00 20 33 2C 17 02 00 00 00 30
注:接收的数据中“1A”为CF(命令类型),“00”为SF(编码器状态),“20 33 2C”为ABS(单圈绝对值),“17”为编码器ID,“02 00 00”为ABM(编码器圈数),“00”为ALMC(编码器故障标志位),“30”为CRC校验,所有数据换算格式皆低位在前,高位在后原则,换算结果单圈值为2896672,ID为23,圈数为2。
3.5 编码器单圈位置数据读取(分辨率25位)
| 功能指令 | A2(16进制) | 指令说明 | 读取单圈数据(25位) |
| 数据范围 | 0 ~ X (X为单圈分辨率) | 读/写 | 只读 |
| 数据类型 | 无符号整数 | 记忆 | 掉电记忆 |
| 生效方式 | 立即生效 | 适用范围 | 25位 |
说明:本指令仅适用于单圈分辨率25位的编码器
通信示例:
Tx(发送): A2
Rx(接收): A2 00 00 FD FF FF 5F
注:接收的数据中“A2”为CF (命令类型),“00”为SF(编码器状态),“00 FD FF FF”为ABS(单圈编码值)换算时低位在前,高位在后(FF FF FD 00),“5F”为CRC校验,在换算过程中,由于单圈编码器的低七位数据都是0,所以在换算时需将数据右移7位(FF FF FD 00 >>7),最后得出当前编码值为33554426。
3.6编码器多圈位置数据读取(分辨率25位)
| 功能指令 | 2A(16进制) | 指令说明 | 读取单圈数据(25位) |
| 数据范围 | 0 ~ 65536 | 读/写 | 只读 |
| 数据类型 | 无符号整数 | 记忆 | 掉电清零 |
| 生效方式 | 立即生效 | 适用范围 | 25位 |
说明:本指令仅适用于单圈分辨率25位的编码器,总编码值 = 当前圈数 * 单圈分辨率 + 单圈位置数据
通信示例:
Tx(发送): 2A
Rx(接收): 2A 00 00 36 F6 A9 03 00 40
注:接收的数据中“2A”为CF (命令类型),“00”为SF(编码器状态),“00 36 F6 A9”为ABS(单圈编码值)换算时低位在前,高位在后(A9 F6 36 00),“03 00”多圈数据,“40”为CRC校验,在换算过程中,由于单圈编码器的低七位数据都是0,所以在换算时需将十进制数据右移7位(A9 F6 36 00 >>7),最后得出当前编码值为22277228,圈数(00 03)为3圈。
3.7编码器全部数据读取(分辨率25位)
| 功能指令 | 1A(16进制) | 指令说明 | 读取全部数据 |
| 数据范围 | – | 读/写 | 只读 |
| 数据类型 | 无符号整数 | 记忆 | 部分掉电清零 |
| 生效方式 | 立即生效 | 适用范围 | 25位 |
说明:本数据格式仅适用于25位编码器
通信示例:
Tx(发送): 1A
Rx(接收): 1A 00 00 5C 47 19 28 01 00 00 31
注:接收的数据中“1A”为CF(命令类型),“00”为SF(编码器状态),通过通信协议表可发现25位的单圈数据是4个字节,ABS0~ABS2在ENID的前面,还有一个高位字节在ENID的后面,所以“00 5C 47 28”为ABS(单圈绝对值),“19”为编码器ID,“01 00”为ABM(编码器圈数),“00”为ALMC(编码器故障标志位),“C9”为CRC校验,所有数据换算格式皆低位在前,高位在后原则,换算结果单圈值为5279416,ID为25,圈数为1。
3.8编码器故障标志位复位(分辨率17位、21位、23位、25位)
| 功能指令 | BA(16进制) | 指令说明 | 故障标志位复位 |
| 数据范围 | 0 ~ 1 | 读/写 | 仅写 |
| 数据类型 | 无符号整数 | 记忆 | – |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位、25位 |
说明:当编码器SF(编码器状态)与ALMC(编码器故障标志位)有故障提示时,通过手册查询故障点并解决后,使用该指令清除故障标志位。
通信示例:
Tx(发送): BA
Rx(接收): BA 00 5A 31 2C FD
注:在不小于62.5us的时间间隔,连续发送十次复位指令,将故障标志位复位,复位完成后返回数据SF(编码器状态)数值为“00”,代表复位成功,如果不是“00”,可能是故障还未排除。
3.9编码器单圈值置零(分辨率17位、21位、23位、25位)
| 功能指令 | C2(16进制) | 指令说明 | 单圈值置零 |
| 数据范围 | 0 ~ 1 | 读/写 | 仅写 |
| 数据类型 | 无符号整数 | 记忆 | 掉电记忆 |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位、25位 |
说明:要求以不小于 62.5us 的时间间隔连续发送 10 次指令,将任一单圈位置进行复位归零, 即使重新上电,该位置依旧保持复位后的位置数据。
通信示例:
Tx(发送): C2
Rx(接收): C2 00 00 00 00 C2
注:当需要在特定位置给编码器单圈值置零时,连续发送十次置零指令,编码器返回单圈编码值为“00 00 00”,由此说明单圈值已经置零成功,由于编码器的零点与最大值重合,有可能会显示最大值。
3.10 编码器多圈值置零及故障复位(分辨率17位、21位、23位、25位)
| 功能指令 | 62(16进制) | 指令说明 | 多圈数据置零及故障标识复位 |
| 数据范围 | 0 ~ 1 | 读/写 | 仅写 |
| 数据类型 | 无符号整数 | 记忆 | – |
| 生效方式 | 立即生效 | 适用范围 | 17位、21位、23位、25位 |
说明:该复位指令要求以不小于 62.5us 的时间间隔连续发送 10 次指令,将对多圈数据进行复位归零 (不影响单圈数据),同时将所有的故障标志位进行复位。
通信示例:
Tx(发送): 62
Rx(接收): 62 00 BD 72 00 AD
Tx(发送): 8A
Rx(接收): 8A 00 00 00 00 8A
注:当需要在特定位置给编码器多圈值置零时,连续发送十次置零指令,完成后发送“8A”查询多圈数据是否成功置零,为“00 00 00”表示成功,同时故障标志也复位完成。
购买的分辨率不同对应发送的指令是不一样的,具体可以参考欧艾迪选购链接上的SKU或者咨询客服
四、故障排查:多摩川协议通信异常/报警,怎么快速解决?
这是调试时的高频痛点,很多工程师遇到“通信失败、数据错误、ALM报警”就无从下手,其实80%的故障都集中在4个方面,按以下步骤排查,效率最高:
1. 最常见:通信失败(无响应、数据乱码)
排查顺序:
① 接线是否正确(RS485正负极接反是最常见错误,参考TS5667系列接线定义);
② 波特率是否为2.5Mbps(固定值,不能修改);
③ DE/RE方向控制是否正确(发送时拉高,接收时拉低,可通过示波器查看);
④ CRC计算是否正确(用上面的代码校验,避免自己写校验函数出错)。
2. 数据错误/跳数
排查顺序:
① 工业现场是否有强电磁干扰(编码器线缆与动力线分开布线,加装屏蔽层);
② 供电是否稳定(编码器供电5V±5%,避免电压波动);
③ 编码器安装是否偏差(轴向偏差≤0.15mm,轴向窜动<±0.03mm);
④ 校验是否生效(未校验会导致数据跳变)。
3. 报警码(AL10、AL16等)
常见报警及解决方法:
① AL10(电池欠压):多摩川原厂电池型编码器,需更换电池(3~5年更换一次);
② AL16(码盘故障):检查编码器码盘是否污染、损坏,重新安装或更换编码器;
③ 其他报警:通过协议读取状态字,根据状态位判断故障类型(如过速、计数错误)。
4. 调试工具推荐
普通串口助手不支持2.5Mbps波特率,
推荐用:1.支持2.5Mbps高速485模块
2. 示波器(抓RS485差分信号,查看帧格式和时序);3. 逻辑分析仪(排查数据传输时序问题)。
五、多摩川协议有齿轮多圈绝对值编码器吗?国产厂家有哪些?
这是近2年咨询量暴涨的问题,核心需求是“免电池、免维护”,毕竟多摩川原厂电池型编码器,3~5年就要换电池,后期维护成本高,尤其在恶劣环境下,电池容易失效。
核心结论:有,但分原厂和国产
① 多摩川原厂:只有电池多圈,没有齿轮多圈。原厂编码器(如TS5667、TS5700、TS5720系列)均采用锂电池/超级电容备份多圈,断电靠电池记圈数,无齿轮、无磨损、精度高,但依赖电池寿命;
② 国产:支持多摩川协议+齿轮多圈绝对值,不用电池,靠齿轮组机械计数,断电永久记忆,终身免维护,完全兼容多摩川协议,可直接替换原厂电池型编码器。
深圳欧艾迪绝对值齿轮多圈系列,专利齿轮组,断电永久记忆,抗振强,高速RS485多协议兼容,适用于起重设备、通用伺服、精密机床、工业机器人
如果不想频繁换电池、追求免维护,优先选国产齿轮多圈编码器,协议完全兼容,驱动端零代码修改,价格仅为原厂的1/3~1/2;如果有原厂情节、精度要求极致(如半导体设备),选多摩川原厂电池型。
六、兼容与应用:多摩川协议编码器能接哪些驱动器?应用在哪些领域?
1. 驱动器兼容性
几乎所有中高端伺服驱动器都支持多摩川协议,无需额外配置,直接对接:
① 日系:松下、三菱、安川、富士、多摩川原厂驱动器;
② 台系:台达、达纺、东元;
③ 国产:汇川、埃斯顿、禾川、信捷、广州数控等。
关键提醒:部分低端驱动器可能不支持2.5Mbps波特率,选型前需确认驱动器参数。
2. 核心应用领域(高频搜索补充)
多摩川协议主打“高精度、高可靠、上电即知位置”,应用集中在高端装备领域,主要包括:
① 伺服电机&机器人:工业机器人关节、协作机器人、SCARA机器人、Delta机器人;
② 数控机床&精密加工:数控车床、铣床、加工中心、磨床、精雕机;
③ 半导体&面板设备:晶圆切割、贴片机、点胶机、液晶面板检测设备;
④ 光伏&锂电设备:光伏串焊机、锂电池卷绕机、叠片设备;
⑤ 其他:电梯曳引机、起重机、高精度测试平台、军工伺服系统。






10001-500x350.png)


