硬件基礎知識和典型應用-關於485方式通信


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnHardware" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

前言

之所以寫這一節博文,主要是說一下關於485的自動收發問題!

不過還是從485怎么來的開始說起,然后到各種具體使用細節.

冒昧問一句:485是什么? 

485是什么呢? 答:485是一種傳輸邏輯0和1電信號的方式!

 

講一下歷史

1.要想知道為啥有485,那要從實際應用中出發,

咱當前使用的這些已經規定好的通信方式,是人們在長期的摸索中最終總結出來的比較好的方式.

最簡單的就像下面這樣子,發送端是5V,接收端接收到5V

發送端是0V,接收端是0V.

但是呢長久以來人們要解決的問題是:如何讓傳輸的電壓更小,傳輸距離更遠,抗干擾性更強!

 

 

 

2.如何讓傳輸距離更遠?

大家都知道導線都是有電阻的,你在這邊電壓是5V,經過導線以后肯定會衰減到5V以下

導線越長,衰減的越厲害!

好多人就在考慮了怎么解決呢??

其實人們就想,直接增加輸出端的電壓,然后RS232傳輸方式就出來了

同時人們規定:

如果要發送高電平信號就把導電的電壓設置為-3V到-15V之間

實現RS232通信方式的芯片有很多(MAX232,SP3232)

假設我要讓對方接收高電平信號,那么其實是這樣子

 

 

 

假設我要讓對方接收低電平信號,那么其實是這樣子

 

 

 

3.但是這樣子還是不能滿足,畢竟無限的提高電壓不是長久之計

后來呢有人發現了用差分的方式傳輸數據

什么是差分呢!

就是用兩根電線作為一個數據線做數據傳輸

咱把其中一根電線叫 A,另一根電線叫B

然后規定:

如果A線電壓比B線電壓高200mV以上,就認為傳輸是高電平信號!

如果B線電壓比A線電壓高200mV以上,就認為傳輸是低電平信號!

 

4.看圖說明

假設我要讓對方接收高電平信號,那么其實是這樣子(A>B)

 

 

 

假設我要讓對方接收低電平信號,那么其實是這樣子(B>A)

 

 

 

5.不過一開始興起來的是RS422通信方式(發送是發送的線,接收是接收的線,分開了)

在這里引入一個名詞:全雙工

發送數據的同時也能夠接收數據,兩者可以同步進行  美名曰:全雙工通信

422通信方式發送是發送的線,接收是接收的線,分開了,所以RS422通信方式是支持全雙工通信的

 

 

 

6.后來呢,人們感覺4根線太多就去掉其中兩根(RS485)

不過這樣就出現了另一個名詞: 半雙工

通信的時候在一個時間點,只能單方向的傳輸

左邊發送數據給右邊的時候,右邊不能同時發送數據給左邊.反之亦然.

 

 

 

 

關於串口通信

咱們做單片機的經常會說串口通信

其實當RS232方式通信出來的時候,當時用RS232方式通信叫串口通信

就是老式的台式電腦后面的這個口(RS232出來的時候還沒有出現差分通信方式,所以電腦是沒有USB的)

 

 

 

但是隨着時間的推移,漸漸地把單片機上面的UART通信叫做了串口通信

注意哈,如果你和老工程師聊天,說到串口通信.

你一定要說電腦RS232通信,單片機TTL通信!

說一個我朋友經歷過的故事:

一個老工程師問我朋友,單片機上有串口通信,

是不是直接可以接到電腦上(RS232接口)實現通信??

 

其實這個老工程師那心里面串口通信就是RS232通信

他把單片機的串口通信也認為了是RS232電平的通信了!

 

關於UART通信協議

1.基本上所有的單片機都有UART通信的引腳.現在用的最多的通信協議還是UART.

我就直接舉例子說了.

假設通信的波特率是9600

那么意思就是說每隔  1/9600  秒傳輸1位數據(約104us)

假設傳輸8位數據  0x55(0101 0101) ,然后沒有奇偶校驗,停止位1位

根據UART協議,真實的信號是這樣子的

 

 

 

 

 

 

 

注意1:上面之所以是1010 1010 是因為先傳輸的低位后傳輸高位

注意2:因為是9600HZ所以每隔約104us傳輸一位數據,上面測得的是103.97us

注意3:UART協議規定在傳輸開始的時候是先有一個低電平

(低電平時間就是傳輸每一位的時間,當前為約104us)

 

注意4:最后有一個停止位,停止位就是有一個高電平

(高電平時間就是傳輸每一位的時間,當前為約104us)

當然如果停止位是1.5位,停止時間對於現在來講就是104*1.5 = 156us

如果停止位是2位,停止時間對於現在來講就是104*2 = 208us

 

2.奇偶校驗位

奇校驗:

如果發送的一個字節數據中的數據位中的1(高電平)是偶數個,那么最后的奇偶校驗位需要是高電平

保證整個數據位里面的1(高電平)個數是奇數個.

如果發送的一個字節數據中的數據位中的1(高電平)是奇數個,那么最后的奇偶校驗位需要是低電平

保證整個數據位里面的1(高電平)個數是奇數個.

發送的0x55,有4個1,所以奇偶校驗位需要是高電平,讓1的個數為奇數個

 

 

偶校驗:

如果發送的一個字節數據中的數據位中的1(高電平)是奇數個,那么最后的奇偶校驗位需要是高電平

保證整個數據位里面的1(高電平)個數是偶數個

 

如果發送的一個字節數據中的數據位中的1(高電平)是偶數個,那么最后的奇偶校驗位需要是低電平

保證整個數據位里面的1(高電平)個數是偶數個

 

關於485通信芯片的使用

1.一般哈用MAX485,SP485EE  MAX13487

如果是用在工業控制建議用戶使用6LB184等工業級的芯片

當然還有TVS,磁珠,自恢復保險絲,如果不計成本還需要加上DC-DC隔離(BC0505)還有ADUM1201.

BC0505是5V轉5V的電源隔離芯片,5元左右,用來給485芯片單獨供電

ADUM1201是不讓485的輸入輸出引腳直接接到單片機上,再次隔離一下.

當然,如果防雷擊,記得加上放電管

反正是大家自己去取舍.

 

 

 

2.現在說一下我要說的主題:485的自動收發電路

大家可能說,網上不是很多嗎?

答:網上的做的不夠嚴謹,都有問題!

先看一個

 

 

 

 

注意:單片機的TX默認是高電平,所以485_TX是高電平,三極管導通,RE/DE為低電平.

我現在說一下原理:

首先大家都知道RE/DE處於低電平,芯片處於接收數據狀態

RE/DE處於高電平,芯片處於發送數據狀態.

現在咱看上面的電路,假設咱發送:0x55

加上起始位 ,先發送高位后發低位 ,1位停止位 

發送的電平為:(0  10101010  1) 

發送0:

485_TX為0 ,三極管截止 ,RE/DE為高電平 ,處於發送狀態 ,DI連接的低電平

所以把0發送了出去.

 

然后發送1:

485_TX為1 ,三極管導通 ,RE/DE為低電平 ,處於接收狀態

由於外面的A上拉,B下拉,所以當前信號為1 ,所以可以看做把1發送了出去

 

然后發送0:(后面的就不說了,和上面一樣)

 

 

3.為了保證信號更加的好,很多工業上都用斯密特觸發器做.

一般都使用74HC14 或者 74LS14

 

 

 

如果要問我斯密特觸發器有啥作用,我就直接給你一張圖

 

 

 

如果是使用的74HC14芯片,因為是反向的,

所以上面的信號經過74HC14處理后的信號應該是相反的.

如果想得到正的,可以再經過一路反向器

 

 

 

 

4.和485配合使用,典型電路如下:

(畫的有點不好看,看箭頭方向吧.....)

 

 

 

注:發送數據有兩路信號,一路送給了485的DI,另一路送給了RE/DE

 

假設發送0(第一路信號):(0信號經過兩路反相器最終還是0,然后送給了485的DI引腳)

 

 

 

 

假設發送0(第二路信號):(0信號經過三路反相器最終是1,然后送給了485的DI引腳)

然后用485把0發送了出去.

 

 

 

不過中間經過了一個電路(電容 ,電阻,二極管):電路的作用是延遲一下控制方向的這個引腳

讓數據電平先到達,然后控制方向的后到達.

和大家分析一下吧:

默認 UAER1_TX是高電平,經過兩路反相器以后,74HC14的4引腳輸出高電平

此時給電容充電.

 

然后開始發送數據

發送0的時候74HC14的6和4引腳以相同的時間輸出低電平,

低電平信號已經給了485.

但是4引腳此時先給電容放電.等到74HC14認為1引腳是低電平以后

經過2輸出高電平,把芯片置為輸出狀態,把0發送出去

 

發送1的時候74HC14的6和4引腳以相同的時間輸出高電平,

高電平信號已經給了485.

但是4引腳此時先經過電阻給電容充電電.等到74HC14認為1引腳是高電平以后

經過2輸出低電平,把芯片置為輸入狀態,所以可以看做把1發送了出去.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM