戚海艷
(廣東省機械技師學院,廣東廣州,510450)
測量是工業(yè)生產中常見的項目,根據(jù)使用目的的不同,測量得到的數(shù)值可開環(huán)或閉環(huán)地輸入給控制系統(tǒng)。目前,工業(yè)現(xiàn)場使用的測量裝置的主流控制核心包括PLC、DSP、FPGA和STM32等,不同的控制器具有不同的特點和功能,可滿足不同的使用需求。STM32是一種基于ARM內核的32位高性能處理器,以STM32F103ZET6為例,該處理器集成了AD轉換與 PWM 輸出功能,可以直接進行數(shù)據(jù)采集和PWM輸出,通過功能配置實現(xiàn)低功耗的目的[1],使用STM32進行開發(fā)的項目也越來越多[2,3]。黃琦[4]等設計了一套基于STM32的高精度恒溫控制系統(tǒng),并進行了上位機和下位機的設計,實驗結果表明上位機可準確反映溫度的數(shù)值和變化趨勢,滿足了實際控溫需求。李明[5]等基于UCOS操作系統(tǒng)和STM32F4單片機設計實現(xiàn)了多通道實時酒精測量與數(shù)據(jù)存儲系統(tǒng),通過開發(fā)板試驗得到了系統(tǒng)運行良好穩(wěn)定的酒精檢測裝置。柳浩[6]等提出一種主控系統(tǒng)和控制實施系統(tǒng)共同協(xié)作對發(fā)生火情的環(huán)境進行處理,采用STM32F103C8T6微處理器作為控制實施系統(tǒng)的控制核心,STM32F103C8T6亦屬于STM32F1系列控制器中的一種,實驗證明該系統(tǒng)可以有效監(jiān)測環(huán)境數(shù)據(jù),實現(xiàn)小車搜尋火源和噴水功能。
本文針對某生產設備對電位測量及電路保護的實際需求,設計研制一種基于STM32F103ZET6處理器的電位測量及保護裝置,通過控制器的GPIO模擬輸入功能實現(xiàn)電位測量的模數(shù)轉換,通過繼電器控制實現(xiàn)電路的通斷。對裝置進行了軟件設計,將電位控制參數(shù)直接集成到軟件中,對裝置進行調試,得到了滿足需求的產品。
某生產設備的某段電路對整個電路系統(tǒng)的影響較大,在生產中發(fā)現(xiàn)設備正常工作時,該部分電路的電位總是穩(wěn)定在1.15~1.35V之間,當產生異常情況時,該部分電路的電壓會高于1.35V,因此急需一種可對該部分電路進行電位測量的裝置,一旦測到異常電位,則立刻斷開電路通電,以保護整個系統(tǒng)。
根據(jù)實際需求,可知需研制的裝置必須具有電位測量功能,而當設備正常工作時,電位穩(wěn)定在1.15~1.35V之間,正常的電位值小于3.3V,因此可采用使用標準3.3 V供電的STM32處理器,又該需求并不復雜,因此無需使用更高性能和更高處理速度的控制器,可選用STM32F103ZET6處理器,以在控制性能和經濟性上取得平衡。由于在檢測到電位異常時,需立刻斷開電路通電,因此需對電路加裝開關裝置,以實現(xiàn)弱電控制強電的功能,可使用標準的5V直流供電的繼電器,實現(xiàn)電位正常時保持通電狀態(tài),而電位異常時,繼電器通電,裝置斷電。根據(jù)需求分析,可進行相關的硬件和軟件設計。
STM32F103ZET6處理器的內核為ARMCortex-M3,該內核技術為ARM公司設計,在Cortex-M3內核上,ST公司又對其進行了總線矩陣設計,提供過總線矩陣將內核封裝為三個部分:FLASH、SRAM和外部設備。其中,F(xiàn)LASH為內部閃存存儲器,用于放置編寫好的程序;內部SRAM用于存放程序的變量,堆和棧的消耗均基于內部SRAM;外部設備又包含了眾多的通用輸入輸出口GPIO、異步串行總線USART、IIC總線、SPI總線等等,外設的寄存器通過系統(tǒng)總線進行訪問,為用戶提供了豐富的可擴展接口。
STM32F103ZET6有3個ADC。ADC的精度均為12位,其中ADC1有16個外部通道,對應ADCx_IN0、ADCx_IN1...ADCx_IN5,其中PA0對應ADC1的ADC1_IN0上,因此可在程序中配置該功能,實現(xiàn)PA0引腳的電位采集功能,并同時配置PA1和PA2引腳作為PA0數(shù)據(jù)采集引腳的備用。具體配置方法為:
GPIO_InitTypeDef GPIO_InitStructure;
//打開 ADC IO端口時鐘
ADC_GPIO_APBxClock_FUN( ADC_GPIO_CLK, ENABLE );// 配置 ADC IO 引腳模式
GPIO_InitStructure.GPIO_Pin = ADC_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; // 必須為模擬輸入
// 初始化 ADC IO
GPIO_Init(ADC_PORT, &GPIO_InitStructure);
繼電器通常應用于開關中,是一種用較小的電流去控制較大電流的一種“自動開關”,在電路中起著安全保護、轉換電路等功能。如圖 1所示,采用6腳繼電器實現(xiàn)開關控制電路,電路中電源為設備的供電電源,在默認狀態(tài)下與K2是直接連接的,繼電器采用5V的直流電源供電(CT2),CT1與一個三級管連接,三級管的e級與一個10kΩ電阻連接,電阻與控制器的GPIO引腳連接,以保護繼電器和單片機引腳不至電流過大而燒壞。配置繼電器通斷控制的GPIO為PC3引腳,并配值PB3和PB5引腳作為PC3引腳的備用。
圖1 繼電器(Relay)開關電路
外部FLASH主要用于存儲電位保護次數(shù)和過電位的具體數(shù)值,電位保護次數(shù)以累加形式進行存儲,但并不擦寫上一次保存數(shù)據(jù),即若有3次產生了過電位現(xiàn)象,則存儲器將依地址16位累進方式保存:1、2、3。并將這三次的過電位值通用以16位累進方式保存。外部FLASH電路如圖 2所示,外部FLASH芯片選擇為W25Q64的8MB芯片,芯片的數(shù)據(jù)輸入腳連接單片機的PF9引腳,數(shù)據(jù)輸出腳SO_IO1連接單片機的PF8引腳,芯片默認不進行寫保護,將寫保護引腳WP_IO2(低電平有效)直接接在3.3 V電源上,因此芯片在硬件電路上即實現(xiàn)了無寫保護。
圖2 外部FLASH電路
根據(jù)需求分析和硬件設計,可設計裝置的軟件如圖3所示。系統(tǒng)首先進入初始化程序,包括系統(tǒng)時鐘初始化、串口初始化、ADC初始化、繼電器等GPIO的初始化。
圖3 裝置軟件整體流程
設置系統(tǒng)時鐘為最高頻率工作模式,系統(tǒng)的USART采用中斷處理機制,設置串口中斷在第4分組,中斷通道為DEBUG_USART_IRQ,中斷響應優(yōu)先級為6,子優(yōu)先級為0。串口輸出口對應單片機的PA9引腳,輸入口對應單片機的PA10引腳。
ADC初始化基本步驟為:
// 打開ADC時鐘ADC_APBxClock_FUN
// 只使用一個ADC,屬于獨立模式
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 禁止掃描模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 連續(xù)轉換模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;// 不用外部觸發(fā)轉換,軟件開啟即可
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;// 轉換結果右對齊
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
初始化結束后系統(tǒng)進入ADC數(shù)據(jù)采集函數(shù),該函數(shù)為while(1)循環(huán)函數(shù),首先進行ADC數(shù)據(jù)的采集,采集函數(shù)為,并經過2萬次的循環(huán)采集,得到總的電位值,總的電位值除去2萬次的for循環(huán),從而得到電位的平均值a,對平均值a進行正常點位區(qū)間判斷,若為正常值,則再次進行ADC數(shù)據(jù)的采集,并向串口發(fā)送“正常”信息,包括電位的平均值;若為異常值,則立刻斷開繼電器,并向串口發(fā)送“故障”信息,包括電位的平均值,以提醒用戶設備出現(xiàn)了異常。
圖4 測量數(shù)據(jù)變化曲線
從串口中得到數(shù)據(jù)保存為文本文件,通過數(shù)據(jù)處理得到測量得到的電位變化曲線如圖 3所示,可知,該部分的電位值均處于正常點位區(qū)間內,電位值每次測量的值的變化差別較大,這與測量誤差和電磁干擾有關,但電位值的精確度可達0.01 V,完全可滿足使用需求,通過一定的處理算法處理亦可提高測量的抗干擾能力。
研制了一種基于STM32F103ZET6的電位測量及過電位保護裝置,對實際生產設備進行了需求分析,得出裝置硬件設計和軟件設計的依據(jù)。根據(jù)需求分析進行了控制器的ADC配置,以及繼電器開關保護電路的設計,對裝置進行了軟件設計,通過調試得到了電位變化曲線,滿足了實際需求。裝置還可集成LCD和上位機,以滿足友好的人機交互功能。