在用dsp288335的时候,直流电机旋转的代码写在main函数里,我想用ecap配合光电传感器捕捉电机旋转速度。但是一进ecap中断电机就停下来了,我在ecap中断里也加入了电机旋转代码,但电机还是停下了
电机代码如下:
switch(key)
{
case KEY1_PRESS: DC_MOTOR_INA_SETH;DC_MOTOR_INB_SETL;break;
case KEY2_PRESS: DC_MOTOR_INA_SETL;DC_MOTOR_INB_SETH;break;
case KEY3_PRESS: DC_MOTOR_INA_SETL;DC_MOTOR_INB_SETL;break;
}
这是我ecap的中断程序
__interrupt void ecap1_isr(void)//eCAP1中断服务函数
{
ECap1IntCount++;
DC_MOTOR_INA_SETH;DC_MOTOR_INB_SETL;//电机旋转在这里
ECap1PassCount++;
t1 = ECap1Regs.CAP1;
t2 = ECap1Regs.CAP2;
t3 = ECap1Regs.CAP3;
t4 = ECap1Regs.CAP4;
T1 = t3 - t1;//两个下降沿对应时间之差,即周期
T2 = t2 - t1;//占空比对应时间
T1_buf[0]=T1/10+0x30;
T1_buf[1]=T1%10+0x30;
T1_buf[2]='\0';
LCD1602_DispStringEx(2,12,T1_buf);
if(ECap1PassCount > 100)
{
T1_temp = T1;
T2_temp = T2*100;
freq = (150000/T1_temp)*1000;
duty = T2_temp/T1_temp;
ECap1PassCount = 0;
}
ECap1Regs.ECCLR.bit.CEVT4 = 1;
ECap1Regs.ECCLR.bit.INT = 1;
ECap1Regs.ECCTL2.bit.REARM = 1;
// Acknowledge this interrupt to receive more interrupts from group 4
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}
```c