我开始在 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); } }