Other Parts Discussed in Thread: INSTASPIN-BLDC
我想问一个有关中断得问题。
在DRV8301的Insta_PM_sensorless 历程中,写了这样的代码:
// Enable CNT_zero interrupt using EPWM1 Time-base
EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable EPWM1INT generation
EPwm1Regs.ETSEL.bit.INTSEL = 1; // Enable interrupt CNT_zero event
EPwm1Regs.ETPS.bit.INTPRD = 1; // Generate interrupt on the 1st event
EPwm1Regs.ETCLR.bit.INT = 1; // Enable more interrupts
此时EPWM的实际模块的发波方式是UPDOWN mode, 我是否可以理解成每个控制周期触发一次中断,并且进入中断的那一刻对应的是Time Base模块发出的三角载波清零的那一刻。
在Insta_BLDC里面,并没有这样的代码,取而代之的有关中断设置的代码是:
/ Reassign ISRs.
// Reassign the PIE vector for TINT0 to point to a different
// ISR then the shell routine found in DSP280x_DefaultIsr.c.
// This is done if the user does not want to use the shell ISR routine
// but instead wants to use their own ISR.
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.ADCINT1 = &MainISR;
EDIS; // This is needed to disable write to EALLOW protected registers
// Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
在这个历程中,EPWM的设置是
Initialization constant for the F280X Time-Base Control Registers for PWM Generation.
Sets up the timer to run free upon emulation suspend, count up mode
prescaler 1.
#define PWM_CNTL_INIT_STATE ( FREE_RUN_FLAG + \
PRDLD_SHADOW + \
TIMER_CNT_UPDN + \
HSPCLKDIV_PRESCALE_X_1 + \
CLKDIV_PRESCALE_X_1 + \
PHSDIR_CNT_UP + \
CNTLD_DISABLE ) 这里我必须要指出德州仪器的一处错误,代码里面明明写的是TIMER_CNT_UPDN,但是注释却说是count up mode?!
我的问题是,在INsta_bldc历程中,进入ISR的时刻对应的还是三角载波清零的那一刻吗,还是别的什么时刻。这对我进行转矩控制并且削弱转矩脉动十分重要。
请各位专家帮我解答一下,多谢了!!!