在利用28388D做BLDC无位置传感器控制时,使用了speed_pr.h头文件
其计算转速的宏函数为SPEED_PR_MACRO。
工程具有两个版本,Debug版本和Release版本。
在调试Debug时,SPEED_PR_MACRO的执行是正常的,可以正确计算转速
但是在将工程调整为Release模式,将代码烧录至Flash后,发现SPEED_PR_MACRO计算的转速数据始终为0,从而导致速度环PI控制器饱和。
SPEED_PR_MACRO中计算转速的代码如下:
v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod);
随后我将其改写为以下形式:
g_speed1.Speed = g_speed1.SpeedScaler * 16777216L / g_speed1.EventPeriod;
就可以正确得到转速数据了。
从以上可以看出,是将代码固化至388Flash后IQdiv的执行出现了问题,然而,工程在Release模式编译没有报告任何错误,请问这是什么原因导致的呢?
开发环境为CCS Version: 11.1.0.00011,工程配置如下:
由于我使用了C28x_InstaSPIN_BLDC_Lib.lib库,所以C28工作在定点模式下,使用的IQmath库为: