高旭東,徐澤清,韓喜春
(黑龍江工程學(xué)院 電氣與信息工程學(xué)院,黑龍江 哈爾濱150050)
RS-485網(wǎng)絡(luò)由于實現(xiàn)簡單、造價低廉、可靠性高、支持的廠家多,在工農(nóng)業(yè)生產(chǎn)、交通、教育、環(huán)境、國防和科研等領(lǐng)域有著廣泛應(yīng)用。半導(dǎo)體廠商不論是CPU芯片還是接口芯片都對RS-485提供了強有力支持,Cypress公司生產(chǎn)的PSOC系列芯片中用固件元件UART可以實現(xiàn)多個串行接口。PSOC(Programmable System on Chip)作為一款新的嵌入式系統(tǒng)設(shè)計平臺,在原8051核和ARM Cortex-M3核的基礎(chǔ)上,在芯片的PLD實現(xiàn)可配置的固件元件提供給用戶,使設(shè)計人員根據(jù)項目需求靈活地選擇可配置外設(shè)與微處理器自動連接。利用PSOC提供的模擬和數(shù)字資源,設(shè)計者也可以定制需要的特殊元件。PSOC集成開發(fā)環(huán)境帶有100個左右的嵌入式設(shè)計中常有的外圍器件,能夠滿足大多數(shù)項目需求。特別是它提供的高精度模擬和模擬數(shù)字混合外設(shè)元件,是該器件的主要特色。采用PSOC實現(xiàn)的RS-485測控網(wǎng)絡(luò)的系統(tǒng)結(jié)構(gòu)如圖1所示,系統(tǒng)具有多個從節(jié)點,圖中只畫出1個。由PSOC實現(xiàn)的RS-485網(wǎng)絡(luò)與其它微處理器的顯著區(qū)別是可以放置多個UART串行接口、UART功能可以根據(jù)需要增減、提供節(jié)點地址識別功能和強大的API(應(yīng)用程序接口)函數(shù)支持。
圖1 RS-485測控網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)
以PSOC為主控元件設(shè)計的RS-485網(wǎng)絡(luò)的主節(jié)點和從節(jié)點固件原理圖分別如圖2和圖3所示。從圖2看出,主控節(jié)點中只包含3個芯片:PSOC、ADM2483和ADM3251E。ADM2483是ADI公司生產(chǎn)的磁隔離RS-485接口芯片,用它實現(xiàn)主節(jié)點和從節(jié)點的電氣隔離,每個從節(jié)點也使用該芯片實現(xiàn)與其它節(jié)點的電氣隔離(圖3沒有畫出來)。ADM3251E是ADI公司生產(chǎn)的磁隔離RS-232接口芯片,用它實現(xiàn)主節(jié)點與上位機的電氣隔離。與光電隔離相比,ADI公司的磁隔離器件也是RS-485和RS-232收發(fā)器,接口簡單、隔離電壓高、功耗低、速度快和連接節(jié)點多。
PSOC原理圖設(shè)計非常方便,在工作空間瀏覽器中打開TopDesign.cysch文件,在元件庫中選擇元件放置到畫布,然后進行元件參數(shù)配置,需要連線的與其它器件連線,有些器件不需要連線。畫完原理圖后,打開文件*.cydwr進行引腳鎖定(分配引腳)。在圖2中,UART_1用于與上位機進行通信,通過UART_1接收到上位機的命令和數(shù)據(jù)后,PSOC的CPU將其轉(zhuǎn)換成從節(jié)點接收的數(shù)據(jù)格式,再通過UART_RX傳送給從節(jié)點。UART_RX接收到從節(jié)點的數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)格式后經(jīng)UART_1傳到上位機。因為上位機沒有9位地址識別的通信方式,所以UART_1采用8位通信方式,UART_RX采用9位通信方式與從節(jié)點進行通信。主節(jié)點功能就是協(xié)議轉(zhuǎn)換器,將上位機命令和數(shù)據(jù)轉(zhuǎn)換成從節(jié)點能識別的格式。液晶顯示屏LCD用于顯示上位機和從節(jié)點的實時信息。電容式觸摸鍵盤CapSense用于輸入控制命令和配置參數(shù),對從節(jié)點進行配置。emFile是一個嵌入式文件系統(tǒng)固件元件,用于連接SD卡存儲歷史數(shù)據(jù)。
在圖3的從節(jié)點原理圖中,磁隔離RS-485收發(fā)器(圖中沒畫出來)與PSOC中的UART_TX相連,用于和主節(jié)點進行通信。圖中含有的固件元件功能和作用分別是IDAC8_1和VDAC8_1,為8位電流輸出和電壓輸出型數(shù)模轉(zhuǎn)換器,最多可以使用4個這種器件。AMux_1模擬多路開關(guān),可以放多個,每個最多32通道,受芯片引腳數(shù)量限制,本設(shè)計采用差動8通道。模擬開關(guān)的輸出作為可編程增益放大器PGA_1和PGA_2組成的差動放大器的輸入,PGA_1和PGA_2的輸出作為模數(shù)轉(zhuǎn)換器ADC的差動輸入。狀態(tài)寄存器Status_Reg_1用于開關(guān)量輸入,控制寄存器Control_Reg_1用于開關(guān)量輸出,可以放置多個開關(guān)量器件,受PSOC引腳數(shù)量限制。計數(shù)器Counter_1用于脈沖量輸入,PWM_1用于脈沖量輸出,數(shù)據(jù)存儲器EEPROM_1用于節(jié)點的配置參數(shù)存儲。
PSOC的固件元件大多數(shù)是可配置元件,元件隨配置參數(shù)不同而具有不同的功能。元件的配置參數(shù)可以在設(shè)計時配置,也可以在程序運行時通過系統(tǒng)提供的API函數(shù)動態(tài)修改。本設(shè)計中用到的元件較多,下面選擇幾個元件介紹其參數(shù)和配置方法。
圖4 IDAC的屬性配置
IDAC的屬性配置如圖4所示。電流源的極性設(shè)置為正,電流范圍為0~2mA,初始值可任意,速度為低速,數(shù)據(jù)源為CPU,選通模式為寄存器寫。VDAC的設(shè)置與此類似。
PGA的屬性配置如圖5所示。增益1~50,選擇8,功耗選擇高,參考電源選擇內(nèi)部地。
圖5 PGA的屬性配置
如圖6所示,ADC可以4個配置切換運行,本設(shè)計只選擇1個配置。采樣模式為連續(xù)采樣,分辨率為20位,轉(zhuǎn)換速率100Hz,輸入模式為差分,輸入范圍1.024V,緩沖放大器增益為1,參考電壓為內(nèi)部1.024V。
圖6 ADC的屬性配置
UART的屬性配置如圖7和圖8所示。在圖2中的UART_1配置為全雙工模式,波特率為115 200,8位數(shù)據(jù)位,無校驗位,1位停止位,高級配置中選擇RX字節(jié)接收中斷,其余按缺省設(shè)置;UART_RX配置為全雙工模式,波特率為115 200,9位數(shù)據(jù)位,校驗類型為Mark/Space,1位停止位,高級配置中選擇RX字節(jié)接收中斷,地址模式選擇軟件字節(jié)到字節(jié)Software Byte by Byte、Address#1和Address#2為本機地址,設(shè)置16進制地址值,用于將接收的地址與此地址進行比較,相符就接收隨后的字節(jié)數(shù)據(jù),其余按缺省配置。圖3中UART_TX的配置與UART_RX除地址外其余相同。
本設(shè)計中的軟件設(shè)計包括上位機、主節(jié)點和從節(jié)點的程序設(shè)計。上位機采用VB2008作為開發(fā)平臺,通過串行通信控件實現(xiàn)與主節(jié)點的通信。本文主要介紹如圖9、圖10和圖11所示的主節(jié)點和從節(jié)點程序設(shè)計方法。
PSOC的突出特點就是軟件設(shè)計工作量低,根本不需要知道所使用的元件是怎樣實現(xiàn)的,只需要知道所使用的元件的功能、性能和一些使用該元件的配置參數(shù)即可通過系統(tǒng)提供的API(應(yīng)用程序接口)函數(shù)實現(xiàn)對元件運行的控制。一般的程序只需要編寫兩類函數(shù):中斷函數(shù)和main函數(shù)。設(shè)計好固件原理圖后,在Creator圖形化集成開發(fā)環(huán)境就可以通過編譯在工作空間瀏覽器中生成各個元件的C語言文件和頭文件。如果元件可以產(chǎn)生中斷,在該元件的C語言源程序文件中就會產(chǎn)生中斷程序框架,只要在這個中斷子程序框架內(nèi)的放置代碼提示信息位置輸入你的中斷程序代碼即可[6]。
圖9 RS-485主節(jié)點程序流程
在圖9主節(jié)點的主程序流程圖中,在main函數(shù)中根據(jù)主程序任務(wù)流程圖編寫出整個項目的控制源代碼,在代碼中調(diào)用了許多系統(tǒng)生成的API函數(shù)實現(xiàn)對元件的控制。中斷和一些元件需要運行與元件相關(guān)的API函數(shù)啟動,例如UART_RX的啟動函數(shù)為UART_RX_Start(),在啟動函數(shù)中調(diào)用該元件的初始化函數(shù)。主節(jié)點除了顯示信息和配置從節(jié)點,主要功能是實現(xiàn)上位機與從節(jié)點的數(shù)據(jù)交換,將上位機的8位數(shù)據(jù)格式轉(zhuǎn)換為從節(jié)點通信使用的9位數(shù)據(jù)格式。主節(jié)點在發(fā)送數(shù)據(jù)前,要通過 API函數(shù) UART_RX_SetTxAddressMode(UART_RX_SET_MARK)設(shè)置 UART發(fā)送的數(shù)據(jù)是地址,UART能自動控制發(fā)送的數(shù)據(jù)串只有第一個字節(jié)具有地址標(biāo)志UART_RX_SET_MARK,其余字節(jié)標(biāo)志為UART_RX_SET_SPACE,即數(shù)據(jù)字節(jié)。設(shè)置完地址標(biāo)志后,要發(fā)送數(shù)據(jù)的第一個字節(jié)設(shè)置從節(jié)點地址。接收數(shù)據(jù)相對復(fù)雜些,在接收中斷子程序中實現(xiàn),如圖11所示。在數(shù)據(jù)接收子程序中讀取狀態(tài)寄存器和數(shù)據(jù)寄存器數(shù)據(jù),通過狀態(tài)位UART_RX_RX_STS_MRKSPC判斷讀取到數(shù)據(jù)寄存器中的數(shù)據(jù)是地址還是數(shù)據(jù),如果是地址,判斷是否是本機地址,是本機地址就將本機地址標(biāo)志位置1,如果不是本機地址,本機地址標(biāo)志位置0,退出中斷子程序。如果是數(shù)據(jù)字節(jié),本機地址標(biāo)志是1,判斷是否是包結(jié)束符,是包結(jié)束符,就送包結(jié)束符到接收數(shù)據(jù)包數(shù)組,并將數(shù)據(jù)包標(biāo)志置1,如果不是包結(jié)束符,就將數(shù)據(jù)字節(jié)追加到接收數(shù)據(jù)包數(shù)組,退出中斷子程序。如果本機地址標(biāo)志是0,退出中斷子程序。從節(jié)點的主程序流程圖和接收中斷子程序流程圖如圖10和圖11所示。
圖10 RS-485從節(jié)點程序流程
通過PSOC的UART元件在本設(shè)計中的實際應(yīng)用可以看出,在圖形化集成開發(fā)環(huán)境Creator的強大功能支持下,采用PSOC一個核心器件就可以實現(xiàn)RS-485多功能測控模塊的設(shè)計,該模塊具有模擬量輸入和輸出、開關(guān)量輸入和輸出、脈沖量輸入和輸出功能。利用PSOC開發(fā)工業(yè)控制網(wǎng)絡(luò)模塊具有集成度高、造價低、開發(fā)周期短和可靠性高等特點。PSOC是嵌入式設(shè)計中很有發(fā)展前途的混合信號處理器,值得在工農(nóng)業(yè)生產(chǎn)、教育和國防科技等領(lǐng)域推廣應(yīng)用。
圖11 主節(jié)點和從節(jié)點接收中斷子程序流程
[1]Cypress Semiconductor.PSoC Development kit Guide[EB/OL].http://china.cypress.com/ID=38240@113.Feb,2011.
[2]Cypress Semiconductor.Universal Asynchronous Receiver Transmitter[EB/OL].http://www.cypress.com/docID=32438.Dec,2011.
[3]何賓.可編程片上系統(tǒng)PSoC設(shè)計指南[M].北京:化學(xué)工業(yè)出版社,2011.
[4]曹祁,王曉萍,郭振武.Modbus協(xié)議在數(shù)據(jù)采集儀中的實現(xiàn)[J].機電工程,2004,1(6):49-50.
[5]穆巖,陳波.基于RS485總線和 ModBus RTU通訊協(xié)議的漿紗機速度監(jiān)測系統(tǒng)[J].工業(yè)控制計算機,2011,24(5):29-30.
[6]韓喜春,高旭東,張春燕.基于PSOC的通用計數(shù)器設(shè)計[J].黑龍江工程學(xué)院學(xué)報:自然科學(xué)版,2011,25(3):48-52.
[7]曾媛,于曉明,張開生.嵌入式冷庫環(huán)境監(jiān)控系統(tǒng)的設(shè)計[J].計算機測量與控制,2011,19(3):565-567.