本帖最后由 hehung 于 2023-2-5 10:33 编辑
# 过往分享
[【iMOTION2go套件】1. 开箱](https://bbs.eeworld.com.cn/thread-1229533-1-1.html)
[【iMOTION2go套件】2. MCEWizard工具使用+控制脚本分析](https://bbs.eeworld.com.cn/thread-1230537-1-1.html)
[【iMOTION2go套件】3. MCEDesigner工具使用](https://bbs.eeworld.com.cn/thread-1231098-1-1.html)
[【iMOTION2go套件】4. 控制脚本编写之LED控制](https://bbs.eeworld.com.cn/thread-1231101-1-1.html)
[【iMOTION2go套件】5. 更新脚本导致版本不兼容问题绕过方法](https://bbs.eeworld.com.cn/thread-1232011-1-1.html)
# 前言
年前分享的帖子[【iMOTION2go套件】3. MCEDesigner工具使用](https://bbs.eeworld.com.cn/thread-1231098-1-1.html)详细讲解了如何使用MCEDesigner以及MCEDesigner只能够各个模块的功能。本文将以实操方式,使用MCEDesigner来操作电机,控制电机顺时针/逆时针转动。
> 本文将实现MCEDesigner控制电机顺时针转动5秒,然后停止一秒,在逆时针转动5秒,然后停止。
# 实现过程
> 如果需要使用MCEDesigner来控制电机进行标定调试,则我们需要一个空的脚本,也就是任何操作都不做的脚本,不然脚本控制电机的过程与MCEDesigner控制的功能会冲突。
## 空脚本
使用MCEWizard导入如下空脚本,编译生成ldf文件,并使用MCUDesigner下载,过程不再赘述,可以参考之前的帖子内容。
```C
#SET SCRIPT_USER_VERSION (1.00)/*Script version value should be 255.255*/
#SET SCRIPT_TASK0_EXECUTION_PERIOD (50)/*Script execution time for Task0 in mS, maximum value 65535*/
#SET SCRIPT_TASK1_EXECUTION_PERIOD (1)/*Script execution time for Task1 in 10mS, maximum value 65535*/
#SET SCRIPT_START_COMMAND (0x3)/* Start command, Task0 : Bit0, Task1 : Bit1; if bit is set, script executes after init */
#SET SCRIPT_TASK0_EXECUTION_STEP (1)/* Script Task0step, This defines number of lines to be executed every 1mS*/
#SET SCRIPT_TASK1_EXECUTION_STEP (10) /* Script Task1step, This defines number of lines to be executed every 10mS*/
/*********************************************************************************************************************/
int sVar0,led;
/*********************************************************************************************************************/
/*Task0 init function*/
Script_Task0_init()
{
}
/******************************************************************************************************************/
/*Task0 script function*/
Script_Task0()
{
}
/******************************************************************************************************************/
/*Task1 init function*/
Script_Task1_init()
{
}
/******************************************************************************************************************/
/*Task1 script function*/
Script_Task1()
{
}
```
## MCEDesigner控制电机实现过程
1. 打开2-Motor窗口
如下图方式,打开电机控制窗口。
2. 新建应用功能
右键单击User Application Funxtion Definitions,新建一个Application Function ‘MotorControlFunc’。
3. 添加需要被控制的寄存器以及功能
添加方式如下图,右键单击‘MotorControlFunc’,选择需要添加的功能即可。
本例需要添加的寄存器有AngleSelect,CtrlModeSelect,TargetSpeed,Command。
本例还需要添加Delay延时功能。
- AngleSelect:设置选择通量角,即2;
- CtrlModeSelect:设置选择控制方式为速度控制,即2;
- TargetSpeed:设置目标速度(通过验证,无论设置什么值,最终的速度都不会被改变,电机的真实转速应该是由板载的电位计控制的,输出的电压才能真实的改变速度,这也是我的猜测,如果不对,欢迎指正);
- Command:电机动作控制命令;1:则电机转动;0:电机停止。
然后进行如下的设计就可以实现电机顺时针转动5s->停止1s->逆时针转动5秒->停止的功能:
# 如何控制电机顺时针/逆时针转动
其实控制原理很简单,如果需要电机顺时针转动,则设置寄存器TargetSpeed为正值,如果需要电机逆时针转动,则设置寄存器TargetSpeed为负值。
TargetSpeed寄存器最大写入值为16383。控制电机顺时针转动,写入一个比16383小的数就可以了。
如果控制电机逆时针转动也很简单,写一个比0小但是比-16383大的数就可以了,其原理是,16为寄存器的最大值为0xFFFF,最高位为符号位,1就表示负数,想要控制电机逆时针转动,最高位就写1,然后低15为写一个比16383小的数,例如写入0x83E8,就表示-1000。
> 注意:不要直接写负数,实测MCEDesigner自动转换出来的值好像出来不对。
# 试验结果
如下图为实现结果,可以看到先顺时针转动然后逆时针转动,试验成功。
双击‘MotorControlFunc’运行。