RS232C串行通訊接口的應(yīng)用
2009-07-07 09:12
RS232C串行通訊接口的應(yīng)用
2009-05-27 14:31
猜猜看圖一上接在PC電腦后面板上的小電路是什么?
圖1:接在電腦后面板的小電路
也許你能猜到這上面有一塊51單片機(jī),,但我想你猜不到它的作用,。這正是這一期的實(shí)例制作――利用電腦控制繼電器。圖二就是連接了8個繼電器的控制電路,。有不少朋友也許像我一樣在少年時代曾幻想著自己動手把自己家中的電器都自動化且能用電腦去控制,,而到了今天這些已不是神話但要實(shí)現(xiàn)它還是要付出很多金錢。對于業(yè)余愛好者也許大家能從這個實(shí)例中得到一些啟發(fā),,又或者重新點(diǎn)燃你的童年夢想,。用電腦實(shí)現(xiàn)繼電器的控制有很多方法,可以用串行接口,,LPT接口,,ISA卡,PCI卡等等,,這一期就用電腦串口結(jié)合單片機(jī)控制多達(dá)24個繼電器的實(shí)例來講解一些串口的基本知識,,能做到控制繼電器的閉合斷開,也就意味著能控制各種電器的開和關(guān),,也可以控制電機(jī)的轉(zhuǎn)動或轉(zhuǎn)向,,還有這個制作還能用電腦讀取電路IO端口的邏輯狀態(tài),也就是說電路可以把邏輯(開關(guān))信號反饋到電腦讓電腦程序做相應(yīng)的判斷,,可以借此實(shí)現(xiàn)很多的自動控制,,當(dāng)然你也可以改進(jìn)它使用它實(shí)現(xiàn)家居的自動化電腦化。這一制作的靈感和沖動就是來自我童年的夢想,,不知讀者朋友你是否也有和我一樣的童年夢想,。
制作中用到電腦的串行接口來進(jìn)行命令字符的發(fā)送和接收。先來看看圖三和圖四,,相信熟悉電腦的朋友不會對它們陌生,。圖三就是RS232C的DB-9接口形式,一般PC電腦都會配備1到2個,,也就是通常說的串口(也稱COM口),。圖四則是RS232C的DB-25接口形式,最常見的就是出現(xiàn)在上網(wǎng)用的Modem(調(diào)制解調(diào)器)上與計(jì)算機(jī)連接用的接口,。RS232C早在1962年由美國電子工業(yè)社會(EIA)公布,,1987年修改后正式改名為EIA-232D,,但是標(biāo)準(zhǔn)修改并不多,,所以絕大部分人仍用舊的名稱,。RS232C串行通訊接口標(biāo)準(zhǔn)被廣泛用在計(jì)算機(jī)和各種外圍設(shè)備的串行連接,它也是數(shù)據(jù)終端設(shè)備(DTE Data Terminal Equipment)如計(jì)算機(jī),,與數(shù)據(jù)通信設(shè)備DCE(Data Communication Equipment)如Modem的標(biāo)準(zhǔn)接口,。RS232C不僅可以用在兩臺設(shè)備之間的串行連接,還可以通過中間設(shè)備進(jìn)行遠(yuǎn)距離的通信,。串行通訊就是將數(shù)據(jù)分解成二進(jìn)制位用一條信號線,,一位一位按順序傳送。它的優(yōu)點(diǎn)是占用線路少,,遠(yuǎn)距離通信時可以極大地降低成本,。
圖2:串口控制繼電器板
圖3:電腦后的RS232C串行接口(DB9)
圖4:Modem后的RS232C串行接口(DB25)
電路原理: 整個制作的主要電路可以分成四部分組成:RS232/TTL電平轉(zhuǎn)換、串行信號處理,、控制信號的輸入輸出和繼電器驅(qū)動電路,。圖五是前三部分的電路的整合電路圖,圖六則是繼電器驅(qū)動電路圖,。下面對各電路做簡單的分析,。
RS232/TTL電平轉(zhuǎn)換電路 這一部分的作用將RS232C和單片機(jī)串口的TTL電平相互轉(zhuǎn)換,使得兩個設(shè)備可以相互通訊,。AT89C51單片機(jī)串口的電平標(biāo)準(zhǔn)是TTL電平標(biāo)準(zhǔn):高電平為+5V,,低電平為0V,而RS232C的電平標(biāo)準(zhǔn)是EIA電平標(biāo)準(zhǔn):高電平為+3V~+15V,,低電平為-3V~-15V,,在實(shí)際應(yīng)用中常用±12V或±15V,在PC電腦中因所用的芯片或電路不同通常在±9V~±12V之間,。要注意的是在RS232C中任何一條信號線的電壓均為負(fù)邏輯關(guān)系,,即邏輯"1"為-5~-15V;邏輯"0" +5~+15V ,,其噪聲容限為2V,,也就是說要求接收器能識別低至+3V的信號作為邏輯"0",高到-3V的信號作為邏輯"1",。為了讓EIA電平轉(zhuǎn)換成TTL電平,,電路中用了兩個BC547和R4、R5,、R6,、R7、D1組成簡單的電平轉(zhuǎn)換電路,。整個電路只要求信號的收發(fā),,所以只用到RS232C接口中的RXD,、TXD和地,通過電平轉(zhuǎn)換電路連接在AT89C51的TXD,、RXD和地(具體引腳定義請看下文介紹),,也就是說RS232C的接收端連到單片機(jī)的發(fā)送端,而發(fā)送端則連到單片機(jī)的接收端,。這樣的電路可以取代專用的RS232/TTL轉(zhuǎn)換芯片(如MAX232),,滿足一般的制作要求(可以參考《簡單的RS232C電平轉(zhuǎn)換和串口竊電》)。
串行信號外理和控制信號輸入輸出 這一部分是整個電路中的核心部分,,使用了一片AT89C51單片機(jī)組成,,用它完成串行字符的接收和處理,同時利用其剩余的I/O引腳做邏輯信號的輸入輸出控制,,通常這樣的電路也稱為下位機(jī),。由于AT89C51已停產(chǎn),大家可以用AT89C52,、AT89S51或AT89S52直接代換使用而無需更改任何電路,。AT89C51的串行接口用電平轉(zhuǎn)換電路連到DB9接口上,這樣就可以配合單片機(jī)的固件程序接收來自電腦RS232C接口的命令字符或向電腦程序反饋狀態(tài)字符,。電路的晶振和復(fù)位電路則和單片機(jī)構(gòu)成最小系統(tǒng),,使單片機(jī)固件程序得以啟動運(yùn)行,D2則是運(yùn)行指示燈在電路正常工作時會以一定頻率閃爍,。
為了使處理后的信息輸出到繼電器控制模塊,,電路設(shè)置了AT89C51的P0,P1,,P2為三組八位并行的I/O接口,,用于把處理后的信號變成TTL邏輯電平輸出到繼電器控制模塊,也可以把輸入到這三組I/O上的邏輯電平或開關(guān)量采集到單片機(jī)中再傳送到電腦,。由于電路板是分模塊設(shè)計(jì)的,,信號處理電路這一模塊不單單可以用于控制繼電器用,它的I/0輸出電平為標(biāo)準(zhǔn)TTL電平,,也可以采集TTL電平,,這樣也就可以根據(jù)需要接在別的并行電路上,如LED數(shù)顯模塊,、步進(jìn)電機(jī)控制模塊,、鍵盤陣列等等。
繼電器驅(qū)動電路 J1,,J2,,J3分別是接在89C51的P0,,P1,,P2I/O口上的插座,,是用于信號輸出,,每一輸出腳控制一個繼電器,因?yàn)锳T89C51的P口在上電后程序執(zhí)行前是輸出高電平的,,所以這里定義了低電平有效,,這樣對應(yīng)圖六的繼電器驅(qū)動電路就使用了PNP的9012做驅(qū)動管,當(dāng)接入9012基極的信號電平為高時,,三極管截止繼電器不吸合,,當(dāng)信號電平為低是,,三極管導(dǎo)通繼電器吸合,。P口引腳高電平為TTL標(biāo)準(zhǔn)最高為+5V,光用一級的PNP驅(qū)動那么只能選用5V的繼電器,,如要選用5V的繼電器可以在9012前加一級9013做電壓放大,,當(dāng)然你也可以用別的繼電器驅(qū)動電路去替換它。要想更好的隔離繼電器工作時給單片機(jī)帶來的干擾影響或使用高電壓繼電器要考慮安全性等,,可以用光電耦合器加在信號處理和繼電器驅(qū)動之間,。
圖5:89C51組成的下位機(jī)(點(diǎn)擊看大圖)
圖6:繼電器驅(qū)動電路(點(diǎn)擊看大圖)
軟件和通訊協(xié)議 實(shí)例中的軟件可以分為上位機(jī)和下位機(jī)。下位機(jī)是由AT89C51與其固件程序組成,,上位機(jī)則是由DELPHI編寫的串口應(yīng)用程序,。上位機(jī)程序主要負(fù)責(zé)向RS232C發(fā)送主控信號和接收處理返回的信號,下位機(jī)則用于接收電腦主機(jī)從RS232C發(fā)送過來的主控信號再根據(jù)信號的內(nèi)容作出相應(yīng)的控制,。上位機(jī)和下位機(jī)通訊時應(yīng)先預(yù)定通訊所用的速率和格式,,這里選用9600波特,8數(shù)據(jù)位,,1停止位,,無校驗(yàn)位。為了保證單片機(jī)在接收到控制字符時不會誤動作,,我用設(shè)定了一個簡單的通訊協(xié)議,,協(xié)議為4個字節(jié),只有當(dāng)前后兩個用于校驗(yàn)的字節(jié)都為0x61時,,中間的控制字才為有效,。如果對通訊的可靠性要求高的話,應(yīng)用到CRC等算法來產(chǎn)生校驗(yàn)字節(jié),。協(xié)議說明如下:
|
字節(jié) |
數(shù)值范圍 |
含義 |
B1 |
0x61(也可以改為0x00-0xFF) |
用于和B4組成簡單的命令有效標(biāo)識,,也可以做為主控板的ID(更改此值要在單片機(jī)程序中修改) |
B2 |
0x00-0x04 |
0x00-0x02分別為表示控制89C51的P0,P1,,P2口,。當(dāng)B2B3都為0x03時,關(guān)閉P0,P1,,P2,。當(dāng)B2B3都為0x04時運(yùn)行89C51內(nèi)置測試程序。 |
B3 |
0x00-0xFF |
向P口輸出的數(shù)據(jù),。 |
B4 |
同B1 |
只有B1,,B4為一樣值時命令才有效。 |
表1 實(shí)例中程序所使用的簡單通訊協(xié)議
注:文中"0x"表示十六進(jìn)制,,如發(fā)送0x61,0x0,0x0A,0x61,,則這時AT89C51的P0口為0x0A(二進(jìn)制為00001010),P0.1,P0.3腳為高電平,P0口其它引腳為低電平,。在單片機(jī)完成命令后會向串口發(fā)送剛才收到4個字節(jié)的字符,,上位軟件也可以根據(jù)這個確認(rèn)下位機(jī)是否順利完成命令。
本實(shí)例提供了單片機(jī)固件的C語言源程序和window下的V1.0示例程序源代碼(DELPHI),。V1.0的演示程序界面見圖七,。示例程序的使用也是很簡單的,把實(shí)例電路連接到電腦的COM1口上,,運(yùn)行示例程序,,這時點(diǎn)擊"內(nèi)置測試"24個繼電器就會逐個閉合一段時間又?jǐn)嚅_,完成后程序會彈出如圖七的成功對話框,,如點(diǎn)擊程序界面上編號的選項(xiàng)框則相應(yīng)P口上的繼電器閉合或斷開,。
上述的所有源碼程序和可執(zhí)行文件都可在本期的附加光盤上找到,更多更新的相關(guān)資料可以訪問筆者的網(wǎng)站http://www.,。(源碼程序可在這點(diǎn)擊下載)
圖7:示例軟件界面
RS232C串口的基本知識 圖八是RS232C的DB25針連接器,,其引腳排列和名稱見表2。在這25個引腳中包含了兩個信道,,分別為主信道和次信道,,其中有4個數(shù)據(jù)線,11個控制線,,3個定時信號線和2個信號地,。次信道為輔助串行通道,其傳輸速率與主信道要低得多,,其它功能都一樣,,但較少的使用到。在AT,、ATX型的PC和新其它新型的PC只提供一到兩個的只有主信道的RS232C串口,,它們通常是使用DB9插針型連接器安裝在PC后面板上,在BIOS或操作系統(tǒng)中稱之為COM1,、COM2(這個設(shè)備號也用于程序編寫中,,也可以用COM3,,COM4等),外觀和引腳定義分別見圖三和圖九,,實(shí)例電路就是要使用它來進(jìn)行和電腦進(jìn)行通訊,。
圖8:DB25型連接器
圖9:DB-9型連接器
引腳號
|
名 稱
|
1
|
保護(hù)地 |
2
|
發(fā)送數(shù)據(jù)TxD |
3
|
接收數(shù)據(jù)RxD |
4
|
請求發(fā)送RTS |
5
|
清除發(fā)送CTS |
6
|
數(shù)據(jù)裝置準(zhǔn)備好DSR |
7
|
信號好GND |
8
|
載波檢測CD |
9
|
保留,供測試用 |
10
|
保留,,供測試用 |
11
|
未定義 |
12
|
次信道載波檢測 |
13
|
次信道清除發(fā)送 |
14
|
次信道發(fā)送數(shù)據(jù) |
15
|
發(fā)送器時鐘TxC |
16
|
次信道接收數(shù)據(jù) |
17
|
接收器時鐘RxC |
18
|
未定義 |
19
|
次信道請求發(fā)送 |
20
|
數(shù)據(jù)終端準(zhǔn)備好DTS |
21
|
信號質(zhì)量檢測 |
22
|
振鈴指示RI |
23
|
數(shù)據(jù)信號速率選擇器 |
24
|
終端發(fā)送器時鐘 |
25
|
未定義 |
表2 RS232C的引腳定義
RS232C的引腳很多,。但在業(yè)余的電子制作中主要用到的是RxD/TxD(數(shù)據(jù)收發(fā)引腳),它也是在上面實(shí)例制作中用到的引腳,。RxD(Received Data)為串行數(shù)據(jù)接收端,,用于接收數(shù)據(jù)用。TxD(Transmitted Data)為串行數(shù)據(jù)發(fā)送端,。其它的控制腳使用時就要注意軟件中的功能和電平的狀態(tài),。當(dāng)兩個設(shè)備都有RS232C串行接口時,只要把它們的RxD,、TxD交叉相連就可以用實(shí)現(xiàn)串行通訊了,,如圖十的連接方式就可以用于兩臺電腦之間的通訊,。當(dāng)兩設(shè)備的接口電平不相同時就要根據(jù)上面提到的EIA和TTL電平轉(zhuǎn)換的問題,。實(shí)際上實(shí)例電路也是用到了圖十的連接方式只不過是多用了電平轉(zhuǎn)換。
串行通信時,,數(shù)據(jù)和聯(lián)絡(luò)信號都是用同一根信號線來傳送的,,這就要求收發(fā)遵守以下幾點(diǎn): 1) 雙方約定的通信的速率(波特率),如在實(shí)例中單片機(jī)和電腦都是使用9600波特,。 2) 雙方約定的數(shù)據(jù)格式(幀格式),,其中包含控制信息應(yīng)該有明確的定義,如實(shí)例中簡單的通訊協(xié)議,。 3) 接收方應(yīng)如何得知一段數(shù)據(jù)的開始和結(jié)束(幀同步),,如實(shí)例中簡單協(xié)議中的B1,B4,。 4) 接收方如何判斷收到的數(shù)據(jù)的正確性(數(shù)據(jù)校驗(yàn)),。 5) 接收方如何從位流中正確地采樣到位數(shù)據(jù)(位同步)。 6) 收發(fā)出錯時如何外理(出錯外理),。
圖10:最簡單的串口連接方式
根據(jù)同步方式的不同,,串行通信又分為兩類,異步通信和同步通信,。同步通信時除了需要發(fā)送數(shù)據(jù)線,,接收數(shù)據(jù)線和信號地線以外,還需要一根時鐘信號線,,時鐘信號用于同步數(shù)據(jù)的發(fā)送和接收,,傳送時是先讀取同步位,兩設(shè)備的同步模式一樣時數(shù)據(jù)開始傳送,直到送完數(shù)據(jù)塊,,發(fā)送大的數(shù)據(jù)塊時要周期性的重發(fā)同步字符,。同步通信主要是應(yīng)用于高速數(shù)據(jù)傳送場合。而在實(shí)例中用到的是最簡單的異步通信,,它不需要上述的時鐘信號線,,只要發(fā)送數(shù)據(jù)線、接收數(shù)據(jù)線和信號地線就可以了,。異步通信發(fā)送的數(shù)據(jù)是以每次一個字符形式發(fā)出,,接收端的同步是通過檢測包含在每個字符的開始和結(jié)束外的同步位而形成,這就造成20%冗余時間,,使速度通訊速度變慢,。
在業(yè)余的制作中通常是使用異步通信,在編寫程序時只要做到上位機(jī)和下位機(jī)的使用同樣的波特率,、數(shù)據(jù)位數(shù),、停止位和有奇偶校驗(yàn)位就可以實(shí)現(xiàn)簡單的RS232C異步通信。當(dāng)然異步通信也可實(shí)現(xiàn)多種傳輸制式,,如單工,、半雙工和全雙工通信鏈路,這里不做詳細(xì)說明了,。
RS232C接口在幾乎每一臺臺式PC電腦中被使用,,在一些新式的筆記本電腦也許只會有USB接口,這時可以用USB轉(zhuǎn)RS232C的設(shè)備取得RS232接口,。在你的智能電子制作中不如加入對它的使用,,一定會給你的制作或發(fā)明增色不少,如我們可以在一些要讀數(shù),、采集的儀表中加入串口采集或控制這樣就可以用電腦強(qiáng)大的處理能力去處理相關(guān)的數(shù)據(jù),,也可以在一些要用到電腦控制的電路制作中用到串口。圖一,、二,、十一是本文實(shí)例制作的實(shí)物圖,關(guān)于它的PCB和相關(guān)的制作資料請?jiān)L問筆者的主頁http://www.,,如有相關(guān)問題和建議也可以聯(lián)系筆者Email:pnzwzw@,。
圖11:實(shí)物圖
零件 |
數(shù)量 |
備注 |
AT89C51 |
1
|
AT89C52,AT89S51/52均可直接代用 |
DB9插座 |
1
|
|
11.0592M晶振 |
1
|
|
發(fā)光二極管 |
1
|
|
10K電阻 |
2
|
以下零件只包括一個主控板和一個繼電器控制板 |
1K電阻 |
11
|
|
8.2K電阻 |
1
|
|
10K8位排阻 |
1
|
|
IN4148 |
9
|
|
BC547 |
2
|
其它同類管子也可 |
30p瓷片電容 |
2
|
|
10uF電解電容 |
1
|
|
10pin扦針 |
5
|
|
9012 |
8
|
|
5V繼電器 |
8
|
如用大于5伏的繼電器需更改驅(qū)動電路 |
10pin接線 |
1
|
|
表3 零件表
|
|
|