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:从InstaSPIN实验室重组环路-需要建议

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/618588/drv8301-69m-kit-restructuring-a-loop-from-instaspin-labs---advice-needed

您好,

我计划将我自己的程序合并到instaSPIN实验室提供的代码中。 我想稍微更改一下主环路结构以实现更好的集成,我需要一个建议来确保它不会导致任何未预测的行为。

让我们来看看实验6a中的一般代码结构:

void main(void)
{<<initialize

all modules>>

while (1){

//正在等待设置启用系统标志
while (!(gMotorVars.Flag_enableSys));

//启用库内部PI。 IQ现在没有参考
Ctrl_setFlag_enableSpeedCtrl(ctrlHandle, false);

//当enable系统标志为true时循环 while (gMotorVars.Flag_enableSys) { <<运行INSTASPIN函数>> } //禁用PWM HAL_DisablePwm (halHandle); //设置默认控制器参数(重置控制以重新识别电机) Ctrl_setParams(ctrlHandle,&gUserParams); gMotorVars.Flag_Run_Identify =假; //设置SpinTAC组件 st_setupVelCtl(stHandle); st_setupVelMove(stHandle); }// While(1)循环结束 }// main()函数结束

我想做的更改包括:

1)删除第一个“while (!(gMotorVars.Flag_enableSys)”,它阻止代码在 Flag_enableSys被清除后继续运行-我猜它只是通过while (1)循环底部的设置说明来阻止代码空闲运行?

2)将“CTRL_setFlag_enableSpeedCtrl(ctrlHandle, false);”移到循环之前(到初始化阶段)-我计划使用Spin-TAC控制器,因此不需要重新启用此控制器

3)将"while (gMotorVars.Flag_enableSys)"循环更改为"if"语句,并将循环外部的所有内容都放置到"else (其他)"部分-它不会产生任何影响(执行第1点操作后),除非存在一些隐藏的'break (中断)语句?

感谢你的帮助。

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

    尊敬的Jakub Klein:

    根据您的问题和我与InstaSPIN开发的项目,我分享了我的想法,以回答您的问题,如下所示:

    1)删除第一个“while (!(gMotorVars.Flag_enableSys)”,它阻止代码在Flag_enableSys被清除后继续运行-我猜它只是通过while (1)循环底部的设置说明来阻止代码空闲运行?

    答:是的,你可以这样做。 或者,如果启用了后台任务,则可以使用此标志来运行该任务,例如:

    //如果enable system标志为true,则运行后台任务
    IF (gMotorVars.Flag_enableSys)
    {
    <<运行后台任务>>
    } 

    2)将“CTRL_setFlag_enableSpeedCtrl(ctrlHandle, false);”移到循环之前(到初始化阶段)-我计划使用Spin-TAC控制器,因此不需要重新启用此控制器。

    答:可以。 如果您不想使用PI速度控制器并将其替换为Spin-TAC控制器,则需要在初始化阶段禁用此标志。

    3)将"while (gMotorVars.Flag_enableSys)"循环更改为"if"语句,并将循环外部的所有内容都放置到"else (其他)"部分-它不会产生任何影响(执行第1点操作后),除非存在一些隐藏的'break (中断)语句?

    答:我是这样做的。 您可以通过查看以下屏幕截图进行验证:

    此致,