陳甸甸, 王 怡, 金小萍
(中國計量大學(xué) 信息工程學(xué)院, 浙江 杭州 310018)
嵌入式系統(tǒng)原理作為電子信息工程和通信工程等專業(yè)的核心課程,理論知識點(diǎn)多,覆蓋學(xué)科面廣,命令操作多,教師講授難度大,學(xué)生感覺內(nèi)容枯燥乏味,無法產(chǎn)生學(xué)習(xí)興趣[7-9]。為改變這種狀況,我們在該課程的實(shí)驗教學(xué)過程中采用了ARM Cortex-M3內(nèi)核的STM32F103微控制器為目標(biāo)平臺,結(jié)合相應(yīng)的實(shí)驗項目,強(qiáng)化理論與應(yīng)用實(shí)踐相結(jié)合,引導(dǎo)學(xué)生獨(dú)立思考,培養(yǎng)學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)積極性、主動性。
STM32F103系列主要分為基礎(chǔ)性系列與增強(qiáng)型系列,本文使用的STM32F103ZET6屬于增強(qiáng)型系列,模擬/數(shù)字(A/D)轉(zhuǎn)換、數(shù)字/模擬(D/A)轉(zhuǎn)換是該系列處理的重要功能。本文主要利用數(shù)字/模擬轉(zhuǎn)換器(DAC)、直接內(nèi)存訪問(DMA)和定時器(TIMER)3個模塊,設(shè)計了STM32引腳輸出不同的模擬波形實(shí)驗。DAC的作用是將數(shù)字量轉(zhuǎn)換成電壓,DMA可以不占用CPU資源讀取內(nèi)存中的數(shù)字量,輸出波形的周期可以通過修改TIMER的定時時間得到。
DAC模塊是數(shù)字輸入、電壓輸出的數(shù)字/模擬轉(zhuǎn)換器,可以配置為8位或12位模式,數(shù)據(jù)格式可以分為8位右對齊、12位左對齊和12位右對齊3種。STM32F103ZET6的DAC模塊有2個輸出通道并帶有DMA功能,每個通道都有單獨(dú)的轉(zhuǎn)換器。在雙DAC模式下,2個通道可以獨(dú)立地進(jìn)行轉(zhuǎn)換,也可以同時進(jìn)行轉(zhuǎn)換并同步地更新2個通道的輸出[10]。
DAC功能框圖見圖1。DAC模塊主要分為觸發(fā)模塊、控制邏輯、DAC轉(zhuǎn)換器。觸發(fā)模塊包含7個硬件觸發(fā)和1個軟件觸發(fā)。DAC中比較重要的寄存器有數(shù)據(jù)保持寄存器(DHR)、數(shù)據(jù)輸出寄存器(DOR)以及DAC控制寄存器(DAC_CR), DOR不能直接操作,它的值是由控制邏輯從DHR中更新過來。
圖1 DAC功能框圖
本文利用通道1實(shí)現(xiàn)波形輸出,數(shù)據(jù)格式采用12位右對齊,觸發(fā)采用硬件觸發(fā)。寫入的數(shù)據(jù)根據(jù)相應(yīng)的位移后被轉(zhuǎn)存到DHR1寄存器,當(dāng)觸發(fā)發(fā)生后經(jīng)過3個APB1時鐘周期,數(shù)據(jù)傳至寄存器DOR1。經(jīng)過大約3 μs后,輸出即有效,引腳可測得模擬電壓。因此,只要改變數(shù)據(jù)寄存器中的數(shù)據(jù)就可以實(shí)現(xiàn)不同電壓信號的輸出,產(chǎn)生相應(yīng)的波形。如果要改變波形的周期,只要通過TIMER改變數(shù)據(jù)寄存器中數(shù)據(jù)保持的時間即可。
當(dāng)DAC的參考電壓為Vref+的時候,DAC的輸出電壓是線性的,從0~Vref+。12位模式下DAC輸出電壓與Vref+以及DOR的計算公式如下:
A new scheme of blending initial perturbation of the GRAPES regional ensemble prediction system
DAC輸出電壓=Vref+×(DOR/4095)
本文所設(shè)計的實(shí)驗硬件部分無需外接模塊,PA4和PA5引腳即為DAC的兩路通道,主要功能通過軟件控制實(shí)現(xiàn)。軟件系統(tǒng)的設(shè)計任務(wù):一是利用STM32cubeMX平臺進(jìn)行初始化配置后,生成初始化MDK工程;二是在keilMDK5.24下進(jìn)行基于HAL(硬件抽象層)庫程序的開發(fā)。軟件的開發(fā)流程見圖2。
圖2 信號輸出軟件流程圖
STM32cubeMX是一款圖形化軟件設(shè)置工具,支持STM32全系列芯片,用戶可以非常方便地配置MCU的引腳、時鐘、外設(shè)等,并且支持自動生成工程項目文件,可以極大地減輕開發(fā)工作、節(jié)省時間和費(fèi)用[11-13]。本實(shí)驗在STM32CubeMX中配置步驟如下:
(1) 啟動STM32CubeMX,點(diǎn)擊NewProject新建工程。
(2) 進(jìn)入MCU型號選擇界面,搜索并雙擊選擇STM32F103ZETx后,進(jìn)入Pinout引腳配置界面(見圖3)。
(3) 選擇通道1(DAC有2路通道),啟用外部高速時鐘晶振,選擇定時器TIM6作為DAC的觸發(fā)源。
圖3 STM32引腳配置界面
(4) 進(jìn)入時鐘配置界面。外部晶振通過鎖相環(huán)(PLL)倍頻得到PLLCLK,之后得到系統(tǒng)時鐘72MHz,DAC掛載在APB1總線上,該總線下外設(shè)的時鐘頻率最大為36MHz,定時器時鐘頻率為72MHz。
(5) 在DAC配置界面(見圖4)的參數(shù)設(shè)定選項卡中,選擇定時器6作為觸發(fā)事件,其余兩項設(shè)置為disable。
(6) 在DMA設(shè)定選項卡中,添加DAC通道1的DMA功能,方向從內(nèi)存到外設(shè),模式為循環(huán)模式,內(nèi)存地址需要自增,數(shù)據(jù)寬度為HalfWord。DMA參數(shù)設(shè)置界面見圖5。
圖5 DMA參數(shù)設(shè)置界面
(7) 輸出引腳PA4的配置設(shè)為模擬模式,當(dāng)DAC通道使能后,相應(yīng)的GPIO引腳會自動與DAC的模擬輸出相連。
(8) 在定時器TIM6(配置界面見圖6)的配置選項中,將預(yù)分頻(Prescaler)設(shè)置為72-1,計數(shù)方式為向上計數(shù),自動重載寄存器(AutoReloadRegister)的值設(shè)置為1000,觸發(fā)事件設(shè)置為更新事件。在該設(shè)置模式下,定時器6的計數(shù)周期為1ms。如果需要改變DAC輸出波形的周期,可根據(jù)需要設(shè)置預(yù)分頻和自動重載寄存器的值。
圖6 定時器配置界面
各項配置完成后,點(diǎn)擊生成工程文件按鈕,彈出工程設(shè)置窗口,填寫工程名與選擇目錄,選擇編譯器MDK-ARMV5,即可生成初始化工程文件。
波形信號產(chǎn)生的基本原理是利用數(shù)字法來實(shí)現(xiàn)的。實(shí)驗設(shè)計中利用STM32F103ZET6單片機(jī)的DMA功能,將波形數(shù)據(jù)表中的數(shù)據(jù)直接傳至DAC的數(shù)據(jù)寄存器,再通過DAC轉(zhuǎn)化輸出。DMA傳輸數(shù)據(jù)的時間則由TIM6定時器控制,每經(jīng)過一段時間傳輸一個數(shù)據(jù)。定時器TIM6的計數(shù)時間需要大于DAC的轉(zhuǎn)化時間以保證每次DAC轉(zhuǎn)化完成后再傳輸下一個波形數(shù)據(jù)。
波形數(shù)據(jù)表中存儲的是信號的離散值,可以通過計算直接得到。本實(shí)驗中設(shè)計了3種不同的信號波形,得到的實(shí)驗測試結(jié)果如下:
(1) 正弦波信號。定義一個數(shù)組Sine_data[]來存儲正弦波信號的離散值:
Sine_data[i]=(sin(2*pi*i/N)+1)*(dac_maxvalue/2)
其中N為采樣點(diǎn)數(shù),dac_maxvalue是DOR的最大值,采用12位數(shù)據(jù),最大為0xFFF。正弦波的測試波形如下圖7,采樣點(diǎn)數(shù)N=100,周期為100 ms,而STM32F103ZET6的Vref為3.3 V,因此輸出波形的峰峰值Vpp也為3.3 V。
圖7 正弦波測試信號
(2) 三角波信號。定義數(shù)組Triangle[]來存儲三角波信號的離散值:
Triangle[i]=i/(N/2)*dac_maxvalue(i<(N/2));
Triangle[i]=(N-i)/(N/2)*dac_maxvalue((N/2)
三角波信號的測試波形見圖8,周期和峰峰值測量結(jié)果與理論值吻合。
圖8 三角波測試信號
(3) 鋸齒波信號。定義數(shù)組sawtooth[]來存儲鋸齒波信號的離散值,
Sawtooth[i]=i/N* dac_maxvalue
鋸齒波的測試波形見圖9,測試結(jié)果與理論值吻合。
圖9 鋸齒波測試信號
本文利用STM32單片機(jī)中的DAC模塊、DMA功能和定時器設(shè)計了不同的波形輸出實(shí)驗,主要特點(diǎn)是實(shí)驗成本低、功耗小、輸出的波形穩(wěn)定性好。同時,將STM32CUBEMX引入嵌入式原理實(shí)驗教學(xué)后,學(xué)生可以更加直觀、形象地配置初始化程序,這有助于提高實(shí)驗教學(xué)的效率和學(xué)生的學(xué)習(xí)興趣。通過波形輸出實(shí)驗的學(xué)習(xí),可以幫助學(xué)生深入理解DAC的原理、應(yīng)用和實(shí)踐操作方法,為學(xué)生進(jìn)一步學(xué)習(xí)與開展課外科技活動打下良好基礎(chǔ)。