DSP的入门问题关于SVPWM

DSP的入门问题关于SVPWM,第1张

初始化事件管理器和PWM寄存器就行了。这是一个普通PWM发生的程序,空间PWM波的产生就是把PWM寄存器设置改一下,就像程序中的EVA_PWM()一样。具体怎么改要翻书看啦,都忘记啦(*^__^*)……

/************************************************************

**描述:利用GP定时器1的比较器在产生一路PWM波,外设时钟25M**

**同时用全比较器产生3对PWM波,GP定时器1作全比较单元时基***

************************************************************/

#include "DSP28_Device.h"

void EVA_PWM()

{

EvaRegs.EXTCON.bit.INDCOE = 1 //单独使能比较输出模式

EvaRegs.ACTRA.all = 0x0aaa//空间矢量不动作

EvaRegs.DBTCONA.all = 0x08ec //死区定时器启动

EvaRegs.CMPR1 = 0x0006

EvaRegs.CMPR2 = 0x0005

EvaRegs.CMPR3 = 0x0004

EvaRegs.COMCONA.all = 0xa4e0 //空间向量禁止,全比较使能,陷阱禁止

}

void EVA_Timer1()

{

EvaRegs.EXTCON.bit.INDCOE = 1 //单独使能比较输出模式

EvaRegs.GPTCONA.all = 0x0012 //GP定时器1比较输出低有效

EvaRegs.T1PR = 0x0013 // 定时周期为5.12us*(T1PR+1)

EvaRegs.T1CMPR = 0x0003 // GP定时器的比较寄存器

EvaRegs.T1CNT = 0x0000// 定时器初值

EvaRegs.T1CON.all = 0x1742//连续增计数,128分频,使能比较,打开定时器

}

void IOinit()

{

EALLOW

//将GPIOA配置为外设口

GpioMuxRegs.GPAMUX.all = 0xffff

EDIS

}

void main(void)

{

InitSysCtrl() //初始化系统控制寄存器, 时钟频率150M

EALLOW

SysCtrlRegs.HISPCP.all = 0x0003//高速时钟的工作频率=25M

EDIS

DINT//关闭总中断,清除中断标志

IER = 0x0000 //关闭外围中断

IFR = 0x0000//清中断标志

IOinit()

EVA_PWM()

EVA_Timer1()

for(){}

}

1,目前国内已经有了转子导条检测设备了,用该设备可以做检查的;只能知道有无问题,但找不到哪根条断了;

2,可以测量导条的电阻与正常值比较,缺点有是找不到哪条断了;

3,磁粉探伤;即在导条两端通电,用磁粉检查,导条断裂的部分磁场较弱。

对于28335的话,可以在EPWM配置模块添加下面的语句:

//adc

EPwm1Regs.ETSEL.bit.SOCAEN = 1// Enable SOC on A group

EPwm1Regs.ETSEL.bit.SOCASEL = 2// TBPRD

EPwm1Regs.ETPS.bit.SOCAPRD = 1

这是默认EPWM1来触发AD转换(目前我程序里用的就是这个)。要想保证AD好用,你AD的初始化及相关标志位的配置也得配套设定好,光有启动语句的话照样没用


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11594392.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存