利用 51 定时器生成 PWM
利用 51 定時器生成 PWM
1 PWM 簡介
PWM(Pulse Width Modulation,脈沖寬度調(diào)制)是按一定規(guī)律改變脈沖序列的脈沖寬度,以調(diào)節(jié)輸出量和波形的一種調(diào)制方式。
在控制系統(tǒng)中最常用的是矩形波 PWM 信號,在控制時需要調(diào)節(jié) PWM 波占空比。如下圖所示,占空比是指高電平持續(xù)時間在一個周期時間內(nèi)的百分比。控制電機的轉(zhuǎn)速時,占空比越大,速度越快,如果全為高電平,占空比為 100% 時,速度達到最快。
當用單片機 I/O 輸出 PWM 信號時,可采用以下三種方法:
- 利用軟件延時。當高電平延時時間到時,對 I/O 口電平取反變成低電平,再延時;當?shù)碗娖窖訒r時間到時,對該 I/O 口電平取反;如此循環(huán),就可得到 PWM 信號。
- 利用定時器。控制方法同上,只是利用單片機的定時器來定時進行高、低電平的翻轉(zhuǎn),而不用軟件延時。
- 利用單片機自帶的 PWM 控制器。
2 定時器的應用
單片機的周期
- 時鐘周期,也成為振蕩周期,定義為時鐘頻率的倒數(shù)(單片機外接晶振的倒數(shù),如 12MHz 晶振的時鐘周期就是 1/12 us)。它是單片機中最基本、最小的時間單位。在一個時鐘周期內(nèi),CPU 僅完成一個最基本的動作。
- 狀態(tài)周期:時鐘周期的 2 倍。
- 機器周期 TcyT_{cy}Tcy?:單片機的基本操作周期,在一個操作周期內(nèi),單片機完成一項基本操作。如取指令、存儲器讀/寫等。機器周期由 12 個時鐘周期( 6 個狀態(tài)周期)組成。
- 指令周期:指 CPU 執(zhí)行一條指令所需的時間。指令周期一般包含 1 ~ 4 個機器周期。
定時器/計數(shù)器本質(zhì)
定時器/計數(shù)器的本質(zhì)是加 1 計數(shù)器(16 位),有高 8 位和低 8 位 2 個寄存器組成。TMOD 是定時器/計數(shù)器的工作模式寄存器,確定工作方式和功能,TCON 是控制寄存器,控制 T0、T1 的啟動和停止及設置溢出標志。
加 1 計數(shù)器輸入的計數(shù)脈沖的來源:
- 一個由系統(tǒng)的時鐘振蕩器輸出脈沖經(jīng) 12 分頻后送來
- 一個由 T0 或 T1 引腳輸入的外部脈沖源,每來一個脈沖計數(shù)器加 1。
當加到計數(shù)器全為 1 時,在輸入一個脈沖就使計數(shù)器回零,且計數(shù)器的溢出使 TCON 寄存器中 TF0 或 TF1 置 1,向 CPU 發(fā)出中斷請求。如果定時器/計數(shù)器工作于定時模式,則表示定時時間已到;如果工作于計數(shù)模式,則表示計數(shù)值已滿。
定時器定時時間:計數(shù)值 NNN × 機器周期 TcyT_{cy}Tcy?。
定時器初值
溢出時計數(shù)器的值減去計數(shù)初值才是加 1 計數(shù)器的計數(shù)值。
定時器一旦啟動,它便在原來的數(shù)值上開始加 1 計數(shù),若在程序開始時,沒有設置 TH0 和 TL0,則默認是 0,假設時鐘頻率為 12MHz,12 個時鐘周期為一個機器周期,那么此時機器周期就是 1 us,計滿 TH0 和 TL0 就需要 216?12^{16} - 1216?1 個數(shù),再來一個脈沖計數(shù)器溢出,隨即向 CPU 申請中斷,因此溢出一次共需 65536us,約 65.5ms。
如果想要定時 50 ms,那么就需先給 TH0 和 TL0 裝入一個初值,在這個初值的基礎上計 5000 個數(shù)后,定時器溢出,此時剛好就是 50ms 中斷一次。當需要定時 1s 時,我們可以產(chǎn)生 20 次 50ms 的定時器中斷后,便認為是 1s。
定時器初值計算方法
當用定時器的方式 1 時,設機器周期為 TcyT_{cy}Tcy?,定時器產(chǎn)生一次中斷的時間為 ttt,那么需要計數(shù)的個數(shù)為 N=t/TcyN = t / T_{cy}N=t/Tcy?,裝入 THX 和 TLX 中的數(shù)分別為:
THX=(65536?N)/256THX = (65536 - N) / 256THX=(65536?N)/256
TLX=(65536?N)%256TLX = (65536 - N) \% 256TLX=(65536?N)%256
3 示例-舵機的驅(qū)動
舵機的原理
舵機的控制信號,一般是脈寬調(diào)制(PWM)信號,如下圖,反映了 PWM 信號和舵機轉(zhuǎn)動角度的關(guān)系,可以簡單的理解為,通過給舵機通電的時間控制,結(jié)合角度傳感器的反饋信號檢測和控制,實現(xiàn)了舵機的精確角度控制。
舵機的控制信號周期為 20ms 的脈寬調(diào)制信號(PWM),其中脈寬從 0.5ms ~ 2.5ms,相應的舵盤位置從 0 ~ 180度,呈線型變化。也就是說,給舵機提供一定的脈寬,輸出軸就會保持一定的對應角度,無論外接轉(zhuǎn)矩怎么改變,直到提供另外一個脈沖信號,才會改變輸出角度到新的對應的位置上。
舵機內(nèi)部有一個基準電路,產(chǎn)生周期為 20ms,寬度為 1.5ms 的脈沖信號,有一個比較器,將外加信號與基準信號相比較,判斷出方向和大小,從而產(chǎn)生電機的轉(zhuǎn)動信號。
伺服電動機的周期通常為 20ms,希望以 50Hz 的頻率產(chǎn)生脈沖。
180 度電機與 360 度電機
360 度舵機與一般舵機的區(qū)別是:給一般舵機一個 PWM 信號,舵機會轉(zhuǎn)到一個特定角度,而給 360 度舵機一個 PWM 信號,舵機會以一個特定的速度轉(zhuǎn)動,類似與電機。但與電機不同的是,360 舵機是閉環(huán)控制,速度控制穩(wěn)定。
PWM 信號與 360° 舵機轉(zhuǎn)速的關(guān)系:
- 0.5ms ———— 正向最大轉(zhuǎn)速
- 1.5ms ———— 速度為 0
- 2.5ms ———— 反向最大轉(zhuǎn)速
利用 51 單片機驅(qū)動舵機
通過上述分析,可以得出 1ms 對應 90°,那么 0.1ms 對應 9°。由于驅(qū)動舵機的控制信號周期為 20ms,可以將 20ms 的周期信號分為 200 份,那么 1 份代表 0.1ms,相對應舵機的轉(zhuǎn)角為 9°。
因此,將定時器中斷一次的時間設定為 0.1 ms,即定時時間為 0.1ms。采用定時器 1 工作方式 2(8 位初值自動重載)。
- 計算定時器初值
- 機器周期 Tcy=12×1/(11.0592×106)sT_{cy} = 12 × 1 / (11.0592 × 10^6) sTcy?=12×1/(11.0592×106)s 約等于 1.0851us1.0851 us1.0851us
- 定時時間 t=0.1mst = 0.1mst=0.1ms
- 計數(shù)值 N=t/Tcy=0.1ms/1.0851us=92N = t / T_{cy} = 0.1ms / 1.0851 us = 92N=t/Tcy?=0.1ms/1.0851us=92
- 裝入 THX 和 TLX 的數(shù)為:THX=TLX=256?92=164THX = TLX = 256-92 = 164THX=TLX=256?92=164
- 代碼
總結(jié)
以上是生活随笔為你收集整理的利用 51 定时器生成 PWM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT Media Error: Dire
- 下一篇: Office 办公软件的问题解决方案