天天看點

示波器調試RS485通信波形圖

由于筆者在調試STM32移植的MODBUS協定的時候遇到了一些問題,需要借助示波器來看波形,而關于485通信波形相關的資料網上不多,是以把自己調試過程中的波形記錄下來。

硬體:STM32單片機,1個主機和10個從機,移植MODBUS協定,采用輪詢機制,主機挨個詢問從機,從機采集一些資訊回複給主機。

原理圖:使用帶隔離的晶片ADM2483,PA1,PA2,PA3指的是單片機的引腳,分别是使能,TXD和RXD。

示波器調試RS485通信波形圖

代碼:基本上是http://www.openedv.com/forum.php?mod=viewthread&tid=98367&highlight=modbus

根據自己的業務稍微做了簡化和修改。

以下是主機詢問以及從機回答的波形,兩組。測試的是AB兩線的電壓差

示波器調試RS485通信波形圖

以下是一組主機詢問與從機回答的波形,中間間隔7ms左右。注意,MODBUS規定兩組資料之間必須有3.5字元的間隔,我的單個字元時長大約1ms,是以這個間隔不得小于3.5ms。

示波器調試RS485通信波形圖

以下是一個指令的波形,可以看出一個指令用時約為8ms多一點,而一個指令是8個字元,通常情況下1個字元包括1位起始位、8位資料位(一般情況)、1位校驗位(或者沒有,本例子沒有校驗位)、1位停止位(一般情況下)。也就是一個字元是10位,由此可以推算出波特率:10bit / 1.05ms X 1000 ≈ 9600 bit/s

示波器調試RS485通信波形圖

以下兩圖是把波形進一步“放大”,嘗試從波形裡讀出資料。約4格表示一個字元。

此圖是上圖前四格的第一個字元,也就是10位,起始位總是低電平,而結束位是高電平,8個資料位,低位在前。可以看出,第一格式起始位的低電平,接下來是連續3個高電平和5個低電平,最後一格是結束位的高電平。中間的資料位是1110 0000,由于低位在前,是以實際是0000 0111,也就是0x07

示波器調試RS485通信波形圖
示波器調試RS485通信波形圖

下圖的黃色線是A線對地電壓,藍線是B線對地電壓。為了友善觀察,第一個圖把兩個波形完全分開了,第二個圖的“地”在同一水準線上。而A減去B,也就是黃色減去藍色,就可以得到465總線上的電壓情況。可以看出,單個A或是B的波形都不是很理想,定時A-B的波形還不錯。大概這就是485通信穩定的一個原因了吧。

示波器調試RS485通信波形圖
示波器調試RS485通信波形圖

繼續閱讀