黃 怡, 駱 懿, 許曉榮
(杭州電子科技大學(xué) 通信工程學(xué)院, 浙江 杭州 310018)
單片機(jī)實(shí)踐課程是電子信息與電氣工程類專業(yè)重要的專業(yè)實(shí)踐課程。杭州電子科技大學(xué)通信工程學(xué)院?jiǎn)纹瑱C(jī)教學(xué)團(tuán)隊(duì)針對(duì)通信工程專業(yè)的特點(diǎn),設(shè)計(jì)了雙向通信控制系統(tǒng)的實(shí)驗(yàn)。通過該實(shí)驗(yàn),使學(xué)生了解單片機(jī)系統(tǒng)控制和通信機(jī)制的基本原理,掌握單片機(jī)系統(tǒng)設(shè)計(jì)與制作的能力,包括電路設(shè)計(jì)、程序編寫、實(shí)物焊接以及系統(tǒng)調(diào)試等,從自主探究與合作交流中提高分析問題和解決復(fù)雜工程問題的能力,提高科技創(chuàng)新意識(shí)[1-2]。
雙向通信控制系統(tǒng)以TI公司的MSP430F5529單片機(jī)作為主控處理器??刂贫擞呻p軸搖桿、射頻模塊和LCD液晶顯示屏組成;被控端由射頻模塊、LCD液晶顯示屏和智能小車組成,智能小車的基礎(chǔ)模塊有直流電機(jī)和舵機(jī),可以通過添加傳感器進(jìn)行功能擴(kuò)展。
系統(tǒng)的工作流程為:控制端通過采集雙軸搖桿的電位值獲得搖桿當(dāng)前的位置,電位值數(shù)據(jù)通過單片機(jī)處理后由射頻模塊發(fā)送;被控端通過與控制端匹配的射頻模塊接收指令信號(hào),單片機(jī)對(duì)接收到的指令信號(hào)進(jìn)行解析處理,然后輸出不同占空比的PWM信號(hào),以控制智能小車的直流電機(jī)和舵機(jī),實(shí)現(xiàn)對(duì)小車的速度和方向的控制。
智能小車的速度和方向可顯示在兩端的LCD液晶屏上。若智能小車加裝了環(huán)境監(jiān)測(cè)傳感器,可將采集到的數(shù)據(jù)同時(shí)回傳至控制端,并顯示在控制端液晶屏上。系統(tǒng)的框架如圖1所示。
圖1 系統(tǒng)的框架設(shè)計(jì)
本實(shí)驗(yàn)項(xiàng)目通過可雙向通信的控制系統(tǒng),讓學(xué)生了解工程項(xiàng)目的軟硬件設(shè)計(jì)流程及調(diào)試要求,熟悉單片機(jī)作為主控處理器的功能及作用,掌握中斷控制、A/D采樣轉(zhuǎn)換、異步串口通信、PWM、LCD、直流電機(jī)和舵機(jī)的應(yīng)用。通過基礎(chǔ)實(shí)驗(yàn)訓(xùn)練,學(xué)生能夠聯(lián)系實(shí)際生活和當(dāng)前技術(shù)熱點(diǎn)進(jìn)行系統(tǒng)的功能拓展和創(chuàng)新。
主控處理器選用MSP430F5529單片機(jī)。該單片機(jī)是美國(guó)德州儀器公司(TI)推出的一種16位超低功耗的混合信號(hào)處理器,具有功耗低、指令高效、電壓范圍寬、中斷功能強(qiáng)大、喚醒時(shí)間短等特點(diǎn)[3-4]。該單片機(jī)片上有時(shí)鐘系統(tǒng)、12位A/D轉(zhuǎn)換器(ADC)、多個(gè)可輸出PWM信號(hào)的16位定時(shí)器和2個(gè)通用串行通信接口,完全滿足本系統(tǒng)的使用。
在MSP430F5529核心板的基礎(chǔ)上,我院“微處理器與接口技術(shù)課程設(shè)計(jì)”教學(xué)團(tuán)隊(duì)自制了MSP430F5529接口擴(kuò)展板,如圖2所示。該擴(kuò)展板與核心板配套使用,核心板通過外接引腳排線插槽與擴(kuò)展板連接。擴(kuò)展板包括液晶顯示屏、電位器、ADC測(cè)試接口、4個(gè)按鍵、3個(gè)電容式觸摸鍵及背面的microSD Card插槽、蜂鳴器等。在本實(shí)驗(yàn)設(shè)計(jì)中,主要采用該擴(kuò)展板上的LCD和按鍵,其中LCD用于顯示小車的轉(zhuǎn)速、方向以及傳感器采集的數(shù)據(jù),按鍵用于控制。
圖2 自制MSP430F5529接口擴(kuò)展板
LCD液晶顯示屏為128×64像素,可以顯示8×4個(gè)(16×16點(diǎn)陣)漢字或者顯示21×8個(gè)(6×8點(diǎn)陣)ASCII碼。LCD的數(shù)據(jù)線、片選信號(hào)、時(shí)鐘信號(hào)等信號(hào)線與MSP430F5529單片機(jī)的GPIO口相連接,通過單片機(jī)控制GPIO口輸出電平,設(shè)置點(diǎn)陣像素電平的高低,在LCD上顯示設(shè)置的字符、漢字、圖像點(diǎn)陣[5]。LCD液晶顯示屏與MCU之間的數(shù)據(jù)傳輸為單向,數(shù)據(jù)只允許寫入[3,6-7]。
射頻模塊以CC1101為核心,工作頻率為434~437 MHz[8]。CC1101是一款在無線通信系統(tǒng)中廣泛應(yīng)用的無線傳輸芯片,能夠根據(jù)需求配置數(shù)據(jù)傳輸?shù)念l率、速率、數(shù)據(jù)格式、調(diào)制方式等[9]。射頻模塊以半雙工的方式傳送數(shù)據(jù),成對(duì)的兩個(gè)模塊必須設(shè)置相同的波特率、通信頻道和地址才能實(shí)現(xiàn)通信,可以通過拉低CON引腳電平進(jìn)入指令模式進(jìn)行設(shè)置。實(shí)驗(yàn)中,射頻模塊的TXD和RXD引腳分別與單片機(jī)的P3.3和P3.4引腳相連,采用UART協(xié)議進(jìn)行串口通信,實(shí)現(xiàn)與單片機(jī)之間的數(shù)據(jù)交互。當(dāng)射頻模塊的RXD端口收到MCU的數(shù)據(jù)后,自動(dòng)將數(shù)據(jù)以無線電波的方式發(fā)送到空中,而波特率、通信頻道和地址都匹配的射頻模塊可直接從空中獲得數(shù)據(jù)。MCU與CC1101射頻模塊的接口示意圖如圖3所示。
圖3 MCU與CC1101射頻模塊接口示意圖
雙軸搖桿模塊的3個(gè)信號(hào)輸出引腳是S-X、S-Y和S-K,分別連接控制端單片機(jī)的P6.1、P6.2和P6.3引腳,通過單片機(jī)的ADC模擬信號(hào)采樣轉(zhuǎn)換功能獲得當(dāng)前搖桿的電位值[10]。實(shí)驗(yàn)中采用的是序列通道多次轉(zhuǎn)換模式,ADC轉(zhuǎn)換結(jié)果將順序?qū)懭階DC12MEMx的存儲(chǔ)器中。當(dāng)最后一個(gè)通道轉(zhuǎn)換完成后,一次序列通道轉(zhuǎn)換完成,會(huì)觸發(fā)進(jìn)入下一次序列通道轉(zhuǎn)換。
被控端的直流電機(jī)通過H橋與單片機(jī)相連。單片機(jī)輸出不同占空比的PWM,由H橋轉(zhuǎn)換成對(duì)應(yīng)比例的驅(qū)動(dòng)電壓,從而控制直流電機(jī)的轉(zhuǎn)速和正反轉(zhuǎn)動(dòng)方向。H橋需要+5 V供電。
舵機(jī)由PWM信號(hào)控制。利用占空比的變化改變舵機(jī)的角度,角度變化與脈沖寬度變化成正比[11]。實(shí)驗(yàn)中采用的SG90舵機(jī),周期為20 ms,脈沖寬度在1~2 ms,對(duì)應(yīng)-90°~+90°。初始化時(shí)可將脈沖寬度設(shè)置為1.5 ms并作為基準(zhǔn)信號(hào)。舵機(jī)信號(hào)線與單片機(jī)具有PWM輸出功能的引腳相連,如P2.0。
主程序的流程如圖4所示。系統(tǒng)啟動(dòng)后首先進(jìn)入初始化??刂贫隧氝M(jìn)行時(shí)鐘初始化、通用輸入輸出口初始化、LCD初始化、按鍵初始化、ADC初始化、UART初始化;被控端除上述初始化外,還需要進(jìn)行定時(shí)器初始化。系統(tǒng)初始化之后進(jìn)入主循環(huán),在主循環(huán)中首先掃描按鍵情況。按鍵可以設(shè)置多種功能。圖4中,當(dāng)按鍵按下時(shí)可進(jìn)入CC1101射頻模塊的指令模式,設(shè)置波特率、通信頻道和地址。按鍵功能可自行定義,從而使控制系統(tǒng)的運(yùn)行及功能更加優(yōu)化。控制端讀取搖桿的數(shù)據(jù),進(jìn)行處理后發(fā)送到CC1101射頻模塊進(jìn)行發(fā)送。被控端持續(xù)進(jìn)行指令監(jiān)聽,當(dāng)收到指令后對(duì)指令進(jìn)行解析,并控制直流電機(jī)和舵機(jī)作出響應(yīng)。
圖4 主程序流程圖
控制端需要處理A/D采樣轉(zhuǎn)換后得到的搖桿數(shù)據(jù)。通過AD采樣得到S -X(P6.1端口)、S -Y(P6.2端口)、S -K(P6.3端口)的值,分別存入ADC12MEM1、ADC12MEM2、ADC12MEM3,范圍均為0~4095。S -X和S -Y分別控制速度和角度,實(shí)驗(yàn)中將其分為8個(gè)級(jí)別,速度級(jí)別為ADC12MEM1/512,角度為ADC12MEM2/512。S -K為搖桿按鍵信號(hào),只有按下和彈起兩種狀態(tài),按下時(shí)K值為0,松開時(shí)K值為1。將以上所有值整合為一個(gè)十進(jìn)制數(shù)Send_Data存入寄存器中。
假設(shè)搖桿位置處在中間時(shí),ADC12MEM1、ADC12MEM2的采樣值為2 500,ADC12MEM3約為4 000,則Send_Data=4+4×8+1×64。說明此狀態(tài)為第四級(jí)速度和第四級(jí)角度的按鍵沒有按下,因ADC12MEM3值采樣在實(shí)際應(yīng)用中達(dá)不到4 096,故除以3 000。將Send_Data放入寄存器UCA0TXBUF中,即可實(shí)現(xiàn)指令信息的發(fā)送。
被控端需要無線接收指令信息,通過解析后控制小車電機(jī)的轉(zhuǎn)速和舵機(jī)的角度。無線接收到的指令信息存放在UCA0RXBUF中,將其提取出來后存入十進(jìn)制變量Recv_Data中,對(duì)其通過移位相除操作進(jìn)行解析。具體代碼如下:
Key = Recv_Data/64; //搖桿按下時(shí)Key=0,否則為1
Recv_Data = Recv_Data%64; //移位
Speed = Recv_Data%8; //控制電機(jī)轉(zhuǎn)速
Direct = Recv_Data/8; //控制舵機(jī)角度
假設(shè)Recv_Data=100,Key=100/64=1,說明搖桿按鍵沒有按下;Recv_Data=Recv_Data%64=36, Speed=Recv_Data%8=4,說明此時(shí)是第四級(jí)速度。Direct=Recv_Data/8=4,說明此時(shí)是第四級(jí)角度。
UCA0TXBUF、UCA0RXBUF為8位寄存器,在本實(shí)驗(yàn)示例中只使用了第6—0位,最高位則沒有使用。在實(shí)際操作中可以鼓勵(lì)學(xué)生進(jìn)行功能拓展。例如第7位表示一個(gè)按鍵的狀態(tài),當(dāng)按鍵按下時(shí),要求被控端將電池電量值返回控制端。若將被控端放置在四軸飛行器上,掌握飛行器的電量值以決定是否能夠在飛行器電量用盡前回收,具有實(shí)際意義。
指令信息的傳送方式多種多樣,只要通信的雙方能夠準(zhǔn)確掌握對(duì)方信息所要表達(dá)的意思即可。在實(shí)踐過程中,有項(xiàng)目小組利用查表的方式進(jìn)行通信,采用ASCII表中的數(shù)字和字母代表具體速度和角度的等級(jí),通信雙方約定ASCII碼字符分別表示的具體意義,在控制端和被控端采用相同的指令表即可。
在實(shí)驗(yàn)教學(xué)實(shí)踐中,首先會(huì)介紹單片機(jī)及其開發(fā)環(huán)境、GPIO、LCD、中斷、ADC采樣轉(zhuǎn)換、異步串口通信協(xié)議、脈沖寬度調(diào)制、液晶屏驅(qū)動(dòng)與顯示、直流電機(jī)的驅(qū)動(dòng)、舵機(jī)的驅(qū)動(dòng)等知識(shí)點(diǎn),并通過樣例程序的編寫和講解讓學(xué)生較快熟悉MSP430F5529單片機(jī)和CC1101射頻模塊,然后讓學(xué)生分組進(jìn)行項(xiàng)目綜合軟硬件設(shè)計(jì)及調(diào)試。教學(xué)實(shí)踐證明,學(xué)生通過該實(shí)驗(yàn)?zāi)軌蜉^好地理解單片機(jī)的系統(tǒng)控制功能,所有項(xiàng)目小組均能完成基本功能的設(shè)計(jì)與調(diào)試,部分小組能夠進(jìn)行創(chuàng)新,增加不同的功能應(yīng)用。師生普遍認(rèn)為該實(shí)驗(yàn)項(xiàng)目是對(duì)用C語(yǔ)言編程的能力、硬件設(shè)計(jì)能力、快速學(xué)習(xí)能力、發(fā)現(xiàn)以及解決問題的能力的綜合考察項(xiàng)目,也是一個(gè)可拓展的實(shí)驗(yàn)項(xiàng)目。
以本實(shí)驗(yàn)為基礎(chǔ),可以引導(dǎo)學(xué)生進(jìn)行多方面實(shí)驗(yàn)內(nèi)容的拓展。例如根據(jù)智能小車的功能,可以在小車上加裝特定用途的傳感器,如增加溫濕度傳感器、煙霧傳感器、甲醛傳感器等用于監(jiān)測(cè)環(huán)境情況[12];或者增加超聲波傳感器,使小車能夠自主避障,保障小車行駛過程中的安全[13];根據(jù)無線信號(hào)傳輸方式,可以嘗試用藍(lán)牙、WiFi模塊替換CC1101射頻模塊[14-15];可嘗試通過互聯(lián)網(wǎng)遠(yuǎn)程獲取小車的運(yùn)行路線、運(yùn)行環(huán)境等數(shù)據(jù)[16]。在信息安全方面,可以嘗試運(yùn)用加密算法保證發(fā)送的指令不被非法截獲和篡改。
通過雙向通信控制系統(tǒng)實(shí)驗(yàn)項(xiàng)目的制作,使學(xué)生了解系統(tǒng)從設(shè)計(jì)、制作、軟硬件調(diào)試到系統(tǒng)優(yōu)化的全過程,內(nèi)容涉及中斷控制、ADC采樣轉(zhuǎn)換、異步串口通信協(xié)議、脈沖寬度調(diào)制、液晶屏驅(qū)動(dòng)與顯示、直流電機(jī)的驅(qū)動(dòng)、舵機(jī)的驅(qū)動(dòng)等。學(xué)生通過該實(shí)驗(yàn)?zāi)軌蜉^好地理解單片機(jī)的系統(tǒng)控制功能,并能以此為平臺(tái)進(jìn)行創(chuàng)新項(xiàng)目的制作,實(shí)驗(yàn)教學(xué)效果良好。