目录:
1.前言
2.立功科技的TMS方案介绍
2.1 介绍资料
2.2 简要介绍
3.S32K3_TriMotor评估板测试
3.1 环境搭建
3.2 例程测试
3.3 例程适配
3.4 双核烧录
3.5 测试
最近和一些做汽车水泵/风机的客户交流时,都提到要预研TMS(热管理域控制器)方案。希望使用一个高性能的车规MCU,同时控制三个无刷电机(水泵/风扇)、多个有刷电机(空调风门)和多个步进电机(空调出风口/进气格栅/电子膨胀阀)。
NXP主推的S32K3系列中的双核MCU---S32K324(主频160MHz * 2)能够符合该要求,正好笔者手上有一套立功科技的基于S32K324的TMS方案评估板---S32K3_TriMotor,所以记录下使用的过程,方便申请了该评估板的读者快速上手。
关于立功科技的TMS方案的特点和演示视频,如下两篇文章介绍的比较详细,推荐阅读。
热管理域控制器方案:三电机控制实战
【解决方案】单芯片TMS域控方案,热管理应用新趋势
对立功科技的TMS方案进行下简要介绍。
功能特性:
优势亮点:
立功科技的S32K3_TriMotor有两种配套程序,
使用S32K3_TriMotor对应的免费例程需要准备的环境如下:
推荐使用S32DS 3.5 + RTD 2.0.0,但是笔者在S32DS 3.5已经安装了RTD 3.0.0,如果安装RTD 2.0.0会导致原本基于RTD 3.0.0的工程不可用。所以后文使用S32DS 3.4 + RTD 2.0.0进行演示,S32DS 3.5 + RTD 2.0.0类似。
点击Previous选择S32DS3.4版本。
选择windows版本的安装包并下载。
点击License Keys,在弹出的界面找到激活码并保存好,在安装时会用上。(一个激活码最多使用101台机器)
点击安装包进行安装,安装过程中需要输入激活码时使用前面保存的激活码即可,并选择online激活的方式。
打开S32DS 3.4,选择好workspace,并勾选作为默认工作区。
等待S32DS 3.4检查更新。
更新检查完之后,会弹出可更新以及已安装的组件。勾选S32K3 RTD AUTOSAR 4.4 Version 2.0.0,点击install/update。同时去掉always show的勾选,这样就不会每次打开弹出更新检查的界面。
所有相关的组件都会自动加入更新列表,点击next,再点击finish进行更新。
更新完之后重启下S32DS 3.4,点击Help->S32DS Extensions and Updates
点击Installed,查看已安装的组件是否齐全。
Freemaster 3.2的下载地址如下,https://www.nxp.com/design/software/development-software/freemaster-run-time-debugging-tool:FREEMASTER,选择3.2版本即可(笔者试过2.5版本打开例程的.pmpx文件会有问题)。
将解压后的文件夹复制到S32DS 3.4的workspace,并复制其所在的路径。
打开S32DS 3.4,按下图方式打开例程。
两个工程分别是内核0和内核1的工程,依次选择两个工程并点击Debug Flash,如果工程ok,会在控制台看到编译生成的elf文件。
立功科技提供的免费例程用于驱动三个参数相同的电机,只需要在MCAT界面输入对应的电机参数、电流环参数、速度环参数等,在Output File界面就可以更新/生成工程需要的PMSM_appconfig.h文件。
关于MCAT界面的参数,NXP官网有一份应用笔记AN4642详细介绍如何使用和修改。链接为:https://www.nxp.com/webapp/Download?colCode=AN4642&location=null
关于电机本体参数的测试方法,可以参考NXP官网的AN4680应用笔记,链接为:https://www.nxp.com/webapp/Download?colCode=AN4680&location=null
目前笔者手上有两个参数不同的电机,需要对立功科技提供的例程进行一些适配工作才能正常运转。具体适配工作如下:
结合两个电机M1、M2的参数,使用MCAT工具配置生成对应的文件,分别为M1_PMSM_appconfig.h和M1_PMSM_appconfig.h,并添加到内核0工程下的src/config文件夹下:
然后将M1_PMSM_appconfig.h和M1_PMSM_appconfig.h中的宏定义分别加上M1和M2前缀,方便后续调用。
整个例程中需要用到MCAT生成的参数有如下四个函数,都在mianc.c中定义的:
static tBool CalcOpenLoop(openLoopPospe_t *openLoop, tFloat speedReqRamp);
static void M1_MCAT_Init(motorControl_t *pMC);
static void M2_MCAT_Init(motorControl_t *pMC);
static void M3_MCAT_Init(motorControl_t *pMC);
static tBool CalcOpenLoop(openLoopPospe_t *openLoop, tFloat speedReqRamp)
{
openLoop->wRotEl = speedReqRamp;
openLoop->thRotEl = MLIB_Mul(MLIB_ConvertPU_FLTF32(GFLIB_IntegratorTR_F32(MLIB_ConvertPU_F32FLT(MLIB_Div(speedReqRamp, WEL_MAX)),
&(openLoop->integ))),
FLOAT_PI);
return (true);
}
所以需要修改下CalcOpenLoop函数,同时调用该函数的地方也需要做相应的修改。整个的调用关系如下图:
同时在MCAT初始化函数的最后进行对应电机的WEL_MAX参数赋值以及增加结构体的成员:
static void M1_MCAT_Init(motorControl_t *pMC)
{
......
pMC->MotorParamInof.Wel_Max = M1_WEL_MAX; //增加
}
static void M1_MCAT_Init(motorControl_t *pMC)
{
......
pMC->MotorParamInof.Wel_Max = M2_WEL_MAX; //增加
}
将使用jlink连接PC和demo板,打开j-flash,选择S32K324,如下图。
点击Open data file,选择M0内核的elf文件。
等待M0内核的elf加载完之后,选择Merge data file,选择M1内核的elf文件。
两个elf合并成功会在log窗口有提示,接着点击connect,成功之后按F7烧录即可。
将demo板连接上M1和M2电机,注意代码中的M1,M2电机参数要和实际硬件连接的匹配上,然后按如下步骤进行测试。
关于freemaster详细的操作,可以参考之前的文章:
如果觉得本文对你有用,不妨给个一键三连!!!