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.

[参考译文] CCS/TMS320F28379D:FCL 速度控制

Guru**** 2576195 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/796231/ccs-tms320f28379d-fcl-speed-control

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

我使用 LAUNCHXL-F28379D + BOOSTXL-DRV8305EVM FCL-SFRA 示例项目通过28伏 PM 无刷电机进行速度控制

当我编译递增构建2 (FCL_LEVEL2)时、当我将 speedRef 设置为 IQ (0.05)时、电机开始低速旋转、但我无法使其旋转得更快。 例如、当我将 speedRef 设置为 IQ (0.15)时 、即使我提高了 VdTesting 和 VqTesting 的值、电机也会停止。

当我编译增量编译3 (FCL_LEVEL3)时、CNTLR _id.FBK 会跟踪 IDREF而 CNTLR _IQ.FBK 会跟踪 IqRef、当我尝试不同的 Id 和 Iq 值时、电机轴会被严格锁定、防止其旋转。 我想知道这是否是预期的结果。

编译增量构建4 (FCL_LEVEL4)并尝试不同的 speedRef 值以测试 DE 速度环路后、 PID 会更改 IQ 值、电流成分会增加、但在所有情况下、电机轴不旋转、它始终被严格锁定

我尝试交换电机相位、但仍然不工作。 编码器在所有情况下都读取其工作状态。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 Level2测试中:-可能是直流输入电压不够
    对于不在其他构建级别旋转的电机、电机旋转感应会反向进入控制器。 交换连接到电机的任意两根导线。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW、1.0pu 速度约为500Hz、这是基本速度。 确保不要超过电机的额定转速。 在进入下一个级别之前、请确保您对构建级别2中的开环性能满意。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现在构建级别2中,我的代码行(1)(2)不存在,所以我必须添加它们,以使代码行(3)(4)具有一个值:

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    phaseCurrentSense (电机);
    MOTOR->Clarke.As = MOTOR->currentAs;        //代码行(1)
    MOTOR->Clarke.B= MOTOR->currentB;        //代码行(2)
    Clarke_macro (电机->Clarke)


    MOTOR->PART.Alpha = MOTOR->Clarke.Alpha;   //代码行(3)
    MOTOR->PART.Beta = MOTOR->Clarke.Beta;      //代码行(4)
    电机->park)。角度=电机->rg.out;
    MOTOR->PART.Sine =__sinpuf32 (MOTOR->PART.Angle);
    MOTOR->PARK .COSAINE =__COSPuf32 (MOTOR->PARK .Angle);
    PARK_MACRO (MOTOR->PARK)
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    当我尝试绘制这两条线时、我意识到了这个问题:

    DlogCh3 =电机->Clarke.As;
    DlogCh4 =电机->Clarke.B;

    图形为空、表示值为0。 添加代码行(1)和(2)后、正确显示了电流 A/B。

    此外、调整 VqTesting 和 VdTesting 的最佳方法是什么?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好反馈。 我们将在稍后的 SDK 版本中对此进行修复。

    稳压器 VdTesting 和 VqTesting、它们用于开环模式。 旋转角度强制在定子上旋转。 根据生成的电压矢量的幅度、由于没有动态校正、转子角度可能会与强制角断开。 但是、speedRef 应该与 vdTesting 和/或 VqTesting 成正比。 为了进行开环测试、您可以随 speedRef 一起更改其中的任何一个。 Id/Iq 反馈的值可能不包含太多有用的数据、因为方向角不与转子对齐、并且是一个随电压 MAG 而变化的参数。 我不会对这些电压重视太多。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 FCL_LEVEL4中、并将其与 IDDK FCL 示例代码进行比较、我发现不存在 RG 宏:

    MOTOR->Rg.Freq = MOTOR->RC.SetpointValue;
    RG_MACRO (MOTOR->Rg)

     

    我正在使用绝对编码器、因此我必须调整代码并注释 QEP 代码行。 当我在 FCL 4级进行编码器校准(对齐)时、它开始旋转以找到索引脉冲(我知道对于绝对编码器而言不是必需的)、但这是一种查看我的绝对编码器代码是否正常工作的好方法、因为它需要一个电气角度。 但是、这仅在不注释以下代码行时有效:

    QepPosEstModule(&motor1);

     

    我不知道为什么会发生这种情况、因为我的代码在 Spinmotor()例程中没有引用 QEP 位置反馈。

    电机->ElecTheta = myElecAngleABS;  //(0.0至1.0)
    电机->speed.ElecTheta =电机->ElecTheta;
    SPEED_FR_MACRO (MOTOR->SPEED)

     

    校准完成后、我尝试运行 PID 速度环路、但电机仍然保持刚性、不会旋转。 我堆了两根导线、但这不起作用。

    我不知道为什么在 QEP 校准期间、电机会旋转、甚至接受 speedRef 中的变化、从而正确地遵循我的设定点、但在 PID 速度环路中不会移动。

     

    此致

     

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

    QepPosEstModule()是指索引脉冲被识别并且读取 QEP 角度计数的位置。 SpinMotor()有助于初始旋转电机以识别索引脉冲。 如果您使用不同的编码器、请在构建级别2中验证其功能、其中电机以开环方式运行。 一旦您对新编码器集成感到满意、您就可以进入更高的构建级别。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请告诉我们问题是否得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    还没有。 构建级别2运行良好。 此外、当使用构建级别3时、编码器校准例程工作(我不使用 QEP 模块)。 校准后、当我将 IQref 设置为不同的值时、即使我更改了2个电机相位、电机仍会停止。 当不使用 QEP 模块时、是否会影响 FCL 例程?

    我通过这种方式传递绝对编码器值:

    Motor->MechTheta =_IQ (((浮点) AngleMotorQ24)/16777216.0);
    电机->ElecTheta =_IQ (((浮点) AngleElecQ24)/16777216.0);

    AngleMotorQ24 AngleElecQ24转换为 PU 值(0.0至1.0)的 IQ24变量(0至16777216)。 是这样吗?

    此外、是否可以让 FCL 库的源代码来查看其内容?

    此致

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

    是的、您可能需要设置电机->PARK。Angle =电角。

    希望它现在能正常工作!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答、我会尝试一下、我会向您返回结果。 此外、在哪里是插入该代码行并让 FCL 库正确更新 Park Angle 的最佳位置(构建级别3)、这样、避免使用某些内部 QEP 函数可执行此操作

    此致!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在调用 fcl_routin()之前,请将角度设置为正确的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在工作正常、停车角度肯定解决了问题。 谢谢!