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