趙 科 李常賢 張 彤
(大連交通大學(xué) a.電氣信息學(xué)院;b.動車運(yùn)用與維護(hù)工程學(xué)院,遼寧 大連 116028)
隨著工業(yè)的發(fā)展,對現(xiàn)場溫濕度控制的要求越來越高,傳統(tǒng)的模擬開關(guān)控制已經(jīng)很難滿足生產(chǎn)要求,因此設(shè)計(jì)更加可靠、智能的無線溫濕度控制器將具有較高的經(jīng)濟(jì)效益和實(shí)用價(jià)值。無線溫濕度控制器是一種集溫濕度信號采集、數(shù)據(jù)存儲、無線收發(fā)、控制及通信等功能于一體的新型控制器[1]。對于有害及危險(xiǎn)等人類難以或無法到達(dá)的工作現(xiàn)場,通過設(shè)計(jì)無線溫濕度控制器對生產(chǎn)現(xiàn)場的溫濕度進(jìn)行采集、控制和記錄,可達(dá)到可靠生產(chǎn)、提高產(chǎn)品質(zhì)量的目的[2]。另外,由于工業(yè)現(xiàn)場空間較大,溫濕度又是非線性、純滯后和大慣性的被控量,因此采用從機(jī)分布控制與主機(jī)集中控制相結(jié)合的方式進(jìn)行現(xiàn)場溫濕度控制,即通過多點(diǎn)從機(jī)進(jìn)行溫濕度采集和控制,采用無線模塊將信息傳送到中心主機(jī),中心主機(jī)通過無線通信向各從機(jī)傳送給定值和控制參數(shù),主機(jī)可進(jìn)行監(jiān)控。在此,筆者以STM32控制器為核心,給出其硬件電路和軟件流程。
筆者提出的基于STM32的無線溫濕度控制器總體設(shè)計(jì)方案如圖1所示。其硬件電路由高性能的STM32控制器、溫濕度傳感器、固態(tài)繼電器和必要的人機(jī)接口電路構(gòu)成。溫濕度信號采集可以使用集成溫濕度傳感器,也可以使用自行設(shè)計(jì)的溫濕度傳感器,并進(jìn)行信號調(diào)理,然后由STM32控制器內(nèi)的ADC實(shí)現(xiàn)模/數(shù)轉(zhuǎn)換與采集,之后的溫濕度信號由STM32控制器進(jìn)行線性化處理和溫度補(bǔ)償,通過編程可以采用靈活的控制算法控制執(zhí)行機(jī)構(gòu),使溫濕度值為系統(tǒng)給定值??刂破鞯墓r和報(bào)警情況可以通過狀態(tài)指示電路和報(bào)警電路輸出。RS232串口電路用于對控制器進(jìn)行本地化參數(shù)設(shè)置、程序調(diào)試或作為功能擴(kuò)展接口。無線通信電路用于主機(jī)和從機(jī)的雙向無線通信,實(shí)現(xiàn)多個(gè)從機(jī)分布控制和主機(jī)集中控制的結(jié)合,在此筆者僅介紹單個(gè)從機(jī)控制器的設(shè)計(jì)。
圖1 無線溫濕度控制器總體設(shè)計(jì)方案
主控模塊的核心是STM32 F103ZET6控制器,該控制器是32位高性能、低成本和低功耗的RISC處理器,內(nèi)核采用CortexTM-M3架構(gòu),最高工作頻率72MHz,具有512KByte的程序存儲空間、64KByte的SRAM、8個(gè)定時(shí)器/計(jì)數(shù)器、3個(gè)SPI、集成5個(gè)USART通信接口、3個(gè)12位ADC及1個(gè)DAC等,硬件資源豐富,非常適合功能擴(kuò)展。使用STM32控制器的PA1和PA4引腳連接傳感器,GPIO與內(nèi)部外設(shè)ADC1復(fù)用,方便擴(kuò)展或互換傳感器。
STM32控制器要求2.0~3.6V的操作電壓,設(shè)計(jì)采用如圖2所示的電源電路為控制器提供3.3V的工作電壓。ZEN056V130A24LS器件具有相對平穩(wěn)的電壓與電流響應(yīng),有助于對輸出電壓的鉗位,有利于保護(hù)齊納二極管Z1和后續(xù)電子元件。
圖2 電源電路
設(shè)計(jì)的時(shí)鐘和復(fù)位電路如圖3所示,采用外部時(shí)鐘X1為系統(tǒng)提供RTC實(shí)時(shí)時(shí)鐘,采用X2為控制器提供系統(tǒng)時(shí)鐘。設(shè)計(jì)了外部復(fù)位電路,可以手動復(fù)位也可以通過看門狗自動復(fù)位。采用STWD100作為外部看門狗電路,使系統(tǒng)具有很強(qiáng)的抗EMC能力,防止程序“跑飛”,提高系統(tǒng)可靠性。在系統(tǒng)編程或開機(jī)期間,STWD100可防止自動生成復(fù)位信號,使開發(fā)人員可以靈活地控制和管理應(yīng)用。在不占用 CPU 資源的情況下,STWD100硬件看門狗可使系統(tǒng)工作穩(wěn)定度和可靠性提高到100%,非常適用于繼電器及接觸器等具有較強(qiáng)干擾的控制系統(tǒng)中[3]。圖3中WDO為看門狗溢出后的漏極開路輸出端,使用時(shí)須接上拉電阻;EN為低電平有效的使能輸入信號,最低保持時(shí)間1μs;WDI為時(shí)鐘信號輸入端,上升沿定時(shí)器置數(shù)并啟動。
圖3 時(shí)鐘和復(fù)位電路
溫濕度傳感器選用插針型封裝的SHT75,該傳感器采用CMOSen專利技術(shù),具有較高的可靠性與長期穩(wěn)定性。SHT75溫濕度傳感器將濕敏元件、測溫元件、A/D轉(zhuǎn)換器、校準(zhǔn)存儲器、狀態(tài)寄存器、循環(huán)冗余校驗(yàn)碼寄存器及串行接口等電路集成在一個(gè)芯片上,因此具有體積小、功耗低、響應(yīng)快、抗干擾能力強(qiáng)及性價(jià)比高等優(yōu)點(diǎn)[4]。SHT75的典型工作電壓為3.3V,平均工作電流28μA;相對濕度范圍0~100%RH,最高分辨率12位,測量精度±1.8%RH;溫度測量范圍-40.0~123.8℃,最高分辨率14位,測量精度±0.3℃,完全滿足工業(yè)生產(chǎn)現(xiàn)場的要求。SHT75傳感器與STM32控制器接口電路簡單,采用二線串口與控制器進(jìn)行通信,雙向串行數(shù)據(jù)DATA端須接上拉電阻,SCK信號提供串行通信的時(shí)鐘信號,雙向串行數(shù)據(jù)DATA信號僅在SCK時(shí)鐘上升沿有效,在SCK時(shí)鐘下降沿之后改變狀態(tài),通信時(shí)序可方便地使用STM32控制器的I/O口模擬。SHT75傳感器溫濕度傳輸過程分為啟動傳輸、發(fā)送命令、測量數(shù)據(jù)和休眠。濕度傳輸時(shí)序如圖4所示,相對濕度測量輸出數(shù)據(jù)SORH為00000100 00110001。溫度傳輸時(shí)序類似,溫度測量輸出為SOT,由于篇幅所限,不再詳細(xì)介紹。
圖4 濕度傳輸時(shí)序
該設(shè)計(jì)通過STM32控制器控制交流固態(tài)繼電器SSR的輸入波形,實(shí)現(xiàn)對中低溫電加熱器和加濕器的功率控制,使溫濕度恒定在一定范圍內(nèi)。與傳統(tǒng)的繼電器相比,固態(tài)繼電器是由固態(tài)電子元器件組成的新型無觸點(diǎn)開關(guān)器件,具有開關(guān)速度快、電磁干擾小、工作效率高、使用壽命長及易于控制器編程控制等優(yōu)點(diǎn)[5]。交流固態(tài)繼電器SSR主要由輸入電路、光電耦合電路、觸發(fā)電路、三端雙向可控硅開關(guān)和緩沖電路構(gòu)成。STM32控制器在輸入電路上加上一定的控制信號,就可以控制三端雙向可控硅的通斷,實(shí)現(xiàn)開關(guān)電路。耦合電路常用光電耦合器,以防止輸出端對輸入端的影響。由于開關(guān)電路易產(chǎn)生射頻干擾,并以高次諧波或尖峰等污染電網(wǎng),因此在光電耦合器和觸發(fā)電路之間加設(shè)過零控制電路。觸發(fā)電路產(chǎn)生符合要求的觸發(fā)信號,驅(qū)動負(fù)載電路。緩沖電路一般采用RC吸收電路或壓敏電阻,防止從電源或負(fù)載電路中傳來的尖峰或浪涌脈沖對三端雙向可控硅開關(guān)沖擊和干擾。
人機(jī)接口模塊包括狀態(tài)指示電路、報(bào)警電路、無線通信電路和RS232串口電路。
狀態(tài)指示電路通過LED燈指示控制器的工況,包括電源指示、串口收發(fā)指示、無線通信指示、控制器運(yùn)行正常與否指示和信號超限指示。STM32控制器GPIO連接SN74ABT245BPW總線收發(fā)器驅(qū)動LED指示燈。
報(bào)警電路實(shí)現(xiàn)控制器運(yùn)行錯(cuò)誤報(bào)警和溫濕度值超上下限報(bào)警。STM32控制器輸出報(bào)警信號,通過驅(qū)動電路使蜂鳴器報(bào)警,并進(jìn)行適當(dāng)?shù)木o急處理。
無線通信電路采用NRF24L01芯片,該芯片全球開放2.4G的ISM頻段,免許可證使用;最高工作速率2Mbit/s,具有高效的GFSK調(diào)制及抗干擾能力強(qiáng)等優(yōu)點(diǎn);多達(dá)125個(gè)可選頻道,滿足多點(diǎn)通信和調(diào)頻通信的需要;內(nèi)置CRC檢錯(cuò)和點(diǎn)對多點(diǎn)通信地址控制;低工作電壓(1.9~3.6V);可設(shè)置自動應(yīng)答,確保數(shù)據(jù)可靠傳輸。該無線通信電路與STM32控制器接口電路簡單,通過SPI接口與STM32控制器通信,配置方便,最大SPI速度可達(dá)18MHz。
RS232串口電路采用帶隔離電源的ADM3251收發(fā)器,同時(shí)對串口收發(fā)進(jìn)行共模保護(hù)處理,使接口電路抗干擾能力強(qiáng)、數(shù)據(jù)傳輸可靠,適合惡劣工業(yè)現(xiàn)場環(huán)境下工作。由于STM32控制器需3.3V供電,為了使用ADM3251內(nèi)部自帶的隔離電源,收發(fā)器必須5.0V供電,因此使用74HCT08與門作為接口電路,實(shí)現(xiàn)STM32控制器與RS232收發(fā)器的電平匹配,電路如圖5所示。該串口電路也方便控制器的功能擴(kuò)展,實(shí)現(xiàn)鍵盤輸入或顯示輸出等。
無線溫濕度控制器的軟件部分主要包括系統(tǒng)主程序、狀態(tài)指示子程序、報(bào)警輸出子程序、RS232數(shù)據(jù)收發(fā)子程序、無線數(shù)據(jù)通信收發(fā)子程序及控制量算法子程序等,其中主程序流程如圖6所示。主程序首先進(jìn)行系統(tǒng)初始化,配置STM32主控器的GPIO端口、初始化串口USART、溫濕度傳感器和無線模塊,接收遠(yuǎn)程主機(jī)對溫濕度值的給定和對控制算法參數(shù)的設(shè)置,之后進(jìn)入無限循環(huán),根據(jù)不同功能標(biāo)志位的變化進(jìn)行相應(yīng)模塊的處理。狀態(tài)指示子程序用來驅(qū)動LED燈,顯示控制器的工作狀態(tài)。報(bào)警輸出子程序用于驅(qū)動溫濕度值超出上下限后的蜂鳴器報(bào)警,并及時(shí)停止系統(tǒng)運(yùn)行。RS232數(shù)據(jù)收發(fā)子程序完成對控制器的數(shù)據(jù)配置和程序調(diào)試功能。無線數(shù)據(jù)通信收發(fā)子程序?qū)崿F(xiàn)遠(yuǎn)程數(shù)據(jù)收發(fā),可以發(fā)送分布的控制器狀態(tài)、溫濕度信號到遠(yuǎn)程控制中心,也可以接收遠(yuǎn)程控制中心對分布控制器的初始值給定及參數(shù)配置等信息,實(shí)現(xiàn)遠(yuǎn)程集中控制。
圖5 RS232串口電路
圖6 主程序流程
主控器處理包括對溫濕度信號的計(jì)算與補(bǔ)償。STM32控制器按T=-39.6+0.01×SOT處理SHT75采集的溫度信號SOT,求得溫度值T。
STM32控制器按RH1=-2.0468+0.0367×SORH-1.5955×10-6×SORH2處理SHT75采集的相對濕度信號SORH,求得25℃條件下的相對濕度RH1。
并按RH=(T-25)×(0.01+0.00008×SORH)+RH1進(jìn)行溫度補(bǔ)償,求得相對濕度RH。
控制量輸出采用數(shù)字增量式PID控制算法,即Δu(k)=KP[e(k)-k(k-1)]+KIe(k)+KD[e(k)-2e(k-1)+e(k-2)],其中e(k)為第k次采樣時(shí)刻輸入的偏差值;KP、KI、KD分別為比例、積分和微分系數(shù);Δu(k)為控制量的增量。
限于篇幅,下面只介紹無線通信中SPI操作的基本方法。
使能SPI2的時(shí)鐘,設(shè)置SPI2的相關(guān)引腳為復(fù)用輸出,本設(shè)計(jì)使用的是PB13、PB14和PB15(SCK、MISO、MOSI)引腳:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//PORTB時(shí)鐘使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);//SPI2時(shí)鐘使能
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PB13/14/15復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB
初始化SPI2,通過庫函數(shù)SPI_Init設(shè)置SPI2的工作模式和數(shù)據(jù)位數(shù),設(shè)置SCK時(shí)鐘極性與采樣方式,設(shè)置SPI2的時(shí)鐘頻率,設(shè)置數(shù)據(jù)格式(MSB在前或LSB在前):
void SPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef*SPI_InitStruct)
使能SPI2,初始化完成之后要使能SPI2通信:
SPI_Cmd(SPI2,ENABLE);//使能SPI外設(shè)
SPI傳輸數(shù)據(jù)需要有發(fā)送數(shù)據(jù)和接收數(shù)據(jù)函數(shù),固件庫提供的發(fā)送數(shù)據(jù)和接收數(shù)據(jù)函數(shù)為:
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);//往SPIx數(shù)據(jù)寄存器寫入數(shù)據(jù)Data
ata(SPI_TypeDef* SPIx);//從SPIx數(shù)據(jù)寄存器讀出接收到的數(shù)據(jù)Data
查看SPI傳輸狀態(tài),在SPI傳輸過程中,要判斷數(shù)據(jù)是否傳輸完成:
SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE);//判斷發(fā)送區(qū)是否為空
SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);//判斷是否接收完成
經(jīng)測試,基于STM32的無線溫濕度控制器能夠準(zhǔn)確采集和控制溫濕度信號,并通過無線通信準(zhǔn)確地與主機(jī)進(jìn)行雙向通信,工作穩(wěn)定可靠、結(jié)構(gòu)簡單、成本低廉;另外,STM32主控器硬件資源豐富、功能強(qiáng)大、開發(fā)方便靈活,便于后期進(jìn)行功能擴(kuò)展。該設(shè)計(jì)基本實(shí)現(xiàn)數(shù)字化,通過數(shù)字PID控制能達(dá)到較好的溫濕度控制要求,有較高的穩(wěn)定性和可靠性,實(shí)現(xiàn)了節(jié)能低耗的要求。
[1] 張會新,龔進(jìn),樊姣榮,等.分布式數(shù)字無線測溫系統(tǒng)[J].化工自動化及儀表,2011,38(12):1493~1495.
[2] 薛玲,孫曼,張志會,等.基于單片機(jī)AT89S51的溫濕度控制儀[J].化工自動化及儀表,2010,37(7):66~69.
[3] 晏勇,高曉琴.基于STWD100xP WTD嵌入式系統(tǒng)抗EMC技術(shù)[J].現(xiàn)代電子技術(shù),2011,34(16):10~13.
[4] 李國柱.利用溫濕度傳感器SHTxx實(shí)現(xiàn)濕度測量[J].西安文理學(xué)院學(xué)報(bào)(自然科學(xué)版),2008,11(1):101~103.
[5] 李文濤,余福兵.基于STM32單片機(jī)的電阻爐智能溫度控制器的設(shè)計(jì)[J].化工自動化及儀表,2012,39(1):89~91.