PWM,即脉冲宽度调制,在一定PWM_Frequency(PWM波的频率)下,一个脉冲的高电平时间与波的总时间之比,即为占空比。
原理
-
所以,就有两个参数:
频率
和占空比
-
假设系统频率是
System_CLK
,所需频率是Frequency
,占空比为Duty_cycle
,计时器所计数值为Period
。
则:(1 / System_CLK) * Period = 1 / Frequency (最小计时时间的多少倍可以满足PWM的频率)
即:Period = System_CLK / Frequency (可算出100%的PWM波所需时间)
然后:
高电平时间 = (Period / 100 )*Duty_cycle
低电平时间 = Period - 高电平时间 -
然后在用定时的
满值
(即8位为256、16位为65536)减去这个高电平时间和低电平时间,得出两组TH、TL值,填入Timer中,即可实现PWM。
程序
u8 High_T1[] = {
0xFF,0xFF}; // High to High Low to Low
u8 Low_T1[] = {
0xFF,0xFF};
//u8 PWM_Sta = 0xFE;
voi