This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DRV8301: Insta_BLDC在什么时候进入中断程序,又或者说在那一刻DSP进行计算所需要输出的控制信号

Part Number: DRV8301
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的时刻对应的还是三角载波清零的那一刻吗,还是别的什么时刻。这对我进行转矩控制并且削弱转矩脉动十分重要。

请各位专家帮我解答一下,多谢了!!!