10 PWM发生器和捕捉定时器
10.1 概述
PWM是脉冲宽度调制的简称。实际上,PWM波也是连续的方波,但在一个周期中,其高电平和低电平的占空比是不同的,一个典型的PWM波如图10.1-1。T是PWM波的周期;
t1是高电平的宽度;t2是低电平的宽度;因此占空比为t1/(t1+t2)=t1/T。假设当前高电平值为5V,t1/T=50%,那么当该PWM波通过一个积分器(低通滤波器)后,可以得到其输出的平均电压为5V*0.5=2.5V。在实际应用中,常利用PWM波的输出实现D/A转换,调节电压或电流控制改变电机的转速,实现变频控制等功能。
NuMicro M051系列有2个PWM组,支持4组PWM发生器,可配置成8个独立的PWM输出, PWM0~PWM7, 或者4个互补的PWM对: (PWM0, PWM1)、 (PWM2, PWM3)、(PWM4, PWM5) 和 (PWM6, PWM7) ,带4个可编程的死区发生器。
每组PWM发生器带有8位预分频器,一个时钟分频器提供5种分频(1, 1/2, 1/4, 1/8, 1/16), 两个PWM定时器包括2个时钟选择器,两个16位PWM向下计数计数器用于PWM周期控制,两个16位比较器用于PWM占空比控制以及一个死区发生器。4组PWM发生器提供8个独立的PWM中断标志,这些中断标志当相应的PWM周期向下计数器达到零时由硬件置位。每个PWM中断源和它相应的中断使能位可以引起CPU请求PWM中断。PWM发生器可以配置为单触发模式产生仅仅一个PWM周期或自动重载模式连续输出PWM波形。
当PCR.DZEN01置位, PWM0 与 PWM1执行互补的PWM对功能,这一对PWM的时序、周期、占空比和死区时间由PWM0定时器和死区发生器0决定。同样,PWM互补对(PWM2, PWM3)、(PWM4, PWM5) 与 (PWM6, PWM7) 分别由 PWM2,PWM4 与 PWM6 定时器和死区发生器2,4,6控制。为防止PWM输出不稳定波形,16位向下计数计数器和16位比较器采用双缓存器。当用户向计数器/比较器缓冲寄存器内写入值,只有当向下计数计数器的值达到0时,被更新的值才会被装载到16位计数器/比较器。该双缓冲特性避免PWM输出波形上产生毛刺。
当16位向下计数计数器达到0时,中断请求产生。如果PWM定时器被配置为自动重装载模式,当向下计数器达到0时,会自动重新装载PWM计数器寄存器(CNRx)的值,并开始递减计数,如此连续重复。如果定时器设为单触发模式,当向下计数器达到0时,向下计数器停止计数,并产生一个中断请求。
PWM计数器比较器的值用于高电平脉冲宽度调制,当向下计数器的值与比较寄存器的值相同时,计数
器控制逻辑改变输出为高电平。
PWM定时器可复用为数字输入捕捉功能。如果捕捉功能使能,PWM的输出引脚将被切换至捕捉输入模式。捕捉器0和PWM0使用同一个定时器,捕捉器1和PWM1使用另一组定时器,以此类推。因此在使用捕捉功能之前,用户必须预先配置PMW定时器。捕捉功能使能后,捕捉器在输入通道的上升沿将PWM
计数器值锁存至捕捉上升沿锁存寄存器(CRLR),在输入通道的下降沿将PWM计数器值锁存至捕捉下降
沿锁存寄存器(CFLR)。捕捉通道0中断是可编程的,通过设定CCR0.CRL_IE0[1] (上升沿锁存中断使能)和CCR0.CFL_IE0[2]] (下降沿锁存中断使能) 来决定中断发生的条件。 通过设置CCR0.CRL_IE1[17]和CCR0.CRL_IE1[18],捕捉通道1有同样的特性。通过设置相应的控制位,每组的通道0到通道3有同样的特性。
对于每一组,不管捕捉何时产生中断0/1/2/3,PWM计数器0/1/2/3都将在该时刻重载。 最大的捕捉频率受捕捉中断延迟限制。捕捉中断发生时,软件至少要执行三个步骤:读PIIRx 以得到中断源,读PWM_CRLx/PWM_CFLx(x=0到3) 以得到捕捉值,写1清PIIRx。 如果中断延迟要花时间T0完成, 在这段时间内(T0),捕捉信号一定不能翻转。在这种情况下,最大的捕捉频率将是1/T0。
例如: HCLK = 50 MHz, PWM_CLK = 25 MHz, 中断延迟时间 900 ns,因此最大的捕捉频率将是1/900ns ≈ 1000 kHz。
………………………………………………………………
书籍下载地址(复制到下载工具进行下载):
https://files.cnblogs.com/wenziqi/ARMCortex-M0原理与应用实践.part1.rar
https://files.cnblogs.com/wenziqi/ARMCortex-M0原理与应用实践.part2.rar
注:书籍内容会不定期进行更新!