[原创] 英飞凌电机套件 EVAL-IMOTION2GO 学习笔记二

我的学号   2023-1-23 15:18 楼主

本篇主要是对 infineon imotion 电机控制方案的记录

在电机套件上运行 imotion,有三个软件需要下载,分别是:

MCEWizard 工具:借助它可以配置开发板信息及电机参数,生成 txt,ldf, map 等文件

MCEDesigner 工具:借助它进行脚本编写和文件烧录,实时改变参数及状态跟踪

IMOTION2GO 的软件包:官方例程有参考价值,出错时可以刷回官方固件

除了INFINEON 自家的IDE,也支持MADK(keil)开发,不是本次测评的重点,略过

 

以上的文件都可在 INFINEON 官网注册后下载,前两个的地址:

https://www.infineon.com/cms/cn/product/power/motor-control-ics/imotion-integrated/?tab=~%27all#!designsupport

套件软件包下载地址:

https://www.infineon.com/cms/cn/product/evaluation-boards/eval-imotion2go/?tab=~%27all#!designsupport

下载后一路 next 安装,没啥大问题

接下来结合例程了解MCEWizard 的配置:

 

双击打开 MCEWizard 快捷方式,在 ”文件“ 处选择解压缩后的 2GO 软件包里的 ”iMOTION2go190904-Neweco2.mc2“

image.png

 

如果硬件无改动,默认左侧的 default setting,next 即可;如果有改动,选择右侧菜单进行修改

image.png

 

显示基本信息,右下角显示使用了 74% 的MCU 资源

image.png  

 next 之后是关于电机参数和启动方式的14 个问题

第一,电机名字,这个随意,要求是至少一个不带空格或 TAB 的单词

image.png

 

第二,电机额定有效电流,需要将功率变换器的电流,频率和温度保护考虑在内

image.png

 

第三,电机极对数,本次测评是 8 极对

image.png

 

第四,电机定子阻抗

image.png

 

第五,电机每相 q轴 阻抗

image.png

 

第六, 电机每相 D轴 阻抗

image.png  

 第七,电机反电动势常数,一般铭牌有标记;或则通过测量线-线间的电压转换为线-中心电压;如果测量的是 BLDC 电机,注意有效值的计算方式有差别

image.png

 

第八,电机最高转速;如果数值超过厂家的设计可能会影响电机安全

image.png

 

第九,最小运行速度;为斜率运行时电机的初始速度;设置过低电机运行不可靠;

如果使用磁链估算,可以将最小速度设置为额定速度的 5% 到 10%

image.png

 

第十,电机加减速斜率,加减速只能保持同样数值?

image.png

 

 第十一,开环斜率,启动阶段时的速度斜率,设置为 0 时将关闭开环启动

image.png

 

第十二,Parking 时间,开环启动前的定位时间,设置为0 将跳过该阶段;需要注意大负载大摩擦条件下该功能可能无效

image.png

 

 第十三,低速阈值,设置低速限制和低速阈值,将会在这两者间生成线性增加的电流限制值;这将有利于低速时的平滑启动

image.png  

第十四,低速电流限制值;同上
image.png  

之后是IC 的ADC PIN 和GPIO 设置

image.png 这里用到了检测速度调节信号的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 采样方式,出错检查等内容

image.png

 

之后选择 编译 ,无误可生成脚本,选择导出生成给 MCEDesigner 使用的 txt 文件

image.png  

自此 MCEWizard 的设置完成

 

 

本帖最后由 我的学号 于 2023-1-23 19:02 编辑
君应有语,渺万里层云,千山暮雪,知向谁边?

回复评论 (2)

这个英飞凌电机套件 EVAL-IMOTION2GO的 学习,搞定这三个软件下载安装是很重要的步骤

点赞  2023-1-24 09:11
软件设置很详细,可以参考学习,感谢分享,电机驱动这方面软件硬件真的不太理解,有点难!应该怎么学习呀!
点赞  2023-2-9 00:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复