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.

[参考译文] TMS320F28027:Instaspin FOC -如何在使用速度控制模式的同时在一个方向上限制扭矩

Guru**** 2536080 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1212207/tms320f28027-instaspin-foc---how-to-limit-torque-in-one-direction-while-using-speed-control-mode

器件型号:TMS320F28027

(该问题可能类似于最近另一个题为"如何消除反向安培力的影响"的问题

我需要在一个方向上以不同于另一个运动方向的方式限制扭矩(基本电流)。

我正在使用 lab05b 和 lab10a (这增加了过度调制)。 这两种方法都运行良好、但我没有找到方法在一个旋转方向上与另一个旋转方向上不同地限制扭矩。

我找到并更改了 ctrl.h 中的设置 outMin、outMax、这允许我在不同方向上以不同的方式限制扭矩、但这限制了调制、而不是扭矩设定点。

调制限制会严重限制速度、这对我来说用处不大。 我只是想限制速度 PI 控制器的负扭矩设定点输出与正扭矩设定点输出的不同之处。

我可能只是偶然进入了错误的 outMin 来进行限制、但我很难尝试理解程序流程、因为这么多函数是内联的、所以我无法使用断点逐步执行它们。

这些较低级别的函数是否有任何文档?

您能向我指出一下应该在代码中进行实验的一般区域吗?

谢谢  

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

    通过调用如下函数设置负扭矩和正扭矩电流。

    TRAJ_setMinValue (obj->trajHandle_spd、gNegTorqueCurrent);
    TRAJ_setMaxValue (obj->trajHandle_spd、gPosTorqueCurrent);

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

    谢谢、但我应在哪里设置此参数、以及它为什么会影响速度控制? 我不会执行位置控制。

    LT 看起来这些在 ctrl.c 中设置为零、并且我找不到再次设置的对这些设置的任何引用。

    值得注意的是、这里(或我找到的任何位置)未设置 TRAIL_Handle_IQ。

    你能给我更多的提示吗?

    在 ctrl.c 中、我看到(第422-443行)

    //设置默认的 Id 电流轨迹模块参数
    TRAJ_setIntValue (obj->trajHandle_ID、_iq (0.0));
    TRAJ_setTargetValue (obj->trajHandle_ID、_iq (0.0));
    TRAJ_setMinValue (obj->trajHandle_ID、_iq (0.0));
    TRAJ_setMaxValue (obj->trajHandle_ID、_iq (0.0));
    TRAJ_setMaxDelta (obj->trajHandle_ID、_iq (0.0));


    //设置默认的速度轨迹模块参数
    TRAJ_setIntValue (obj->trajHandle_spd、_iq (0.0));
    TRAJ_setTargetValue (obj->trajHandle_spd、_iq (0.0));
    TRAJ_setMinValue (obj->trajHandle_spd、_iq (0.0));
    TRAJ_setMaxValue (obj->trajHandle_spd、_iq (0.0));
    TRAJ_setMaxDelta (obj->trajHandle_spd、_iq (0.0));


    //设置默认的最大速度轨迹模块参数
    TRAJ_setIntValue (obj->trajHandle_spdMax、_iq (0.0));
    TRAJ_setTargetValue (obj->trajHandle_spdMax、_iq (0.0));
    TRAJ_setMinValue (obj->trajHandle_spdMax、_IQ (0.0));//未使用
    TRAJ_setMaxValue (obj->trajHandle_spdMax、_IQ (0.0));//未使用
    TRAJ_setMaxDelta (obj->trajHandle_spdMax、_IQ (0.0));//未使用

    在 CTRL_runOnLine_User ()(ctrl.h 中的第2344行)中,我可以根据需要在一个方向上更改电流限制,但即使我认为我只限制 Iq,空载速度也是有限的。 请参阅下面、我在其中注释掉了 outMin =-outMax 并将其替换为  outMin =-outMax / 3;

    例如、正向的最大空载速度为2400RPM、这需要电源提供350mA 电流。 如果我施加负载、我可以轻松超过2.5A。

    负向的最大负载电流约为1A (好的)、但最大速度仅约为750RPM、在该速度下、空载电流低于200mA。

    (ctrl.h 中第2470行附近)

    //获取反馈值
    fbackValue = CTRL_getIq_in_pu (句柄);

    //设置 ID 控制器输出的最小值和最大值
    outMax =_IQsqrt (_IQmpy (maxVsMag、maxVsMag)-_IQmpy (CTRL_getVd_out_pu (handle)));
    // outMin =-outMax;
    outMin =-outMax / 3;//波电 x (限制电流、但也限制速度)

    //设置最小值和最大值
    PID_setMinMax (obj->pidHandle_iq、outMin、outMax);

    //运行 IQ PID 控制器
    PID_run (obj->pidHandle_iq、refValue、fbackValue、CTRL_getVq_out_addr (handle));
    }

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

    LT 看起来这些在 ctrl.c 中设置为零、并且我找不到再次设置的对这些设置的任何引用。

    值得注意的是、这里(或我找到的任何位置)未设置 TRAIL_Handle_IQ。

    你能给我更多的提示吗?

    [/报价]

    如果您只想在启动期间设置一次限制值、则 只需 根据电机更改 user.g 中的 USER_MOTOR_MAX_CURRENT。

    如果您想在线更改该值、只需如上所述将该值设置为变量、然后在下面的后台循环中调用这些函数来 调用  CTRL_setSpd_ref_krpm ()。

    //设置速度参考值
    CTRL_setSpd_ref_krpm (ctrlHandle、gMotorVars.SpeedRef_krpm);

    //设置最大扭矩电流
    TRAJ_setMinValue (obj->trajHandle_spd、gNegTorqueCurrent);
    TRAJ_setMaxValue (obj->trajHandle_spd、gPosTorqueCurrent);