内容发布更新时间 : 2024/12/23 13:52:21星期一 下面是文章的全部内容请认真阅读。
基于controlSTICK-Piccolo F28069的
SPWM波形设计
摘要:正弦脉宽调制(SPWM)技术在目前是一种比较成熟且使用广泛的PWM法,在电力滤波器中有良好的应用前景。文章介绍了如何利用高性能数字信号处理器controlSTICK-Piccolo F28069的片内外设epwm模块产生单相SPWM 波,给出了程序流程图及关键程序源码。采用对称规则采样算法,参数计算主要采用查表法,计算量小,实时性高。
关键词:TMS320F28069;SPWM;对称规则采样法;查表法
Design of the SPWM wave based on controlSTICK-Piccolo F28069
Abstract: SPWM technique is relatively mature and widely used PWM method in the present, there are good prospects for the application of active power filter. This article describes how to take advantage of high-performance digital signal processor TMS320F28069 chip Peripheral epwm module to generate single phase SPWM wave, process flow diagram and the key to the program source code. The method uses regular sampling algorithm parameters calculated mainly using the look-up table method, a small amount of calculation, realtime high.
Key words: TMS320F28069;SPWM;Regular sampling method;
Look-up table method
引言
PWM的全称是Pulse Width Modulation,它是通过改变输出方波的占空比来改变等效的输出电压。SPWM就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。
文中主要介绍使用TMS320F28069 高性能DSP 处理器的eEVA 模块生成电压SPWM 波形,产生电压SPWM 波的方法可分为硬件法和软件法两类, 硬件法主要是采用专用集成电路( 如SA8281),但这种方法成本高、灵活性差,在实际产品中很少采用;软件法是通过ti公司提供的专用软件ccs4.2.1编程实现生成SPWM 波,这种方法灵活性强,实现成本低。SPWM 波的实时计算对控制器的运算速度要求较高。
1 SPWM 算法
SPWM 的实现算法主要有等效面积法、自然采样法、规则采样法等。这几种方法各有优缺点,等效面积法和自然采样法的优点是所得SPWM 波形最接近正弦波,但脉宽表达式是一个超越方程,计算繁琐,难以实时控制;规则采样法计算简单,对于产生单向SPWM足够用,因此本此实验设计采用规则采样法。以下主要介绍如何使用规则对称采样法生成SPWM 波形。
产生SPWM 波的原理是:用一组三角波与一个正弦波进行比较,在正弦波和三角波的自然交点时刻控制功率开关管的开通与关断,其中这组三角形波称为载波,正弦波为调制波。图1为规则采样说明图。取三角波两个正峰值之间为一个采样周期TS。每个脉冲的中点和相应的三角波中点对称,简化计算,在三角波的负峰时刻TD对正弦波采样得到D点,过D点做一条水平直线和三角波交于A、B两点,在A点时刻tA和B点时刻tB控制功率开关器件的通断。可以看出这种规则采样法得到的脉冲宽度δ和用自然采样法得到的脉冲宽度非常接近,相对简单准确。
uATCDBtAtDtBtuO?/??/t
图1 对称采样法原理图
设正弦调制波信号为
ur?asin?rt (1)
表达式中,a为调制度,0<=a<1,;?r为正弦信号波角频率。 从图中可以得到如下关系式
1?asin?rtD2 (2) ??/2TC/2因此可得
??TC(1?asin?rtD) (3) 22 软件实现
TMS320F28069的定时器处于连续递增/递减计数模式时,计数寄存器中的数值变化轨迹就是等腰三角形,相当于产生了一个连续的等腰三角形载波,当比较寄存器中的值与计数寄存器中的值相等时,对应的PWM 引脚上的电平就会发生跳变,从而输出一系列的等高方波信号,方波的宽度与比较寄存器中的值一一对应,因此只要比较寄存器中的值呈正弦变化,方波的等效面积也就会呈正弦变化,从而得到SPWM 波形。
程序分为主程序、epwm2寄存器初始化、更新sina函数和epwm2定时中断程序三部分。主程序主要完成各部分模块的初始化工作,然后打开epwm2模块的中断使能,最后进入死循环响应epwm2模块的中断;epwm 2定时中断程序完成计算比较寄存器中的数据,然后赋值给各个比较寄存器即可。本次实验的fC=20KHZ,
fS=50HZ,即载波比n=400,每半个周期需要采集200个点,由此可知每次角度增加0.9,在计算中要用到正弦向量表,在程序中定义一个一维n点数组,数组中的数据分别对应第n点的正弦值,然后在程序中直接读取这个数组的数值即可.
TON对应epwm2中的CMPA,由上式(3)可推出脉冲宽度为?对应的开通时间为TON,
得出
T2?)(k=1,2,3……) (4) CMPA=C(1?asin(k*0.90*2360
0主程序和epwm 定时中断程序流程图分别如图2、图3所示。
开始中断初始化Epwm2模块初始化计算载波周期结束
图2 主程序流程图
开始NO正弦值是否到达正半个周期YESNO正弦值是否到达负半个周期YES比较寄存器赋值清除中断标志返回主程序图3 epwm2定时器中断函数流程图
3 实验结果
按照以上方法实现的软件经过编译调试,运行效果良好,SPWM 波形输出正常。如图4 所示
图4 输出的spwm波形
4 实验遇到的问题
编译出来5个错误
1. C语言的语法错误。根据错误提示改正将数组中的;改为,
4个PIE中断设置错误。用到一个中断变量没有被定义,以为在DeviceInit.C中已经设置过了。经查看没有,进行定义
RAM中运行,之前导入的工程例程用的是FLASH,两者冲突,最后把FLASH删掉错误消失了,并且选择下载到RAM中可以运行。
5 程序附录
#include \
#include \ // useful defines for initialization
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// FUNCTION PROTOTYPES
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void DeviceInit(void); void InitFlash(void);
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16*