本帖主要记录脚本的编写和烧录
先简单介绍脚本在 MCE系统中的功能
从截图可知, MCEWizrad 除了设置电机参数,硬件设备和应用参数外,
还可以编写用户脚本,脚本的典型应用是启动过程定制,速度曲线规划,参数配置和特殊故障处理等
电机控制和速度观测器算法是封装在 MCU 中的,芯片工作时MCU 优先执行电机控制和PFC 算法,剩下的空余执行脚本语言
脚本有固定的结构,支持两个独立并行的 task0(1ms)和task1(10ms)任务,前者通过 1ms 的中断进入,后者是空余时间执行;task0 的优先级较高
开发脚本需要通过 MCEWizard或其他文档编辑器编写并保存为 .mcs 文件,配置使能 ADC 和GPIO,编写脚本后编译可生成 .ldf文件
ldf 文件包含有 task0 和task1 脚本指令总数和全局变量列表,两个task 之间的信息交互正是通过这些全局变量运行的
下边结合官方的例程序和文档,学习脚本编写
安装 MCEWizard 后,在 PC 的文档处会生成如下的文件:
另外官方有一份中文教程
Infineon-AN2018-27_How_to_Use_iMOTION_Script_Language-AN-v01_00-CN
先从最简单的 GPIO_Toggle 开始
参照官方对 IMOTION2GO 的参数设置,重新配置一份新的 txt 文件;如果直接使用default 最后生成 ldf 的选项是灰色不可操作的
一路next 和填写数据,进入编写脚本选项,将 GPIO7 选为 ouput , 然后选择 Script Coding 进入脚本编写界面,加入如下代码:
#SET SCRIPT_USER_VERSION (1.00) /*Script version value should be 255.255*/
#SET SCRIPT_TASK0_EXECUTION_PERIOD (100) /*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;
/*********************************************************************************************************************/
/*Task0 init function*/
Script_Task0_init()
{
sVar0=0;
}
/******************************************************************************************************************/
/*Task0 script function*/
Script_Task0()
{
sVar0 = sVar0+1;
if(sVar0<10)
{
GPIO7_OUT =0;
}
if((sVar0>10)&&(sVar0<20))
{
GPIO7_OUT =1;
}
if(sVar0>20)
{
sVar0 =0;
}
}
/******************************************************************************************************************/
/*Task1 init function*/
Script_Task1_init()
{
}
/******************************************************************************************************************/
/*Task1 init function*/
Script_Task1()
{
}
设置 task0 的执行周期为 100ms,定义了 sVar0 这个全局变量,1s 令GPIO(LED)输出低电平,1s 输出高电平
脚本属于伪 C 语言,但用起来发现限制挺多的;不支持 else if 的语法,不支持 sVar0++ 写法,也不支持 >= 这类运算
如果执行周期定义为 1ms, sVar0 的判断设置为 1000,闪灯的时间间隔不准,原因未知
可以通过点击 1 引入旧有程序进行修改,点击3 编辑检查是否有语法问题;
检查无误点击 2 可生成 .msc 文件并保存
之后一路 next ,进入文件生成操作界面
Parameters File, 即为之前的硬件配置 .txt 文件
可选项 Script File,为上个步骤编写保存的脚本 .mce文件
MCE Firmware File, 官方软件包提供的固件
Combine File 会在指定位置生成二进制 xxx.ldf文件,这个就是后续用于烧写的文件
烧录阶段,打开软件 MCEDesigner, 通过 ”file“ 打开 软件包里的 .irc文件
点击 ”Tool“ ->"Program" 进入烧写选项
选择导入固件 和 参数
参数即为 txt 文件,导入一次即可;固件为之前 combine 后生成的 ldf 文件,按 "Start" 后开始烧录
等待烧录完成
完成后会提示是否需要更新参数,这里没有修改 irc,选择 否 即可
初次烧录导入固件和 txt文件,后续若硬件无修改,选择导入脚本文件即可
LED 灯已按 1s 的时间闪烁 ,至此点灯程序完成
本帖最后由 我的学号 于 2023-1-24 11:07 编辑