单片机重要部分-PWM
1.PWM?
Pulse Width Modulation,脈沖寬度調(diào)制**的縮寫。
2.基本原理:
.控制方式就是對***逆變電路開關(guān)器件***的通斷進(jìn)行控制,使輸出端得到***一系列幅值相等的脈沖***,用這些脈沖來代替正弦波或所需要的波形。也就是在輸出波形的***半個(gè)周期***中產(chǎn)生多個(gè)脈沖,使各脈沖的等值電壓為正弦波形,所獲得的輸出平滑且低次諧波少。
***我的應(yīng)用場景,pmw-開關(guān):***按一定的規(guī)則對各脈沖的寬度進(jìn)行調(diào)制,即可改變逆變電路輸出電壓的大小,也可改變輸出頻率。
***應(yīng)用方法:***就是控制在一個(gè)周期內(nèi),控制高電平多長時(shí)間,低電平多長時(shí)間,在數(shù)字電路中IO口就只有兩種狀態(tài),0和1(高低)***,對應(yīng)就是0和5V或者0和3.3V)。也就是說***通過調(diào)節(jié)高低電平時(shí)間的變化來調(diào)節(jié)信號、能量等的變化。
圖為周期4毫秒的PWM波形
{詳細(xì)解析可忽略:把正弦半波波形分成N等份,就可把正弦半波看成由N個(gè)彼此相連的脈沖所組成的波形。這些脈沖寬度相等,都等于 π/n ,但幅值不等,且脈沖頂部不是水平直線,而是曲線,各脈沖的幅值按正弦規(guī)律變化。如果把上述脈沖序列用同樣數(shù)量的等幅而不等寬的矩形脈沖序列代替,使矩形脈沖的中點(diǎn)和相應(yīng)正弦等分的中點(diǎn)重合,且使矩形脈沖和相應(yīng)正弦部分面積(即沖量)相等,就得到一組脈沖序列,這就是PWM波形。可以看出,各脈沖寬度是按正弦規(guī)律變化的。根據(jù)沖量相等效果相同的原理,PWM波形和正弦半波是等效的。對于正弦的負(fù)半周,也可以用同樣的方法得到PWM波形.}
3.頻率
頻率是指每秒鐘信號從***高電平***到***低電平***再回到***高電平***的***次數(shù)*** 上圖中頻率=1/(0.003+0.001)=250 HZ,
4.占空比
是指 高電平持續(xù) 時(shí)間 比 一個(gè) 周期持續(xù) 的時(shí)間。
上圖中占空=1/(1+3)=25%,
所以可以通過控制占空比,來控制輸出的等效電壓。所以對于方波的話,頻率和占空比就確定了一個(gè)波。
5.如何產(chǎn)生一個(gè)pwm波形
1).芯片內(nèi)置pwm,
2).利用IO口高低電平轉(zhuǎn)變輸出PWM信號,,比如上圖中先把電平置1,維持1ms,然后將電平拉低,維持3ms,再將電平置高,如此循環(huán)往復(fù)下去,就可以產(chǎn)生一個(gè)周期4毫秒占空比為25%的PWM波了。具體方法就是給IO口加一個(gè)定時(shí)器,用定時(shí)器中斷來實(shí)現(xiàn)及時(shí)切換高低電平。
6.定時(shí)器?
解釋:定時(shí)計(jì)數(shù)器,因?yàn)樗饶苡?jì)時(shí)也能計(jì)數(shù)。定時(shí)器的***實(shí)質(zhì)***是由機(jī)器頻率向一個(gè)16位寄存器/2^16(每一種類型的單片機(jī)位是不一樣的)累加,滿溢出時(shí)觸發(fā)一個(gè)中斷,為了產(chǎn)生一個(gè)我們想要的時(shí)間間隔,比如說1s,所以我們要在這個(gè)寄存器里設(shè)定一個(gè)初值,以至于它在這個(gè)初始值上累加可以產(chǎn)生一個(gè)1s的倍數(shù),這樣我們就可以得到穩(wěn)定的間隔。
這個(gè)寄存器位TH(高八位)和TL(低八位)。所以我們需要把計(jì)算好的初值分成兩部分,分別放入TH和TL中。
過程
首先,我們通過單片機(jī)的***晶振頻率***得知其***時(shí)鐘周期***,再尤其***乘以12***得到機(jī)器周期。每一個(gè)機(jī)器周期在寄存器內(nèi)+1,直到加滿溢出產(chǎn)生中斷。
舉例說明
若單片機(jī)頻率為12Mhz,其時(shí)鐘周期就是1/12μs,機(jī)器周期為1μs,也就是每1μs寄存器+1。16位的寄存器加到溢出最多需要(2^16)-1=65535μs,溢出也需要一個(gè)機(jī)器周期,所以總共要65536μs。但這個(gè)值太別扭,和我們要的1s沒什么關(guān)系。我們最好讓它記50000μs產(chǎn)生一次中斷,所以其初值就設(shè)為65536-50000=15536。但我們還要將這個(gè)值分別放在***高八位***和***低八位***,所以要將這個(gè)十進(jìn)制數(shù),轉(zhuǎn)換為4位十六進(jìn)制數(shù)再分開賦值。
十進(jìn)制計(jì)算法:
TH = 15536/256;
TL = 15536%256;
進(jìn)制計(jì)算問題這里不細(xì)討論。這樣的話,每50ms就會(huì)產(chǎn)生一次中斷。我們只要用程序判斷其中斷20次就記1s。
7.PWM的應(yīng)用
1)輸出模擬電壓(通過電壓的高低來控制如LED的亮度,直流電機(jī)的速度等)。
2)PWM對模擬信號電平進(jìn)行數(shù)字編碼的方法,計(jì)算機(jī)只能輸出0或5V的數(shù)字電壓值而不能輸出模擬電壓,而我們?nèi)绻氆@得一個(gè)模擬電壓值(介于0 - 5V的電壓值),則需通過使用高分辨率計(jì)數(shù)器,改變方波的占空比來對一個(gè)模擬信號的電平進(jìn)行編碼。電壓是以一種連接(1)或斷開(0)的重復(fù)脈沖序列被夾到模擬負(fù)載上去的,連接即是直流供電輸出,斷開即是直流供電斷開。通過對連接和斷開時(shí)間的控制,只要帶寬足夠,可以輸出任意不大于最大電壓值的模擬電壓。
輸出電壓=(接通時(shí)間/脈沖時(shí)間)*最大電壓值12
2 控制舵機(jī)
?舵機(jī)的控制就是通過一個(gè)固定周期但是不同占空比來控制舵機(jī)擺角的位置的。
??舵機(jī)的控制一般需要一個(gè)20ms左右的時(shí)基脈沖(頻率為50HZ),該脈沖的高電平部分一般為0.5ms-2.5ms范圍內(nèi)的角度控制脈沖部分,總間隔為2ms。以180度角度伺服為例,那么對應(yīng)的控制關(guān)系是這樣的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
此圖可以表現(xiàn)脈沖寬度(也可以轉(zhuǎn)換成占空比)和舵機(jī)擺臂的位置圖
控制步進(jìn)電機(jī)
一般涉及到精確控制位移的時(shí)候,這個(gè)時(shí)候往復(fù)式驅(qū)動(dòng)原件(舵機(jī))就不適合了,所以就會(huì)經(jīng)常用到步進(jìn)電機(jī)。
??***步進(jìn)電機(jī)***把電脈沖信號變換成角位移以控制轉(zhuǎn)子轉(zhuǎn)動(dòng)的微特電機(jī)。在自動(dòng)控制裝置中作為執(zhí)行元件。每輸入一個(gè)脈沖信號,步進(jìn)電動(dòng)機(jī)前進(jìn)一步,故又稱脈沖電動(dòng)機(jī)。 !!!這里注意一點(diǎn),直接控制單片機(jī)的話是脈沖控制,就是進(jìn)來一個(gè)脈沖信號,步進(jìn)電機(jī)轉(zhuǎn)動(dòng)一個(gè)步進(jìn)角(一般為1.8°)。所以控制步進(jìn)電機(jī)速度的方式就是通過控制 頻率 (占空比一般都是50%)但是!!!現(xiàn)在可以通過接入步進(jìn)電機(jī)驅(qū)動(dòng)板的方式(比如博主之前使用的一款步進(jìn)電機(jī)驅(qū)動(dòng)板Tb6560)細(xì)分步進(jìn)角。比如細(xì)分為2,一個(gè)脈沖步進(jìn)電機(jī)就轉(zhuǎn)動(dòng)半個(gè)脈沖(0.9°)
實(shí)戰(zhàn)篇
??這里使用51和STM32實(shí)現(xiàn)呼吸燈的功能,同樣原理也可以控制直流電機(jī),舵機(jī)是頻率一定的情況下控制占空比來控制擺臂的方向,而步進(jìn)電機(jī)是通過控制頻率的方式來控制速度。
51部分
??例程使用51單片機(jī)將P1.0接一個(gè)二極管。運(yùn)用PWM輸出等效模擬電壓完成呼吸燈功能。
32部分
??轉(zhuǎn)自正點(diǎn)原子庫函數(shù)手冊PWM部分教程
??這里用到了 TIM3 的部分重映射功能(重映射:可以理解成把管腳的外設(shè)功能映射到另一個(gè)管腳,具體哪個(gè)引腳可以映射見參考手冊), 例程把 TIM3_CH2 直接映射到了 PB5 上。
總結(jié)
以上是生活随笔為你收集整理的单片机重要部分-PWM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载:王垠·程序员的心理疾病
- 下一篇: 换了工作城市,社保和公积金的转移