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.
SDK V2.01 LAB13:
未记录函数代码 runRsOnline()重校准 SPRUHJ1H–2013年1月–2019年6月修订版。
通过 motorVars.RsOnLine_Ohm ping pongs 值和禁用本地 runRsOnline()调用,对 user.h motorVars.Rs_ohm 进行预生成内联运行时间更新。 SPRUHJ1H 没有提到为了 使更改生效必须通过 EST_setFlag_updateR()更新用户值。 我看到我的内联代码(如下所示)起作用、但仅在第一次电机运行时才起作用、并且它并不总是通过大于5Hz 转子速度的标志正确更新 Rs_ohm。 电阻更新应是有效的电机运行时间分析。
因此,runRsOnline()未能正确校准电阻,电流在电机启动前变为微平,转子急动360°。 但是、在电机运行时更新期间、估算器 ROM 算法并不总是返回正确的电阻或更新 Rs_ohms 校准结果。 如果 RsOnline 算法无提示地更新 user.h motorVars.Rs_ohm ,为什么 runRsOnline()具有电阻测试,如文档所述? 似乎 ROM 算法无提示更新不会回调写入 user.h motorVars.Rs_ohm。 因此、当用户设置标志以更新 user.h motorVars.Rs_ohm 时、ping pongs 2变量值都是错误的。
// // setup the space vector generator (SVGEN) module // SVGEN_setup(svgenHandle, estOutputData.oneOverDcBus_invV); /* Check rotor speed <1Hz, enable/disable Force Angle */ if((motorVars.speed_Hz < USER_FORCE_ANGLE_FREQ_Hz) && (motorVars.flagRunIdentAndOnLine == true)) //(motorVars.flagEnableForceAngle == false) && { /* Enable Force Angle when rotor speed <1Hz */ EST_setFlag_enableForceAngle(estHandle, true); motorVars.flagEnableForceAngle = true; /* get the user.h Rs coil ohms*/ //motorVars.Rs_Ohm = USER_MOTOR_Rs_Ohm; /* set the Estimator OnlineRs update flag */ //EST_setFlag_updateRs(estHandle, true); /* Enable Online Rs Recalibration flag */ motorVars.flagEnableRsOnLine = true; /* Enable slow speed estimator Maximum cold starting torque */ EST_setFlag_enableRsOnLine(estHandle, motorVars.flagEnableRsOnLine); /* Get last Online coil ohms sent to estimator */ //motorVars.RsOnLine_Ohm = EST_getRsOnLine_Ohm(estHandle); } // // run the space vector generator (SVGEN) module // SVGEN_run(svgenHandle, &Vab_out_V, &(pwmData.Vabc_pu)); /* Check to disable RsRecalibration */ if(((motorVars.speed_Hz > 5) && (motorVars.flagEnableRsOnLine == true) && (motorVars.flagRunIdentAndOnLine == true))) { /* set the Estimator OnlineRs update flag */ EST_setFlag_updateRs(estHandle, true); /* Get last Online coil ohms sent to estimator */ motorVars.RsOnLine_Ohm = EST_getRsOnLine_Ohm(estHandle); /* Disable Online Rs Recalibration flag */ motorVars.flagEnableRsOnLine = false; /* Disable estimator RsOnline control algorithm */ EST_setFlag_enableRsOnLine(estHandle, motorVars.flagEnableRsOnLine); }
关于 FW、MTPA:流程图显示了过调制电流重构、但文本从未解释为什么3个电流传感器需要这种重构? 当采样窗口(140ns)奈奎斯特时间比50µs μ s PWM 周期快时、为什么100%占空比需要电流重构?
FW (fwc.h)不会显示任何公式来根据 user.h (USER_MOTOR_LS_d/q_H)确定 FW 模块的 ld/LQ 范围、因此 FW 通过默认表值减慢电机速度。 我假设一些工程师可以使用 FEA 定子电感 CSV 值、但 购买 任何 SPM 电机时不会给出 ld/LQ 表范围。 也许 LAB13 文本应该详细说明如何确定 ld/LQ 表范围、而不是假设读者在同一页上。
我必须是对的、电机200Hz (80Vdc)具有 B 相、C 相的良好正弦波、但 A 相是三角形。 电流重构会严重振荡210Hz、类似于燃烧发动机预点火。
BTW:难以找到 ld/LQ 值的 fwc.h 表。 昨天我找到了它,但今天没有这样的运气。
我发现乒乓问题的原因在于文档给出了每个人都知道的假设(估算器模型)是指实时 motorVars.Rs_ohms。
这两个标志在估算器内部执行不同的任务。 enableRsOnLine 标志允许运行整个 Rs 在线特性、更新保持最新电阻值的内部变量、并将电流注入 ID。 第二个标志 updateRs 允许电机模型使用电阻值。 如果从不设置 updateRs 标志、但设置了 enableRsOnLine 标志、则电阻仍可用于监测电阻变化情况、但内部电机模型不会使用该变化的电阻。 如果电机温度大幅升高、并且电机模型中的电阻未更新(通过将 updateRs 标志设置为 true)、则 InstaSPIN 的性能将受到影响、并且不会达到所需的低速性能。 此外、电机可能无法在满负载下启动。
enableRsupdate 标志会加载 motorVars.Rs_ohms、但需要在电机启动> 1Hz 运行时进行此更新、而不是静止不动。 更重要的是、enableRsOnline 标志必须在某些低速 Hz 时禁用、而不是保持运行背景。 SPRUHJ1H 第534页和 Lab10页讨论了需要静态加载值的附加参数。 以下是低速轨迹期间的内联调用,并禁用 RsOnline >10Hz 速度。
/* Check rotor speed <1Hz, enable/disable Force Angle */ if((motorVars.speed_Hz < USER_FORCE_ANGLE_FREQ_Hz) && (motorVars.flagRunIdentAndOnLine == true)) /* Enable Force Angle when rotor speed <1Hz */ EST_setFlag_enableForceAngle(estHandle, true); motorVars.flagEnableForceAngle = true; /* Enable Online Rs Recalibration flag */ motorVars.flagEnableRsOnLine = true; /* Enable slow speed estimator Maximum cold starting torque */ EST_setFlag_enableRsOnLine(estHandle, motorVars.flagEnableRsOnLine); /* clear the RsOnline coil ohms */ //EST_setRsOnLine_Ohm(estHandle, motorVars.RsOnLine_Ohm = 0.0); /* sets the level of current tobe generated in Id reference */ EST_setRsOnLineId_mag_A(estHandle, motorVars.RsOnLineCurrent_A); } // // run the space vector generator (SVGEN) module // SVGEN_run(svgenHandle, &Vab_out_V, &(pwmData.Vabc_pu)); /* Check to disable RsRecalibration */ if((motorVars.flagEnableRsOnLine == true) && (motorVars.flagRunIdentAndOnLine == true) && (motorVars.speed_Hz > 5)) { float32_t RsError_Ohm = motorVars.RsOnLine_Ohm - motorVars.Rs_Ohm; if(abs(RsError_Ohm) < (motorVars.Rs_Ohm * 0.10)) // 10% Error { /* set the Estimator OnlineRs update flag */ EST_setFlag_updateRs(estHandle, true); /* Get last Online coil ohms sent to estimator */ motorVars.RsOnLine_Ohm = EST_getRsOnLine_Ohm(estHandle); } /* Disable Online Rs Recalibration flag */ motorVars.flagEnableRsOnLine = false; /* Disable estimator RsOnline control algorithm */ EST_setFlag_enableRsOnLine(estHandle, motorVars.flagEnableRsOnLine); }
是的、你是对的。 我们建议在低速运行电机时使 Rs 在线调光。 如上所述、您可以添加一些代码来执行此操作。
[引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004453/launchxl-f280049c-sdk-rsonline-fails-mtpa-fw 关于固件、MTPA:流程图显示了过调制电流重构、但文本从未解释为什么3个电流传感器需要此功能? 当采样窗口(140ns)奈奎斯特时间比50µs μ s PWM 周期快时、为什么100%占空比需要电流重构?[/引述]您可以查看有关 is08_overmodate_coff 的实验指南、其中详细介绍 了使用过调制时的电流重构。
Lab13在启动电机之前调用 runRsOnline(),该函数不起作用,并且与 SvGen_run()内联时的行为同样糟糕。 但是、代码与上面的内联调用类似、但看起来效果更好。
如果 SvGen_run ()在启用 RsOnline 的情况下有效、是否仍然需要调用 EST_setRsOnLineId_mag_a (estHandle、motorVars.RsOnLineCurrent_A)? 请注意、它位于上面的代码 snip 和 Lab10 RsOnline 指令表21中。
问题似乎是在调用 EST_setFlag_updateRs (estHandle、true)时调用 EST_getRsOnLine_Ohm ping pongs、它与下一次调用 motorVars.RsOnLine_Ohm = EST_getRsOnLine_Ohm (estHandle)冲突。 但是、更新会更改在线值 CCS 调试、而无需调用估算器来获取新的在线 Rs 值。
因此、两个调用之间会出现乒乓值。 仅通过主使能 while 循环的 updateGlobalVariables()(labs.h)部分加载到 motorVars.RsOnline 值。 当 EST_getRsOnLine_Ohm (estHandle) 用户代码在每个周期存在 mainISR()之后未调用调试 RsOnline 值时,如何更改?
也许应该将 updateGloobalVariables()调用放置在其它位置,以便它不会与 runRsOnline()代码冲突?
过调制点 Lab8不是 Lab13 (FW/MTPA)的一部分、但电流重建被置为有效。 Lab13中的任何地方都没有提到这一点、这似乎是 FW 使用默认 ld/LQ 表值失败的原因之一。
我仍然无法再次找到 fwc.h (ld/LQ)表、它的位置是什么?
按100% PWM 占空比并不完全是实现 FW 的目的、如下面的文本所述。 SPM 电机负 id 电流注入 AG 以形成 Bfw 下环路(块)。 再次重申、电流重构似乎没有必要或不明智地将 具有3个电流传感器的 FW 环路置于有效状态、即 ADC 140ns 采样窗口。 如果不可能、则可能应使用 PPB 来处理负电流窗口。
也许对于 MTPA Bmta 来说、可能需要100%占空比、即使是3个电流传感器、为什么需要重建? 对于2个传感器模式、似乎需要重建、因为始终通过但不是3个传感器。 看起来重建效果会影响 FW 模式,甚至在80Vdc 的时间内获得>电机转速。
逐字记录 Lab13:
在所有情况下、通过作用于直轴电流、可以削弱磁通量以扩展可实现的速度范围。 但是、由于 d 轴电枢反应、气隙磁通可能会因消磁效应而减弱、方法是添加负 id...
因为 RsOnline 电流设置为8.2A (user.h),并且在调用 runRsOnline()之前未进行缩放。 下面的补丁将 SF 设置为低于估算电机电流 Lab13 10%。
/*将 RsOnline 电流设置为10% motorVars.RsOnLineCurrent_A =(USER_MOTOR_RES_EST_CURRENT_A * 0.1);
[引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004453/launchxl-f280049c-sdk-rsonline-fails-mtpa-fw/3712597 #3712597"]如果 SvGen_run()使用 RsOnlineId_mag_A (estHandle、motorVars.RsOnLineCurrent_A)断言并使用 RsOnline、则 EST_setRsOnLineId_A (estHandle、motorVars.RsOnLineCurrent_A)仍需要调用当 RsOnline 标志设置 false >2Hz 电机速度时、估算器似乎会对 Rs_ohms / RsOnline_ohms 进行平衡更新。
FWC 不使用 (ld/LQ)表、只有 MTPA 需要电感(L)/电流(I)表。
是的、您是对的、场强减弱控制是通过在 d 轴上添加负电流来降低 磁通量来提高最大运行速度。
我很困惑、因为 CCS 调试 JScript (SDK v2.01)忽略了设置 FWC 值所需的3个变量。 Lab13文本还会模糊 MTPA/FW 之间的行、暗示 FW 正常工作所需的值。 似乎意味着电机 ld/LQ 值需要适当的 MTPA 表才能使 FW 正常工作。
Mia debug JScript-Lab13:motorVars.Kp_fwc、 motorVars.Ki_fwc、 motorVars.angleMax_fwc_rad
[引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004453/launchxl-f280049c-sdk-rsonline-fails-mtpa-fw/3713061 #3713061"]只有 MTPA 需要电感(L)/电流(I)表。您能找到该表吗?