DSPRelated.com
Forums

question about deadband used in pwm

Started by snzh...@hotmail.com May 6, 2010
This forum is really quite good ~ ~

I have to do is use the 2812 to the direct torque control to control the motor, by way of the vector look-up table
Now I had a test, according to the requirements of force output on up bridge followed
011, then output 001, then 101, then 111, then 110, then 010 and finally 110
Correspondence should be under bridge 100 110,010,000,001,101 001
And the timer interrupt has been circulating through the CPU2. But they did not appear deadband. . .
Ask expert to tell me why,thanks for you help
I did the test procedures are as follows:
EV Time Manager program is as follows:
InitEv(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x003f;
EDIS;
/*****************************/
/***********配置ACTR**********/
/*****************************/

EvaRegs.ACTR.bit.CMP1ACT=2;
//PW1引脚高电平有效

EvaRegs.ACTR.bit.CMP2ACT=1;
//PWM2引脚低电平有效
EvaRegs.ACTR.bit.CMP3ACT=2;
//PW1引脚高电平有效

EvaRegs.ACTR.bit.CMP4ACT=1;

EvaRegs.ACTR.bit.CMP5ACT=2;
//PW1引脚高电平有效

EvaRegs.ACTR.bit.CMP6ACT=1;
//PWM2引脚低电平有效
//PWM2引脚低电平有效

/*****************************/
/*******配置死区寄存器********/
/*****************************/

EvaRegs.DBTCONA.bit.DBT;
//死区定时器周期为5

EvaRegs.DBTCONA.bit.EDBT1=1;

EvaRegs.DBTCONA.bit.EDBT2=1;

EvaRegs.DBTCONA.bit.EDBT3=1;
//死区定时器1使能

EvaRegs.DBTCONA.bit.DBTPS=5;
//死区定时器预定标因子,死区时钟为HSPCLK/8

/*****************************/
/*********配置COMCONA*********/
/*****************************/

EvaRegs.COMCONA.bit.CENABLE=1;
//使能比较单元的比较操作

EvaRegs.COMCONA.bit.CLD=2;
//当给CMPR1赋新值时,立即装载
EvaRegs.COMCONA.bit.ACTRLD=2;
//行为控制寄存器,立即重载

EvaRegs.COMCONA.bit.FCOMPOE=1;
//全比较操作,PWM输出由相应的比较逻辑驱动

/*****************************/
/**********设置T1CON**********/
/*****************************/

EvaRegs.T1CON.bit.TMODE=2;
//T1工作于连续增模式

EvaRegs.T1CON.bit.TPS=3;
//输入时钟预定标因子为X/8

EvaRegs.T1CON.bit.TENABLE=1;
//禁止定时器操作

EvaRegs.T1CON.bit.TCLKS10=0;
//使用内部时钟

EvaRegs.T1CON.bit.TECMPR=1;
//使能定时器比较操作

/*****************************/
/**********设置T1PR等*********/
/*****************************/
EvaRegs.T1PR 9;
//一个周期时间为(129+1)*0.107us

EvaRegs.T1CNT=0; ///定时器1初值设为0
EvaRegs.CMPR1=0;
EvaRegs.CMPR2=0;
EvaRegs.CMPR3=0;

EvaRegs.T1CON.bit.TENABLE=1;
//启动定时器T1
}
-----------主程序如下:
#include "DSP28_Device.h"

int i,k;

interrupt void ISRTimer2(void);

void main(void)
{
/*初始化系统*/
InitSysCtrl();

/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;

/*初始化PIE控制寄存器*/
InitPieCtrl();

/*初始化PIE矢量表*/
InitPieVectTable();

/*初始化GPIO*/
InitGpio();

EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT2 = &ISRTimer2;
EDIS; // This is needed to disable write to EALLOW protected registers

/*初始化EV*/
InitEv();

InitCpuTimers();
ConfigCpuTimer(&CpuTimer2, 150, 70); //70us一次采样
StartCpuTimer2();

IER |= M_INT14;

EINT;
ERTM;
for(;;)
{

}

}
interrupt void ISRTimer2(void)
{

IFR=0x0000;
// PieCtrl.PIEIFR1.all = 0;
PieCtrl.PIEACK.all=0xffff;
for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x0c33;

for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x0cc3;

for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x03c3;

for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x0333;
for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x033c;
for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x0c3c;
for (i=0;i<0x96;i++)
{

}

EvaRegs.ACTR.all=0x033c;

}

_____________________________________