EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.EPWM1_INT = &EPWM1_Z_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
IER |= M_INT1;
IER |= M_INT3;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx1 =1; // PIE Group 9, INT1
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
PieCtrlRegs.PIEIER5.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.all = M_INT1;
{
{
ek=1.5-(adc1.Ch1Out/100);
if( ek<0.1 )
/* 偏差小于0.1则调整值为0 */
{
adjust=0;
}
else
{
uk=Kp*(ek-ek1)+Ki*ek;/* 否则计算控制增量 */
ek1=ek;
uk1=(signed int)uk;
if(uk>0)
{
if(uk-uk1>=0.5)
{
uk1=uk1+1;
}
}
if(uk<0)
{
if(uk1-uk>=0.5)
{
uk1=uk1-1;
}
}
adjust=uk1;
XPWM=XPWM+adjust;
}
// return;
}
//asm(" NOP "); /* 请将光标移到此处设置断点,并用debug->Animate监测数据 */
}
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.EPWM1_INT = &EPWM1_Z_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
IER |= M_INT1;
IER |= M_INT3;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx1 =1; // PIE Group 9, INT1
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
PieCtrlRegs.PIEIER5.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.all = M_INT1;
pwmgen.init(&pwmgen);
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
adc1.ChSelect = 0x3210; // for DMC1500 and eZdsp2812/eZdsp2808 boards
adc1.init(&adc1);
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
pwmgen.Close(&pwmgen);
pwmgen.Open(&pwmgen);
while(1)
{
PI();
}
}
interrupt void EPWM1_Z_ISR(void)
{
static int time_inc=0;
pwmgen.MfuncC1 =XPWM;
pwmgen.update(&pwmgen);
time_inc++;
if(time_inc&0x3)
{
goto exit;
}
else
{
// GpioDataRegs.GPACLEAR.bit.GPIO9=1;
}
adc1.read(&adc1);
exit:
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
这种程序有没有问题????帮我看下
程序很简单,,就是PI算法改变PWM的占空比,,在中断中采样和改变
这个地方不知道有没有问题
一周热门 更多>