許梁,羅開(kāi)武
1.江西理工大學(xué)能源與機(jī)械工程學(xué)院,江西 南昌,3300132;2.銅仁學(xué)院大數(shù)據(jù)學(xué)院,貴州 銅仁,554300
單片機(jī)課程前期的基礎(chǔ)課程主要有《模擬電路》、《數(shù)字電路》,傳統(tǒng)單片機(jī)課程課本知識(shí)教學(xué)側(cè)重單片機(jī)底層知識(shí),如匯編指令,單片機(jī)架構(gòu)等知識(shí)的傳授,對(duì)于地方高校的學(xué)生,基礎(chǔ)稍微薄弱,從教學(xué)實(shí)踐情況來(lái)看,單片機(jī)課堂以課本講知識(shí)等教學(xué)方式,教學(xué)效果不是很理想。因此我們?cè)诮虒W(xué)過(guò)程融合《電子CAD線路》與《單片機(jī)技術(shù)及接口》兩門(mén)課,實(shí)現(xiàn)提出問(wèn)題,找出解決問(wèn)題方法,到電路的設(shè)計(jì)與驗(yàn)證,焊接與組裝、到嵌入式軟件設(shè)計(jì)與數(shù)據(jù)上傳終端等一系列技術(shù)的課堂傳授。課程設(shè)計(jì)了以解決實(shí)際問(wèn)題和應(yīng)用為主的課程教學(xué)場(chǎng)景,在一定程度上緩解了單片機(jī)傳統(tǒng)課程中指令教學(xué)枯燥、難記難懂的困鏡。學(xué)生學(xué)習(xí)完課程實(shí)例后能直接模仿將課堂中的單片機(jī)相關(guān)技術(shù)應(yīng)用到實(shí)際的生產(chǎn)生活中,以興趣引領(lǐng),基于能力驅(qū)動(dòng)的人才培養(yǎng)教學(xué)活動(dòng),使學(xué)生動(dòng)手實(shí)踐能力得到明顯加強(qiáng),課程改革以實(shí)例教學(xué)方式進(jìn)行,一個(gè)教學(xué)實(shí)例約10課時(shí)左右,其中硬件電路設(shè)計(jì)占4課時(shí),單片機(jī)嵌入式軟件教學(xué)占6課時(shí)。現(xiàn)以單片機(jī)溫濕度采集系統(tǒng)設(shè)計(jì)教學(xué)實(shí)例,詳細(xì)闡述單片機(jī)教學(xué)改革的實(shí)施開(kāi)展情況。
溫濕度參數(shù)在智慧農(nóng)業(yè)、工控領(lǐng)域有重要的應(yīng)用,以溫濕度數(shù)據(jù)采集為例,要求設(shè)備有:自選單片機(jī)與傳感器。實(shí)現(xiàn)功能有:①采集傳感器的溫濕度,顯示在液晶顯示屏上,沒(méi)有任何按鍵操作,若干時(shí)間后,液晶屏熄滅以省電;②單片機(jī)可以存儲(chǔ)采集數(shù)據(jù)以來(lái)的最值,如溫度的最大值和最小值,濕度的最大值和最小值;③通過(guò)按鍵可以設(shè)置溫濕度報(bào)警的閥值;④采集的數(shù)據(jù)可以上報(bào)計(jì)算機(jī),以供后續(xù)更廣泛的控制,如向加濕器、空調(diào)等設(shè)備發(fā)送控制指令。
電路設(shè)計(jì)分析:課程教學(xué)所用的教學(xué)電路板在課堂上開(kāi)發(fā)完成,電路的基本組成由單片機(jī)、傳感器、按鍵、蜂鳴器、液晶屏組成;在單片機(jī)選型方面,傳統(tǒng)的單片機(jī)有宏晶STC、愛(ài)特梅爾ATMEL、德州儀器TI等,為了后續(xù)嵌入式軟件設(shè)計(jì)的方便性,在此選擇愛(ài)特梅爾ATMEL ATMEGA328P-PU,同時(shí)考慮到學(xué)生焊接的方便性,封裝選擇DIP;而溫濕度傳感器也有眾多選擇,如DHT11和BMP280,同樣,為了方便學(xué)生焊接,選擇DHT11;數(shù)據(jù)上報(bào)到計(jì)算機(jī),則選用USB轉(zhuǎn)串口芯片CH340C。同時(shí),為方便對(duì)嵌入式程序進(jìn)行調(diào)試與下載,設(shè)計(jì)中加入了自動(dòng)下載的電路,同時(shí)設(shè)計(jì)了單片機(jī)Bootloader引導(dǎo)燒錄接口[1]。
單片機(jī)基本電路如圖1所示。其中U1為ATMEL ATMEGA328P-PU,X1為16Mhz的晶振,C1、C6為與之匹配的負(fù)載電容,J1為Bootloader燒錄接口,C3、C4、C5為單片機(jī)的濾波電容,為方便測(cè)試程序運(yùn)行,設(shè)計(jì)了狀態(tài)運(yùn)行燈LED1。

圖1 單片機(jī)基本電路
設(shè)計(jì)的USB接口供電電路如圖2(a)所示,USB數(shù)據(jù)通訊電路如圖2(b)所示。供電直接采用USB供電,同時(shí)支持USB數(shù)據(jù)通訊,能將采集到的數(shù)據(jù)發(fā)送給計(jì)算機(jī)。其中,LED2為電源供電指示燈;LED3、LED4為數(shù)據(jù)通訊狀態(tài)燈,當(dāng)有數(shù)據(jù)傳送時(shí),該燈會(huì)閃爍;C10、R5的設(shè)計(jì)是為了更新芯片程序時(shí)設(shè)計(jì)的自動(dòng)下載功能;C7為CH340芯片的濾波電容;X2為CH340的晶振;C11、C12為X2的負(fù)載電容,大小為22pF,大小的設(shè)計(jì)要點(diǎn)需要根據(jù)晶振的相關(guān)參數(shù)確定[2]。

圖2 USB 接口供電與USB 數(shù)據(jù)通訊電路設(shè)計(jì)
除了USB供電,亦可以采用9~35V的直流供電。設(shè)計(jì)的直流供電電路如圖3(a)所示,溫濕度傳感器電路如圖3(b)所示。其中U4為L(zhǎng)DO線性穩(wěn)壓芯片,支持的最高電壓為35V;Q3為供電切換MOS管,當(dāng)USB供電時(shí),自動(dòng)切斷DC供電;D2是為了防止電流倒灌,設(shè)計(jì)要選電壓降低的二極管;U5則是為了保護(hù)USB口而設(shè)計(jì)的可恢復(fù)熔絲。溫濕度傳感器DHT11的電路中R12為數(shù)據(jù)線上拉電阻,C13為該傳感器的濾波電容。

圖3 直流供電設(shè)計(jì)與溫濕度傳感器電路設(shè)計(jì)
液晶顯示屏電路和蜂鳴器電路設(shè)計(jì)如圖4所示。其中,R1為液晶顯示屏的對(duì)比度調(diào)節(jié)電位計(jì);Q1為背光控制偏置三極管,這是為了節(jié)能設(shè)計(jì);Q2為蜂鳴器開(kāi)關(guān)控制偏置三極管;D1為Q2的保護(hù)二極管[4]。

圖4 液晶顯示屏電路設(shè)計(jì)與蜂鳴器電路設(shè)計(jì)
按鍵電路采用A D C 按鍵設(shè)計(jì)。其中當(dāng)SELECT鍵按下時(shí),ADC電壓為5V,10位的ADC采樣值為最大值1023;當(dāng)DOWN按鍵按下時(shí),電壓為3.968V,鍵電路設(shè)計(jì)如圖5(a)所示,其仿真圖如圖5(b)所示。ADC采樣值為811,當(dāng)UP鍵按下時(shí),電壓值為1.976V;ADC采樣值為404,計(jì)算方法可以通過(guò)仿真軟件或做實(shí)驗(yàn)得出。上述電壓是基于5V的理論值仿真出來(lái)的電壓值,實(shí)際電壓會(huì)有所變化,但不會(huì)影響ADC值,電壓與ADC值的計(jì)算公式為。

圖5 鍵電路設(shè)計(jì)與仿真圖
該電路設(shè)計(jì)中,電源布線線寬度不少20mil,電源布線建議采用星型走線,USB D+D-要求差分對(duì)布線,晶振應(yīng)盡可能接近相應(yīng)的芯片,其它布線可采用5mil線寬,過(guò)孔采用12/24mil設(shè)計(jì),布線及電路3D仿真如圖6所示。

圖6 電路布線與電路3D 仿真
任務(wù)分析:結(jié)合上述應(yīng)用場(chǎng)景,嵌入式軟件設(shè)計(jì)是處理多任務(wù)多事件的過(guò)程,在本次教學(xué)中,主要的嵌入式設(shè)計(jì)內(nèi)容如下。①采集傳感器數(shù)據(jù)并作出相應(yīng)的響應(yīng):?jiǎn)纹瑱C(jī)處理溫濕度傳感器DHT11的數(shù)據(jù)后,更新液晶顯示屏顯示內(nèi)容,用串口向計(jì)算機(jī)上報(bào),同時(shí)要讀取EEPROM相關(guān)值,并與之比較,若高于最大值或低于最小值,則要更新EEPROM存儲(chǔ)并啟動(dòng)蜂鳴器發(fā)出報(bào)警響聲,當(dāng)下一次讀取傳感器數(shù)據(jù)時(shí),若在設(shè)置的范圍內(nèi)時(shí),則需要關(guān)閉蜂鳴器。②響應(yīng)用戶(hù)按鍵事件:按鍵分別短按與長(zhǎng)按,現(xiàn)約定,當(dāng)短按下SELECT,UP,DOWN任意鍵時(shí),屏幕亮起;當(dāng)長(zhǎng)按SELECT鍵時(shí),進(jìn)入閥值設(shè)置,開(kāi)啟液晶顯示屏光標(biāo)閃爍以定位要設(shè)置的報(bào)警值(溫度最大值、溫度最小值;濕度最大值、濕度最小值),UP鍵增加,DOWN鍵減少。③蜂鳴器響應(yīng)事件:當(dāng)蜂鳴器被觸發(fā)時(shí),采取響高電平(響)100毫秒,低電平(不響)3000毫秒,依次進(jìn)行的報(bào)警動(dòng)作。
基于上述電路的設(shè)置,各模塊與單片機(jī)的接口連線在軟件框架中對(duì)應(yīng)的序號(hào)如下。

傳感器 液晶屏 蜂鳴器 LED 按鍵DATA(PC0)PWR(PD6), EN(PB3),RS(PB4), RW(GND),DB0-4(GND), DB4(PD5),DB5(PD4), DB6(PD3),DB7(PD2)PD7 PB5 PC0 DATA(A1)PWR(D6), EN(D11),RS(D12), DB4(D5),DB5(DB4), D6(D3),DB7(D2);D7 D13 A0
基于ATMEGA328P單片機(jī)和相應(yīng)軟件框架實(shí)現(xiàn)對(duì)DHT11的溫濕度數(shù)據(jù)采集、數(shù)據(jù)上報(bào)計(jì)算機(jī)以及數(shù)據(jù)在液晶顯示屏上,蜂鳴器的開(kāi)關(guān)設(shè)計(jì),這些單個(gè)的實(shí)現(xiàn),在網(wǎng)上已有眾多的教程與實(shí)例,對(duì)于學(xué)生來(lái)說(shuō),這并不復(fù)雜。而嵌入式軟件重點(diǎn)設(shè)計(jì)在于如何實(shí)現(xiàn)多任務(wù)同時(shí)運(yùn)行且不耦合,這也是單片機(jī)技術(shù)應(yīng)用重點(diǎn),以下重點(diǎn)向?qū)W生講述單片機(jī)應(yīng)用中的Ticker技術(shù),與狀態(tài)機(jī)技術(shù)。
單片機(jī)里經(jīng)常使用for或者while循環(huán)來(lái)實(shí)現(xiàn)delay延時(shí)函數(shù),這是一種阻塞型的延時(shí)方法,適合于短時(shí)間(毫秒或微秒級(jí)別)的延時(shí),但長(zhǎng)時(shí)間延時(shí)不適合用這種方法,這樣會(huì)造成單片機(jī)任務(wù)阻塞,而Ticker技術(shù)利用時(shí)間切片的概念,可以在預(yù)定的時(shí)間間隔內(nèi)調(diào)用一個(gè)函數(shù),因此使用它進(jìn)行延時(shí)是非阻塞的,以蜂鳴器任務(wù)來(lái)講解Ticker技術(shù)的任務(wù),一般來(lái)說(shuō),任務(wù)建議有兩個(gè)核心的部分:①任務(wù)的初始化,如void BeepInit(void)函數(shù);②任務(wù)更新函數(shù),如void beepUpdate(void)函數(shù),此函數(shù)一般用在main函數(shù)中的for(;;)或while(1)中,用于刷新任務(wù)的Ticker,當(dāng)ticker運(yùn)行時(shí),則運(yùn)行相應(yīng)的回調(diào)函數(shù),否則等待下一次刷新,而對(duì)于外部調(diào)用,則只需關(guān)注beepOn()與beepOff()函數(shù),整個(gè)實(shí)現(xiàn)過(guò)程是非阻塞的。這種技術(shù)解決了多任務(wù)耦合問(wèn)題,如圖7所示。

圖7 用Ticker 技術(shù)實(shí)現(xiàn)蜂鳴器非阻塞不同頻率報(bào)警
單片機(jī)的按鍵處理是嵌入式軟件設(shè)計(jì)中經(jīng)常要遇到的,按鍵分為短按與長(zhǎng)按,根據(jù)圖5的電路設(shè)計(jì),當(dāng)SELECT、DOWN、UP鍵按下時(shí),ADC采樣值為1023、811、404,根據(jù)實(shí)際測(cè)試,ADC值可能會(huì)上下波動(dòng)1左右,單片機(jī)按鍵分為短按與長(zhǎng)按。現(xiàn)對(duì)按鍵進(jìn)行標(biāo)定,從按鍵到釋放,時(shí)間在500毫秒以?xún)?nèi)標(biāo)定為短按;按住不放,時(shí)間超過(guò)3000毫秒,則視為長(zhǎng)按。短按與長(zhǎng)按同樣可以使用Ticker技術(shù)檢測(cè)與實(shí)現(xiàn),單片機(jī)按鍵事件處理一般采用狀態(tài)機(jī)來(lái)實(shí)現(xiàn),現(xiàn)向?qū)W生講述如何用狀態(tài)機(jī)來(lái)實(shí)現(xiàn)上述功能。
單片機(jī)使用狀態(tài)機(jī)處理按鍵事件如圖8所示,根據(jù)任務(wù)需求,創(chuàng)建S1~S5五個(gè)狀態(tài)機(jī)。SELECT鍵長(zhǎng)按時(shí)進(jìn)入狀態(tài)機(jī)S1,進(jìn)入設(shè)置溫度最小值界面,液晶屏光標(biāo)跳轉(zhuǎn)到Tmin位置并閃爍,以告知使用者正在設(shè)置溫度的最小閥值,此時(shí)若檢測(cè)到UP或Down鍵按下,其閥值會(huì)相應(yīng)加1或減1;當(dāng)SELECT鍵再次短按下去時(shí),狀態(tài)機(jī)跳轉(zhuǎn)至S2,進(jìn)入設(shè)置溫度最大值界面,依次類(lèi)推,直至設(shè)置結(jié)束后液晶屏進(jìn)入顯示實(shí)時(shí)溫濕度界面。狀態(tài)機(jī)在非設(shè)置狀態(tài)時(shí),即非S1、S2、S3、S4,SELECT鍵短按時(shí),液晶屏亮屏并實(shí)時(shí)顯示采集的溫濕度傳感器數(shù)據(jù);當(dāng)UP或DOWN短按時(shí),液晶屏亮屏并顯示已采集數(shù)據(jù)的最值,相應(yīng)時(shí)間后,自動(dòng)跳轉(zhuǎn)至實(shí)時(shí)數(shù)據(jù)界面。

圖8 單片機(jī)使用狀態(tài)機(jī)處理按鍵事件
通過(guò)將電子CAD線路與單片機(jī)課程融合,以溫濕度采集系統(tǒng)設(shè)計(jì)為例,從市場(chǎng)技術(shù)需求出發(fā),從電路設(shè)計(jì)到開(kāi)始焊接,從電路驗(yàn)證到嵌入式軟件的設(shè)計(jì),這是一個(gè)完整的從想法到產(chǎn)品的過(guò)程,以能力培養(yǎng)為目的、產(chǎn)出為導(dǎo)向的課程改革。從實(shí)踐情況來(lái)看,課堂取得了非常好的教學(xué)效果,值得推廣。