一种基于C8051单片机的SPWM波形实现方案

发布者:BlissfulBliss最新更新时间:2013-01-22 来源: 电源在线网关键字:C8051  单片机  SPWM波形 手机看文章 扫描二维码
随时随地手机看文章

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原理框图[page]

出或脉宽调制器。本文中,产生频率可变的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 程序流程图[page]

  应该注意的一点是,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

关键字:C8051  单片机  SPWM波形 引用地址:一种基于C8051单片机的SPWM波形实现方案

上一篇:单片机控制实时时钟X1226的设计
下一篇:基于ATMEL89S52单片机的三相桥式可控触发电路的设计

推荐阅读最新更新时间:2024-03-16 13:17

单片机的“功耗”如何计算
单片机的功耗是非常难算的,而且在高温下,单片机的功耗还是一个特别重要的参数。 暂且把单片机的功耗按照下面的划分 1.内部功耗(与频率有关) 2.数字输入输出口功耗 2.1输入口 2.2输出高 2.3输出低 3.模拟输入口功耗 从下表可以得出一些基本的参数: 首先我们计算内部功耗 单片机的功耗一般和工作频率有关,在固定频率下与功能有关,有两种计算办法。 第一种,固定频率,增减功能引起电流变化: 第二种,频率变化,不考虑使用模块: 其次计算数字口功耗: 数字输出口,按照表格中的数据,得出内部的Rdson,可计算出输出高和输出低在内部的功耗。 这里需要注意的是,输入口的功耗一般不大,但是设计的IO口有电流注入的时候
[单片机]
<font color='red'>单片机</font>的“功耗”如何计算
地址锁存器74ls373和273的区别以及和c51单片机
74LS273 是带公共时钟复位八D触发器 74LS373 是三态同相八D锁存器 273与373的引脚排列是相同的,唯一的差别是两者1、11脚的功能不同. 对273 (1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位; (2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q
[单片机]
单片机四组按键控制LED的不同状态
单片机源程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int void DelayMS(uint x) { uchar t; while(x--) { for(t=0;t 120;t--); } } void main() { uchar k,t,Key_State; P0 = 0xff; P1 = 0xff; while(1) { t = P1; { DelayMS(10);
[单片机]
<font color='red'>单片机</font>四组按键控制LED的不同状态
基于SPI的MAX7221与MCU连接
0 引 言 在仪器仪表的设计制作中常要用到数码管显示,有时数码管的数量还会很多。如果为每个数码管都单独设计驱动电路,一方面对MCU来说是一个不小的负担,另一方面大幅增加了电路板的面积成本。集成电路MAX7221单片可以驱动8位数码管,并且可以进行级联扩展,对于这个问题是一个较为妥善的解决方案。一般MAX7221与MCU的连接使用两种方法:一是使用MCU的I/O口直接模拟通信所需要的时序,此法操作较为繁琐,易出错;二是使用UART串行口,这种方法的通信速率最高仅为11.52 Kb/s。介绍第三种方法,即MAX7221通过串行外设接口(Serial PeripheralInterface,SPI)与MCU连接,此法具有简单和易于使用
[单片机]
ATmega48 MCU控制寄存器MCUCR
MCU 控制寄存器包含了电源管理的控制位。 · Bits 7..4 Res 保留位: ATmega48/88/168中的这些位都没有使用到,读返回值始终是 0”。 · Bits 3、2、1-SM2..0 : 休眠模式选择位 2、 1 和 0 。如 Table18 所示,这些位用于选择具体的休眠模式。 · Bit 0 – SE: 休眠使能 为了使MCU 在执行SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模式是程序员的有意行为,建议仅在SLEEP 指令的前一条指令置位SE。MCU 一旦唤醒立即清除SE。
[单片机]
ATmega48 <font color='red'>MCU</font>控制寄存器MCUCR
51单片机串口打印不管是中文还是英文都是乱码的问题
讲道理都tm大三暑假了还搞51单片机而且关键是还遇到了一个问题解决了一天才解决出来真的是很丢人了。 不过我会珍惜这个机会的,毕竟这有可能是我辈子最后一次跟着老师搞这个破玩意了。 好了不废话了 收! 昨天遇到的问题是单片机用串口给电脑发数据,本人用串口助手查看时乱码了,发送的数据是英文和数字,没有存在中文,马上进行问题排除: 解决方案一:printf的原因吗? 代码里用piintf函数来进行串口发送数据,可能printf只适合于stm32不能适用于51,但是仔细一想又不对啊,我tm大三上的单片机大作业就是用printf函数进行串口发送数据的啊,怎么当时就可以啊。于是我把当时的代码拿过来修改,还是不行。 解决方
[单片机]
pic单片机程序设计的基本方法解析
pic单片机在学习和工作中均扮演着重要角色,在往期文章中,小编曾对pic单片机汇编指令加以介绍,以帮助大家更好掌握pic单片机。而在本文中,将介绍pic单片机程序设计内容,以助大家写出更为优美的pic单片机程序,主要内容如下。 1、PIC单片机程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X单片机在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般来说,PIC单片机的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里
[单片机]
pic<font color='red'>单片机</font>程序设计的基本方法解析
CC2530芯片的主要特性以及它的应用领域
CC2530(无线片上系统单片机)是用于IEEE802.15.4,ZigBee和RF4CE应用的一个真正的片上系统解决方案,它能够以非常低的成本建立起一个强大的无线网络。并且CC530还结合了领先的2.4GHz的RF收发器的优良性能,是业界标准的增强型的8051单片机,所以如果了解过51单片机,要入门CC2530也是很简单的。芯片引脚图如下: 根据芯片内置闪存的容量不容,可以分为四个类型:CC2530F32/64/128/256。编号后缀分别代表:具有32KB/64KB/128KB/256KB的闪存。 CC2530芯片主要特性 1、高性能、低功耗且具有代码预取功能的8051微控制器内核 2、符合2.4GHz IEEE802.1
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved