PWM就是脉冲脉宽调制,输出的波形就是一些不同占空比的方波,波形周期和占空比你都可以设定。占空比(Duty Ratio)在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。看下图,T是周期,高电平时间t除以周期T就叫占空比。
所以说对于PWM,我们最终想要设定的参数就是周期T和占空比。
先看PWM相关寄存器:
PWM使能寄存器PWME:
PWME[7:0]=1;相应的PWM模块使能,否则禁止。
PWM极性寄存器PWMPOL:
PPOL[7:0]=1,PWM通道输出在开始的时候为高电平,为0说明开始时为低电平。
PWM时钟选择寄存器PWMCLK:
PCLK*=1,使用时钟SA或SB作为时钟源,PCLK*=0,使用时钟A或B作为时钟源。如下图。
PWM预分频时钟选择寄存器PWMPRCLK:
由上图可以看出f A =f BUS / 2PCKA[2:0], f B =f BUS / 2PCKB[2:0].
SA寄存器PWMSCLA,用来设置SA时钟源频率
SA的时钟频率f SA=f A/(2*PWMSCLA),如果PWMSCLA=0x00,f SA=f A/512.
PWM中间对齐使能寄存器PWMCAE:
CAE[7:0]=1,采用中间对齐模式;CAE[7:0]=0,采用左对齐模式。
PWM通道周期寄存器(PWMPERX)
具体按如下公式计算,左对齐时:PWM周期=通道时钟周期*PWMPERX;
中间对齐时:PWM周期=通道时钟周期*2*PWMPERX;
PWM占空比寄存器PWMDTYX:
PWM的占空比按如下公式计算:
PWM占空比计算和极性寄存器PWMPOL有关,当PPOLx=0时,占空比=(周期寄存器值减去占空比寄存器值)除以周期寄存器值;当PPOLx=1时,占空比=占空比寄存器值除以周期寄存器值。
设置步骤:
先选择相应的时钟源
设置对齐方式设置周期和占空比
启动通道
实际应用:
目标:输出一个周期为400ms,占空比为50%的方波。
分析:首先利用PLL将周期设置为40M,
然后选择时钟源
PWMCLK = 0xFF; /* 选择时钟源SA,SB*/
PWMPRCLK = 0x77; /* clock A,B =总线时钟/128 */
PWMSCLA = 0; /* clock SA = Clock A/512 */
PWMSCLB = 0; /* clock SB = Clock B/512 */
这个时候时钟SA或SB为40M/128/512 = 610HZ
1/610HZ=1.ms
我们选择中间对齐模式:
PWMCAE = 0xFF; /* 输出时是中间对齐的*/
PWMPOL = 0xFF; /*输出以高电平开始---___*/
接下来就要选择周期了:
中间对齐时:PWM周期=通道时钟周期*2*PWMPERX;因为要设置周期为400ms,所以400ms = (1000/610)ms * 2 *PWMPERX,由此可以算出PWMPER=122=0x7A.
PWMPER0=0x7A;
接下来设置占空比:
当PPOLx=1时,占空比=占空比寄存器值除以周期寄存器值。50%= PWMDTY0/122, 所以PWMDTY0=61=0x3D
PWMDTY0=0x3D;
接下来启用PWM通道0:
PWME=0x01;
赶紧试试吧!下载本文