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