一种基于 C8051 单片机的 SPWM 波形实现方案
A method of producing SPWM waveform based on C8051 MCU
Nsx2009
摘
要: 详细介绍了通过 C8051 单片机的可编程计数器列阵 PCA 来实现 SPWM 控制波形的原理
和方法,并对 SPWM 脉冲序列中的最小脉冲处理问题进行了分析。实验结果证实了该
方法的准确性和可靠性。
叙
词: C8051;SPWM 波形;最小脉冲
Abstract: The principle and method of producing SPWM control waveform by using the C8051
MCUs’ programmable counter array (PCA) is introduced in detail. And the
minimum pulse problem of the SPWM pulse series is analyzed. Experimental
results verify that the method is accurate and reliable.
Keywords: C8051, SPWM waveform, minimum pulse
1 引言
正弦脉宽调制(SPWM)技术已在交流调速、直流输电、变频电源等领域得到广泛应
用,为了提高整个系统的控制效果,高性能 SPWM 脉冲形成技术一直是人们不断探索的
问题。采用模拟电路和数字电路等硬件电路来产生 SPWM 波形是一种切实可行的方法,
但是这种实现方法控制电路复杂、抗干扰能力差、实时调节较困难。近年来,人们提出
了由单片机、DSP 等微控制器来实现 SPWM 波形的数字控制方法[1][2],由于微控制器内
部集成了很多控制电路,比如定时器、PWM 电路、可编程计数器阵列等,所以使得这种
实现 SPWM 的方法具有控制电路简单、运行速度快、控制精度高、抗干扰能力强等优点。
本文介绍了一种利用 C8051 单片机实现输出频率可变 SPWM 波形的方法,并将由
C8051F040 产生的单极性 SPWM 波应用于单相频率可调逆变电源,实验结果证实了利用
C8051 实现 SPWM 波形的可行性和有效性。
2 SPWM 技术原理
SPWM 技术的基本原理是利用一个三角波载波和一个正弦波进行比较,得到一个宽度
按正弦规律变化的脉冲序列,用它们来驱动逆变器开关管的开关转换。由微控制器来实
现 SPWM 波形的方法有表格法、随时计算法和实时计算法,但前两种无实时处理能力[2]。
采用实时计算法要有数学模型,其中一种较为常用的是采样型 SPWM 法,它分为自然采
样法、对称规则采样法和不对称规则采样法。本文采用对称规则采样法,即利用经过采
样的正弦波(实际上是阶梯波)与三角波相交,由交点得出脉冲宽度。图 1 是典型的单
极性对称规则采样法,它只在三角波的峰值时刻采样正弦调制波并将采样值保持,分别
取保持值和三角波交点作为脉冲宽度时间。图中 Ts 为三角波的周期,同时也是采样周
期;Ur 为三角波的高,正弦波为 Ucsinωt。根据三角形相似关系,得到
所以
其中,M=Uc/Ur 为调制比,t 为采样点(这里为顶点采样)的时刻。则脉冲宽度为
采样点时刻 t 只与载波比 N 有关。对于图 1 情况有 t=kTS+θ,其中 k=0,1,2,…,
N-1,θ=180/N 度。
图 1 对称规则采样法
在对称规则采样情况下,只要知道采样点时刻 t 就可以确定这个采样周期内的脉冲
宽度 tpw 和时间间隔 toff,从而可以计算出 SPWM 波形高、低脉冲的宽度。
3 C8051 实现 SPWM 波形的原理及算法
3.1 C8051F 系列单片机 PCA 简介
C8051F 系列单片机都具有一个可编程计数器阵列 PCA,以 C8051F040 为例,PCA 包
含 1 个专用的 16 位计数器/定时器和 6 个 16 位捕捉/比较模块,可以输出 6 路 PWM 波形。
如图 2 所示,16 位 PCA 专用计数器/定时器的时基信号可有多种选择,可通过配置相关
的系统控制器的特殊功能寄存器(SFR)来实现。每个捕捉/比较模块有自己的 I/O 线 CEXn,
可通过配制交叉开关寄存器(XBR0)将每个模块的 I/O 线连接到端口 I/O;每个模块都
可配制为独立工作,有四种工作方式:边沿触发捕捉、软件定时器、高速输
图 2 PCA 原理框图
出或脉宽调制器。本文中,产生频率可变的 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 程序流程图
应该注意的一点是,CCFn 位和 CF 位(计数器/定时器溢出标志)由硬件置位,但不
能由硬件自动清 0,必须在中断程序中用软件清 0。
4 最小脉冲问题分析
由于硬件原因,任何微控制器都不能输出宽度无限小的脉冲,这就使得理想 SPWM
脉冲序列中小于一定宽度的窄脉冲不能正常输出,即最小脉冲问题。
对于 C8051 单片机,它的 PCA 所能输出的最小脉冲取决于其中断服务程序执行的时
间,所以其最小脉冲问题不容忽视。解决该问题的具体方法有:①采用汇编语言编写中
断服务子程序并且应用最精简省时的指令,减小最小脉冲的宽度;②在计算 SPWM 波脉
冲宽度时,对宽度小于 PCA 所能输出最小宽度的脉冲进行修正,使它们的宽度为最小脉
冲的宽度;③限制调制比 M,使 SPWM 脉冲序列中不会含有过多的小脉冲。
5 实验结果
实验主电路为单相全桥逆变电路,主开关管采用 IGBT,输出 100V,50-400Hz 频率
可调的交流电压。由单片机输出两路互补(有一定死区时间)单极性 SPWM 波来控制该
逆变电源。
实验中,对输出 SPWM 波的最小脉冲问题进行了处理,采用汇编语言对中断服务子
程序进行编程,使得 SPWM 波形中最小脉冲的宽度达到了 3us,这个宽度(时间)基本达
到实验中所用 IGBT 的最小开关周期。图 4 示出了两路单极性 SPWM 波的实验波形,图 5
图 6 分别示出了频率为 200Hz 和 300Hz 时的输出电压实验波形:
由实验波形可以看出,由 C8051 产生 SPWM 波的控制效果较好,可以准确、实时地
调节输出电压的频率。
6 结论
利用 C8051 单片机产生 SPWM 波形是一种简单易行的方法,具有运算精度高、实时
调节性强的特点。同时,通过改变 SPWM 波脉宽计算的方法,可以方便地实现双极性 SPWM
波形。因而,这种方法适合于对输出 SPWM 波形的极性、路数和频率有不同要求的场合。
参考文献
[1]李自成等 . 基于 87C196MC 形成 SPWM 波的研究[J] .高电压技术,2004(12):10-12
[2]卢慧芬 . 基于 DSP 的 SPWM 控制波形生成的一种方法[J] . 机电工程,2002(5):
30-34
[3]李刚,林凌. 与 8051 兼容的高性能、高速单片机——C8051Fxxx. 北京:北京航空航
天大学出版社,2002