基于STC11F02E的RS232/RS485轉(zhuǎn)換器設(shè)計
隨著通信技術(shù)的普及和發(fā)展,人們對測控系統(tǒng)的總體性能要求越來越高,為了便于對分布式的各個現(xiàn)場測控設(shè)備實(shí)現(xiàn)集中控制,現(xiàn)場總線技術(shù)得到了廣泛的應(yīng)用。RS485總線因其硬件設(shè)計和通信協(xié)議簡單、控制方便、成本低廉、傳輸距離遠(yuǎn)以及可掛接多個從設(shè)備等優(yōu)點(diǎn)而成為目前國內(nèi)應(yīng)用較多的現(xiàn)場總線之一。
目前大多數(shù)的分布式現(xiàn)場總線通信系統(tǒng)通常都使用PC機(jī)(或工控機(jī))作為主機(jī)對各個現(xiàn)場設(shè)備進(jìn)行集中控制和數(shù)據(jù)傳輸。PC機(jī)只有標(biāo)準(zhǔn)的RS232接口,而RS232總線和RS485總線的接口電平不兼容,要實(shí)現(xiàn)PC機(jī)和RS485總線構(gòu)成的通信網(wǎng)絡(luò)的連接就必須進(jìn)行RS232和RS485之間的電平轉(zhuǎn)換。因此,進(jìn)行RS232/RS485轉(zhuǎn)換器的設(shè)計就顯得很有必要。
采用單片機(jī)進(jìn)行RS232/RS485轉(zhuǎn)換器的設(shè)計是比較常用的一種方法。傳統(tǒng)的基于單片機(jī)設(shè)計的RS232/RS485轉(zhuǎn)換器存在著以下不足之處:
(1)采用的單片機(jī)和外圍器件個數(shù)較多,給設(shè)計帶來不便,也不利于降低成本,減小體積;
(2)設(shè)置不靈活,不能改變波特率和通信方式,或者更改參數(shù)不方便,使通用性受限。
鑒于以上不足,本文采用宏晶科技公司生產(chǎn)的增強(qiáng)型51單片機(jī)STC11F02E為核心設(shè)計了一款RS232/RS485轉(zhuǎn)換器來彌補(bǔ)這些缺陷,降低了成本,減小了體積,同時能夠方便地進(jìn)行波特率和通信方式的設(shè)置,增強(qiáng)了其通用性;而且單片機(jī)的可編程方式也方便了轉(zhuǎn)換器的功能擴(kuò)展,靈活性大大增強(qiáng)。
轉(zhuǎn)換器的總體結(jié)構(gòu)概述
轉(zhuǎn)換器主要由三部分組成,分別為:RS232電平轉(zhuǎn)TTL電平模塊、RS485電平轉(zhuǎn)TTL電平模塊和單片機(jī)主控制模塊。轉(zhuǎn)換器的總體結(jié)構(gòu)框圖如圖1所示。
圖1 轉(zhuǎn)換器總體結(jié)構(gòu)框圖
RS232電平轉(zhuǎn)TTL電平模塊用來實(shí)現(xiàn)RS232總線和單片機(jī)之間的連接,RS485電平轉(zhuǎn)TTL電平模塊用來實(shí)現(xiàn)RS485總線和單片機(jī)之間的連接,而單片機(jī)主控制模塊起到一個過渡連接的作用,用于協(xié)調(diào)和控制RS232總線和RS485總線之間的數(shù)據(jù)傳輸。
下面詳細(xì)闡述這3個模塊的具體硬件電路設(shè)計。
轉(zhuǎn)換器的硬件電路設(shè)計
RS232電平轉(zhuǎn)TTL電平模塊的電路設(shè)計
這里采用Maxim公司生產(chǎn)的MAX232電平轉(zhuǎn)換芯片設(shè)計RS232和單片機(jī)的電平轉(zhuǎn)換接口電路。
MAX232芯片只需用5V的單電源供電,外加4個電容,就可實(shí)現(xiàn)RS232電平和TTL電平之間的轉(zhuǎn)換,可直接驅(qū)動RS232總線進(jìn)行數(shù)據(jù)傳輸,使用十分方便。采用該芯片可以很容易地實(shí)現(xiàn)單片機(jī)和RS232總線之間的連接,其最高傳輸速率可達(dá)120kbps。
該模塊的具體電路設(shè)計圖如圖2所示。
圖2 RS232電平轉(zhuǎn)TTL電平電路
RS485電平轉(zhuǎn)TTL電平模塊的電路設(shè)計
該模塊的電路采用Maxim公司生產(chǎn)的RS485接口芯片MAX483E進(jìn)行設(shè)計。
MAX483E芯片是一款用于RS485和RS422通信的低功耗總線收發(fā)器,具有±15kV靜電放電沖擊保護(hù)和限擺率驅(qū)動特性,減小了電磁干擾和終端電纜反射,允許高達(dá)250kbps速率的無差錯數(shù)據(jù)傳輸。該芯片只需用5V的單電源電壓供電即可正常工作,而且在一條總線上最多可以連接32個負(fù)載。利用該芯片可以極大地簡化單片機(jī)和RS485總線的接口電路設(shè)計。
該模塊的具體電路設(shè)計圖如圖3所示。
圖3 RS485電平轉(zhuǎn)TTL電平電路
單片機(jī)主控制模塊的電路設(shè)計
該模塊是轉(zhuǎn)換器的核心模塊,轉(zhuǎn)換器的主要功能就是通過該模塊來實(shí)現(xiàn)的。整個電路設(shè)計也非常簡單,只需一片增強(qiáng)型的51單片機(jī)STC11F02E外加一些基本的外圍電路(包括外部晶體振蕩器電路和復(fù)位電路)即可完成設(shè)計。
STC11F02E單片機(jī)為增強(qiáng)型的8051內(nèi)核,具有2KB的片內(nèi)Flash程序存儲器、2KB的EEPROM存儲器和256KB的片內(nèi)SRAM數(shù)據(jù)存儲器。這款單片機(jī)的UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)模塊的最大特點(diǎn)就是通過配置特殊功能寄存器AUXR1中的第7位UART_P1的狀態(tài)可以使UART模塊的兩個引腳(RXD、TXD)接到P3端口的P3.0、P3.1引腳,或者接到P1端口的P1.6、P1.7引腳,從而可以充當(dāng)兩個串口使用。這里主要利用該功能來設(shè)計RS232/RS485轉(zhuǎn)換器。
整個轉(zhuǎn)換器的總體硬件電路圖如圖4所示。
圖4 轉(zhuǎn)換器總體硬件電路圖
轉(zhuǎn)換器的工作原理
轉(zhuǎn)換器硬件電路的工作原理是先將PC機(jī)串口輸出的RS232總線信號電平通過電平轉(zhuǎn)換芯片MAX232轉(zhuǎn)換成STC11F02E可以接收的TTL電平信號,由該單片機(jī)接收PC發(fā)送過來的數(shù)據(jù)。STC11F02E接收完傳來的全部數(shù)據(jù)后將串口引腳從P3.0和P3.1切換至P1.6和P1.7引腳,再把接收到的數(shù)據(jù)通過RS485收發(fā)器MAX483E發(fā)送到RS485總線上。從機(jī)應(yīng)答后將相應(yīng)的數(shù)據(jù)傳至RS485總線上,再通過RS485收發(fā)器轉(zhuǎn)成TTL電平后由單片機(jī)STC11F02E接收。STC11F02E接收完從機(jī)傳來的全部數(shù)據(jù)后將串口引腳重新切換至P3.0和P3.1引腳,再通過MAX232電平轉(zhuǎn)換芯片傳送到PC機(jī)的RS232串口上去,使PC機(jī)接收從機(jī)傳來的數(shù)據(jù)。整個數(shù)據(jù)傳輸過程就這樣反復(fù)地進(jìn)行。
一般的RS485總線的多機(jī)通信方式是半雙工方式,也就是發(fā)送和接收不是同時進(jìn)行的,某一個終端設(shè)備在某一時刻只能是發(fā)送狀態(tài)或者是接收狀態(tài),所以采用這種方法來設(shè)計RS232/RS485轉(zhuǎn)換器是合理的。這里的關(guān)鍵問題是如何協(xié)調(diào)好P3.0、P3.1和P1.6、P1.7這兩組串口引腳之間的切換,這可以通過單片機(jī)的程序設(shè)計來實(shí)現(xiàn)。
轉(zhuǎn)換器的程序設(shè)計和通信協(xié)議設(shè)計
轉(zhuǎn)換器的程序設(shè)計流程
轉(zhuǎn)換器的整個程序的總體流程圖如圖5所示,主要包括程序初始化模塊、主程序模塊和串行口中斷服務(wù)模塊這三個部分。
圖5 轉(zhuǎn)換器程序流程圖
程序初始化模塊主要完成一些寄存器的初始化工作,包括看門狗設(shè)置、設(shè)定主機(jī)數(shù)據(jù)接收結(jié)束標(biāo)志位MDE和從機(jī)數(shù)據(jù)接收結(jié)束標(biāo)志位SDE、初始化串行口的連接引腳、初始化串行口設(shè)置寄存器和通信波特率、開啟串口中斷和總中斷。主程序模塊主要任務(wù)是完成串行口連接引腳之間的有序切換以及數(shù)據(jù)的發(fā)送。串行口中斷服務(wù)模塊的功能是完成數(shù)據(jù)的接收并置位標(biāo)志位MDE和SDE。
由于每次通信結(jié)束之后單片機(jī)的UART模塊的引腳總是和主機(jī)相連的,所以每次通信都必須是由主機(jī)發(fā)起的,從機(jī)總是處于接收狀態(tài),只有主機(jī)尋址到從機(jī)時,從機(jī)才可向主機(jī)發(fā)送數(shù)據(jù)。
RS485總線通信協(xié)議設(shè)計
為了保證數(shù)據(jù)傳輸?shù)目煽啃?,必須?guī)定好RS485總線主從式通信的通信協(xié)議。
該轉(zhuǎn)換器采用的通信協(xié)議在傳送每個字節(jié)數(shù)據(jù)時共發(fā)送的數(shù)據(jù)位有10位和11位兩種,具體采用哪種通信方式可以人為進(jìn)行設(shè)置。通信數(shù)據(jù)以信息幀的格式發(fā)送信息,每一信息幀由多個字節(jié)數(shù)據(jù)構(gòu)成,包含地址域、功能域、數(shù)據(jù)域和CRC校驗(yàn)域這4個部分,如表1所示。其中地址域用于選擇要進(jìn)行通信的從機(jī)地址;功能域用于指示要執(zhí)行的具體操作;數(shù)據(jù)域包含所要傳輸?shù)臄?shù)據(jù);CRC校驗(yàn)域用于存放產(chǎn)生的CRC差錯校驗(yàn)碼,保證數(shù)據(jù)傳輸?shù)恼_性。
通信協(xié)議中規(guī)定的通信波特率有2400 bps 、4800 bps 、9600 bps 、19200 bps、38400bps和115200bps六種波特率,默認(rèn)波特率為9600bps,可以根據(jù)實(shí)際需要通過軟件設(shè)定。通信方式和波特率對應(yīng)的設(shè)置參數(shù)存于單片機(jī)自帶的EEPROM存儲器中。
通信協(xié)議中定義的功能碼及其功能如表2所示。將來如果需要擴(kuò)展功能的話,還可以通過在應(yīng)用程序中增加相應(yīng)的功能碼來增加系統(tǒng)對應(yīng)的功能,使得系統(tǒng)功能擴(kuò)展更加靈活。
表1 信息幀標(biāo)準(zhǔn)結(jié)構(gòu)
表2 功能
轉(zhuǎn)換器的試驗(yàn)結(jié)果
為了方便轉(zhuǎn)換器的調(diào)試,這里采用10位的通信方式,即1位起始位、8位數(shù)據(jù)位和1位停止位。其中上位機(jī)為PC機(jī),通信接口為RS232接口;下位機(jī)是以C8051F020單片機(jī)為核心設(shè)計的水泵綜合參數(shù)測試平臺的主控電路板,通信接口為RS485接口。調(diào)試軟件使用串口調(diào)試助手。上位機(jī)和下位機(jī)的連接就是采用上面已經(jīng)設(shè)計好的RS232/RS485轉(zhuǎn)換器。這里設(shè)置從機(jī)地址為01H,采用前面設(shè)置的功能碼進(jìn)行調(diào)試。具體的調(diào)試結(jié)果如圖6所示。
圖6中第1行豎線左邊的數(shù)據(jù)是PC機(jī)發(fā)送03H功能碼讀取從機(jī)外部數(shù)據(jù)存儲器2345H地址單元開始的16個單元中的數(shù)據(jù)時從機(jī)返回的數(shù)據(jù)。主機(jī)發(fā)送的數(shù)據(jù)幀(16進(jìn)制數(shù))為:
01 03 23 45 10 db 12
圖6中第1行豎線左邊部分第1字節(jié)代表從機(jī)地址,第2字節(jié)代表從機(jī)返回的功能碼,第3字節(jié)為從機(jī)發(fā)給主機(jī)的數(shù)據(jù)個數(shù),后面的16個字節(jié)為所讀取的單元的數(shù)據(jù),最后2個字節(jié)為CRC16校驗(yàn)碼。重復(fù)發(fā)送相同功能碼時可以看到返回的數(shù)據(jù)是一樣的,說明通信正常。
圖6中第2行豎線右邊的數(shù)據(jù)是PC機(jī)發(fā)送10H功能碼對從機(jī)外部數(shù)據(jù)存儲器2345H地址單元開始的16個單元寫入數(shù)據(jù)時從機(jī)返回的數(shù)據(jù)。主機(jī)發(fā)送的數(shù)據(jù)幀(16進(jìn)制數(shù))為:
01 10 23 45 10 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff a7 21
圖6中第2行豎線右邊部分第1字節(jié)代表從機(jī)地址,第2字節(jié)代表從機(jī)返回的功能碼,第3和第4字節(jié)分別為外部數(shù)據(jù)存儲器地址的高字節(jié)和低字節(jié),第5字節(jié)代表寫入的數(shù)據(jù)個數(shù),最后2個字節(jié)為CRC16校驗(yàn)碼。重復(fù)發(fā)送相同功能碼時可以看到返回的數(shù)據(jù)是一樣的,說明此時通信也正常。在發(fā)送10H功能碼之后再發(fā)送03H功能碼進(jìn)行檢查,可以看出從機(jī)返回的外部數(shù)據(jù)存儲器2345H地址單元開始的16個單元中的數(shù)據(jù)和剛才寫入的數(shù)據(jù)是相同的,由此可知對應(yīng)功能碼的操作正確,而且通信也正常。
圖6 采用串口調(diào)試助手對設(shè)計的轉(zhuǎn)換器進(jìn)行調(diào)試的結(jié)果
從上面的試驗(yàn)可以看出該轉(zhuǎn)換器可以實(shí)現(xiàn)PC機(jī)和RS485總線的正常通信,說明所設(shè)計的轉(zhuǎn)換器符合預(yù)期的要求。
結(jié)論
本文利用單片機(jī)STC11F02E的串口引腳可以在P3.0、P3.1引腳和P1.6、P1.7引腳之間隨意切換的特性,設(shè)計了一個簡單實(shí)用的RS232/RS485轉(zhuǎn)換器。該轉(zhuǎn)換器結(jié)構(gòu)非常簡單,只用到了三片常用集成芯片外加少量外圍器件便可完成總體設(shè)計,極大地減小了體積和成本,而且轉(zhuǎn)換器的電源還可以通過PC機(jī)的USB接口提供的5V電源來供電,可以省去另外配置電源的麻煩。
該轉(zhuǎn)換器已成功應(yīng)用在所設(shè)計的水泵綜合參數(shù)測試平臺上,實(shí)際試驗(yàn)結(jié)果表明該轉(zhuǎn)換器運(yùn)行穩(wěn)定可靠,可應(yīng)用于由PC機(jī)作為主機(jī)的RS485總線的主從式半雙工通信系統(tǒng)當(dāng)中。