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.

[参考译文] TMS320F28069F:Instaspin - fpu32除法有问题

Guru**** 2553260 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/889571/tms320f28069f-instaspin---problem-with-fpu32-division

器件型号:TMS320F28069F

我开始在 F28027F 上开发我的项目、但由于缺少引脚、我搬到了具有 FPU 的 f28069F 系列。 起初、项目是使用 IQ 创建的、但我决定使用浮点、因为它可用。  

在我已启用的属性中:--float_support=fpu32、Runtimesupport 库:rts2800_fpu32.lib、并且在文件搜索修补 程序 rts2800_fpu32.lib 中被包含。 还将两个库更改为浮点: 2806xRevB_FastSpinROMSymbols_fpu32.lib 和 IQmath_fpu32.lib

我使用 EEPROM 保存电机参数、因此我根据原始声明了两个函数、但几乎不使用 标头 user.h 中的所有函数

空 USER_checkForErrorsEEPROM (USER_Params * pUserParams);

空 USER_setParamsFromEEPROM (USER_Params * pUserParams);

问题在于 FPU 除法、因为它总是返回0。 编译器是最新的。

MOTOR_cfg.LS_d.Float 是浮点值、在表达式菜单中、我可以看到正确的值。

temp0..3是全局 vlolatile 变量,也是 ftoat_t

由于除法运算不起作用、我会遇到用户错误。

例如、temp2被设定为0。 为什么?


if (motor_cfg.data.motor[motor_cfg.data.ActiveMotorSet].param.ls_d.Float!= 0.0)
{

temp = 1.0f/(0.5 *(motor_cfg.data.motor[motor_cfg.data.ActiveMotorSet].param.ls_d.Float + 1e-9)* USER_IQ_FULL_SCALE_CURRENT_A);
TEMP1 =(128.0 * USER_IQ_FULL_SCALE_VOLTAGE_V /(float_t) temp);
TEMP2 = 1.0 / MOTOR_cfg.data.MOTOR[MOTOR_cfg.data.ActiveMotorSet].param.LS_d.Float;
temp3 = 2.0 * motor_cfg.data.motor[motor_cfg.data.ActiveMotorSet].param.LS_d.Float;
//if ((((float_t) USER_CTRL_FREQ_Hz >=(128.0 * USER_IQ_FULL_SCALE_VOLTAGE_V /(0.5 *(USER_MOTOR_LS_d + 1e-9)* USER_IQ_FULL_SCALE_CURRENT_A))))))
if (((float_t) USER_CTRL_FREQ_Hz >=(128.0 * USER_IQ_FULL_SCALE_VOLTAGE_V / temp)))
{
USER_setErrorCode (pUserParams、USER_ErrorCode_ctrlFreq_Hz_High);
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以参阅使用 InstaSPIN-FOC 和 fpu32的 lab4a、lab5g、lab9a 或 lab10c 实验。 所有常量都应在代码中包含 postfix "f"。