|
我是老溫,一名熱愛學習的嵌入式工程師
( k. c6 Y1 S2 `6 N; H' I關(guān)注我,一起變得更加優(yōu)秀!RS485是工業(yè)控制場景下,應(yīng)用得非常廣泛的通信協(xié)議,RS485的差分物理信號在電磁環(huán)境復雜的工業(yè)現(xiàn)場,有強大的抗干擾能力。! p5 Z, J I8 u2 l$ C
& B& h% k/ S5 g- q
對于平時專注于應(yīng)用軟件開發(fā)的工程師,使用RS485進行數(shù)據(jù)傳輸,只要關(guān)注串口的數(shù)據(jù)收發(fā)器即可,但其實在硬件層面,RS485通信的數(shù)據(jù)收發(fā),也需要遵循一定的機制。1 f) C: L; g1 h
8 F$ U5 f" x: _2 O" h
RS485通信接口特點
* Z4 E3 C/ g0 N2 r# l' m4 }& I: P" N" m3 J' ^
作為工業(yè)領(lǐng)域上較常用的通信方式,RS485總線具有以下諸多特點:8 J' Z3 c9 R" j5 T- B( Q4 Z5 y
% ]' b3 W8 A" A1 _
1、收發(fā)器輸出A、B之間的電平為+2V~+6V,是邏輯“1”;為-6V~-2V,是邏輯“0”。信號電平比RS232降低了,不易損壞接口芯片。另有“使能”控制信號,可使收發(fā)器處于高阻狀態(tài),切斷與傳輸線的連接。
) i) \0 Z6 c8 `* B. B" e& F9 L/ g4 E |& U* L; I: D
2、接收器的輸入靈敏度為200mV。即在當接收端A、B之間的電平相差200mV時即可輸出邏輯。7 ^2 V) D$ ^& [- I& Q( L1 a
. r) W7 a% R) Y" B Z! Y+ I3、傳輸速率高(10Mbps),傳輸距離達到1200m)。
" p6 z+ F8 Q4 @( V `6 _, c% u$ l3 E+ X& O7 d) x4 E/ B
4、具有多站點傳輸能力,即總線上允許掛接多達128個收發(fā)器,可建立設(shè)備網(wǎng)絡(luò)。# Z0 s: w; r. j* z9 S7 {( O! _& L
6 v* b9 @" E' K) Y+ A, I- [
5、RS485收發(fā)器共模電壓范圍為-7V~+12V,只有滿足該條件,整個網(wǎng)絡(luò)才能正常工作。當網(wǎng)絡(luò)線路中共模電壓超出此范圍時就會影響通信的穩(wěn)定,甚至損壞接口。0 t; Y! I( `% l* H9 N9 E- L4 V' j8 X
4 |$ ?( g" R5 X) w" w& v! K" ORS485收發(fā)控制方法
, |: |* \3 y, p) X# Z
\2 D1 F) i9 y& i9 S5 PRS485屬于半雙工總線,在實際使用時一般采用主機輪詢或令牌傳遞的方法來分配總線控制權(quán),RS485設(shè)備需要進行發(fā)送和接收的方向轉(zhuǎn)換。
8 I+ P g: n1 [+ s
; [* f' M% b8 U- {6 R5 X- j比較通用的做法是,每個RS485設(shè)備在平時均處于接收狀態(tài),只有在自己有數(shù)據(jù)要發(fā)送時才轉(zhuǎn)換到發(fā)送狀態(tài),數(shù)據(jù)發(fā)送完畢后再次切換回接收狀態(tài)。5 x5 B' f- Z2 `/ K* T9 E* }8 q% S6 F! s
/ a8 x* O+ }- S; T第一種:程序換向控制
! L" g) z! @ y1 M$ @# A3 E
0 k" l( h- R3 f; l/ x4 K最常用的RS485收發(fā)換向方法是程序換向,即由MCU的一個I/O端口控制RS485收發(fā)器件的收發(fā)使能引腳,在平時使RS485收發(fā)器件處于接收狀態(tài)。
% O' r( `. P H- _& ?2 e- b
9 X2 U' P& T W1 e# N6 c如下圖,這里485芯片用TI的SN65LBC184,最大速率達到250Kbps,當有數(shù)據(jù)需要發(fā)送時,MCU將RS485收發(fā)器件引腳(網(wǎng)絡(luò)RS485_EN2)置于發(fā)送狀態(tài),完成數(shù)據(jù)發(fā)送后,再把RS485收發(fā)器件切回接收狀態(tài)。3 K0 g3 ^) P( K2 F z
5 I, I' M; f; m- k: H
3b5wtklvlk164026769621.png (103.64 KB, 下載次數(shù): 0)
下載附件
保存到相冊
3b5wtklvlk164026769621.png
2024-11-26 23:40 上傳
7 j5 L5 a$ @( X7 T" d3 x1 P
這種方式簡單易行,不需增加額外成本,這種方法很多人都會知道并且基本上都用的方法。( B [7 Y! y, ?9 n9 R8 u
第二種:自動換向
# Z- L* k# P& G7 ^) y& L但是,當我們采用某種硬件平臺的工控主板或核心板進行二次開發(fā)時,由于工控主板或核心板上沒有預留出足夠的I/O端口,使得RS485收發(fā)的程序換向方法無法實現(xiàn)。
) b0 [9 f$ W( l在某些特定的情況下,開發(fā)平臺的底層驅(qū)動未對外開放,難以對底層進行二次開發(fā),這種情況下即便有足夠的I/O端口也無法實現(xiàn)程序換向。
4 }7 i3 o; ]9 m& {' h1 @為此,我們需要采用另外一種換向技術(shù),即自動換向技術(shù)。) _ U. j4 w4 L3 I* U8 `" A
自動換向其實就是對使能引腳不需要單獨的I/O口來控制,而是由發(fā)送引腳發(fā)送數(shù)據(jù)時候順便控制了。
8 V. p# W! l7 { {# {# t* b要實現(xiàn)這種方法可以使能那里加一個反相器,如下圖,在空閑狀態(tài)下,串口的發(fā)送信號TXD2為高電平,經(jīng)過反相器后輸出低電平,使SN65LBC184處于接收狀態(tài),而RS485總線由于上下拉電阻的作用處于A高B低的狀態(tài)。+ y9 L* d/ n2 \: ?
當發(fā)送數(shù)據(jù)時,TXD2信號線上的低電平比特位控制SN65LBC184進入發(fā)送狀態(tài),將該比特發(fā)送出去。而高電平比特位則使SN65LBC184處于接收狀態(tài),由RS485總線上下拉電阻把總線置于A高B低的狀態(tài),即表示發(fā)送了高電平。, X' K! t. E. \
ejq2ugp4uox64026769721.png (103.02 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ejq2ugp4uox64026769721.png
2024-11-26 23:40 上傳
( ]& h! x/ A/ \4 I
反相器也可以用三極管代替,如下圖所示,工作原理和加反相器一樣。) |0 o( I7 i: h' `1 u2 |1 H
但是這種方法在發(fā)送高電平時的驅(qū)動能力有限,因此會限制通訊距離,一般適用于距離不遠場合。
/ H$ l4 |! Z; Z% c: m3 a8 [# u
t3e34oi54b064026769821.png (69.72 KB, 下載次數(shù): 0)
下載附件
保存到相冊
t3e34oi54b064026769821.png
2024-11-26 23:40 上傳
* n6 t! H: k) l$ @7 n其實,為了省去控制的麻煩,也可以采用專門的、帶有AutoDirection功能的485芯片,比如MAX13487E,它省去了常用的485使能信號,從而簡化了設(shè)計電路。
+ U+ L- |: V5 [
1taj0wvturs64026769921.png (130.64 KB, 下載次數(shù): 0)
下載附件
保存到相冊
1taj0wvturs64026769921.png
2024-11-26 23:40 上傳
& i( p, N& ^6 V9 T- A7 s+ b9 d
來源:牛x的工程師網(wǎng)友。/ g; O6 n) S; P; J/ \
j1n4ifocilx64026770022.png (769.97 KB, 下載次數(shù): 0)
下載附件
保存到相冊
j1n4ifocilx64026770022.png
2024-11-26 23:40 上傳
# i# u& G3 U7 k" t3 i
# V8 {* e( g1 j
+ C. @9 `4 n! G6 K; [" d
-END-
2 w$ d' S, e! Y! C# D+ l: w+ V往期推薦:點擊圖片即可跳轉(zhuǎn)閱讀
9 _2 S) z/ a. L& q! {& ?! M- x% P$ J
( z' v! P6 t3 p7 y/ ^
' J! A, X, h2 \" K) R4 x" o" Q
/ A0 R c- ?& }* q) k
1 ]2 k& z/ P, [$ O2 _: P4 Z
jpqh0b3lxwl64026770122.jpg (90.88 KB, 下載次數(shù): 1)
下載附件
保存到相冊
jpqh0b3lxwl64026770122.jpg
2024-11-26 23:40 上傳
6 C6 {( o/ d A0 r6 K $ Y4 C4 R- P" i5 o
嵌入式應(yīng)用程序開發(fā),經(jīng)常使用哪些數(shù)據(jù)結(jié)構(gòu)?4 ^+ Y) R N8 m# |
9 f/ v. R. E3 v6 I) @ ( R4 h1 x9 ?4 \/ x3 W R5 `
- H- Q. k5 V; n
. `; m* Q( [0 _% f7 Q3 P( S
e4liopiuqhq64026770222.jpg (100.64 KB, 下載次數(shù): 0)
下載附件
保存到相冊
e4liopiuqhq64026770222.jpg
2024-11-26 23:40 上傳
& N/ m1 X( r) T# @4 u) c
& N9 C' q9 l* q8 Z _ 嵌入式 C 語言運行時的錯誤處理機制
: F2 E- A- K F! S, w: K
% |+ D& t- t8 X; A
6 g* D: c! ]$ O. {
; k3 b5 m& j/ i$ J+ K4 h
rrbuwireyqh64026770322.jpg (219.91 KB, 下載次數(shù): 1)
下載附件
保存到相冊
rrbuwireyqh64026770322.jpg
2024-11-26 23:40 上傳
5 C$ L; `% q, Z; P
% h! ^& z# B- Z, X4 S+ D! f7 B1 c
今年快過完了,明年準備進廠搞嵌入式工控,提前了解各方行業(yè)信息!
, n$ S/ K3 C4 k
& |' P1 A4 q, t2 X- d" H! o
9 O2 A+ P$ E1 @1 J0 @ ! G, G! E3 c! _# b& O& K: \+ X( ?/ \
我是老溫,一名熱愛學習的嵌入式工程師( r% v! {% Z' d' {: E
關(guān)注我,一起變得更加優(yōu)秀! |
|