張小松 孔偉鑫 杜涵 孫釩軒 田瀟涵
摘 要: 隨著信息技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)在全球的遍布,使通訊變得更為容易和方便。目前,遠(yuǎn)程測控系統(tǒng)的發(fā)展方向由集中測控轉(zhuǎn)變成為遠(yuǎn)程分布式測控。通過有線或無線的網(wǎng)絡(luò)系統(tǒng)進(jìn)行某工業(yè)生產(chǎn)過程的遠(yuǎn)程測量與控制,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。文中設(shè)計(jì)了基于STM32的遠(yuǎn)程測控單元,并采用UC/OS_II實(shí)時(shí)操作系統(tǒng)。該系統(tǒng)通用性好,配置靈活,易于擴(kuò)展,可存儲大量數(shù)據(jù),響應(yīng)速度快,適應(yīng)于特殊工業(yè)現(xiàn)場應(yīng)用。
1.引言
隨著社會的不斷發(fā)展,遠(yuǎn)程測控技術(shù)被應(yīng)用于各個(gè)生活生產(chǎn)的領(lǐng)域中。在電力、給水、石油、化工等諸多工業(yè)應(yīng)用場合,都需要對一些設(shè)備運(yùn)行狀態(tài)參數(shù)進(jìn)行遠(yuǎn)程測量,并根據(jù)測量結(jié)果實(shí)施相應(yīng)控制,這就需要遠(yuǎn)程測控器系統(tǒng)。遠(yuǎn)程測控器是一種遠(yuǎn)端測控單元裝置,與普通的測控單元相比,該單元應(yīng)具有良好的通訊能力和更加強(qiáng)大的數(shù)據(jù)存儲處理功能,從而更好地對現(xiàn)場信號、工業(yè)設(shè)備狀態(tài)等進(jìn)行監(jiān)測和控制。而新架構(gòu)AMR-v7 cortex-m3的處理芯片,具有處理能力強(qiáng)大,片內(nèi)外圍設(shè)備豐富,易于移植操作系統(tǒng)等突出優(yōu)勢,基于此,本文設(shè)計(jì)了基于該架構(gòu)芯片STM32的遠(yuǎn)程智能測控器單元。
2.總體設(shè)計(jì)
一般遠(yuǎn)程智能測控單元主要應(yīng)用于復(fù)雜苛刻環(huán)境下的工業(yè)控制現(xiàn)場,系統(tǒng)的智能化、可靠性、穩(wěn)定性要求都比普通測控單元要高。因此設(shè)計(jì)時(shí),選用的CPU不僅本身性能要高,而且片內(nèi)可擴(kuò)展功能要盡可能多,才能有效簡化設(shè)計(jì),提高系統(tǒng)整體的穩(wěn)定性和可靠性。
3.系統(tǒng)硬件設(shè)計(jì)
3.1 CPU選型
系統(tǒng)CPU選用意法半導(dǎo)體的STM32F103 VCT6,該MCU芯片基于ARM Cortex-M3內(nèi)核設(shè)計(jì)。Cortex-M3是一個(gè)32位的核,采用Tail-Chaining中斷技術(shù),對中斷的處理是完全基于硬件的,不僅中斷反應(yīng)速度快,一個(gè)中斷最多可減少12個(gè)時(shí)鐘周期數(shù)。同時(shí),中斷數(shù)量也可以減少,在實(shí)際應(yīng)用中可比普通內(nèi)核單片機(jī)減少70%中斷。這款CPU具有高性能、低成本、低功耗的特點(diǎn),片內(nèi)集成了USART、SPI、IIC、GPIO、定時(shí)器、AD等外圍設(shè)備接口,完全能夠滿足本系統(tǒng)的設(shè)計(jì)要求,同時(shí)具有JTAG功能,方便調(diào)試升級。
3.2 數(shù)字量輸入輸出處理單元設(shè)計(jì)
MCU具有5組16個(gè)GPIO,該引腳均可作為數(shù)字輸入、輸出端口使用,系統(tǒng)使用其中8路作為數(shù)字量輸入引腳定義,8路作為數(shù)字量輸出引腳定義。數(shù)字量輸入的有效直流電壓為最小55V,具有光耦隔離作用,隔離電壓為2500Vrms(最?。?shù)字量的輸出的直流有效電壓為12V,單路最大電壓為2A。
在數(shù)字輸入電路中,輸入端需要加上合適的濾波電容、二極管、電阻等器件進(jìn)行相應(yīng)的保護(hù),然后連接到光耦隔離器TLP521。在本電路中和光耦隔離器連接的電阻R1,R2需要根據(jù)實(shí)際情況選定阻值,輸入電壓閾值的大小是根據(jù)電阻值的比例相關(guān)的,該8路引腳設(shè)置為中斷模式。
在數(shù)字量輸出電路中,MCU通過GPIO端口直接連接高速M(fèi)OSFET驅(qū)動器,通過驅(qū)動器可以控制連接到輸入引腳的MOS管的通斷,通斷的狀態(tài)可以通過先連接的LED燈指示。MOSFET驅(qū)動器采用的是TC4421,完全滿足工業(yè)控制的需求。數(shù)字信號輸出可是開關(guān)數(shù)字信號量也可以是脈沖信號。對于脈沖信號,可由和定時(shí)器相連接的GPIO輸出PWM波形來滿足實(shí)際需要。
3.3 模擬量輸入處理單元設(shè)計(jì)
MCU內(nèi)部已經(jīng)集成了18個(gè)通道的12位逐次逼近型ADC。各通道的A/D轉(zhuǎn)換均可以按照單次、連續(xù)、掃描或間斷等模式執(zhí)行。
3.4 通信單元設(shè)計(jì)
遠(yuǎn)程智能測控單元系統(tǒng)中,通信單元是非常重要的組成部分,主要用于將遠(yuǎn)端測量數(shù)據(jù)傳輸?shù)娇刂剖?,同時(shí)將控制指令傳輸?shù)竭h(yuǎn)端控制端。作為核心的MCU提供了3路USART以及2路UART以及一個(gè)CAN接口,本系統(tǒng)使用了2路用了當(dāng)做RS232、2路RS485通信和CAN接口。
3.5 存儲單元設(shè)計(jì)
測控器需要保存大量的采集到的數(shù)據(jù)以及一些配置參數(shù),選擇合適的存儲單元非常重要。選用E2PROM來存儲初始化配置信息,如設(shè)備基本屬性、串口參數(shù)、通訊模式參數(shù)和AD采樣配置信息等。E2PROM選用的是24C02,可以通過STM32芯片集成的IIC控制器直接相連。系統(tǒng)上電后首先從24C02中按照固定的格式來讀出配置參數(shù),然后正確的初始化各個(gè)模塊。對于本地存儲是采用大容量的SD卡,通過MCU的SPI總線直接連接,文件系統(tǒng)采用的是FatFs。
4.系統(tǒng)軟件設(shè)計(jì)
為了滿足工業(yè)控制中強(qiáng)實(shí)時(shí)性的要求,該測控器采用了uC/OS_II實(shí)時(shí)操作系統(tǒng)。uC/OS_II是一個(gè)可移植固化剪裁的占先式實(shí)時(shí)多任務(wù)內(nèi)核,比較適用于工業(yè)控制中的事實(shí)監(jiān)控。
4.1 uC/OS_II移植
移植uC/OS_II主要體現(xiàn)在修改3三個(gè)文件上,os_cpu.h、os_cpu_a.s,os_cpu_c.c。文件os_cpu.h用來定義和編譯器相關(guān)的數(shù)據(jù)類型、堆棧類型,以及一些宏和函數(shù)。由于不同的MCU、編譯器所需要提供的數(shù)據(jù)類型并不完全一致,因此通過os_cpu.h重定義數(shù)據(jù)類型可以提高代碼的可移植性。文件os_cpu_c.c中,主要定義與移植相關(guān)的C函數(shù),例如堆棧初始化、鉤子函數(shù)等。os_cpu_a.s提供了與移植有關(guān)匯編語言函數(shù),這個(gè)需要根據(jù)MCU的硬件環(huán)境相關(guān)來設(shè)置,主要有開關(guān)中斷、上下文切換、時(shí)鐘中斷等等。操作系統(tǒng)運(yùn)行需要一個(gè)嘀嗒時(shí)鐘,STM32專門提供了一個(gè)SysTick定時(shí)器來滿足該要求。正確設(shè)置SysTick的控制器后會間隔固定時(shí)間進(jìn)入中斷處理函數(shù)調(diào)用uC/OS_II的OSTimeTick()函數(shù)以便完成任務(wù)調(diào)度。
4.2 系統(tǒng)流程
在系統(tǒng)正常工作前需要完成目標(biāo)板、系統(tǒng)時(shí)鐘、uc/OS_II、IIC控制器等基本初始化,然后才可以創(chuàng)一個(gè)系統(tǒng)初始化任務(wù)Task0(此任務(wù)優(yōu)先級最高)。該任務(wù)主要完成的工作有:首先讀取24C02中的數(shù)據(jù),獲取存儲的配置信息。然后根據(jù)獲取的配置信息來初始化硬件模塊,如各個(gè)GPIO的模式、功能、速度、通信的模式、速率、各個(gè)中斷功能模式、SPI總線、定時(shí)器、文件系統(tǒng)初始化等,并根據(jù)配置信息是否發(fā)生變化,再將配置信息重新寫入到24C02中。完成這些后,再根據(jù)配置需求創(chuàng)建其他任務(wù),就開始進(jìn)行正常的任務(wù)調(diào)度,切換到已創(chuàng)建高優(yōu)先級的其它就緒任務(wù)中,并且實(shí)時(shí)響應(yīng)外部中斷。
4.3 系統(tǒng)任務(wù)規(guī)劃與設(shè)計(jì)
系統(tǒng)正常運(yùn)行后開始執(zhí)行預(yù)定好的各項(xiàng)任務(wù)。任務(wù)Task2中主要負(fù)責(zé)處理輸入的數(shù)字量信號,既開關(guān)量和脈沖信號。8路數(shù)字量輸入是通過8路中斷采集到的。如果滿足中斷觸發(fā)條件進(jìn)入中斷服務(wù)程序里,程序不負(fù)責(zé)處理相應(yīng)任務(wù),只是簡單的做一些標(biāo)示就返回。對于不同的外部數(shù)字量輸入處理函數(shù)在Task2中具體實(shí)現(xiàn)。對于脈沖信號可以通過定時(shí)器輸入捕獲的模式,當(dāng)發(fā)生捕獲事情時(shí),進(jìn)入定時(shí)器中斷服務(wù)程序記錄相關(guān)寄存器的值并且表示后立即返回,在Task2中通過標(biāo)示和寄存器的值進(jìn)行處理。
參考文獻(xiàn)
[1]王曉忠,時(shí)振偉,王啟宏.MODBUS RTU通信協(xié)議在STM32F103上的實(shí)現(xiàn)[J].機(jī)電信息,2010(36):152-153.
[2]李琦,公茂法.RTU遠(yuǎn)程監(jiān)測系統(tǒng)的設(shè)計(jì)[J].電子質(zhì)量,2010(10):48-50.
[3]王玉彩.分布式RTU系統(tǒng)設(shè)計(jì)[D].河北:河北大學(xué),2004,5.