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.

[参考译文] TMS320F280041C:MotorControl SDK Lab07初始偏移计算问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1509434/tms320f280041c-motorcontrol-sdk-lab07-initial-offset-calculation-problem

器件型号:TMS320F280041C

工具/软件:

您好! 我的工程基于 MotorControl SDK 5_03 lab07。 在乞讨我打开实验室,以校准传感器的偏移->

            motorVars.flagEnableSys=1;
            motorVars.flagRunIdentAndOnLine=1;
            motorVars.flagMotorIdentified=1;

接下来、我等待估计器进入在线状态、然后停止主循环->

EST_State_e curr_est_state=EST_getState(estHandle);
if(curr_est_state==EST_STATE_ONLINE)
{
    motorVars.flagEnableSys=0;
    motorVars.flagRunIdentAndOnLine=0;
    motorVars.flagMotorIdentified=0;
    StartCalibration=calibration_done;
}

问题是我的程序失败、当我尝试使用 motorVars.flagEnableSys=1旋转电机时收到错误消息;和  
motorVars.flagRunIdentAndOnLine=1;

n`t 我不中断、则程序会使电机正确旋转。  

您能告诉我如何在计算偏移后正确停止程序、以及如何注册它吗?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    您能告诉我如何在计算偏移量后正确地停止程序、以及如何注册它吗?

    您使用自己的板吗? 或支持的 EVM 套件? 如果您使用的是自己的板、请按照实验室用户指南运行 lab02~03、首先验证硬件。

    您可以在 lab01或 lab02中找到上述问题的操作步骤。

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

    好的! 这是我所做的。 我把 lab07的2圈放入兄弟圈

    while(1)
    {
         while(motorVars.flagEnableSys == false)
         {
         }
     
        //
          // loop while the enable system flag is true
          //
          while(motorVars.flagEnableSys == true)
          {
            //lab routine
          }
          
           //
          // disable the PWM
          //
          HAL_disablePWM(halHandle);
    }

    因此、我可以通过设置 motorVars.flagEnableSys=true 和来启动电机       motorVars.flagEnableRunAndIdentify = true。  

    该过程会计算偏移并设置  motorVars.flagEnableOffsetCalc = false、之后电机开始旋转。

    如果我设置  motorVars.flagEnableSys=false、电机将停止并且 UC 退出实验循环并进入等待循环。

    但这一次、当我尝试重新启动电机时、出现故障。 我是否必须以某种方式重置估算器或执行其他操作才能再次旋转电机?

    我有什么问题吗?

    谢谢!

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

    如果您没有更改任何内容、只需运行示例实验即可。

    您是否正在使用自己的电路板? 或支持的 EVM 套件?

    您正在使用什么套件?

    motorVars.flagEnableOffsetCalc = false

    请查看实验用户指南、您不需要更改此标志。

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

    我正在使用自己的板。 运行实验单次触发(只启用标志 motorVars.flagEnableSys=true 和 motorVars.flagEnableRunAndIdentify = true)时、一切正常工作。 但是、如果我停止实验(motorVars.flagEnableSys=false)并尝试重新启动电机(motorVars.flagEnableSys=true)、则会收到故障。  

    如果我设置  motorVars.flagEnableOffsetCalc = false、这不会n`t 更改任何改动、只是电机直接开始旋转而不重新计算偏移。

    我假设某些变量或标志未被清除。 我尝试调用一些初始函数,然后再次进入实验室例程->没有运气...

    有什么建议吗?

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

    问题就来了。 MotorControl SDK 实验似乎并未为多启动编写。 一旦 motorVars.flagEnableSys=1、该过程就会激活主循环和 IRS 计算、但如果 motorVars.flagEnableSys=0、这会中断主循环、但不会n`t 停止 IRS 中的计算。 IRS 中的计算部分仅取决于 motorVars.flagEnableOffsetCalc==false、这是一个问题。 当您通过将  flagEnableSys 设置为0来关闭电机时、IRS 继续计算估算器的值;当您尝试通过将 flagEnableSys 设置为1来重新启用电机时、这会导致问题。 如果电机很小、几乎什么都不发生、我想 估算器速度很快、电机将进入正确状态。 但对于更大的电机、这种说法不正确。 因此,我添加了一个额外的变量来指示程序何时处于旋转循环中:

          __interrupt void mainISR(void)
          {
           
           ....
           if(motorVars.flagEnableOffsetCalc == false && flag_turning==1)
           ....
           }
           

    我添加了一个复位例程、用于在转动循环结束后重置 Clarke 模块、estimator、轨迹控制器等。 目前、它正在正常工作。  

     n`t 导致某些头像的一件事是、在等待循环中、updateGlobalVariables(estHandle)例程缺失、即使转弯处于非活动状态、您也无法看到 IRS 正在计算。  

    如果你建议一个更好的行动方案,我会很高兴。 现在看来这是有效的。 我必须做更多的测试,以绝对肯定!

    谢谢!