您好!
当 Ref_Hz 输入正值时、比如电机顺时针旋转、当速度 Ref_Hz 变为0时、速度451Hz 变为负值、电机仍顺时针旋转... 停止电机的唯一方法是 flagEnableRunAndIdentify 为0!
上述问题仅适用于霍尔模式、快速模式而不会出现问题。
丹尼
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.
您好!
当 Ref_Hz 输入正值时、比如电机顺时针旋转、当速度 Ref_Hz 变为0时、速度451Hz 变为负值、电机仍顺时针旋转... 停止电机的唯一方法是 flagEnableRunAndIdentify 为0!
上述问题仅适用于霍尔模式、快速模式而不会出现问题。
丹尼
您好、Yara。
您连接的任何内容似乎都无法正常工作
您的意思是视频 附件没有显示?
是的、这是通用电机控制实验4
通过 flagEnableMotorIdentify 或 flag_bypassMotorId 识别电机
电机以快速模式运行、通过 flagEnableSpeedCtrl true/false 进行转速/扭矩模式测试
利用上述设置和参数、电机能够完美地旋转。
但是、当更改为霍尔模式、Ref_Hz 变为0时、SPEED_Hz 将变为负值!
丹尼
Danny:
请参阅以下从 hall.h 摘录的内容、尤其是突出显示的行:
本质上、使用的霍尔算法不考虑速度参考值为零的情况、并假定非正速度参考值为负。 如果这种行为不理想、我建议(用于测试目的)在 runMotor1Control 中添加一行代码、该代码行的内容与
if(TRAJ_getIntValue(obj->trajHandle_spd) == 0.0f)
{
obj->flagEnableRunAndIdentify == true;
}
请注意、这需要您手动设置 flagEnableRunAndIdentify 以重新启用电机。 此外,请注意,我使用轨迹生成器的 TRAJ_getIntValue()函数,而不是直接使用 Ref_Hz。 这很重要-它将允许您的电机转速斜升至0Hz、而不是简单地被设定为0Hz。
此致、
杰森·奥斯博尔恩
本文中的代码用作类似 C 的伪代码。 对您在项目中包含的所有代码进行独立验证 是否编写得当、 是否符合您遵守的标准、这是一种很好的做法。
大家好、Jason、
是的,非常感谢, 它工作!
我有另一个问题、请参阅附加的视频、这次我使用快速模式+速度控制
当进入 Ref_Hz ->电机斜升和旋转->然后进入 Ref_Hz 到零->我可以看到 speed_int_Hz 和 estInputData.speed_ref_Hz 都降低到零、但 speed_Hz 在斜降之前长时间保持其最大频率(速度)(我的情况是大约6秒)。
我不知道它是否饱和了 ?
丹尼
Danny:
这个问题的答案很简单!
TRAJ (轨迹/转换发生器)不知道您的电机的实际速度、只知道您的目标速度。 这意味着它也不知道您的电机已经停止加速。 当您将电机转速设置为1000Hz 时、如果您的速度基准已知、则表示您的电机将变为1000Hz。 如果您要绘制经转换的 speedRef 值、您会看到该行为与您的输入完全匹配。
因此、当我们从1000Hz 减速至0Hz 时、转换速度基准所花费的时间超过170Hz、这似乎是您的电机支持的上限。 如果将 Ref_Hz 设置为170 Hz 而不是1000,则不应看到该延迟。
此致、
杰森·奥斯博尔恩
与此同时、170Hz 似乎非常低。 我会在实验室中再次查看电机的数据表和物理电机参数、从而验证一切是否正常运行。
大家好、Jason、
现在、我想重点讨论 快速+电流控制 因为 CURRENT CONTROL 相比之下、 速度控制。
我添加了节流器件以设置 motorVars_M1.IsSet_A 值、因为它是空载测试、最大 IsSet_A 设置为2A。
程序检测油门释放和 复位 为 flagEnableRunAndIdentify 为0
如果(objMtr->cmdPoet.potAdc <= objMtr->cmdPoet.adcMin)
{
objMtr->IsSet_A = 0.0f;
objmtr->cmdPoet.flagCmdRun = false;
}
objMtr->flagEnableRunAndIdentify = objMtr->cmdPoT.flagCmdRun;
强制电机沿一个方向旋转。
如果(objMtr -> cmdPot.potAdc > objMtr->cmdPot.adcMin)
{
objmtr->cmdPoet.flagCmdRun = true;
Ref_Hz =0.1f;
}
请观看以下视频:
1.前3秒、踩下油门、直至1.2A、SPEED_Hz 达到59 Hz、这是正常情况。
2.然后释放油门, flagEnableRunAndIdentify 复位为0
3. 4秒,再次应用油门,但此时速度 Hz 变成 负 数值-10.14Hz,电机不旋转...
IS_A = 5A、即 motorVars_M1.fluxCurrent_A 设置
我的问题是: 为什么 SPEED_Hz 随机变成负数?
e2e.ti.com/.../current-control-negative-speed_5F00_hz-value.mov
丹尼
Danny:
在不了解更多项目结构的情况下,我的第一个本能是此问题再次与 Ref_Hz 有关。 基本上,大部分的通用电机控制实验室都是基于这样一个基本假设,即与电机的主用户接口为 Ref_Hz。 为了适当地考虑电机转速和加速度、所有电机观测器、包括软件(FAST)和硬件(霍尔)、都依赖 Ref_Hz 的值。
我推荐以下一种方法:
在这两个选项中、我认为第一个选项最有可能为您提供更好的结果。
此致、
杰森·奥斯博尔恩
作为次要主题、请注意、我建议使用 flagEnableRunAndIdentify 来处理0速度、该解决方案仅在测试期间适用。 我认为在任何实际电机控制中、每次电机需要停止时都会完全禁用系统、这不一定是一个好主意、相反、我建议调整工程的 hall.h 副本以编辑 HALL_RUN 以应对0速情况。