日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用 51 定时器生成 PWM

發布時間:2025/3/13 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 51 定时器生成 PWM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用 51 定時器生成 PWM

1 PWM 簡介

PWM(Pulse Width Modulation,脈沖寬度調制)是按一定規律改變脈沖序列的脈沖寬度,以調節輸出量和波形的一種調制方式。

在控制系統中最常用的是矩形波 PWM 信號,在控制時需要調節 PWM 波占空比。如下圖所示,占空比是指高電平持續時間在一個周期時間內的百分比。控制電機的轉速時,占空比越大,速度越快,如果全為高電平,占空比為 100% 時,速度達到最快。

當用單片機 I/O 輸出 PWM 信號時,可采用以下三種方法:

  • 利用軟件延時。當高電平延時時間到時,對 I/O 口電平取反變成低電平,再延時;當低電平延時時間到時,對該 I/O 口電平取反;如此循環,就可得到 PWM 信號。
  • 利用定時器。控制方法同上,只是利用單片機的定時器來定時進行高、低電平的翻轉,而不用軟件延時。
  • 利用單片機自帶的 PWM 控制器。

2 定時器的應用

單片機的周期

  • 時鐘周期,也成為振蕩周期,定義為時鐘頻率的倒數(單片機外接晶振的倒數,如 12MHz 晶振的時鐘周期就是 1/12 us)。它是單片機中最基本、最小的時間單位。在一個時鐘周期內,CPU 僅完成一個最基本的動作。
  • 狀態周期:時鐘周期的 2 倍。
  • 機器周期 TcyT_{cy}Tcy?:單片機的基本操作周期,在一個操作周期內,單片機完成一項基本操作。如取指令、存儲器讀/寫等。機器周期由 12 個時鐘周期( 6 個狀態周期)組成。
  • 指令周期:指 CPU 執行一條指令所需的時間。指令周期一般包含 1 ~ 4 個機器周期。

定時器/計數器本質

定時器/計數器的本質是加 1 計數器(16 位),有高 8 位和低 8 位 2 個寄存器組成。TMOD 是定時器/計數器的工作模式寄存器,確定工作方式和功能,TCON 是控制寄存器,控制 T0、T1 的啟動和停止及設置溢出標志。

加 1 計數器輸入的計數脈沖的來源:

  • 一個由系統的時鐘振蕩器輸出脈沖經 12 分頻后送來
  • 一個由 T0 或 T1 引腳輸入的外部脈沖源,每來一個脈沖計數器加 1。

當加到計數器全為 1 時,在輸入一個脈沖就使計數器回零,且計數器的溢出使 TCON 寄存器中 TF0 或 TF1 置 1,向 CPU 發出中斷請求。如果定時器/計數器工作于定時模式,則表示定時時間已到;如果工作于計數模式,則表示計數值已滿。

定時器定時時間:計數值 NNN × 機器周期 TcyT_{cy}Tcy?

定時器初值

溢出時計數器的值減去計數初值才是加 1 計數器的計數值。

定時器一旦啟動,它便在原來的數值上開始加 1 計數,若在程序開始時,沒有設置 TH0 和 TL0,則默認是 0,假設時鐘頻率為 12MHz,12 個時鐘周期為一個機器周期,那么此時機器周期就是 1 us,計滿 TH0 和 TL0 就需要 216?12^{16} - 1216?1 個數,再來一個脈沖計數器溢出,隨即向 CPU 申請中斷,因此溢出一次共需 65536us,約 65.5ms。

如果想要定時 50 ms,那么就需先給 TH0 和 TL0 裝入一個初值,在這個初值的基礎上計 5000 個數后,定時器溢出,此時剛好就是 50ms 中斷一次。當需要定時 1s 時,我們可以產生 20 次 50ms 的定時器中斷后,便認為是 1s。

定時器初值計算方法

當用定時器的方式 1 時,設機器周期為 TcyT_{cy}Tcy?,定時器產生一次中斷的時間為 ttt,那么需要計數的個數為 N=t/TcyN = t / T_{cy}N=t/Tcy?,裝入 THX 和 TLX 中的數分別為:

THX=(65536?N)/256THX = (65536 - N) / 256THX=(65536?N)/256
TLX=(65536?N)%256TLX = (65536 - N) \% 256TLX=(65536?N)%256

3 示例-舵機的驅動

舵機的原理

舵機的控制信號,一般是脈寬調制(PWM)信號,如下圖,反映了 PWM 信號和舵機轉動角度的關系,可以簡單的理解為,通過給舵機通電的時間控制,結合角度傳感器的反饋信號檢測和控制,實現了舵機的精確角度控制。

舵機的控制信號周期為 20ms 的脈寬調制信號(PWM),其中脈寬從 0.5ms ~ 2.5ms,相應的舵盤位置從 0 ~ 180度,呈線型變化。也就是說,給舵機提供一定的脈寬,輸出軸就會保持一定的對應角度,無論外接轉矩怎么改變,直到提供另外一個脈沖信號,才會改變輸出角度到新的對應的位置上。

舵機內部有一個基準電路,產生周期為 20ms,寬度為 1.5ms 的脈沖信號,有一個比較器,將外加信號與基準信號相比較,判斷出方向和大小,從而產生電機的轉動信號。

伺服電動機的周期通常為 20ms,希望以 50Hz 的頻率產生脈沖。

180 度電機與 360 度電機

360 度舵機與一般舵機的區別是:給一般舵機一個 PWM 信號,舵機會轉到一個特定角度,而給 360 度舵機一個 PWM 信號,舵機會以一個特定的速度轉動,類似與電機。但與電機不同的是,360 舵機是閉環控制,速度控制穩定。

PWM 信號與 360° 舵機轉速的關系:

  • 0.5ms ———— 正向最大轉速
  • 1.5ms ———— 速度為 0
  • 2.5ms ———— 反向最大轉速

利用 51 單片機驅動舵機

通過上述分析,可以得出 1ms 對應 90°,那么 0.1ms 對應 9°。由于驅動舵機的控制信號周期為 20ms,可以將 20ms 的周期信號分為 200 份,那么 1 份代表 0.1ms,相對應舵機的轉角為 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
  • 計數值 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 的數為:THX=TLX=256?92=164THX = TLX = 256-92 = 164THX=TLX=256?92=164
  • 代碼
void T1_Init(void) {TMOD &= 0x0F; //設置定時器模式TMOD |= 0x20; //設置定時器模式 TH1 = 164; //設置定時初始值TL1 = 164; //設置定時重載值TF1 = 0; //清除TF1標志TR1 = 1; //定時器1開始計時 }

總結

以上是生活随笔為你收集整理的利用 51 定时器生成 PWM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。