前言
學(xué)習(xí)永無止境!本篇是通信協(xié)議之多摩川編碼器協(xié)議,主要介紹RS485硬件層以及軟件層幀格式。
注:本文章為學(xué)習(xí)筆記,部分圖片與文字來源于網(wǎng)絡(luò)/應(yīng)用手冊(cè),如侵權(quán)請(qǐng)聯(lián)系!謝謝!
一、多摩川協(xié)議概述
1.1?多摩川協(xié)議簡介
????????多摩川協(xié)議是基于485硬件接口的標(biāo)準(zhǔn)NRZ協(xié)議,通訊波特率為固定的2.5MHz,所以其硬件接口也就只有數(shù)據(jù)線(data wire)和電源線(supply wire),不需要時(shí)鐘線(clk wire)。
內(nèi)容 | 規(guī)格 |
---|
傳送方式 | 半雙工串行通信 |
同步方式 | 起止同步(1bit起始、8bit數(shù)據(jù)、1bit停止) |
通信波特率 | 2.5Mbps |
傳送順序 | LSB在前 |
傳送代碼 | NRZ |
傳送錯(cuò)誤校驗(yàn)方式 | CRC-8(X^8 + 1) |
1.2 RS485簡介
- 簡介:RS485是半雙工異步串行通信,其使用差分信號(hào),邏輯1(壓差在 +2V~+6V ),邏輯0(壓差在 -2V~-6V?);
- 發(fā)送與接收:使用 485 收發(fā)器來轉(zhuǎn)換 TTL 電平和 RS485 電平,發(fā)送數(shù)據(jù)時(shí),串口控制器的 TX 信號(hào)經(jīng)過收發(fā)器轉(zhuǎn)換成差分信號(hào)傳輸?shù)娇偩€上,接收數(shù)據(jù)時(shí),收發(fā)器把總線上的差分信號(hào)轉(zhuǎn)化成 TTL 信號(hào)通過 RX 引腳傳輸?shù)酱诳刂破髦小?/li>
- 硬件原理圖
引腳名稱 | 功能 |
---|
RO | 接RX,輸出引腳 |
RE | 接收使能(低電平有效) |
DE | 發(fā)送使能(高電平有效) |
DI | 接TX,輸入引腳 |
A | 同向輸入/輸出 |
B | 反向輸入/輸出 |
VCC | +3.3V |
GND | GND |

二、多摩川協(xié)議幀詳解
2.1 數(shù)據(jù)幀構(gòu)成
- 命令字(Command)格式:1bit起始、3bit固定、4bit數(shù)據(jù)ID、1bit校驗(yàn)、1bit停止;

數(shù)據(jù)位 | 校驗(yàn)位 | ID | 命令字 | 作用 |
---|
CC0 | CC1 | CC2 | CC3 | CC4 | | | |
---|
0 | 0 | 0 | 0 | 0 | 0 | 0x02 | 獲取一圈數(shù)據(jù) |
1 | 0 | 0 | 0 | 1 | 1 | 0x8A | 獲取多圈數(shù)據(jù) |
0 | 1 | 0 | 0 | 1 | 2 | 0x92 | 獲取編碼器編號(hào) |
1 | 1 | 0 | 0 | 0 | 3 | 0x1A | 獲取全部數(shù)據(jù) |
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 | 重置圈數(shù) |
0 | 0 | 1 | 1 | 0 | C | 0x62 | 重置圈數(shù)+EEPROM |
- 數(shù)據(jù)字(Data)格式:1bit起始、8bit數(shù)據(jù)、1bit停止、低位先行;

- 狀態(tài)字(State)格式:1bit起始、4bit信息(默認(rèn)0)、2bitERROR、2bitALARM、1bit停止;

數(shù)據(jù)位 | bit | 內(nèi)容 |
---|
ea0 | 1 | 計(jì)數(shù)錯(cuò)誤 |
ea1 | 1 | 具體有過熱、多圈、電池?zé)魣?bào)警 |
ca0 | 1 | 請(qǐng)求幀偶校驗(yàn)錯(cuò)誤 |
ca1 | 1 | 請(qǐng)求幀分隔符錯(cuò)誤 |
- 警報(bào)字(ALMC)格式:1bit起始、8bit報(bào)警、1bit停止;

數(shù)據(jù)位 | bit | 內(nèi)容 |
---|
dn0 | 1 | 速度異常 |
dn1 | 1 | 超速 |
dn2 | 1 | 計(jì)數(shù)錯(cuò)誤 |
dn3 | 1 | 多圈計(jì)數(shù)器溢出 |
dn4 | 1 | 過熱 |
dn5 | 1 | 多圈錯(cuò)誤 |
dn6 | 1 | 電池錯(cuò)誤 |
dn7 | 1 | 電池警報(bào) |
- EEPROM地址格式:ADDX:0x00~0x1E,BUSY:讀寫狀態(tài);

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

?2.2 數(shù)據(jù)幀格式
2.2.1 獲取編碼器數(shù)據(jù)
- 發(fā)送數(shù)據(jù):CMD;
- 接收數(shù)據(jù):CMD+STS+(D0~D7)+CRC;
- CMD與(D0~D7)的關(guān)系如下: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
- 發(fā)送:CMD+A0+D0+CRC;
- 接收:CMD+A0+D0+CRC;

2.2.3 讀取EEPROM
- 發(fā)送:CMD+A0+CRC;
- 接收:CMD+A0+D0+CRC;

待續(xù)...