一种基于C8051单片机的SPWM波形实现方案
出或脉宽调制器。本文中,产生频率可变的SPWM波形是使用了捕捉/比较模块的高速输出工作方式,其原理如下:
当PCA的16位计数器/定时器PCA0H(高8位)和PCA0L(低8位)与16位捕捉/比较模块寄存器PCA0CPHn(高8位)和PCA0CPLn(低8位)发生匹配时,模块的CEXn引脚上的逻辑电平将发生跳变,并产生一个中断请求,即将控制寄存器PCA0CN中相应的CCFn位置位,当CCF中断被允许时,CPU将转向CCF中断服务程序。如果将相应模块的I/O线CEXn连接到端口I/O,单片机相应端口输出电平即发生变化,这就可实现PWM脉冲的高、低电平输出。置位PCA0CPMn寄存器中的TOGn、MATn、ECOMn和ECCFn位,将允许高速输出方式,同时允许CCF中断[3]。
3.2 SPWM波形生成方法
利用C8051的PCA计数器产生SPWM波形的基本原理是:在高速输出并且允许CCF中断方式下,不断在CCF中断服务程序中将事先计算好的SPWM波形的脉冲宽度累加到捕捉/比较模块寄存器PCA0CPn(高8位PCA0CPHn和低8位PCA0CPLn)中,这样在捕捉/比较模块寄存器和计数器/定时器相匹配时就得到相应的SPWM波形不断交替的高低电平。
图3中,l0、h0, l1、h1…lmax、hmax是由软件实时计算好的一路单极性SPWM波形的高、低脉冲宽度,其中l0= l0'+T/2。由于输出的是频率可变的SPWM波形,既调制波频率可变,所以在不同的频率段设置有不同的载波比N,从而max的值只是相对固定的。
图3 SPWM波形示意图
如果选用捕捉/比较模块0输出此路SPWM,则首先将l0'装入16位捕捉/比较寄存器PCA0CP0中,并且将16位计数器/定时器PCA0H和PCA0L清零,然后启动PCA计数器;当捕捉/比较寄存器的数值与计数器/定时器的数值相等时,CEX0引脚就会由原来的低电平跳变为高电平,并且产生一个CCF中断;在CCF中断程序中,将h0累加到PCA0CP0上;中断过程中,计数器的数值是连续增加的,当其值与改变过后的捕捉/比较寄存器的数值相等时,又会使得CEX0引脚由原来的高电平跳变为低电平,并且产生一个CCF中断;然后在中断过程中又将l1累加到PCA0CP0上。这样,周而复始,CEX0引脚上不断产生交替的高低电平,从而在其所对应的端口I/O上得到准确的SPWM波形。
3.3 PCA寄存器设置
为了实现以上SPWM波形产生方法,需要设置与PCA工作有关的特殊功能寄存器。具体如下:
1)设置方式选择寄存器PCA0MD。
2)初始化捕捉/比较寄存器PCA0CPHn(高字节)和PCA0CPLn(低字节)。
3)设置捕捉/比较模式寄存器PCA0CPMn。
4)初始化计数器/定时器PCA0H(高字节)和PCA0L(低字节)。
5)设置控制寄存器PCA0CN。
3.4 程序流程
主程序流程如图4所示,在系统初始化过后首先通过键盘设置输出频率,然后进入SPWM脉宽计算程序,根据所设置频率选择调制比N,计算脉宽并确定max。在SPWM输出程序中,对PCA特殊功能寄存器进行设置并启动计数器运行,开始输出SPWM波形。
在中断服务程序中,首先根据CCFn的值来判断发生匹配的捕捉/比较模块,然后根据该模块CEX引脚上的电平状态判断是将SPWM波形的高电平脉宽值还是低电平脉宽值累加到捕捉/比较模块寄存器上;同时,根据脉宽数据指针与max是否相等来确定一个SPWM周期的结束和下一个周期的开始,以便正确载入对应数据。当载波比N发生变化时,max的值会发生变化。
图4 程序流程图
评论