王艷
摘 要:本設(shè)計是以STM32F407單片機(jī)為核心控制單元,觸摸屏模塊的顯示,對溫度的參數(shù)進(jìn)行調(diào)節(jié)控制和顯示的溫度控制并且具有定時投喂功能的系統(tǒng)。本系統(tǒng)使用單片機(jī)的定時功能對舵機(jī)進(jìn)行控制,實現(xiàn)投喂功能;通過熱敏電阻采集水泥電阻的溫度,將反饋的溫度值與設(shè)定的溫度值進(jìn)行比較,使用增量式PID算法,調(diào)節(jié)輸出電壓的PWM,以實現(xiàn)控制溫度的功能。該溫度控制器可以通過調(diào)節(jié)控制電壓輸出來調(diào)節(jié)被加熱物體的加熱速率,從而達(dá)到目標(biāo)溫度,同時具有維持溫度穩(wěn)定和實時顯示當(dāng)前溫度的功能。
關(guān)鍵詞:STM32F407;熱敏電阻;控制溫度;定時投喂
1 引言
隨著經(jīng)濟(jì)的快速發(fā)展和物質(zhì)生活水平的提高,人們的精神和物質(zhì)文化需求日益增長,當(dāng)今社會喂養(yǎng)寵物的家庭越來越多。為了解決很多人沒有時間照看寵物導(dǎo)致寵物無法得到良好照料的問題,我們團(tuán)隊設(shè)計了能夠?qū)櫸镞M(jìn)行日常生活照料的智能寵物窩。本次設(shè)計通過單片機(jī)對直流電機(jī)、舵機(jī)、溫度傳感器等模塊的控制,進(jìn)而實現(xiàn)對寵物日常生活的照看和監(jiān)管。
2.1 整體介紹
用溫度傳感器實時檢測寵物窩內(nèi)環(huán)境的溫度,并設(shè)置一個窩內(nèi)溫度閾值。只要窩內(nèi)環(huán)境溫度大于或等于設(shè)置的溫度閾值,單片機(jī)驅(qū)動水泥電阻調(diào)節(jié)窩內(nèi)的溫度,給寵物營造一個良好的生活環(huán)境。
喂食器模塊內(nèi)部結(jié)構(gòu)所示,主要是單片機(jī)控制直流電機(jī)工作帶動齒輪旋轉(zhuǎn)從而促使閥門翻轉(zhuǎn),放出食物。
本方案分為六個模塊:電源模塊、顯示模塊、信號處理模塊(包含ADC采集功能)、單片機(jī)控制模塊、功率輸出模塊,舵機(jī)輸出投喂模塊。下圖是整個方案的介紹:
系統(tǒng)通過驅(qū)動電路對水泥電阻進(jìn)行加熱,在加熱過程中,溫度傳感器DS18B20感知水泥電阻的實時溫度,并輸出自身的電壓值,根據(jù)電源模塊提供的電壓,得到熱敏電阻的電流值,進(jìn)而由電阻值使用二分法查表計算出水泥電阻的溫度。將采集到的溫度與目標(biāo)溫度進(jìn)行比較,如果目標(biāo)溫度高于采集溫度,則對驅(qū)動電路繼續(xù)輸出PWM;如果目標(biāo)溫度低于采集溫度,則停止加熱。同時本系統(tǒng)使用了PID算法對PWM輸出進(jìn)行精確的控制,從而可以調(diào)節(jié)溫度的加熱速率,維持目標(biāo)溫度穩(wěn)定。
3.1嵌入式微控制器(ZGT632F407)
在本方案中,STM32F407單片機(jī)是實現(xiàn)溫度控制和自動投喂的核心部分。它能夠方便對溫度傳感器采集回來的數(shù)字信號進(jìn)行處理,同時使用它的定時器實現(xiàn)定時投喂。它還可以進(jìn)行低功耗、低電壓的操作,并且具有高效性、實時性,同時擁有一個完全集成和易于編程的開發(fā)環(huán)境。經(jīng)過比對,發(fā)現(xiàn)F407的處理速度明顯比F103快,所以最終選取了STM32F407單片機(jī)。
3.2顯示模塊
本方案使用了48寸電阻顯示屏顯示當(dāng)前溫度。
3.3溫度采集模塊
在本次設(shè)計的溫度控制系統(tǒng)中,使用了熱敏電阻,它是常用的數(shù)字式溫度傳感器,它的輸出是數(shù)字信號,方便單片機(jī)的讀取。這種溫度傳感器不僅具有體積小,硬件開銷低的優(yōu)勢,還具有抗干擾能力強(qiáng),精度高的特點。
其中,P6通過ADC采集的是溫度傳感器DS18B20兩端的電壓值,經(jīng)放大器跟隨輸出,用VCC減去ADC1采集的電壓,使用歐姆定律計算得到P8兩端的電流值,進(jìn)而求得P1的阻值。在這里我們用到了一種特殊的ADC采集的接頭,以盡可能的減小誤差,提高測量精度。
3.4舵機(jī)控制模塊
通過ZGT6STM32F407單片機(jī)控制LCD顯示屏顯示正常時鐘,并設(shè)置寵物喂食的時間及其喂食量。當(dāng)正常時間和喂食時間相等時,單片機(jī)驅(qū)動直流電機(jī)帶動機(jī)械齒輪打開閥門放出食物,直到放出食物量和設(shè)定的投喂時間相等,直流電機(jī)停止轉(zhuǎn)動,關(guān)閉投食閥門,從而實現(xiàn)定時定時喂食。
3.5電機(jī)控制電路
當(dāng)達(dá)到30攝氏度時,啟動電機(jī)井陘降溫。
3.6電源部分
本方案在電源部分,使用了單片機(jī)上的3.3v供電,另外5v用了學(xué)生電源進(jìn)行供電。學(xué)生電源是一種在實驗室,與電網(wǎng)連接,把高電壓轉(zhuǎn)換成低電壓,改變頻率的一種設(shè)備,我國家庭用電的電壓為220V,頻率為50-60赫茲,對于實驗不適用。學(xué)生電源把它降到2V,4V等,最高能達(dá)到20V,并且能把交流電變成直流電。實驗室電源分為電池,學(xué)生電源兩種。電池電量小,不適于大功率,長時間工作。學(xué)生電源有經(jīng)濟(jì),環(huán)保,功率可大可小的特點.一般用與電解實驗。
3.7加熱電路
加熱電路采用5V供電,利用二極管的單向?qū)ㄌ攸c,IRF630場效應(yīng)管的開關(guān)作用對水泥電阻進(jìn)行可調(diào)PWM輸出加熱控制。
4.1程序流程圖
4.2 溫度加熱PID算法
在溫度控制方面主要應(yīng)用了增量式PID算法,PID調(diào)節(jié)規(guī)律對連續(xù)系統(tǒng)動態(tài)品質(zhì)的校正非常有效。它的參數(shù)整定方式簡便,結(jié)構(gòu)改變靈活。在過程控制中,按偏差的比例P、積分I和微分D進(jìn)行控制:
其中P的作用是比例控制,單純使用比例控制 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?時,在不存在穩(wěn)態(tài)誤差的前提下,單P是可以達(dá)到我們所需要的目標(biāo)的。在此溫度控制系統(tǒng)中,如果PWM輸出為0,溫度就會降低,即產(chǎn)生了我們上述所說的穩(wěn)態(tài)誤差,這時就需要積分I來同步調(diào)節(jié):
由于加了積分項,輸入變大,穩(wěn)態(tài)誤差就會減小。微分項的值是一個負(fù)數(shù),它的主要作用是減少控制過程中發(fā)生的震蕩。
4.3二分查表法
在使用ADC采集函數(shù)對溫度傳感器的電阻值進(jìn)行溫度換算時采用了二分法查找,查找溫度精準(zhǔn)快速,提高了程序的運行效率。二分法查找數(shù)據(jù)快速,不需要一一比對數(shù)據(jù),節(jié)省時間,使溫度控制系統(tǒng)顯示實際溫度誤差減小,可以做到實時顯示。
5.1軟件部分總結(jié)
本系統(tǒng)使用KeiluVision5開發(fā)環(huán)境對單片機(jī)進(jìn)行程序的編寫。
初始化部分,在程序初始化的部分,需要把用到的功能及引腳初始化,初始化定時器部分,需要算好定時的時間,本次所用的時間是0.5s,溢出時間的計算方法為Tout=((arr+1)*(psc+1))/Ft us.電機(jī)部分的初始化全部放在一個函數(shù)里,這樣便于更改程序。在初始化之前,需要將這里用到的變量聲明好。
主循環(huán)部分,在主循環(huán)里,數(shù)據(jù)的顯示部分,可以直接調(diào)用庫函數(shù)。在主循環(huán)里還進(jìn)行了標(biāo)志位的判斷,在散熱標(biāo)志位為1時,調(diào)用啟動電機(jī)函數(shù),在這里使用了數(shù)組,將每一個引腳的輸出做了排序,使電機(jī)正常工作。
其次還有投喂標(biāo)志的判斷,這里直接給舵機(jī)的信號線一個高電平使舵機(jī)打開,延時后給舵機(jī)一個低電平信號將舵機(jī)關(guān)閉。
測溫部分,在測溫部分,首先使用了ad轉(zhuǎn)換函數(shù),采集到對應(yīng)引腳的電壓值,對十次采集到的電壓值求平均得到當(dāng)前電壓值,將電壓值除以電流得到采樣電阻的阻值,通過查表函數(shù),從表中得到此時電阻值對應(yīng)的溫度值,并返回此時的溫度值。查表方式在4.3給出
加熱部分,本次的重點部分就是加熱部分,得到當(dāng)前溫度時,先對溫度進(jìn)行判斷,當(dāng)溫度低于15度時就進(jìn)行加熱,首先對需要用到的定時器進(jìn)行初始化,以便于輸出一個pwm,為了得到滿意的pwm在溫度控制中引入了pid控制,詳細(xì)的控制方法在4.3給出,得到了一個動態(tài)的pid參數(shù)后,將設(shè)定溫度值與當(dāng)前溫度值做差,得到的值進(jìn)行計算后輸出pwm用于對水泥電阻進(jìn)行加熱,但是在冬季需要更快的加熱速度和更高的溫度,所以提高了溫度設(shè)定值和p值,這樣溫度從0度上升到20度只需要十幾分鐘。
散熱部分使用電機(jī)進(jìn)行控制,本次使用的電極驅(qū)動芯片為uln2003,所以不適用pwm輸出進(jìn)行控制,所以采用了對引腳依次輸出電平的方式進(jìn)行控制,這種方法比較簡單,缺點是無法對電機(jī)的轉(zhuǎn)速進(jìn)行控制。
定時喂食部分主要使用了定時器中斷,中斷溢出時間為0.5s,這樣比較適于計時,采用的方法也很簡單,當(dāng)秒加到60時,就向分進(jìn)1,當(dāng)分加到60時,向小時進(jìn)1,當(dāng)小時加到24時,則全部清零,開始下一輪定時。
在寫程序時,遇到了很多問題,同時也有很多收獲。在調(diào)用不同文件夾中的函數(shù)時,需要將用到的c文件及h文件包含進(jìn)來,在外部使用自定義的函數(shù)時,需要將函數(shù)在使用之前進(jìn)行聲明,也可以將函數(shù)在對應(yīng)的h文件中進(jìn)行聲明,這樣比較方便在其他c文件中調(diào)用。
5.2硬件部分總結(jié)
從最開始,在確定了設(shè)計方案以后,我們開始畫板子,板子我們做了兩版,第一版由于元器件IRF630S MOS場效應(yīng)管的尺寸問題,導(dǎo)致第一版無法使用。修改以后第二版也有一點問題,電機(jī)控制部分使用的芯片尺寸略微有差別,但是可以使用。另外在PCB布線時由于線寬的限制,電源只能使用5V供電才不會發(fā)生開路現(xiàn)象。
參考文獻(xiàn):
[1]楊海清,周安棟,羅勇,陳牧,嵌入式系統(tǒng)實時網(wǎng)絡(luò)通信中的LCD顯示設(shè)計方法:計算機(jī)與數(shù)學(xué)工程,2010。
[2]姜波,單片機(jī)原理及C51應(yīng)用設(shè)計:高等教育出版社,2017
[3]周林,劉嘉敏,C語言程序設(shè)計:機(jī)械工程出版社,2013
[4]王桔,洪梅.基于STM32單片機(jī)的恒溫箱系統(tǒng)設(shè)計[J].長春大學(xué)報,2015
[5]廖澤鑫.溫度傳感器的設(shè)計與研究[D].復(fù)旦大學(xué),2012
[6]唐杉林.溫度傳感器與溫度的測量[J].電子測試,2016
面向服務(wù)機(jī)器人的人機(jī)交互系統(tǒng)研究與應(yīng)用項目編號 : 2019JZZY010128
(濰坊理工學(xué)院 ?山東 ?濰坊 ?262500)