RS485匯流排除錯總結

2021-07-12 07:50:47 字數 1526 閱讀 5299

【原文 rs485匯流排除錯總結】

這裡把這三天來除錯rs485匯流排所遇到的問題和經驗教訓總結一下,備忘。

這兩天主要做的是把keller 30x系列工業用壓力變送器的rs485介面和stm32微控制器聯通,並將資料通過usb口**到pc上。

我首先直接使用keller 30x連線電腦的rs485介面,這自然沒有問題,用keller自帶的小軟體直接就能看到結果。

其次讓stm32的rs485介面和電腦連線,這步除錯整整用了1天半,遇到了幾個比較棘手的問題:

傳送時,由於rs485為

半雙工模式

,傳送時需要處理收發轉換。

傳送前將t/nr線拉高

,然後用串列埠傳送乙個位元組的資料。

傳送完之後不能馬上把t/nr線拉低,需要等待一會兒(大約傳送1~2位的時間,視波特率而定),等接收方確認收到停止位後,再把t/nr拉低進入接收模式

。接收時和傳送同理,電腦向微控制器傳送資料時停止位起碼要有2位,以保證微控制器收到停止位,否則連續傳送時會把後一位資料中的1->0跳變認作起始位,導致傳輸錯誤

晶元選擇方面,要認清max3485和max485的區別。max3485是cmos電平的,用3.3v供電。max485是ttl電平的,用5v供電。stm32微控制器的io都是cmos電平,所以理應使用max3485晶元。如果一定要做ttl和cmos的電平轉換,記住cmos可以驅動ttl,而ttl驅動cmos時需要上拉電阻。如果電平搞錯了,最明顯的狀況就是傳送正常而接收亂碼。

rs485的終端電阻不要亂接。rs485的終端電阻是接在匯流排最末端防止電波反射的,如果線很短乾脆就不要接了,否則反而容易把差分訊號拉小,使訊雜比降低

rs485的ab線上的上下拉電阻個人認為沒有必要接。首先max3485內部有上下拉電路,本身就能夠把ab線鉗位在1上;其次,如果線纜很長,裝置所處的地電位和主機板所處的地電位很可能不一樣,附加上下拉電阻反而會產生附加的暗電流,會把差分訊號拉小,降低訊雜比。

stm32的tx口要配置成推挽輸出模式,rx口要配置成內建上拉模式(當然也可以配置成懸空模式,在電路板上用電阻上拉)

最後嘗試將keller 30x和stm32微控制器連線,悲劇就發生了。keller 30x的485介面完全是針對電腦設計的,(9600,n,8,1)的配置下一幀連續傳送20多個位元組。正如上文所述,微控制器需要至少1位的安全時間用於處理中斷程式,在接受keller的快速連發時,下一位元組的開始位到來時,微控制器還處於中斷處理程式中,所以直接將其忽略了,這導致微控制器將資料中出現的1->0的跳變認作下一位的起始位,使後續傳輸全部出錯。

不幸的是,keller 30x的通訊晶元不能程式設計,所以也無法給它加入安全事件。最後我只能採用的模擬訊號a/d轉換的方式來採集keller 30x的壓力訊號。這個故事告訴我們,以後設計面向微控制器的uart介面時(不管是rs232,rs485還是ttl,cmos),一定要考慮到目標微控制器的效能。微控制器不比電腦,處理乙個串列埠接收中斷一瞬間就可以完成,向微控制器傳送資料時,兩位元組之間一定要留足安全時間,以保證目標微控制器有足夠的時間處理中斷,讀取暫存器中的資料。stm32微控制器已經算是快的了,處理乙個中斷尚且需要1位的時間,如果是51的話,相信這個時間還會更長。

RS 485匯流排前世今生

一 rs232和rs485的區別 rs 232採取的是單端不平衡傳輸方式,其收發端的資料訊號都是相對於地訊號的,所以共模抑制能力 差。再加上雙絞線分布電容的影響,其最大傳輸距離僅為15公尺,最高傳輸速率只有20kbit s 2560byte s 485匯流排採用了平衡傳送和差分接收介面標準,使用半雙...

通訊匯流排 RS485(二)

rs485通訊匯流排究竟使用幾根線?這個問題之前沒有深究過。趁著使用modbus通訊的機會仔細研究了下。通訊時使用隔離電源已沒有疑問 如有疑問,可參考我 rs485 一 文章 現在有個新的問題,使用隔離電源後,是否要將節點的隔離電源地連線在一起。原因分析 rs485兩邊的gnd不連線,如果將gnd連...

RS485匯流排和 CAN匯流排區別

can匯流排特點 rs485介面標準特點 1 rs 485的電氣特性 邏輯 1 以兩線間的電壓差為 2 6 v表示 邏輯 0 以兩線間的電壓差為 2 6 v表示。介面訊號電平比rs 232 c降低了,就不易損壞介面電路的晶元,且該電平與ttl電平相容,可方便與ttl 電路連線。2 rs 485的資料...