本篇主要是对 infineon imotion 电机控制方案的记录
在电机套件上运行 imotion,有三个软件需要下载,分别是:
MCEWizard 工具:借助它可以配置开发板信息及电机参数,生成 txt,ldf, map 等文件
MCEDesigner 工具:借助它进行脚本编写和文件烧录,实时改变参数及状态跟踪
IMOTION2GO 的软件包:官方例程有参考价值,出错时可以刷回官方固件
除了INFINEON 自家的IDE,也支持MADK(keil)开发,不是本次测评的重点,略过
以上的文件都可在 INFINEON 官网注册后下载,前两个的地址:
套件软件包下载地址:
下载后一路 next 安装,没啥大问题
接下来结合例程了解MCEWizard 的配置:
双击打开 MCEWizard 快捷方式,在 ”文件“ 处选择解压缩后的 2GO 软件包里的 ”iMOTION2go190904-Neweco2.mc2“
如果硬件无改动,默认左侧的 default setting,next 即可;如果有改动,选择右侧菜单进行修改
显示基本信息,右下角显示使用了 74% 的MCU 资源
next 之后是关于电机参数和启动方式的14 个问题
第一,电机名字,这个随意,要求是至少一个不带空格或 TAB 的单词
第二,电机额定有效电流,需要将功率变换器的电流,频率和温度保护考虑在内
第三,电机极对数,本次测评是 8 极对
第四,电机定子阻抗
第五,电机每相 q轴 阻抗
第六, 电机每相 D轴 阻抗
第七,电机反电动势常数,一般铭牌有标记;或则通过测量线-线间的电压转换为线-中心电压;如果测量的是 BLDC 电机,注意有效值的计算方式有差别
第八,电机最高转速;如果数值超过厂家的设计可能会影响电机安全
第九,最小运行速度;为斜率运行时电机的初始速度;设置过低电机运行不可靠;
如果使用磁链估算,可以将最小速度设置为额定速度的 5% 到 10%
第十,电机加减速斜率,加减速只能保持同样数值?
第十一,开环斜率,启动阶段时的速度斜率,设置为 0 时将关闭开环启动
第十二,Parking 时间,开环启动前的定位时间,设置为0 将跳过该阶段;需要注意大负载大摩擦条件下该功能可能无效
第十三,低速阈值,设置低速限制和低速阈值,将会在这两者间生成线性增加的电流限制值;这将有利于低速时的平滑启动
之后是IC 的ADC PIN 和GPIO 设置
这里用到了检测速度调节信号的ADC, 和控制LED 的GPIO7
电阻采样设置,UART 的通信,PWM 频率等,以及GK 信号保护,因使用了模板,此处不需设置
点击 "Script Coding", 脚本内容如下:
#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;
}
}
脚本定义了4 个函数,分别是 task0 和 task1 的初始化,1ms执行1次的task0 和 10ms 执行一次的 task1
根据注释理解,每次进入task0 查询ADC 读取的速度值,每隔 5s 改变一次速度的方向;task1 将LED 状态灯和电机转速联立
之后是对已设置内容的确认,以及设置调节器,PWM 控制方式,ADC 采样方式,出错检查等内容
之后选择 编译 ,无误可生成脚本,选择导出生成给 MCEDesigner 使用的 txt 文件
自此 MCEWizard 的设置完成
本帖最后由 我的学号 于 2023-1-23 19:02 编辑