l 引言 隨著(zhù)計算機技術(shù)和測控技術(shù)的不斷發(fā)展,在以單片機為核心的數據采集系統中,需要實(shí)現單片機和計算機之間的數據交換,并以此來(lái)發(fā)揮單片機和計算機各自的長(cháng)處,提升整個(gè)系統的性能價(jià)格比。 在計算機網(wǎng)絡(luò )和工業(yè)控制系統中,經(jīng)常需要采用串行通信來(lái)實(shí)現遠程數據傳輸。目前,有多種接口標準可用于串行通信,包括RS232、RS422、RS485等。RS232是最早的串行接口標準,在短距離、較低波特率串行通信中得到了廣泛應用。但是,RS232通信存在著(zhù)傳輸速度慢、傳輸距離短、信號容易受到干擾等不足,其應用局限性已日益突出。而RS485通信采用差分方式來(lái)消除噪聲,即信號在發(fā)送前會(huì )分解為正負2條線(xiàn)路,當到達接收端時(shí)將信號相減,使噪聲相互抵消,還原成原來(lái)的信號,這種方式對共模干擾抑制能力較強,已廣泛應用于工業(yè)控制等領(lǐng)域。 要實(shí)現單片機與計算機之間的RS485通信,一般可以采用2種方法:一種方法是在單片機與計算機兩端分別采用RS232與RS485電平轉換裝置;另一種方法是采用RS485通信卡,并將其插在計算機主板上。采用前一種方法的優(yōu)點(diǎn)是硬件裝置安裝簡(jiǎn)便,軟件編程相對簡(jiǎn)單;缺點(diǎn)是通信速率被限制在20 kb/s以?xún)。第二種方法的優(yōu)點(diǎn)是通信距離較遠,速率較高,可達10 Mb/s;缺點(diǎn)是需要安裝通訊卡和驅動(dòng)程序,并進(jìn)行必要的設置。本文采用第二種方法。 2 總體架構 在某型電子設備研制中,選用美國Cygnal公司生產(chǎn)的一種soc型8位單片機C8051F020,對測控系統進(jìn)行數據采集。該單片機是C8051F系列的F02X子系列,其性?xún)r(jià)比在工業(yè)控制領(lǐng)域具有較強的競爭力。它是完全集成的混合信號系統級芯片,具有與8051指令集完全兼容的CIP一51內核,對于熟悉51單片機的技術(shù)人員來(lái)說(shuō),在硬件設計及軟件編程上大大提高了開(kāi)發(fā)效率。 測控計算機采用研華的IPC-610工控機,并選用PCL一846B通信卡進(jìn)行RS485串行數據通信,該通信卡包含4通道,每個(gè)通道可以對32個(gè)節點(diǎn)進(jìn)行通信。 為了實(shí)現單片機與工控機之間的RS485串行通信,必須對單片機的UART輸出電平進(jìn)行轉換,以滿(mǎn)足RS485串行通信需求。選用MAX485接口芯片,它是Maxim公司的一種RS485接口芯片,該芯片的結構和引腳都比較簡(jiǎn)單。 該設計理論上可以實(shí)現1臺工控機(安裝1塊RS485通信卡)對128臺單片機進(jìn)行Rs485串行通信,其總體設計框圖如圖1所示。 圖1 總體結構 3 系統硬件設計 3.1 硬件簡(jiǎn)介 1)C8051F020單片機 C8051F020內部有2個(gè)增強型全雙工UART、SPI總線(xiàn)和SMBus/IC。這些串行總線(xiàn)都用硬件實(shí)現,都能夠向CIP-51內核產(chǎn)生中斷,只需要很少的CPU干預;這些串行總線(xiàn)不“共享”定時(shí)器、中斷或I/O端口等資源,因此可以使用任何一個(gè)或者全部同時(shí)使用。 2)MAX485芯片 MAX485芯片采用+5V電源工作,其額定電流為300“A,它能將UART輸出電平轉換為RS485電平。該芯片有8個(gè)引腳,其內部含有1個(gè)接收器和1個(gè)驅動(dòng)器,R0為接收器的輸出端,接單片機的TXD引腳;DI為驅動(dòng)器的輸入端,接單片機的RXD引腳。/RE是接收使能端,當/RE=0時(shí),MAX485芯片處于接收狀態(tài);DE是發(fā)送使能端,當DE=1時(shí),MAX485芯片處于發(fā)送狀態(tài)。 MAX485芯片的A端與B端分別為接收與發(fā)送的差分信號端。當VA小于VB時(shí),表示發(fā)送信號為“0”;當VA大于VB時(shí),表示發(fā)送信號為“1”。MAX485芯片工作時(shí),A、B兩端之間應當加上匹配電阻尺,一般選用120 Ω;當通信距離較遠時(shí),可以選用300 Ω。 3)RS485通信卡 Rs485通信卡具有較強的抗干擾能力、較高的通信速率以及較低的價(jià)格,在工業(yè)控制等領(lǐng)域具有較強的競爭力和實(shí)用性。選用研華的PCL-846B通信卡,該卡支持RS422和RS485 2種串行通信接口標準,需要通過(guò)跳線(xiàn)進(jìn)行設置。另外,在該通信卡的4個(gè)通道上均預留有焊接終端匹配電阻的焊孔。 3.2 電路設計 采用UART串行總線(xiàn)進(jìn)行通信,因為UART是一種廣泛應用于遠距離、低速率、低成本通信的串行傳輸接口,由于其具有數據線(xiàn)少的特點(diǎn),在數字系統設計中得到了大量應用;镜腢ART通信只需要兩根數據線(xiàn)(RXD、TXD)即可完成數據的相互通信,接收和發(fā)送都是全雙工形式,其中RXD是接收端,TXD是發(fā)送端。 C8051F020單片機有2個(gè)UART(UART0和UARTl),以UART0為例,它的TxD和RXD分別與數字I/0引腳PO.O和PO.1復用,通過(guò)交叉開(kāi)關(guān)配置寄存器進(jìn)行選擇。由于MAX485工作在半雙工狀態(tài),它與單片機連接時(shí)的接線(xiàn)比較簡(jiǎn)單,只需要用單片機某一個(gè)引腳(如PO.2)來(lái)控制RE和DE這2個(gè)引腳。PCL-846B通信卡有4個(gè)通道,選擇通道1與單片機進(jìn)行通信,另外將通道2和通道4進(jìn)行連接,以自發(fā)自收的方式實(shí)現通信卡的自檢。單片機與外部電路的連接關(guān)系如圖2所示。 圖2 硬件電路原理 在使用RS485通信卡進(jìn)行通信時(shí),當信號傳遞到通信線(xiàn)路兩端時(shí),如果阻抗不匹配,可能會(huì )產(chǎn)生信號反射問(wèn)題。信號反射會(huì )造成信號的失真和變形,從而導致通信錯誤。其解決方法就是在通信線(xiàn)路的兩端各連接一個(gè)終端匹配電阻,保證阻抗匹配。當通信距離較短,一般在小于300 m時(shí),可不使用終端電阻。當通信距離大于300 m時(shí),應當使用終端電阻,其阻值必須與通信線(xiàn)路的線(xiàn)性阻抗相同。電阻值一般選取120 Ω左右,當通信距離較長(cháng)時(shí),可以選用300 Ω。 4 軟件設計 4.1 通信方式 C8051F020單片機的UARTo提供4種工作方式(1種同步方式和3種異步方式),以方式1為例:方式1提供標準的異步、全雙工通信,每個(gè)數據字節共包含10位:1個(gè)起始位、8個(gè)數據位和1個(gè)停止位。數據從TX引腳發(fā)送,在RX引腳接收。2在多機通信中,通常選擇方式2和方式3,通過(guò)使用第9數據位和內置UARTo地址識別硬件支持一個(gè)主處理器與多個(gè)從處理器之問(wèn)的多機通信。 為了簡(jiǎn)化UART0的使用和軟件編程,選擇方式1進(jìn)行多機通信,通過(guò)編寫(xiě)串口中斷程序對通信雙方進(jìn)行約定。具體做法是: 1)約定發(fā)送數據的格式,本文約定以“#……*”作為合法的數據格式,即以“#”開(kāi)始和“*”結束作為判斷數據有效性的依據。 2)在“#”和“*”之間的數據是需要的,本文約定以第2個(gè)字符(當設備較多時(shí),可以2個(gè)字符)作為接收設備的識別碼,由接收設備(單片機或上位機)對該字符進(jìn)行判斷,確定是否需要接收該數據。 3)當接收設備需要知道發(fā)送數據的來(lái)源時(shí),也可以約定發(fā)送設備的識別碼(由于每臺設備既可以是發(fā)送設備也可以是接收設備,因此可以約定一個(gè)固定的識別碼),在發(fā)送數據中插入該識別碼(插入位置必須事先約定),即可獲知數據的來(lái)源設備。 4.2 串口波特率 C8051F020單片機有5個(gè)16位通用計數器/定時(shí)器(T0~T4)和一個(gè)片內可編程計數器/定時(shí)器陣列(PCA)。方式1的波特率是定時(shí)器溢出時(shí)間的函數,UART0可以使用定時(shí)器1工作在8位自動(dòng)重裝載方式或者定時(shí)器2工作在波特率發(fā)生器方式產(chǎn)生波特率。以定時(shí)器2為例,其波特率的計算公式是: 串口波特率 式中:SySCLK是單片機的系統時(shí)鐘,RCAP2H和RCAP2L分別為定時(shí)器2的重裝載寄存器的高8位和低8位。 波特率根據數據傳輸速率的實(shí)際需要確定,波特率確定后即可計算出定時(shí)器2的重裝載寄存器的初始值T2。 串口波特率 采用22.1184 MHz晶體振蕩器作為系統時(shí)鐘,波特率為9600 b/s,計算得到T2=FFB8H(十六進(jìn)制)。 4.3 軟件流程 C8051F020單片機內部具有JTAG和調試電路,可以通過(guò)JTAG接口對MCU進(jìn)行非侵入式、全速、在系統調試。根據系統功能需求,對軟件進(jìn)行模塊化設計,并利用Silicon Labs IDE集成開(kāi)發(fā)環(huán)境對單片機進(jìn)行編程與調試。利用C8051F020單片機的中斷系統,直接采用C語(yǔ)言對UART中斷服務(wù)程序進(jìn)行編寫(xiě)。 單片機的串口通信程序可由數據發(fā)送和接收2個(gè)模塊構成。數據發(fā)送模塊首先需要設置UART為發(fā)送狀態(tài),清除發(fā)送標志后向sBF中寫(xiě)入數據,開(kāi)始逐個(gè)發(fā)送字符,數據發(fā)送完成后,恢復UART為接收狀態(tài)。數據接收模塊清除接收標志后讀SBF中的數據,開(kāi)始接收字符,首先判斷接收數據是否有效,然后分析處理數據,接收完數據后,退出接收程序。UART串口發(fā)送和接收模塊的程序流程如圖3所示。 圖3 串口通信程序流程 5 實(shí)驗分析 設計的系統已經(jīng)應用于某型實(shí)時(shí)測控裝置研制中,該測控裝置含有2個(gè)單片機,其主控上位機安裝有l塊RS485通信卡。具體驗證過(guò)程是:將1個(gè)測控裝置與1臺上位機距離50 m進(jìn)行串行通信,通信正?煽。將2個(gè)測控裝置與2臺上位機(均安裝有RS485通信卡)分別相距50 m,通信線(xiàn)路采用并聯(lián),4個(gè)通信節點(diǎn)之間RS485通信正?煽。依次類(lèi)推,在多個(gè)測控裝置與多臺上位機進(jìn)行遠距離通信時(shí),RS485通信均正?煽。 在上位機上通過(guò)串口調試助手可以簡(jiǎn)便地對串口進(jìn)行調試。該調試工具可以實(shí)時(shí)發(fā)送和接收串行數據,數據格式和傳輸速率可調,可以動(dòng)態(tài)觀(guān)察各通信節點(diǎn)的數據收發(fā)情況。串口調試界面如圖4所示。 圖4 串口調試界面 該設計方法成功實(shí)現了單片機與上位機之間的RS485串行通信,在單片機與上位機距離50 m以?xún)瓤梢詫?shí)現115.2 k/ps的高速通信,數據傳輸誤碼率低,完全滿(mǎn)足系統設計指標。 6 結論 通過(guò)在單片機與工控機之間建立RS485串行通信網(wǎng)絡(luò ),利用RS485串行通信的優(yōu)勢,可以保證穩定、快速、遠距離地傳輸數據。設計的系統已經(jīng)在某型實(shí)時(shí)測控裝置研制中得到成功應用,經(jīng)實(shí)驗驗證,數據傳輸正?煽,達到設計要求。 由于設計方法開(kāi)發(fā)成本低、軟件設計簡(jiǎn)單、使用維護方便,其通信設計方法還可以稍加修改移植到其他測控系統中,在計算機通信和工業(yè)控制等領(lǐng)域將會(huì )得到越來(lái)越多的應用。 |