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.

[参考译文] DRV8301-69M-KIT:电流控制和调零指令电流电动机嗡嗡声

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/580105/drv8301-69m-kit-current-control-and-zero-commanded-current-motor-hum

部件号:DRV8301-69M-Kit
主题中讨论的其他部件:DRV8301

您好,

我一直在使用稍微修改的lab10a,它已修改为电流控制,而不是速度控制。 基本上,“flag_enablespeedctrl”设置为false,并且从lab4增加了“updateIqRef(ctrlHandle)”函数,以便能够使用gMotorVars.IqRef_A控制电流。 这种方法的轻微问题是,即使是在零指令电流(IqRef_A =0)下 电机发出的嗡嗡声很小,我想知道是否可以在指令电流为零时禁用HAL_disablePwm()的PWM输出,然后在需要负或正电流时再次启用它们。

调试显示,即使IqRef_A =0,gPwmData值也有细微变化,我认为这会引起嗡嗡声。 我想让系统在零指令电流时完全静音。

编辑:作为说明,一旦flag_enableSys和flag_Run_identify标志都为true,则会启动hum,这意味着PWM输出已启用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是正常现象,因为当前PID将参考ID和IQ控制为零。 当您将IQ_ref设置为零时,您可以添加一个标志以禁用PWM输出,但在再次启用PWM输出之前,您需要清除积分(UI)。 或者,您可以在将ID_ref设置为零时使用小KP和KI,电机振动也会非常轻微。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我确实想到了这种方式,并记得集成商可能会一直以某种方式指责错误,因此我应该在启用PWM之前将其归零,否则累积的UI会在伤人之前大刀阔斧地执行一些操作。

    如果我将KP和KI设置为零,然后在IqRef为零时禁用PWM,会发生什么情况。 然后将它们恢复到正常值,并在再次命令电流时启用PWM? 如果收益为零,则不应累积错误。

    我还希望系统在指令电流为零时完成自由轮,我认为最好的方法是禁用PWM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您不能禁用PWM输出,同时将KP和KI设置为零,从而使UI保持固定值。 您只需使用以下两种方法之一。
    1.禁用PWM,在设置IQ)参考之前清除UI并重新启用PWM。
    2.继续启用PWM,并在IQ_ref为零时设置一个较小的KP和KI。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以,请按照你提议的第二种方式来做。 当IQ_ref为零时,我是否可以用100来除KP和ki,然后再用100来乘以再次命令电流?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉遇到这个旧线程,但是IQ当前控制器UI可以用“pid_setui(obj->pidHandle_IQ,_IQ( 0.0)”清零;??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你是对的。 您可以使用PID_setUi(obj->pidHandle_IQ,_IQ (0.0))将IQ PI的UI设置为零,在IQ_ref等于零和电机停止期间,最好将所有PWM输出设置为零。
    gPwmData.TABC.Value[0]=_IQ (0.0);
    gPwmData.TABC.Value[1]=_IQ (0.0);
    gPwmData.TABC.Value[2]=_IQ (0.0);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在有了一个有效的实施。 感谢你的帮助

    IF (gMotorVars.IqRef_A <=_IQ (0.4)&& gMotorVars.IqRef_A >=_IQ (0.4)&& gMotorVars.Flag_Run_Identify == true){
    IF (续流==假){
    HAL_DisablePwm (halHandle);
    gPwmData.TABC.Value[0]=_IQ (0.0);
    gPwmData.TABC.Value[1]=_IQ (0.0);
    gPwmData.TABC.Value[2]=_IQ (0.0);
    续流=真;
    
    gMotorVars.IqRef_A = 0;
    updateIqRef(ctrlHandle);
    }
    }
    否则,如果(gMotorVars.Flag_Run_Identify == true){
    IF (续流== true){
    pid_setui(obj->pidHandle_Iq,_IQ (0.0));
    
    HAL_enablePwm (halHandle);
    Freeweling =假;
    }
    
    //更新IQ参考
    updateIqRef(ctrlHandle); //用于电流控制
    }
    

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

    问题仍然存在。 PID控制器仍在后台运行,当我先为电机发出一些电流指令,然后将指令电流归零,然后再次发出指令电流时,出现该问题。 我发现我的VQ和Vd值仍在运行,一段时间后,我的Vs将饱和至我的0.5774 最大过度调制,如果我再次命令一些电流并激活PWM输出, 当然,马达会发出一个抖动,MCU会重置(Flag_enableSys和Flag_Run_Identify重置为零)。 如果我先指令一些电流后将指令电流归零(PID增益是否初始化?) 然后再快速地命令一些Vs没有时间饱和到最大值,而加速动作的剧烈程度要低得多,它不会重置前面提到的标志。

    顺便说一下,电机参数USER_MOTOR_MAX_CURRENT在当前控制模式下是否起作用,还是仅用于速度PI控制器的输出?

    另一个问题是,当Vs饱和到过度调制值时,我通过命令电流和电动机抖动重新启用PWM,MCU似乎重置,或者至少重置Flag_enableSys和Flag_Run_identify。 它是通过连接到DRV8301的TripZone输入发生的,还是MCU固件或实际电压峰值发生的

    编辑:我跟踪了由非常嘈杂的3V3电源引起的标记重置,该电源已降低到足以重置MCU,因此导致所有变量重置。