應(yīng)廣PMS171B(2)--PWM輸出
概述
作者在上期已經(jīng)講解完端口輸出高低電平,這章建立實例來講解PWM輸出,在所用的芯片有個為PWM輸出,就寫個PWM例程,方便大家快速上手。 這里選用8PIN的單片機進行開發(fā),引腳如下圖所示,PWM引腳為5。
PMS171B之PWM配置
tm2b寄存器是用來配置PWM的占空比的,0-7位代表數(shù)值為0-255。
tm2s寄存器是用來配置PWM的分頻,7位代表PWM分辨率,6-5為預(yù)分頻器,4-0位為Timer時鐘分配器。
tm2c寄存器是Timer2控制寄存器,如果需要輸出PWM,3-2位應(yīng)該設(shè)置為10讓Timer選擇PA3,1位設(shè)置為1選擇為PWM模式。
PWM計算與配置
在本文中我們設(shè)置輸出為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)如上圖代碼所示,設(shè)置時鐘為4M,所以Y=4M。 此時我們設(shè)置預(yù)分頻器為16,即tm2s[6:5]設(shè)置為10,根據(jù):輸出頻率=Y÷[256S1(S2+1)]可以得知S2配置為0;輸出頻率=4M÷[25616(0+1)]=976Hz。tm2s配置如下所示:
tm2s=0b0_10_00000; // 8-bit PWM ,預(yù)分頻=16,分頻 = 0
設(shè)置30%占空比則為tm2b=255*30%=77,tm2b如下所示:
tm2b = 0x4d;//占空比 30%4d 50%7f 70%b4
設(shè)置完之后需要打開PWM模式,tm2c設(shè)置如下所示:
tm2c = 0b0001_10_1_0; // 系統(tǒng)時鐘,輸出 =PA3,PWM 模式
PWM輸出完整代碼
#include "extern.h"http://是程序的頭文件。
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] : 預(yù)分頻器設(shè)定值(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 ,預(yù)分頻 = 16 ,分頻 = 0
tm2c = 0b0001_10_1_0; // 系統(tǒng)時鐘,輸出 =PA3 , PWM 模式
while (1)
{
.delay 4000*500;
}
}
演示效果