周靈江,金 杰,丁小洪,朱 陽,章家會,金 辰,朱鴻博
(國網(wǎng)浙江臨海市供電有限公司,浙江 臨海 317000)
STM32 系列微控制器是一款基于ARM Cortex-M3 內(nèi)核的嵌入式應(yīng)用產(chǎn)品[1]。由于其高性能、低成本、低功耗的特性使其應(yīng)用領(lǐng)域不斷擴(kuò)大,對于高效開發(fā)和利用更為重要。
STM32CubeMX 軟件是意法半導(dǎo)體(ST)公司推出的STM32 系列單片機(jī)的圖形化配置工具,開發(fā)者可利用其提供的可視化引腳、外設(shè)、時鐘等配置功能,快速完成工程的建立、初始化[2-3]?;贛ATLAB 和STM32CubeMX 聯(lián)合開發(fā)的STM32-MAT 工具箱,它提供的MCU CONFIG 模塊可以配置STM32CubeMX 軟件所支持的STM32 芯片,同時它還包含幾乎所有STM32 芯片上的資源。在嵌入式軟件開發(fā)過程中,可以結(jié)合Matlab&Simulink 已有的模塊實(shí)現(xiàn)復(fù)雜的控制算法與嵌入式編程。在STM32CubeMX 軟件配置的基礎(chǔ)上,快速為STM32 芯片實(shí)現(xiàn)圖形化設(shè)計(jì)、早期驗(yàn)證、代碼自動生成和文檔自動化[4]。Embedded Coder 生成的C 代碼MDK 工程文件,編譯、下載后直接在單片機(jī)上運(yùn)行,進(jìn)一步簡化了代碼集成過程[5]。
隨著國家電網(wǎng)公司用電信息采集系統(tǒng)建設(shè)的推進(jìn),對采集成功率的要求越來越高[6-7]。
RS485 作為國際通用串口通信標(biāo)準(zhǔn),在用電信息采集系統(tǒng)中得到了廣泛應(yīng)用,對電能表乃至整個用電采集系統(tǒng)的安全經(jīng)濟(jì)運(yùn)行都有重要意義[8]。RS485 通信系統(tǒng)越來越龐大,再加上供電系統(tǒng)復(fù)雜的電磁環(huán)境,使RS485 通信網(wǎng)絡(luò)的穩(wěn)定性面臨嚴(yán)峻考驗(yàn)。從現(xiàn)場維護(hù)的實(shí)際經(jīng)驗(yàn)來看,RS485 總線傳輸?shù)膿矶隆⒆枞约安环€(wěn)定是用電信息采集不成功的原因之一。
基于STM32 的RS485 適配器能夠很好解決電信息采集系統(tǒng)RS485 通信網(wǎng)絡(luò)的穩(wěn)定性問題。
系統(tǒng)電路結(jié)構(gòu)連接關(guān)系如圖1所示[9]。
圖1 系統(tǒng)電路結(jié)構(gòu)連接關(guān)系
STM32 單片機(jī)最小系統(tǒng)由STM32F103ZET6 單片機(jī)、時鐘電路、復(fù)位電路、JTAG 接口構(gòu)成。時鐘電路采用的晶振頻率為8 MHz,復(fù)位電路包含上電復(fù)位和按鍵復(fù)位。JTAG接口用于給STM32 單片機(jī)下載固件或調(diào)試程序。
電源模塊采用電平轉(zhuǎn)換芯片AMS1117-3.3、一個5 V 轉(zhuǎn) 3 V 穩(wěn)壓電源芯片,內(nèi)部集成有過熱保護(hù)與限流電路。供電模塊還有供電狀態(tài)指示燈。
本設(shè)計(jì)使用MAXIM 公司生產(chǎn)的MAX485 芯片。MAX485 是用于RS485 通信的低功耗收發(fā)器,每個器件中都具有一個驅(qū)動器和一個收發(fā)器,芯片引腳及引腳說明如圖2所示。RE/DE 為發(fā)送接收使能端,高電平發(fā)送數(shù)據(jù),低電平接收數(shù)據(jù)。
軟件系統(tǒng)的設(shè)計(jì)任務(wù)具體如下:①利用STM32CubeMX平臺進(jìn)行初始化配置后,生成初始化MDK 工程;②在Matlab&Simulink 圖形化環(huán)境下,使用STM32-MAT 工具箱及Simulink 模型進(jìn)行應(yīng)用層軟件的開發(fā)。
圖2 RS485 芯片引腳及引腳說明
STM32cubeMX 是一款圖形化軟件設(shè)置工具,支持STM32全系列芯片,用戶可以非常方便地配置MCU的引腳、時鐘、外設(shè)等,并且支持自動生成工程項(xiàng)目文件[10]。
3.1.1 時鐘配置
時鐘配置界面如圖3所示,外部晶振通過鎖相環(huán)(PLL)倍頻得到PLLCLK,之后得到系統(tǒng)時鐘72 MHz[11]。
圖3 時鐘配置界面
3.1.2 I/O 口配置
通過STM32I/O 口的輸入輸出,從而驅(qū)動MAX485 數(shù)據(jù)的輸入輸出,配置界面如圖4所示。主MAX485 芯片RO輸出接入STM32芯片INPUT引腳,MAX485芯片的RE/DE、DI 輸入引腳接入STM32 芯片OUTPUT 引腳。從MAX485芯片的RO 輸出分別接入至STM32 芯片的INPUT 引腳,但14 路從MAX485 芯片的RE/DE、DI 引腳并接為并由STM32芯片的兩個定義為OUTPUT 形態(tài)的I/O 口引腳控制。
3.1.3 計(jì)時器配置
STM32 需要實(shí)時掃描主從MAX485 芯片RO 引腳的狀態(tài),為保證掃描的實(shí)時性,需要計(jì)時器定時操作。在STM32CubeMX 界面初始化和使能中斷即可,TIMER2 中斷使能如圖5所示。在Matlab&Simulink 圖形化環(huán)境中,對計(jì)時器進(jìn)行應(yīng)用配置。
圖4 I/O 口配置界面
圖5 TIMER2 中斷使能
3.2.1 計(jì)時器配置及中斷
STM32-MAT 工具箱中時鐘模塊,時鐘配置界面如圖6所示。在界面中配置時鐘頻率為100 000 Hz,即0.01 ms 中斷一次。有效提高了采集MAX485 的RO 狀態(tài)的分辨率。時鐘中斷模型如圖7所示,在中斷模型中進(jìn)行數(shù)據(jù)處理過程模型的搭建。
圖6 Matlab&Simulink 時鐘配置界面
圖7 時鐘中斷模型
3.2.2 RS485 適配器處理原則及軟件實(shí)現(xiàn)
RS485 適配器設(shè)計(jì)分為接收到數(shù)據(jù)集中器數(shù)據(jù)后的處理規(guī)則、電能表數(shù)據(jù)接收后的處理規(guī)則。
電能表數(shù)據(jù)接收后的處理規(guī)則:當(dāng)RS485 適配器接收到數(shù)據(jù)集中器發(fā)送來的數(shù)據(jù)時,RS485 適配器把收到的數(shù)據(jù)通過電能表連接的14 個RS485口發(fā)出去。以實(shí)現(xiàn)連接到RS485適配器上的每個設(shè)就像都在同一條總線上一樣。這時RS485適配器就要把收到的數(shù)據(jù)同步傳送給下面的每個RS485 口。 下位機(jī)數(shù)據(jù)接收后的處理規(guī)則:當(dāng)RS485 適配器接收到與電能表連接的14 個RS485 口發(fā)送來的數(shù)據(jù)時,RS485 適配器要把收到的數(shù)據(jù)通過與數(shù)據(jù)集中器連接的RS485 發(fā)送給數(shù)據(jù)集中器,使連接到RS485 適配器上的每個設(shè)備就像都在同一條總線上一樣。當(dāng)多個RS485 同時接收到數(shù)據(jù)時,適配器僅選擇一個口的數(shù)據(jù)發(fā)送給上位機(jī),并報(bào)警提示[12]。
Stateflow 是有限狀態(tài)機(jī)的圖形實(shí)現(xiàn)工具,可用于解決事件驅(qū)動系統(tǒng)中復(fù)雜的邏輯問題。有限狀態(tài)機(jī)又稱事件驅(qū)動系統(tǒng),是指系統(tǒng)在條件發(fā)生變化時從一個狀態(tài)轉(zhuǎn)換到另外一個狀態(tài)。有限狀態(tài)機(jī)輸入輸出如圖8所示。
圖8 有限狀態(tài)機(jī)輸入輸出
圖8中,計(jì)數(shù)器、RS485 狀態(tài)變量作為事件輸入至狀態(tài)機(jī)。有限狀態(tài)機(jī)輸出各MAX485 芯片數(shù)據(jù)信號持續(xù)時間以及各MAX485 芯片的同步控制信號。
有限狀態(tài)機(jī)內(nèi)部狀態(tài)切換如圖9所示。
圖9 有限狀態(tài)機(jī)內(nèi)部狀態(tài)切換圖
利用 STM32CubeMX 平臺進(jìn)行初始化配置,并在Matlab&Simulink 圖形化環(huán)境下進(jìn)行應(yīng)用軟件模型的搭建,有效提高了軟件的可靠性及復(fù)用性。
本設(shè)計(jì)介紹了基于STM32F103 單片機(jī)的RS485 適配器開發(fā)過程。STM32CubeMX 和MATLAB/Simulink 的STM32 MAT 模型庫的使用,使RS485 適配器的功能實(shí)現(xiàn)更為方便快捷,極大提高了設(shè)計(jì)開發(fā)效率,提高了RS485 適配器的可維護(hù)性及長期運(yùn)行可靠性。目前,RS485 適配器已在電信息采集系統(tǒng)成功應(yīng)用,有效減少了現(xiàn)場運(yùn)維人員的工作量。