趙建新
(哈爾濱華德學(xué)院 黑龍江省哈爾濱市 150025)
RS485 通信標準自從上世紀80年代以來,以其傳輸距離遠、抗干擾能力強、布線成本低等優(yōu)點,在工業(yè)控制領(lǐng)域中得到了廣泛應(yīng)用[1]。工業(yè)領(lǐng)域中的PLC、變頻器、電能表等設(shè)備大多采用RS485 通信標準,為了方便用戶實時監(jiān)測這些設(shè)備的狀態(tài)信息,設(shè)計了一種RS485 通信標準的顯示屏,可以讀取工控設(shè)備的狀態(tài)信息并實時顯示到顯示屏上,在工控領(lǐng)域有著廣闊的應(yīng)用空間。
系統(tǒng)硬件組成框圖如圖1所示。
如圖1所示,工控設(shè)備通過RS485 接口把數(shù)據(jù)傳輸至MCU,MCU 將數(shù)據(jù)解包后,得到需要顯示的數(shù)據(jù),如果數(shù)據(jù)中包含文字則會從字庫芯片中查找字模,最后將數(shù)據(jù)顯示到12864 液晶屏上[2]。
MAX3485 是MAXIM 公司生產(chǎn)的一款3.3V 供電的RS485 電平收發(fā)芯片,靜態(tài)電流僅300uA,最高可達到2.5Mbps 傳輸速度,使用廣泛。MAX3485 應(yīng)用電路如圖2所示。
MAX3485 的2 腳和3 腳是使能管腳,低電平為接收狀態(tài),高電平為發(fā)送狀態(tài),因此2 腳和3 腳可以短接,僅需MCU 一個IO口即可控制。
STC12LE5A60S2 是STC 公司生產(chǎn)的一款3.3V 供電的單時鐘/機器周期(1T)的MCU芯片,指令集和管腳兼容傳統(tǒng)8051單片機(如圖3所示),速度比傳統(tǒng)51 單片機快6~12 倍,在工業(yè)控制,強干擾場合比較適用。
本系統(tǒng)運行中涉及到字庫讀取、字模運算等操作,對MCU 運算性能要求高,因此速度快性能強的STC12LE5A60S2 是系統(tǒng)正常工作的保障。
本系統(tǒng)選用GT30L24A3W 為字庫芯片,2.7~3.6V 供電,功耗低,SPI 串行總線接口,操作方便。該字庫芯片內(nèi)建12*12、16*16、24*24、32*32 點陣字庫,支持GB18030 簡繁體漢字、JIS0208日文字符集、KSC5601 韓文字符集等180 國外文字符,并且兼容以上各種文字的Unicode 字符集。橫置橫排的字模排列格式[3]。用戶通過字符內(nèi)碼,計算出該字符所對應(yīng)點陣在芯片中的地址,然后可以從該地址連續(xù)讀出字符點陣信息。
片選輸入(CS#):CS#的下降沿為串行數(shù)據(jù)傳輸開始信號,傳輸期間必須保持低電平,兩條指令之間為高電平。
串行數(shù)據(jù)輸出(SO):數(shù)據(jù)從芯片輸出,在時鐘的下降沿移出。
串行數(shù)據(jù)輸入(SI):數(shù)據(jù)從串行輸入芯片,在時鐘的上升沿移入。
串行時鐘輸入(SCLK):數(shù)據(jù)在時鐘上升沿移入,在下降沿移出。
總線掛起輸入(HOLD#):該信號變低電平并且SCLK 信號為低電平時,進入掛起狀態(tài);該信號變高電平并且SCLK 信號為低電平時,結(jié)束掛起狀態(tài)。
表1:GT30L24A3W 指令參數(shù)表
圖1:系統(tǒng)硬件電路框圖
圖2:MAX3485 應(yīng)用電路圖
圖3:STC12LE5A60S2 管腳圖
本系統(tǒng)選用深圳晶聯(lián)訊電子有限公司生產(chǎn)的JLX12864G-1503型號的液晶屏,使用方便,顯示清晰,廣泛應(yīng)用于人機交互面板。
JLX12864G-1503 液晶模塊選用矽創(chuàng)公司生產(chǎn)的ST7567 驅(qū)動IC,功能強,穩(wěn)定性好,接口豐富,可以采用4 線SPI 或并口連接外部MCU(6800 時序和8080 時序可選)。
圖4:系統(tǒng)整體運行流程圖
工業(yè)領(lǐng)域中的PLC、變頻器、電能表等設(shè)備通信協(xié)議一般為MODBUS 協(xié)議,這種協(xié)議沒有包頭包尾作為標志,不知道該幀是否接收完成,一般采用超時方式。接收超時應(yīng)根據(jù)自己實際應(yīng)用加入,現(xiàn)在大多數(shù)都是硬件中斷接收,一進中斷就將數(shù)據(jù)拷到接收緩存中,等有空再處理這些數(shù)據(jù)就可。但是如果利用循環(huán)查詢時,最好加入超時,讓接收函數(shù)能夠在一段時間內(nèi)持續(xù)檢測是否有數(shù)據(jù)過來。
大部分串口應(yīng)用程序都是以一字節(jié)為單位傳輸,當檢測到特定字符(如換行)才判定一幀數(shù)據(jù)結(jié)束。這樣做的問題在于一旦特定字符受干擾丟失,會導(dǎo)致MCU 誤判。該系統(tǒng)需要以幀為單位傳輸數(shù)據(jù),只要字符與字符之間間隔超過一定的時間,那么就判定這一幀數(shù)據(jù)結(jié)束。
GT30L24A3W 使用SPI 接口和MCU 通信,該字庫芯片的讀取操作只有兩種模式:正常模式和快速模式。指令參數(shù)如表1所示。
正常模式下,需要用指令碼來執(zhí)行每一次操作。讀取操作如下:
(1)首先將片選信號(CS#)拉低,串行數(shù)據(jù)輸入(SI)發(fā)送1 字節(jié)的命令字(0x03)和3 個地址,每一位在串行時鐘輸入(SCLK)上升沿被鎖存。
(2)然后該地址的字節(jié)數(shù)據(jù)通過串行數(shù)據(jù)輸出引腳(SO)移位輸出,每一位在串行時鐘輸入(SCLK)下降沿被移出。(3)讀取字節(jié)結(jié)束后,將片選信號(CS#)拉高,結(jié)束本次操作??焖倌J较?,同樣需要用指令碼來執(zhí)行每一次操作。讀取操作如下:
(1)首先將片選信號(CS#)拉低,串行數(shù)據(jù)輸入(SI)發(fā)送1 字節(jié)的命令字(0x0B)和3 個地址以及一個字節(jié)的Dummy,每一位在串行時鐘輸入(SCLK)上升沿被鎖存。
(2)然后該地址的字節(jié)數(shù)據(jù)通過串行數(shù)據(jù)輸出引腳(SO)移位輸出,每一位在串行時鐘輸入(SCLK)下降沿被移出。
(3)如果片選信號(CS#)持續(xù)保持為低,則下一個地址的字節(jié)數(shù)據(jù)繼續(xù)通過串行數(shù)據(jù)輸出引腳(SO)移位輸出。
以12×12 點陣為例,給出從首地址fontaddr 讀出12×12 點陣字符數(shù)據(jù)的程序操作。
(1)text[i]為漢字GB2312 編碼的高8 位。
(2)text[i+1]為漢字GB2312 編碼的低8 位。
(3)fontaddr 為漢字首地址。
(4)0x3cf80 + 376*24 為12×12 漢字點陣起始地址。
(5)0x3cf80 為12×12 全角字符點陣起始地址。
串口接收到一幀數(shù)據(jù)后,根據(jù)這一幀數(shù)據(jù)中的字符GB2312 碼,計算出該字符在字庫芯片中的首地址,取出字模并顯示到液晶屏上。系統(tǒng)整體運行流程圖如圖4所示。
使用STC12LE5A60S2 單片機芯片和GT30L24A3W 多國語言字庫芯片設(shè)計的LCD12864 顯示器,顯示正常,穩(wěn)定可靠。不足之處在于屏幕尺寸小,顯示文本內(nèi)容有限。