MSPM0G3507: 使用 MSPM0 Universal FOC 例程出现电机间歇跳动问题

Part Number: MSPM0G3507
Other Parts Discussed in Thread: DRV8316REVM, , DRV8316

sdk 版本:mspm0_sdk_2_05_01_00

开发板:LP-MSPM0G3507

驱动板:DRV8316REVM 

 

使用 sdk 中的  MSPM0 Universal FOC 例程驱动电机,开环闭环均可转动,但是每间隔 2.4s 电机会跳动一下,通过 Ozone 打印了 Duty 值,发现跳动时 duty 值也会发生畸变,请问这可能是是什么原因。

只在开环运行时也会出现这个情况。

image.png

下图是放大后的

image.png

 

  • 您好,
    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好

    根据您的描述,您所说的跳的是周期性的吗?如果是您的电机随周期性变化会出现具体什么样的异常?您的控制部分能否分享一下?

  • 我描述的跳动,是指电机本体转动过程中突然跳起来一次(我的电机是放置在桌面上的没有完全固定),是周期性的,大概是 2.5s 左右跳动一次;出现跳动的同时我发现 pDabc 的值也发生了跳变,上面的波形就是。

    我使用的是示例代码,只修改过电机参数:

     - mspm0_sdk_2_05_01_00\examples\nortos\LP_MSPM0G3507\motor_control_universal_foc\universal-foc_DRV8316

     

    该电机参数:5对极,相间电阻 3.2欧,相间电感 900uH,KV=196 RPM/V,最大转速4200

    控制模式是无感模式,我按照 《MSPM0 通用 FOC 调优.pdf》 文档设置好了电机参数,

    ```
    pUserInputRegs->systemParams.mtrResist = 1600;
    pUserInputRegs->systemParams.mtrInductance = 450;
    pUserInputRegs->systemParams.mtrBemfConst = 612;
    pUserInputRegs->systemParams.speedLoopKp = 0.01;
    pUserInputRegs->systemParams.speedLoopKi = 0.05;
    pUserInputRegs->systemParams.currLoopKp = 1;
    pUserInputRegs->systemParams.currLoopKi = 500;
    pUserInputRegs->systemParams.maxMotorSpeed = 350;
    pUserInputRegs->systemParams.fluxWeakeningKp = 1.0;
    pUserInputRegs->systemParams.fluxWeakeningKi = 500;
    pUserInputRegs->systemParams.maxMotorPower = 48;

    ```

    然后使用 GUI 设置 speedInput = 10000 启动电机

    ---

    同时我还尝试了禁用闭环(在GUI中设置 closeLoopDis = 1),也会出现这个跳动情况。

  • 您好

    根据您的说明是电机的跳到引发duty的畸形,您有没有尝试更换电机,或者排查是否是物理原因引起的,从duty来看造成这个原因可能是控制不足导致的,但是如果您没有做相关更改,且如您所说是电机跳动造成的duty的不变化,可能要先排除电机问题在排除控制中的中断或者反馈以及延迟等问题。

  • 你好。具体是  “电机的跳到引发duty的畸形” 还是 ”duty的畸形引发电机的跳动“,这个我无法进行判断,因为我暂时没有设备来抓取这两个现象的先后顺序。只能说这个两个现象是有关联的。

  • 您好

    我能理解您的疑虑,所以我的建议优先考虑电机,通过替换或者是配查异物等物理干扰来作为排查方向,其次从控制排查,方向是相关中断或延迟以及相关反馈进行排查。

  • 你好。我想我已经找到了代码中的问题。

    为了加快 IQmath 我启用了 MATHACL, 

    然而示例代码中没有做关于 MATHACL 的竞态条件处理,因此位于 

    applicationLowPriorityRun 中的任何关于 _IQ 函数的调用都可能被更高优先级的 FOC_ADC_ISR 中断所打断,出现两个中断同时使用 MATHACL 外设的情况,因此最终如下片段的 invVdcFilt 计算结果出现了错误,这进一步导致 pDabc 出现错误
    临时的解决方法:暂时为 applicationLowPriorityRun 添加临界区保护。在修改完成后,我连续运行了5分钟,电机不再跳动了。波形也暂未发生异常