文/田德永
嵌入式課程是高職院校物聯(lián)網(wǎng)、電子、通信等專業(yè)一門重要課程。STM32是高職院校中嵌入式課程中常采用的開(kāi)發(fā)實(shí)驗(yàn)芯片。在STM32教學(xué)中,STM32的定時(shí)器和PWM的實(shí)驗(yàn)是很重要而又比較難于理解的知識(shí)點(diǎn)。STM32定時(shí)器功能豐富,但配置復(fù)雜,只有通過(guò)對(duì)實(shí)驗(yàn)深入分析,才能幫助初學(xué)的高職院校學(xué)生更加易于理解和掌握STM32定時(shí)器產(chǎn)生PWM功能。
STM32定時(shí)器比較復(fù)雜,涉及到的配置很多,許多知識(shí)點(diǎn)學(xué)生難于掌握。對(duì)于高職院校學(xué)生,理解主要原理,掌握基本配置即可,面面俱到學(xué)生反而難于把握。
學(xué)生需要理解定時(shí)器是如何產(chǎn)生定時(shí)的。開(kāi)始接觸定時(shí)器的高職院校學(xué)生,對(duì)定時(shí)的理解只是停留在宏觀層面上,他們可能知道秒表定時(shí),鬧鐘定時(shí)等,而對(duì)電子元件的定時(shí)器定時(shí)功能,是比較模糊的。實(shí)際上,定時(shí)器本質(zhì)上是計(jì)數(shù)器,通過(guò)對(duì)脈沖的計(jì)數(shù),達(dá)到定時(shí)的功能,因?yàn)槊}沖包含了時(shí)間信息。如圖1,假設(shè)一個(gè)脈沖是周期是1ms,那么如果計(jì)數(shù)了5次,那么就可以得到5ms的時(shí)間,即如果設(shè)置計(jì)數(shù)5次,就相當(dāng)可以定時(shí)5ms。因此,只要知道計(jì)數(shù)次數(shù)及所計(jì)脈沖的頻率或周期,就可以換算出定時(shí)時(shí)間。
STM32定時(shí)器資源比較豐富,有通用定時(shí)器、高級(jí)定時(shí)器、基本定時(shí)器等。盡管STM32定時(shí)器比較復(fù)雜,但只要抓住定時(shí)器計(jì)數(shù)次數(shù),以及計(jì)數(shù)的脈沖周期或頻率這兩條線索,就容易理解STM32定時(shí)器的定時(shí)原理。STM32可以選擇內(nèi)部系統(tǒng)時(shí)鐘信號(hào)(CK_INT)進(jìn)行分頻后再進(jìn)行脈沖計(jì)數(shù),即通過(guò)設(shè)置分頻系數(shù)TIMx_PSC進(jìn)行分頻。定時(shí)器時(shí)鐘頻率用CK_CNT表示,則他們關(guān)系為:
若設(shè)定時(shí)器定時(shí)時(shí)間周期為T_t s,定時(shí)器的計(jì)數(shù)次數(shù)為T_count,則與分頻系數(shù)之間的關(guān)系可得:
由此可知,STM32定時(shí)器的定時(shí)周期由三個(gè)因素決定:系統(tǒng)時(shí)鐘信號(hào)周期、定時(shí)器分頻系數(shù)的值和定時(shí)器初始值即計(jì)數(shù)值。
PWM輸出的是高低電平的開(kāi)關(guān)量。很多的控制技術(shù),就是采用PWM控制。PWM(Pulse Width Modulating)稱為脈沖寬度調(diào)制。是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),簡(jiǎn)而言之,就是對(duì)脈沖的寬度進(jìn)行控制。學(xué)生要理解PWM的占空比概念。占空比就是一個(gè)PWM周期內(nèi),高電平時(shí)長(zhǎng)占周期的百分比。對(duì)脈寬控制,也就是對(duì)占空比的控制。學(xué)生也要知道PWM在STM32中是如何產(chǎn)生的。STM32產(chǎn)生的PWM是通過(guò)定時(shí)器產(chǎn)生,通過(guò)捕獲/比較輸出通道輸出。一般定時(shí)器有四個(gè)捕獲/比較輸出通道,因此,除了要對(duì)定時(shí)器進(jìn)行配置外,還要配置通道,配置輸出的GPIO口。STM32有高級(jí)定時(shí)器和通用定時(shí)器進(jìn)行產(chǎn)生PWM。輸出的占空比可由ST公司固件庫(kù)函數(shù)提供進(jìn)行設(shè)置。
TIM_SetCompare3(TIM_TypeDef* TIMx,u16 Compare3)是ST公司的提供的固件函數(shù)之一,它的功能是設(shè)置 TIMx 捕獲比較寄存器值。定時(shí)器TIMx通過(guò)通道3與compare3值比較輸出PWM。定時(shí)器產(chǎn)生的PWM輸出如圖2所示,因此,控制compare3參數(shù)值就可控制脈沖寬度,控制占空比。學(xué)生需充分理解參數(shù)字的含義。定時(shí)器計(jì)數(shù)值N決定了PWM輸出周期,compare3決定了PWM的占空比。
圖1:定時(shí)器原理示意圖
圖2:定時(shí)器輸出PWM原理示意圖
圖3:模擬電路控制LED燈實(shí)驗(yàn)電路
圖4:PWM輸出控制LED實(shí)驗(yàn)電路原理圖
為了更好地讓學(xué)生理解PWM原理及其控制效果,設(shè)計(jì)PWM控制LED發(fā)光現(xiàn)象實(shí)驗(yàn),使用外圍硬件電路比較少,易于實(shí)現(xiàn)??梢允褂肔ED亮度控制及呼吸燈實(shí)驗(yàn)項(xiàng)目,主要是讓學(xué)生能理解PWM的作用。
為了和PWM控制LED燈效果作比較,搭建如圖3的模擬電路。電源兩端直接用滑動(dòng)變阻器Rp串接LED燈,當(dāng)調(diào)節(jié)滑動(dòng)變阻器Rp時(shí),隨著流過(guò)LED電流變化會(huì)明顯的變亮或變暗,這在很多模擬電路中調(diào)節(jié)常用的方式。很明顯,這是模擬電路控制的方式。
我們把圖3電路換成圖4電路,LED燈不變。前面說(shuō)過(guò),PWM輸出是周期性的高低電平開(kāi)關(guān)量,對(duì)于這點(diǎn),學(xué)生是易于理解的。
在配置定時(shí)器時(shí),我們可以先讓讓其頻率足夠小,周期足夠大,占空比為50%,當(dāng)接上LED燈時(shí),會(huì)發(fā)現(xiàn),燈在不停的閃爍,這驗(yàn)證了PWM是開(kāi)關(guān)量,輸出是高低電平開(kāi)關(guān)量。
當(dāng)設(shè)置定時(shí)器周期足夠小時(shí),占空比不變,會(huì)發(fā)現(xiàn)LED亮度達(dá)到最亮?xí)r的一半不再閃爍的現(xiàn)象,和圖3的電路效果一樣。這是因?yàn)槿说难劬?duì)圖像(光線)的視覺(jué)暫留的特點(diǎn),也稱為人眼的余輝效應(yīng),才有如此效果。要讓學(xué)生明白的是,圖3是模擬電路控制,而圖4是PWM是數(shù)字控制,對(duì)比可見(jiàn),PWM能控制模擬電路,達(dá)到一樣效果。
在定時(shí)器輸出PWM頻率不變情況下,讓程序更改PWM占空比,即修改比較輸出函數(shù)TIM_SetCompare3第二個(gè)參數(shù),用示波器觀察,會(huì)發(fā)現(xiàn)波形高電平在周期內(nèi)不斷擴(kuò)展和收縮,反應(yīng)到LED燈上可得到呼吸燈的效果。這正反應(yīng)數(shù)字信號(hào)便于控制,很好的把數(shù)字信號(hào)控制轉(zhuǎn)換為模擬控制信號(hào)的PWM例子。
PWM輸出從處理器到被控制裝置信號(hào)都是數(shù)字形式,是實(shí)現(xiàn)D/A轉(zhuǎn)換和精確脈沖序列輸出的有效手段,PWM在各個(gè)控制領(lǐng)域都得到廣泛應(yīng)用。在采用STM32芯片的嵌入式課程中,在進(jìn)行定時(shí)器PWM教學(xué)時(shí),要逐步引導(dǎo)學(xué)生領(lǐng)會(huì)PWM產(chǎn)生的原理和控制作用??梢圆捎枚鄠€(gè)實(shí)驗(yàn)項(xiàng)目對(duì)比,幫助學(xué)生對(duì)PWM開(kāi)關(guān)量控制模擬系統(tǒng)而不需數(shù)模轉(zhuǎn)換的理解,提高高職院校學(xué)生嵌入式技術(shù)開(kāi)發(fā)和應(yīng)用能力。