TI中文支持网
TI专业的中文技术问题搜集分享网站

PMSM电机控制例程是否需要等待AD转换结束标志位置位再读取AD转换结果?

TI提供的PMSM例程大多都是用PWM触发SOC启动AD转换,同时用PWM触发电机控制中断,在电机控制中断MotorISR中读取AD转换结果,进行FOC算法控制。

PWM在触发SOC启动AD转换时,也触发了电机控制中断MotorISR,从逻辑上说,在MotorISR中是否应当等AD转换结束标志位置位再读取AD结果?

但是我看大多数例程里面都是进入MotorISR直接读取,就是如下所示:

interrupt void MotorControlISR(void)
{

// Verifying the ISR

IsrTicker++;

clarke1.As = (float)IFB_SV_PPB* ADC_PU_PPB_SCALE_FACTOR;
clarke1.Bs = (float)IFB_SW_PPB* ADC_PU_PPB_SCALE_FACTOR;

}

但是偶尔看到有另外一个例程里是如下写的:

interrupt void MotorControlISR(void)
{

// Verifying the ISR

IsrTicker++;

while(!AdcaRegs.ADCINTFLG.bit.ADCINT1); //wait on ADC EOC
asm(" NOP"); //1 cycle delay for ADC PPB result

clarke1.As = (float)IFB_SV_PPB* ADC_PU_PPB_SCALE_FACTOR;
clarke1.Bs = (float)IFB_SW_PPB* ADC_PU_PPB_SCALE_FACTOR;

}

多了一个查询AdcaRegs.ADCINTFLG.bit.ADCINT1标志位的等待过程,查了下是等待AD 的EOC结束标志位,该过程会增加程序时间,并且在大多数例程里都没有。

我想问的是,是否应该去查询AdcaRegs.ADCINTFLG.bit.ADCINT1这个标志位再读取结果?

从逻辑上想,我觉得应该去查询这个标志位,等待AD转换结束再读取AD标志位,但是为何大多数例程,包括HVPM_Sensorless,IDDK_PM_SERVO等都没有这句语句。如果不等待,读取的AD结果应该是上一个周期的?这样就有一个控制周期的延时了,跟实时系统的思想不符。但是如果去等待查询这个标志位,会导致程序执行时间变长一些,好纠结

Eric Ma:

多了一个查询AdcaRegs.ADCINTFLG.bit.ADCINT1标志位的等待过程,查了下是等待AD 的EOC结束标志位,该过程会增加程序时间,并且在大多数例程里都没有。

我想问的是,是否应该去查询AdcaRegs.ADCINTFLG.bit.ADCINT1这个标志位再读取结果?

从逻辑上想,我觉得应该去查询这个标志位,等待AD转换结束再读取AD标志位,但是为何大多数例程,包括HVPM_Sensorless,IDDK_PM_SERVO等都没有这句语句。如果不等待,读取的AD结果应该是上一个周期的?这样就有一个控制周期的延时了,跟实时系统的思想不符。但是如果去等待查询这个标志位,会导致程序执行时间变长一些,好纠结”

Eric

这个要看一下这个中断是由什么来触发的。如果是PWM来触发中断,且ADC的转换是通过PWM来触发的,那么则需要在PWM的中断里面去查询ADC是否转换完成,因为ADC的转换需要一定的时间,而PWM的中断触发是立即出发的。

如果是PWM触发ADC采样,然后由ADC转换完去触发这个中断,则不需要在中断服务函数里面去查询这个标志位,因为ADC已经转换完成了。

赞(0)
未经允许不得转载:TI中文支持网 » PMSM电机控制例程是否需要等待AD转换结束标志位置位再读取AD转换结果?
分享到: 更多 (0)