输出占空比可变地PWM波形.docx
《输出占空比可变地PWM波形.docx》由会员分享,可在线阅读,更多相关《输出占空比可变地PWM波形.docx(12页珍藏版)》请在冰豆网上搜索。
输出占空比可变地PWM波形
DSP原理及应用大作业
输出占空比可变的PWM波形
输出占空比可变的PWM波形
任务目的
1.掌握CCS集成开发环境的调试方法;
2.掌握C/C++语言与汇编混合编程;
3.熟悉CCS集成开发环境,掌握工程的生成方法;
4.掌握如何输出占空比可变的PWM波形
5.了解PWM波形产生的原理和应用
任务内容
1.通过学习课本和查询课外资料了解空间矢量PWM产生的原理;
2.利用CCS集成开发环境,建立工程,完成DSP汇编源文件的建立和编写,实现对称空间矢量PWM波形生成,在该程序中,利用定时器1ms中断来实现每隔1s改变1次CMPR1;
3.编译并且在片外区通过连接示波器运行得出正确结果,利用示波器观察波形
任务原理
1.PWM的原理
脉宽调制(PWM)基本原理:
控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。
按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。
这些脉冲宽度相等,都等于∏/n,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。
如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。
可以看出,各脉冲宽度是按正弦规律变化的。
根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。
对于正弦的负半周,也可以用同样的方法得到PWM波形。
在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。
根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。
按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。
2.DSP的原理
数字信号处理前后需要一些辅助电路,它们和数字信号处理器构成一个系统。
初始信号代表某种事物的运动变换,它经信号转换单元可变为电信号。
例如声波,它经过麦克风后就变为电信号。
又如压力,它经压力传感器后变为电信号。
电信号可视为许多频率的正弦波的组合。
低通滤波单元滤除信号的部分高频成分,防止模数转换时失去原信号的基本特征。
模数转换单元每隔一段时间测量一次模拟信号,并将测量结果用二进制数表示。
数字信号处理单元实际上是一个计算机,它按照指令对二进制的数字信号进行计算。
数模转换单元将处理后的数字信号变为连续时间信号,这种信号的特点是一段一段的直线相连,调制后的数字信号,变成模拟信号后才能送往天线,通过天线就可以向外发射了。
低通滤波单元有平均的作用,不平滑的信号经低通滤波后,可以变得比较平滑。
平滑的信号经信号转换单元后,就变成某种物质的运动变化。
例如扬声器,它可将电波变为声波。
又如天线,它可将电流变为电磁波。
电磁波是一种互相变化的电场和磁场,可以在空间中以波的形式快速移动。
任务内容
假设EVA的PMW1和PWM2引脚输出频率是1KHz的互补的PWM波形,波形的占空比每隔1s变化5%,变化范围是10%~15%,从10%不断增加到90%,然后从90%不断减少到10%,如此循环,而且PMW1和PWM2具有死区,间隔为4.27us。
此处如果输出占空比固定的PWM,如是10%或者是90%,那解决的方法历城相同,关键此处要求占空比每隔1s变化。
通过面前的学习知道,本例程需要使用定时器T1和比较单元1,所以也就是需要改变CMPR1的值,我们需要利用T1的周期中断来实现。
定时器T1的时钟为37.5MHz,此例程使用定时器T1工作于连续增或减计数模式。
由于PWM输出频率是1KHz,这样可以得出T1PR=18750,表示成十六进制就是0x493E。
但是,由于频率是1KHz,周期是1ms,那如何利用定时器来实现每隔1ms改变1次CMPR1?
这就需要在周期中断里面设置一个统计次数的变量intcount,每隔1次中断,intcount就累加1次,当intcount等于1s时,正好过了1s,。
这时就可以改变CMPR1的值。
任务程序如下:
初始化引脚
/****************************************************************************
*文件名:
DSP28_Gpio.c
*功能:
2812通用输入输出口GPIO的初始化函数
*****************************************************************************/
#include"DSP28_Device.h"
/****************************************************************************
*名称:
InitGpio()
*功能:
初始化Gpio,使得Gpio的引脚处于已知的状态,例如确定其功能是特定功能
*还是通用I/O。
如果是通用I/O,是输入还是输出,等等。
*入口参数:
无
*出口参数:
无
****************************************************************************/
voidInitGpio(void)
{
EALLOW;
//将GPIO中和PWM相关的引脚设置为PWM功能
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6=1;//设置T1PWM引脚
GpioMuxRegs.GPAMUX.bit.T2PWM_GPIOA7=1;//设置T2PWM引脚
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0=1;//设置PWM1引脚
GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1=1;//设置PWM2引脚
GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2=1;//设置PWM3引脚
GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3=1;//设置PWM4引脚
GpioMuxRegs.GPAMUX.bit.PWM5_GPIOA4=1;//设置PWM5引脚
GpioMuxRegs.GPAMUX.bit.PWM6_GPIOA5=1;//设置PWM6引脚
GpioMuxRegs.GPBMUX.bit.T3PWM_GPIOB6=1;//设置T3PWM引脚
GpioMuxRegs.GPBMUX.bit.T4PWM_GPIOB7=1;//设置T4PWM引脚
GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=1;//设置PWM7引脚
GpioMuxRegs.GPBMUX.bit.PWM8_GPIOB1=1;//设置PWM8引脚
GpioMuxRegs.GPBMUX.bit.PWM9_GPIOB2=1;//设置PWM9引脚
GpioMuxRegs.GPBMUX.bit.PWM10_GPIOB3=1;//设置PWM10引脚
GpioMuxRegs.GPBMUX.bit.PWM11_GPIOB4=1;//设置PWM11引脚
GpioMuxRegs.GPBMUX.bit.PWM12_GPIOB5=1;//设置PWM12引脚
EDIS;
}
//===========================================================================
//Nomore.
//===========================================================================
外围设备初始化
/****************************************************************************
*文件名:
DSP28_InitPeripherals.c
*功能:
对所使用到的2812的外设进行初始化
****************************************************************************/
#include"DSP28_Device.h"
/****************************************************************************
*名称:
InitPeripherals()
*功能:
此函数对各个外设进行初始化,调用了各个外设的初始化函数。
此函数在DSP
*上电引导或者复位的时候执行
*入口参数:
无
*出口参数:
无
*****************************************************************************/
voidInitPeripherals(void)
{
#ifF2812
//初始化外部接口
//InitXintf();
#endif
//初始化Cpu定时器
//InitCpuTimers();
//初始化Mcbsp
//InitMcbsp();
//初始化事件管理器EV
InitEv();
//初始化模数转换AD模块
//InitAdc();
//初始化eCan
//InitECan();
//初始化Spi
//InitSpi();
//初始化Sci
//InitSci();
}
//===========================================================================
//Nomore.
//===========================================================================
主程序
/****************************************************************************
*
*文件名:
EvPwm01.c
*
*功能:
EVA下面的T1PPWM、T2PWM、PWM1-6均输出频率为1KHz、占空比为40%的PWM波形。
*T1PWM、T2PWM、PWM1-6输出的是不对称的PWM波形。
EVB下面的T3PWM、T4PWM、
*PWM7-12均输出频率为1KHz,占空比为40%的PWM波形。
T3PWM、T4PWM、PWM7-12
*输出的是对称的PWM波形.
*
*说明:
EVA的通用定时器T1和T2运行在连续增计数模式,EVB的通用定时器T3和T4运行
*在连续增/减计数模式,各全比较单元输出的PWM波形具有死区,死区时间为
*4.27us。
*
****************************************************************************/
#include"DSP28_Device.h"
#include"DSP28_Globalprototypes.h"
/****************************************************************************
*
*名称:
main()
*
*功能:
初始化系统和各个外设
*
*入口参数:
无
*
*出口参数:
无
*
****************************************************************************/
voidmain(void)
{
InitSysCtrl();//初始化系统函数
DINT;
IER=0x0000;//禁止CPU中断
IFR=0x0000;//清除CPU中断标志
InitPieCtrl();//初始化PIE控制寄存器
InitPieVectTable();//初始化PIE中断向量表
InitGpio();//初始化Gpio口
InitEv();//初始化EV
EvaRegs.T1CON.bit.TENABLE=1;//使能定时器T1计数操作
EvaRegs.T2CON.bit.TENABLE=1;//使能定时器T2计数操作
EvbRegs.T3CON.bit.TENABLE=1;//使能定时器T3计数操作
EvbRegs.T4CON.bit.TENABLE=1;//使能定时器T4计数操作
while
(1)
{
}
}
任务结果
示波器初始情况(图一)
以下图片演示示波器变化情况
结论
DSP这门课程需要硬件和软件两方面的能力,在硬件方面,需要对各类芯片管脚以及不同的器件的性质十分的熟悉,懂得器件之间如何搭配,使得电路效率最大化,价格最优化。
在软件方面,需要较强的思维逻辑性,对于一个设计要求,在程序设计时要有连贯性,能够巧妙的用较简洁的程序来解决问题,这个需要平时多加的训练以提高编程能力。
不管怎样硬件与软件都是十分重要的,只有两方面都重视,才能在DSP的学习上有所前进,为以后自己的工作学习带来便捷。
虽然课设时间说长不长说短不短,但是却是让人收获颇多的。
凭借着一股谦虚好学的劲头,问同学问老师,自己再回去钻研看书本,终于在编程上有多突破,自己也品尝到了些许成功的喜悦。
但是不能放松心态,因为真正的实验调试结果还没有出来,需要我们理论到实验的过程了。
但是自己定下心来,在多次失败之后逐渐掌握了编程的技巧,于是接下来很顺利的完成了实验。
总之不管怎么样,这次课程设计是对我们专业课程学习的一种检验,更是一种激励,它在一定程度上表明了光学书本上的知识是远远达不到真正掌握DSP的程度的,只有不断的自我学习,请教他人,吸取别人的优秀经验,自己敢于创新,才能在学习中立于不败之地。
参考文献
[1]手把手教你学DSP顾立刚编著北京航空航天大学出版社
[2]DSP原理及其运用邹彦主编电子工业出版社
[3]C语言程序设计谭浩强主编清华大学出版社