白宇
摘 要:本設(shè)計(jì)以LPC2136微處理器芯片為硬件核心,外擴(kuò)工業(yè)常用的控制接口、通訊接口以及常用的功能模塊,在實(shí)時(shí)操作系統(tǒng)uC/OSⅡ下開發(fā)片內(nèi)外設(shè)和外部擴(kuò)展器件的驅(qū)動(dòng)。平臺(tái)軟件中實(shí)現(xiàn)了Modbus協(xié)議棧,可以實(shí)現(xiàn)主機(jī)和從機(jī)的組網(wǎng)通訊。
關(guān)鍵詞:ARM;Modbus;LPC2136;開發(fā)平臺(tái)
DOI:10.16640/j.cnki.37-1222/t.2016.06.010
0 引言
隨著硬件開發(fā)水平以及工業(yè)現(xiàn)場工藝水平的提高,工業(yè)現(xiàn)場對(duì)工業(yè)儀表提出更高的要求,傳統(tǒng)的51系列單片機(jī)因其片內(nèi)資源相對(duì)較少,需要擴(kuò)展的器件較多,大數(shù)據(jù)量的計(jì)算完成周期較長,實(shí)時(shí)性難以控制等不利因素正在被不斷的淘汰,工業(yè)產(chǎn)品為了盡快占領(lǐng)市場,常常把產(chǎn)品的研發(fā)時(shí)間壓縮的很短;為了不必每次都從底層做起,設(shè)計(jì)了一個(gè)基于ARM和Modbus協(xié)議的嵌入式工業(yè)控制開發(fā)平臺(tái)。平臺(tái)選擇ARM微處理器,加入以IC公司生產(chǎn)的大量片內(nèi)外設(shè),使ARM系列處理器擁有非常優(yōu)良的應(yīng)用性能。在ARM中安裝uC/OSⅡ操作系統(tǒng),并在uC/OSⅡ環(huán)境下開發(fā)可剪裁、可移植的平臺(tái)軟件,實(shí)現(xiàn)Modbus協(xié)議的主從機(jī)通訊。使用此平臺(tái)開發(fā)的主機(jī)具有較高且可靠的實(shí)時(shí)性,可組建工業(yè)總線網(wǎng)絡(luò),實(shí)現(xiàn)集中控制,靈活性高,維護(hù)和升級(jí)成本低,易于擴(kuò)展等優(yōu)點(diǎn)。
1 硬件設(shè)計(jì)
(1)器件選擇。平臺(tái)硬件主要由高性能ARM、4~20mA電流產(chǎn)生電路、接口隔離、計(jì)數(shù)器、數(shù)據(jù)存儲(chǔ)和RS232串口構(gòu)成。其中高性能的ARM采用NXP公司的LPC2xxx系列ARM7中的LPC2136.擁有一個(gè)SPI、一個(gè)SSP、兩個(gè)UART、一個(gè)DAC、兩個(gè)ADC、256KB的FLASH和32KB的RAM等片內(nèi)外設(shè)。4~20mA電流產(chǎn)生采用AD421芯片配合外圍芯片。接口隔離采用高速電偶合成器6N137和雙向光耦繼電器AWQ210.計(jì)數(shù)器采用16位可編程計(jì)數(shù)器8254.數(shù)據(jù)存儲(chǔ)采用I?C接口的電源監(jiān)控芯片CAT1025中的E?ROM。RS-232串口采用美信的MAX232。
(2)平臺(tái)硬件連接。1)、LPC2136與8254的連接。由于LPC2136沒有總線結(jié)構(gòu),搭建時(shí)需要用GPIO來模擬8254的數(shù)據(jù)線和控制信號(hào)線。雖然8254是5V供電,但是LPC2136的GPIO口可以承受5V電壓的數(shù)字信號(hào),兩者之間不需要電平轉(zhuǎn)換可以直接連接;2)LPC2136與AD421的連接。AD421是SPI控制方式,為外部接口電路,不可以直接與LPC2136直接連接,因此設(shè)計(jì)電源隔離模塊隔離電源,用高速光電耦合器件6N137隔離SPI總線。
2 平臺(tái)軟件設(shè)計(jì)
為了方便平臺(tái)軟件的移植和剪裁,每個(gè)模塊都有相應(yīng)的配置文件(頭文件)。配置文件中都定義了宏USE_XXXX,其中,XXXX是模塊的名稱。當(dāng)USE_XXXX標(biāo)志位enable時(shí),是相應(yīng)的功能模塊可以使用,否則模塊disable。
(1)LPC2136片內(nèi)外設(shè)的驅(qū)動(dòng)。平臺(tái)用到的片內(nèi)外設(shè)有UART控制器、I?C控制器、看門狗控制器、SPI控制器、SSP控制器和RTC控制器。其中UART控制器、I?C控制器、SPI控制器和SSP控制器接口采用中斷方式發(fā)送和接收數(shù)據(jù)。在驅(qū)動(dòng)模塊的配置文件中定義配置參數(shù),通過修改配置參數(shù)的值,來改變驅(qū)動(dòng)接口函數(shù)的配置。如:在UART0驅(qū)動(dòng)的配置文件中定義宏RS_485_R0()和RS_485_S0(),就可以使UART0驅(qū)動(dòng)用于RS-485進(jìn)行通訊。
(2)可編程計(jì)數(shù)器8254的驅(qū)動(dòng)和應(yīng)用函數(shù)。平臺(tái)使用了4片8254芯片。由于LPC2136沒有總線結(jié)構(gòu),采用模擬總線和控制信號(hào)的方式。在驅(qū)動(dòng)的配置文件中,定義了數(shù)據(jù)線D0~D7、CS1~CS2、A0~A1、WR和RD,使用時(shí)根據(jù)實(shí)際硬件連接修改。配置文件中定義了宏CS1_EN、CS2_EN、CS3_EN和CS4_EN,若其值為1,則對(duì)應(yīng)芯片的驅(qū)動(dòng)可用,否則被屏蔽。如:定義宏CS1_EN為0,片選為CS1的8254芯片驅(qū)動(dòng)不可用。
用戶應(yīng)用函數(shù)包括:計(jì)數(shù)器初始化、儲(chǔ)存計(jì)數(shù)器值和讀計(jì)數(shù)器值。平臺(tái)采用鎖存回讀的方式讀取計(jì)數(shù)器8254中的16位計(jì)數(shù)值。為保證各個(gè)計(jì)數(shù)器工作時(shí)的一致性,在鎖存計(jì)數(shù)器值前,調(diào)用OS_ENTER_CRITICAL()宏定義關(guān)閉中斷和任務(wù)調(diào)度,鎖存結(jié)束調(diào)用OS_EXIT_CRITICAL()宏定義恢復(fù)中斷和任務(wù)調(diào)度。在讀計(jì)數(shù)器值時(shí),保存計(jì)數(shù)值的緩沖區(qū)可能被其他任務(wù)操作,為了保證臨界代碼段的完整性,同時(shí)使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()宏定義。
(3)CAT1025中E?ROM的讀寫函數(shù)。CAT1025中E?ROM的讀寫函數(shù)是在I?C驅(qū)動(dòng)函數(shù)的基礎(chǔ)上編寫的,通過修改配置文件中的宏定義I?CWrite和I?CRead的值來確定使用I?C0或I?C1控制器。根據(jù)CAT1025的特性,讀操作時(shí)只有確定起始地址和數(shù)據(jù)個(gè)數(shù)即可,而寫操作采用頁寫模式,本設(shè)計(jì)的寫CAT1025中E?ROM的操作函數(shù)實(shí)現(xiàn)一次寫任意頁面、任意地址和不限數(shù)量的功能,用戶不必考慮換頁問題。
(4)Modbus協(xié)議的實(shí)現(xiàn)。采用ModbusRTU協(xié)議,實(shí)現(xiàn)從機(jī)協(xié)議棧和主機(jī)協(xié)議棧部分。通過修改協(xié)議棧的配置文件,可把控制器設(shè)置為主機(jī)、從機(jī)或即為主機(jī)又為從機(jī)。主機(jī)物理層使用LPC2136的UART1,從機(jī)物理層使用LPC2136的UART0,根據(jù)協(xié)議棧的主從機(jī)設(shè)備描述信息初始化UART的波特率、停止位、奇偶校驗(yàn),實(shí)現(xiàn)RS-232或RS-485通訊。主從機(jī)協(xié)議棧主要實(shí)現(xiàn)了讀線圈、讀離散量輸入、讀保持寄存器、讀輸入寄存器、寫單個(gè)線圈、寫多個(gè)線圈和寫多個(gè)寄存器的功能。通過修改配置文件,可以確定使用哪些功能。
3 結(jié)束語
ARM的迅速發(fā)展,使其逐漸取代了傳統(tǒng)51單片機(jī)在工業(yè)儀表中的應(yīng)用。本文介紹了基于ARM和Modbus協(xié)議的嵌入式工業(yè)儀表控制器開發(fā)平臺(tái),硬件設(shè)計(jì)合理,工作可靠,軟件采用先進(jìn)技術(shù),移植和裁剪方便,通用Modbus協(xié)議,使儀表通訊可靠,并可組建工業(yè)網(wǎng)絡(luò),具有實(shí)用價(jià)值,是工業(yè)儀表控制器的可靠平臺(tái)。
參考文獻(xiàn):
[1]周立功.深入淺出ARM7-LPC213x/LPC214x(上冊(cè))[K].北京:北京航天航空大學(xué)出版社,2005.
[2][美]Jean J.Labrose著,邵貝貝等譯.嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-Ⅱ(第二版).北京:北京航天航空出版社,2003.
[3]Modbus協(xié)議,http://www.chinakong.net.