X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
电机驱动控制(Motor Control)
[原创] 【iMOTION2go套件】2. MCEWizard工具使用+控制脚本分析
hehung
2023-1-7 13:11
楼主
# 前言 本文将实现使用MCEWizard来配置iMOTION2go的参数以及运行程序。 上一篇文章讲解了到infineon官方网站下载了配置工具,其中包括了MCEWizard Configuration File v1.0,这里面有我们需要的配置文件。 # iMOTION2go工具包 iMOTION2go的User Manual提供的链接已经变成404了,不可访问。但是我在
@nmg
提供的网址中找到了iMOTION2go的软件包,可以直接使用MCEWizard以及MCEDesigner打开进行调试使用。 网址: [https://www.infineon.com/cms/cn/product/evaluation-boards/eval-imotion2go/](https://www.infineon.com/cms/cn/product/evaluation-boards/eval-imotion2go/) 也可以直接点击下面的链接下载软件包: [点击链接下载iMOTION2go的软件包](https://www.infineon.com/dgdl/Infineon-MCE_iMOTION2Go-Software-v01_00-EN.zip?fileId=5546d462719b59230171b06c1c704813) > 该工具包下载之后解压,关于工具包里面的文件说明,可以参考官方文档《Infineon-EVAL-iMOTION2GO-UserManual-v01_01-EN》 6 Getting started with iMOTION2go。 > 我这里在对压缩包中的文件进行详细说明:
# 配置iMOTION2go参数 (1). 打开工具WCEWizard->Open System Configuration File, 选择mc2配置文件打开。
(2). 打开之后选择默认默认硬件配置或者用户自定义配置,第一次使用先选择默认配置。
(3). 点击下拉框,通过回答问题的方式对电机配置参数进行设置,我们这里不需要修改,按照默认的来就行了,很多参数我目前也不了解是什么意思,目前知识熟悉这个流程,可以一个一个的看,我就不再赘述了。
后面还有几个配置,分别是: - Script Edit Page:脚本编辑页面,可以编辑使用的控制引脚以及ADC引脚,也可以编辑使用的脚本。 - Advanced Mode: 高级设置,主要用于设置系统参数以及电机参数信息,也是前面的配置信息的汇总。 - Verify & Save Page: 验证和保存页面,该页面用于计算参数以及编译标本代码,如果编译没有问题,显示如下,有问题需要修改参数或者脚本。
- Combine Files Page;合并文件页面 这几个页面也可以通过菜单栏"Jump To Page"进入。 ## 保存参数文件 在Verify & Save Page页面,编译好了脚本会自动保存在mc2文件所有目录,即ldf文件,参数文件可以自己选择保存的目录,点击‘Export to MCEDesigner File(.txt)’文件导出参数到选择的目录。 # 下载脚本 下载脚本需要使用工具MCEDesigner,流程如下: (1). 将iMOTIONgo USB插到电脑上; (2). 打开WCEDesigner工具,点击菜单栏File->Open,选择irc工程。
(3). 选择菜单栏Tools->Programmer,打开下载窗口,选择参数以及ldf控制脚本代码下载,如下图:
> 默认的代码就是上电隔一段时间自动旋转的代码 # 控制脚本代码分析 > 控制脚本如何编辑可以参考MCEWizard的User Manual第四章节 iMOTION Script。 **关于教程中的部分本文不在赘述,本文只分析官方默认脚本的实现逻辑** 通过教程可以,可以到官方的Document中找脚本的语法教程,原文如下: > Refer to Application Note „How to Use iMOTION™ Script Language” on www.infineon.com/imotion (->Documents) website 可以自行到官网去下载教程文档,我觉[How to Use iMOTION™ Script Language (chinese) ](https://www.infineon.com/dgdl/Infineon-AN2018-27_How_to_Use_iMOTION_Script_Language-AN-v01_00-CN.pdf?fileId=5546d46267c74c9a016831b03547628f) 该文档还是很有用的,而且是中文的,非常方便学习,主要介绍了脚本工具的使用。 ## 脚本语言概述 查看《How_to_Use_iMOTION_Script_Language》1 脚本语言概述。 > 我们可以知道脚本语言是利用CPU空闲时间来执行的; > 并且脚本语言支持两个任务,Task0和Task1,Task0最短周期为1ms,Task1最短周期为10ms,用户可以执行延长执行时间,且Task0的优先级高于Task1; ## 默认脚本代码分析 源代码如下: ```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 Task0 step, This defines number of lines to be executed every 1mS*/ #SET SCRIPT_TASK1_EXECUTION_STEP (10) /* Script Task1 step, This defines number of lines to be executed every 10mS*/ */ /*********************************************************************************************************************/ int sVar0,led; /*********************************************************************************************************************/ /*Task0 init function*/ Script_Task0_init() { int sSVar0,sSVar1,sSVar2,volt,limit; sSVar0 = RunTimeCounter; sSVar2=0; limit=16000; } /******************************************************************************************************************/ /*Task0 script function*/ Script_Task0() { if((RunTimeCounter-sSVar0)>5000) //Every 5S { sSVar0 =RunTimeCounter; sSVar1=1; } if (ADC_Result0>100) /*(AIN0)*/ { volt=ADC_Result0<<2; //max=4096X4=16383, min=100x4=400 if (volt>limit) { volt=limit; } if (sSVar1==1) /* RunTimeCounter */ { if (Command == 1) { Command=0; } else { if (sSVar2==1) //switch direction { TargetSpeed = volt; sSVar2=0; } else { TargetSpeed = (-1)*volt; sSVar2=1; } Command=1; } sSVar1=0; } } else { Command=0; } } /******************************************************************************************************************/ /*Task1 init function*/ Script_Task1_init() { int sBVar0,sBVar1; sBVar0=0; GPIO7_OUT=1; } /******************************************************************************************************************/ /*Task1 script function*/ Script_Task1() { if (MotorSpeed==0) { GPIO7_OUT=1; } led= GPIO7_OUT; sVar0=sBVar0; if(sBVar0<16000) { if (MotorSpeed>0) { sBVar0=sBVar0+(MotorSpeed>>2); } else { sBVar0=sBVar0-(MotorSpeed>>2); } } else { sBVar0=0; GPIO7_OUT=~GPIO7_OUT; led=GPIO7_OUT; } } ``` 从上述脚本语言可以知道,脚本语言采用了一种类C语言的语法结构,这样就便于理解了。 ## 语法分析 ### 1. SET语法 ```C #SET 该语法使用来设置宏定义参数的,可以修改一些已定义的参数信息 ``` 下面说明宏定义的参数的具体含义: - SCRIPT_USER_VERSION: 版本信息 - SCRIPT_TASK0_EXECUTION_PERIOD: 设置Task0的执行周期,单位为ms。Task0 的最小周期为 1 ms; - SCRIPT_TASK1_EXECUTION_PERIOD: 设置Task1的执行周期,单位为ms,Task1 的最小周期为 10 ms; - SCRIPT_START_COMMAND:Task运行命令配置,bit0表示Task0,bit1表示Task1,设置为1表示初始化之后就可以运行命令;设置为0表示初始化之后不运行命令; - SCRIPT_TASK0_EXECUTION_STEP:任务在每个Task0的执行周期执行的代码条数; - SCRIPT_TASK0_EXECUTION_STEP:任务在每个Task1的执行周期执行的代码条数。 ### 2. 全局变量 ```C int sVar0,led; ``` 定义了两个全局变量,后文介绍这两个全局变量的作用。 > 全局变量是可以被Task0以及Task1访问的,Task0和Task1的局部变量不能被相互访问。 ### 3. Task0初始化 ```C Script_Task0_init() { int sSVar0,sSVar1,sSVar2,volt,limit; sSVar0 = RunTimeCounter; sSVar2=0; limit=16000; } ``` RunTimeCounter变量是MCE寄存器,用于标记Task0以及Task1的执行时间,RunTimeCounter 是一个每毫秒累加的计时器,它可以由脚本代码直接读取。 读取当前运行时间,记录到变量sSVar0中。 ### 4. Task0任务脚本分析 完整代码详见Script_Task0()函数 ```C if((RunTimeCounter-sSVar0)>5000) //Every 5S { sSVar0 =RunTimeCounter; sSVar1=1; } ``` RunTimeCounter-sSVar0: 比较当前运行时间减去记录的时间是否大于5000ms,更新当前是啊金到sSVar0中并且值为sSVar1变量用于后面的执行。 ```C if (ADC_Result0>100) /*(AIN0)*/ { volt=ADC_Result0<<2; //max=4096X4=16383, min=100x4=400 if (volt>limit) { volt=limit; } if (sSVar1==1) /* RunTimeCounter */ { if (Command == 1) { Command=0; } else { if (sSVar2==1) //switch direction { TargetSpeed = volt; sSVar2=0; } else { TargetSpeed = (-1)*volt; sSVar2=1; } Command=1; } sSVar1=0; } } else { Command=0; } ``` 上述代码中需要着重说明一下变量ADC_Result0,Command以及TargetSpeed。 > ADC_Result0的解释开一参考《How to Use iMOTION™ Script Language (chinese)》2.1.1以及2.1.2; > AIN0 脚被用来作为速度选择电路的接口。使能AIN0以后,此ADC每10ms采样一次,结果可以通过读取变量ADC_Result0得到。 > Command是命令控制寄存器,启动/停止电机的操作可以通过电机寄存器 Command 置 1 或者清零来实现。 > TargetSpeed是目标速度寄存器,可以直接使用,即电机控制的最终速度。 上述代码主要是对ADC采样,判断ADC采样值是否大于设置的限制limit(16000),超过限制,则设置Volt变量的最大值为limit,ADC采样的是板子上的电位计的电压,可以通过狮子螺丝刀调节。 之后判断sSVar1是否为1,即5s的时候是否已经满足(没5秒钟执行下述代码),满足则执行下面的代码: 1. 改变command变量,如果是0,则变为1,如果是1,则变为0; 2. 如果command为0,则执行控制电机速度调节逻辑(即设置TargetSpeed的值),变量sSVar2为电机方向控制变量,每一次调节TargetSpeed的时候都需要切换一次方向,正向目标速度为volt,反向目标速度为-volt。 3. 设置好了TargetSpeed之后,电机就会开始启动向目标转速逼近了。 ### 5. Task1初始化 ```C Script_Task1_init() { int sBVar0,sBVar1; sBVar0=0; GPIO7_OUT=1; } ``` 定义变量以及初始化GPIO7_OUT引脚为高电平。 > GPIO7为板载LED2控制引脚,高电平为亮,低电平为灭
### 6. Task1任务脚本分析 ```C if (MotorSpeed==0) { GPIO7_OUT=1; } ``` > MotorSpeed为电机速度,可以通过该寄存器你知道当前电机转速。 上述代码为当电机速度不为0的时候设置LED亮。 ```C led= GPIO7_OUT; sVar0=sBVar0; if(sBVar0<16000) { if (MotorSpeed>0) { sBVar0=sBVar0+(MotorSpeed>>2); } else { sBVar0=sBVar0-(MotorSpeed>>2); } } else { sBVar0=0; GPIO7_OUT=~GPIO7_OUT; led=GPIO7_OUT; } ``` led用于记录当前LED2的控制引脚电平; sVar用来记录当前电机转速的增量。 sBVar0是用来记录电机转速的增量的,当sBVar0大于等于16000的时候,就让GPIO7_OUT反转,即LED2闪烁。 而sBVar0为一个累加值,当电机速度越快的时候就累加的越快,会导致LED2的闪烁越频繁,有点没明白这样设计逻辑的用途。 ## 脚本编辑规范与注意事项 参考 4 脚本代码规范和限制。 自己编写脚本之前一定要了解这些限制,后面的遇到问题不知道是什么原因。
# 后记 由于本人也是第一次使用infineon的这些电机控制工具以及脚本代码,分析中难免会存在错误或者是遗漏,欢迎小伙伴们指正。
本帖最后由 hehung 于 2023-1-7 13:15 编辑
点赞
(1)
回复评论 (2)
沙发
Jacktang
脚本语言用类C语言的语法结构,有时也许能看得懂
点赞
2023-1-8 09:11
板凳
vic-wang
我的驱动板是IM535没有相应的配置文件,那就要自己creat吗
点赞
2024-10-9 16:50
最新活动
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
Follow me第二季第3期来啦!与得捷一起解锁高性能开发板【EK-RA6M5】超能力!
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
随便看看
ModelsimSE添加Altera库及简单的功能仿真
【求助】这个电感的型号是什么意思?
[A-电流信号检测装置] 陕西省一等奖_A题
请问一个CAN的问题
转贴】铅酸蓄电池修复工艺
关于CE6.0内核启动问题
晒WEBENCH设计的过程+汽车LED照明4000流明照明方案
关于ucos系统下STM32看门狗的使用问题!
柴油机与方向机
28335IO口存在一个bug,各位有遇到下文的情况不?
RL78/G13资料分享
毕业设计----高精度测温电路设计与实现
PB定制系统时候的错误
基于SoPC的步进电机多轴控制器
【MXCHIP Open1081】关于SyStick
对数周期天线
[hanker M4开发板试用]我的助手,我的虚拟串口 ——stellaris USB CDC应用
Quartus II时序优化策略
【PSoC4心得】运放来啦!
电源层和地层的分割
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复