Part Number:TMS320F28379D
当采用LEM_CURRENT_SENSE电流采样时,电流环中断是以EPWM1的定时器为触发源的即:INT_EPWM1=>&motorControlISR;
当采用SD_CURRENT_SENSE电流采样时,电流环中断是以EPWM11的定时器为触发源的即:INT_EPWM11=> &motorControlISR;
项目中的电流环时间开销fclLatencyInMicroSec是以EPWM1的计数器来计算的,INTEPWM1和INT_EPWM11的进中断时间是不一样的,所以SD_CURRENT_SENSE模式下要改成差分的方式读取,进中断时读一次,出电流环读一次,这样是否更加合理?
Green Deng:
你好,问题已经收到,我需要咨询一下电机控制方面的专家,还请耐心等待。
,
Green Deng:
你好,并不是这样。例程中的做法目的是捕获从 PRD 或 ZRO 事件完成到更新 U、V W 比较寄存器所需的时间。
,
David Lew:
这个是在比较电流采样方式时发现的问题。在LEM_CURRENT_SENSE模式下是正确的,时间消耗大概在0.98us。在SD_CURRENT_SENSE模式下是15.67us,差了一大截。通过在进中断的位置 __interrupt void motorControlISR(void) 程序开始位置先读取一次EPWM CTR计数值 发现SD_CURRENT_SENSE模式下,此时的值已经达到1482左右,更新 U、V W 比较寄存器后再读一次EPWM CTR计数值大概在1600,两者差值在118,折算成时间1.18us,符合预期。而示例代码直接按EPWM CTR =0为起点的计时是15.67us。状态量fclLatencyInMicroSec在LEM_CURRENT_SENSE模式下这样计时是正确的,SD_CURRENT_SENSE模式下这个时间消耗是有歧义的,需要修正。此计时偏差不影响执行效率。
,
Green Deng:
你好,就你的问题我咨询了一下美国工程师,对方的解释如下:
With SAR ADC, the EPWM ISR is and ADC are both triggered by the same event (ZRO or PRD). Within the ISR, we wait for ADC EOC before reading the result register.
With SDFM, we link EPWM11 to reset the SDFM data and restart bit accumulation N/2 cycles ahead of ZRO or PRD event. It will take another N/2 cycles post ZRO or PRD event for the result to be available. We give some addition margin to ensure that we read the value after it is available and hence it takes a little more time. With a OSR of, say, 100, and with sync 3 filter, N will be equal to 3*100 = 300 clocks. At 20 MHz clock, N/2 samples from ZRO or PRD event will mean 7.5us. I just picked a number for discussion sake. Nevertheless, it is an inherent issue with SD filter.
,
David Lew:
好的,谢谢Green Deng!