實(shí)驗(yàn)5 PWM
在講PWM之前,大家先做以下5個(gè)實(shí)驗(yàn)。
1、LED1循環(huán)亮300ms,滅700ms;
2、LED1循環(huán)亮30ms,滅70ms;
3、LED1循環(huán)亮3ms,滅7ms;
4、循環(huán)以下步驟
1)LED1循環(huán)亮3ms,滅7ms;執(zhí)行一百次;
2)LED1循環(huán)亮8ms,滅2ms;執(zhí)行一百次;
5、循環(huán)以下步驟
1)LED1循環(huán)亮1ms,滅9ms;LED2循環(huán)亮3ms,滅7ms;LED3循環(huán)亮5ms,滅5ms;以上3燈閃爍動(dòng)作共用同個(gè)10ms周期,執(zhí)行一百次;
2)LED1循環(huán)亮5ms,滅5ms;LED2循環(huán)亮7ms,滅3ms;LED3循環(huán)亮9ms,滅1ms;以上3燈閃爍動(dòng)作共用同個(gè)10ms周期,執(zhí)行一百次;
第1、2個(gè)實(shí)驗(yàn),可以明顯看出LED亮滅的持續(xù)時(shí)間,而在第3個(gè)實(shí)驗(yàn)中,看不出亮滅的轉(zhuǎn)換,只能看到燈是一直亮著的,但是要比常亮的狀態(tài)暗了很多。如果在第3個(gè)實(shí)驗(yàn)基礎(chǔ)上修改亮滅持續(xù)時(shí)間,可以改變LED的亮度。前3個(gè)實(shí)驗(yàn),應(yīng)該可以很輕松完成。第4個(gè)實(shí)驗(yàn),用for結(jié)構(gòu)可以能完成。第5個(gè)實(shí)驗(yàn),用現(xiàn)在已學(xué)的知識(shí),就不是那么容易完成了。但是使用今天所要學(xué)的PWM功能,以上功能將很容易實(shí)現(xiàn)。
PWM全稱Pulse Width Modulation,中文即脈沖寬度調(diào)制,PWM的功能簡(jiǎn)單來(lái)講,就是可以使引腳輸出一定脈沖周期和脈沖寬度的方波脈沖信號(hào),或者說(shuō)占空比可變的方波脈沖信號(hào),如下圖所示。
脈沖寬度是兩個(gè)相鄰的脈沖之間的時(shí)間間隔,脈沖寬度是脈沖周期中高電平時(shí)間。
STM8S105K4有3個(gè)PWM模塊,8路16位PWM通道。PC1、PC2、PC3、PC4是PWM1模塊的1、2、3、4通道。PD4、PD3是PWM2模塊的1、2通道。PD2、PD0是PWM3模塊的1、2通道。
一、庫(kù)函數(shù)1、打開(kāi)DAHUME MINI.stw文件;
2、在STVD左側(cè)Workspace窗口Source Files目錄下找到main.c,雙擊打開(kāi);
3、setup();函數(shù)代碼如下;
void setup(void)
{
delay(10);
CLOCK(_16MHz);
PWM1_init(10, 100);
}
void PWM1_init(unsigned int period_ms, unsigned int range);是設(shè)置PWM1模塊參數(shù)的函數(shù)。參數(shù)period_ms表示脈沖周期,單位是毫秒。參數(shù)range表示分辨率,即占空比可調(diào)的級(jí)數(shù),范圍是0~65535。設(shè)置了PWM1模塊后,其4個(gè)通道都是PWM的工作模式,不可做IO口使用。
PWM1_init(10, 100);設(shè)置PWM1的脈沖周期為10ms,100級(jí)分辨率,單位脈沖寬度為100us。
void PWM2_init(unsigned int period_ms, unsigned int range);函數(shù)對(duì)應(yīng)PWM2模塊設(shè)置。
void PWM3_init(unsigned int period_ms, unsigned int range);函數(shù)對(duì)應(yīng)PWM3模塊設(shè)置。
4、主函數(shù)代碼如下;
main()
{
setup();
while (1)
{
PWM1(1, 30);
delay(500);
PWM1(1, 80);
delay(500);
}
}
void PWM1(char channel, unsigned int duty);是設(shè)置PWM1某通道的脈沖寬度。參數(shù)channel表示通道號(hào)。參數(shù)duty表示一個(gè)脈沖周期里的單位脈沖寬度的個(gè)數(shù)。參數(shù)duty要小于等于參數(shù)range。
脈沖寬度=單位脈沖寬度*duty
PWM1模塊的脈沖周期是10ms,占空比為30%,則PC1引腳輸出的平均電壓為5V×30%,即1.5V,LED1以30%的亮度點(diǎn)亮。
本例程所實(shí)現(xiàn)效果是LED1以30%的亮度亮0.5s,以80%的亮度亮0.5s,循環(huán)執(zhí)行。
PWM功能除了可以控制LED的亮度,還可以實(shí)現(xiàn)呼吸燈功能??刂浦绷麟姍C(jī)是PWM的重要應(yīng)用。
在設(shè)置PWM1模塊時(shí),根據(jù)單位脈沖寬度時(shí)間范圍是1/16us~4096us設(shè)定脈沖周期和分辨率參數(shù)。
在設(shè)置PWM2、PWM3模塊時(shí),根據(jù)單位脈沖寬度時(shí)間范圍是1/16us*2^n,n=0~15設(shè)定脈沖周期和分辨率參數(shù)。
二、練習(xí)1、完成上述第5個(gè)實(shí)驗(yàn);
2、設(shè)置PWM1模塊脈沖周期10ms,分辨率100級(jí),通道1的占空比每20ms從0%遞增到100%,再每20ms從100%遞減到0%。