概述
作者在上期已經(jīng)講解完端口輸出高低電平,這章建立實例來講解PWM輸出,在所用的芯片有個為PWM輸出,就寫個PWM例程,方便大家快速上手。
這里選用8PIN的單片機進行開發(fā),引腳如下圖所示,PWM引腳為5。
PMS171B-S08
PMS171B之PWM配置
在這里插入圖片描述
tm2b寄存器是用來配置PWM的占空比的,0-7位代表數(shù)值為0-255。
在這里插入圖片描述
tm2s寄存器是用來配置PWM的分頻,7位代表PWM分辨率,6-5為預分頻器,4-0位為Timer時鐘分配器。
在這里插入圖片描述
tm2c寄存器是Timer2控制寄存器,如果需要輸出PWM,3-2位應該設置為10讓Timer選擇PA3,1位設置為1選擇為PWM模式。
PWM計算與配置
在這里插入圖片描述
在本文中我們設置輸出為1K,30%占空比的PWM,根據(jù)上圖公式,Y=tm2[7:4],我們選擇CLK(系統(tǒng)時鐘),即0001。
/*單片機內(nèi)部RC震動時鐘為 IHRC默認為16M,因此,IHRC/4=4M,系統(tǒng)時鐘為4M*/
.ADJUST_IC SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
在上篇配置IO口中,我們已經(jīng)如上圖代碼所示,設置時鐘為4M,所以Y=4M。
此時我們設置預分頻器為16,即tm2s[6:5]設置為10,根據(jù):輸出頻率=Y÷[256 S1 (S2+1)]可以得知S2配置為0;輸出頻率=4M÷[256 *16* (0+1)]=976Hz。tm2s配置如下所示:
tm2s=0b0_10_00000; // 8-bit PWM ,預分頻=16,分頻 = 0
設置30%占空比則為tm2b=255*30%=77,tm2b如下所示:
tm2b = 0x4d;//占空比 30%4d 50%7f 70%b4
設置完之后需要打開PWM模式,tm2c設置如下所示:
tm2c = 0b0001_10_1_0; // 系統(tǒng)時鐘,輸出 =PA3,PWM 模式
PWM輸出完整代碼
?#include "extern.h"//是程序的頭文件。
BIT PWM :PA.3; //端口定義
void FPPA0 (void)//相當于程序的 main() 函數(shù)。
{
/*單片機內(nèi)部RC震動時鐘為 IHRC默認為16M,因此,IHRC/4=4M,系統(tǒng)時鐘為4M*/
.ADJUST_IC SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
/*********PWM*********************/
tm2ct = 0x0;
tm2b = 0x4d;//占空比 30%4d 50%7f 70%b4
//S1= tm2s[6:5] : 預分頻器設定值(1, 4, 16, 64)
//S2 = tm2s[4:0] : 分頻器值(十進制,0 ~ 31)
//輸出頻率 =4MHz÷ ( 256 * S1 (16) * (S2+1)1) = 976Hz
tm2s = 0b0_10_00000; // 8-bit PWM ,預分頻 = 16 ,分頻 = 0
tm2c = 0b0001_10_1_0; // 系統(tǒng)時鐘,輸出 =PA3 , PWM 模式
while (1)
{
.delay 4000*500;
}
}
審核編輯:湯梓紅
-
單片機
+關注
關注
6035文章
44553瀏覽量
634766 -
PWM
+關注
關注
114文章
5186瀏覽量
213825 -
PMS171B
+關注
關注
1文章
7瀏覽量
2417
發(fā)布評論請先 登錄
相關推薦
評論