485 發送的同時如何接收數據

485是通過兩根差分線來傳輸數據,所以總線上要麼是發送的數據,要麼是接收的數據,所以標準兩線485是屬於半雙工的工作模式。既然是半雙工,發送的同時又接收數據,這個問題豈不是很奇怪,並且這樣的實現又有什麼意義。

先看下到底是基於什麼場景我才想到去驗證這麼一個問題。標準485總線上可以同時掛載多個設備,但是隻能有一個為主機,其他的都為從機。

485 發送的同時如何接收數據

這樣主機不主動發送數據,總線上一直都處於空閒狀態。 而從機要發數據一定是主機先對從機進行詢問,然後從機進行應答。

485 發送的同時如何接收數據

這樣的總線上就能保證永遠也不會有數據衝突(也就是同時有多個設備發出來數據)。而我想要的效果就是不要標準的主從模式,而是想要多個主機同時存在。多個主機存在就有可能多個設備同時發數據,造成數據衝突。

而這個發送的同時又接收總線上的數據就是為了驗證總線上數據是否衝突了,比如一個設備在發送0xFF,另一個設備同時發送了0X12。這樣總線上的數據是不是就混亂了。

所以基於為了避免衝突,任何一個設備在發送之前都進行檢查,比如在總線上發送0x55,同時這個設備也打開接收,如果總線上沒有衝突就會收到0x55,如果衝突了接收到的數據和發送的數據就會不同。這個接收就是為了接收自己發送出去的數據進行驗證。

因為手頭上沒有現成的485 板子,就直接拿芯片焊線插上面包板,再連接stm32的uart口,搭建出來驗證的環境:

485 發送的同時如何接收數據

芯片使用的max1483。接線示意圖如下:

485 發送的同時如何接收數據

實現的重點就是RE DE兩個控制腳。根據手冊裡面的描述,RE-低的時候使能RO輸出(也就是AB總線上數據可以直接從RO輸出)。DE為高的時候使能AB輸出,這時候DI上的數據就會被轉為AB差分輸出。

通過DE\\RE 同時拉高或者拉低就可以切換max1483處於發送還是接收狀態。那麼也可以把RE設置為低,DE設置為高來實現同時打開發送和接收。這樣如果485總線空閒的時候就可以保證MCU RX接收到的還是MCU TX發送的數據。

485 發送的同時如何接收數據

最後我也做了測試當MCU TX在發送數據,我又同時通過usb轉485往AB總線上發其他數據,這時候MCU RX接收的就是亂碼了。和最初設想的結果相同,so,485多主機存在就實現了第一步。


分享到:


相關文章: