EVH1000
【电机控制技术帖】
电机控制软件开发
电动车千人会
从事电机软件开发已经半年多了,从刚开始一无所知到现在的小有成就,现在想把实践经验进行总结,分享给各位奋战在电机控制路上,或者想转型为电机控制的工友们学习借鉴。
看了知乎上大部分关于电机控制或者电机软件的帖子,要么关注于FOC/SVPWM,要么关注于Autosar,但是这俩个东西其实已经是非常成熟的东西,而且在实践中能体现的核心价值并不多,真正的产品开发还是面向应用和适配,下面我将从实际软件开发的角度给出一个比较系统角度,分析一下实际产品应用过程中电机控制软件开发技术。
首先明确电机控制,主要是三条主线,一是扭矩流,二是能量流,三是热量流。而这三条横向的主线,都要包括信号输入,功能处理和信号输出三个纵向的节点。
因此,我们建立的第一个宏观的电机控制架构模型,就是三纵三横,纵向的三个节点,横向的三个流向。
站在整车的角度,电机控制系统不是一个很复杂的东西,只需要执行命令就可以了,我们也清楚,电机控制的核心就是发波,也就是把一个扭矩命令根据占空比调制算法生成三相交流波。但是其实在电机控制供应商的角度,这里边有很多工作要做,这也是整车厂和电机供应商的冲突点所在。
1、信号的输入和输出
(纵向节点一、三)
信号的输入、输出是应用开发最基本的工作,如果不做这项工作,MCU软件无法和VCU或者BMS进行通讯,因而也无法得到状态切换、扭矩、冷却温度等关键信号,故也电机也不会工作。
这一项工作开发的核心,其实就是CAN矩阵的实现,如果不懂CAN矩阵,就去百度一下再读下去。每个整车厂的CAN矩阵都不一样,不知道未来会不会标准化,这样可以减少大量的重复工作。但是当下每个主机厂、甚至单一主机厂的不同项目都是不一样的,不过对于MCU而言,核心的输入就是扭矩请求、模式请求、冷却液温度、冷却水泵开度、车速、轮速、BMS主负继电器等;而核心的输出包括实际扭矩、实际模式、故障等级、IGBT温度、定子温度、母线电压等。
1.1
应用层信号处理
应用层对这些信号要进行处理,从底层拿到解析好的信号后,比如底层解析出来是100Nm,你需要把这个扭矩值传到rte上,内部的功能模块会使用这个扭矩值,不过很多人可能会问是不是就是转发一下,可以这么理解吧,不过你也要转发一下信号的质量,包括底层会解析出来这个值是有效还是无效,对于内部功能模块而言,一旦信号无效,它们就会走一种安全模式。对于输出而言,反之亦然。
1.2
底层信号处理
这里其实就是我们经常提高的COM堆栈,往上介绍这些东西原理的资料很多,但是其实在真正应用的过程中那些东西都不太会用到,不过我们要掌握主线就是,对于信号输入,底层软件会从CAN收发器的寄存器中,获取每一帧信号,然后经过分解,一方面去校验CRC、Rolling Counter,另一方面去把这一帧的每个信号识别出来,传送给应用层进行信号使用,对于信号输出,反之亦然。
具体在开发过程中也很流水作业,根据CAN矩阵生成dbc文件,直接导入Autosar工具,就会生成响应的代码。
2、核心功能处理(纵向节点二)
2.1
上下电状态管理(能量流)
这也被称为是中央状态机,是VCU控制电机的核心接口元件。这里要提到是逆变器有个电容,要工作,必须先进行电容预充,从而给母线提供稳定的电压,而电机停车后,必须把高压下了,不然就会有触电风险。因此这里的状态管理,核心就是上下电管理,上电过程包括:初始化、预充、待机、扭矩模式;而下电过程则是:扭矩模式/待机/预充、都可以直接进入放电状态、放完高压后,进入下电状态,期间要进行一些数据的保存,写入NvRAM。
2.2
扭矩模型(扭矩流)
扭矩模型其实有三部分,第一部分则是要根据温度、电压、电流、等信号要对扭矩进行限制、第二部分是根据拖曳扭矩加上需求扭矩,计算出一个电机要发出的总扭矩,第三部分才是网上有很多的FOC/SVPWM实现对波形的调制。可以看出FOC/SVPWM只是电机控制的很小的一部分,但是它是最核心的部分,同时也已经玩的烂大街了。
2.3
热模型(热量流)
这里主要就是计算IGBT结温,IGBT表面温度传感器,但是内部的温度是其不损害的关键指标,因此要根据结温模型对IGBT温度进行计算。这个模型比较复杂,大家可以去搜搜其他帖子,这里就不再赘述了。
此外还有两个NTC温度传感器用来策略定子温度,比较简单,在IoAbHw配置一下就好了;
还有一个转子模型,这个需要去根据温度模型去估计的,网上也有相关资料。没有的话我也可以写一篇。
2.4
主动放电
也就是前面提到的逆变器电容,休眠前要通过电阻把这部分的存在电容的电荷以热量的形式消耗掉,从而使得控制器能够安全休眠。一般这里的主动放电有专门的芯片和电路进行处理,控制软件只需要发送请求放电的命令即可,主动放电的芯片和电路就能够执行主动放电的命令。
2.5
安全路径
也就是关管。有两种方式,一是把上下桥全部打开,二是只导通上桥或者下桥,一般是低转速的时候反向电动势较少,上下桥IGBT全部打开,不会有铜损产生,而第二种则是在高转速的时候,如果IGBT保持打开的话,就有可能被比较高的反向电动势击穿,因此要和电机形成一个回路,从而实现通过铜耗热量把这部分电荷耗散掉。
2.6
故障诊断
对于应用开发而言,故障诊断的核心就是去制作故障矩阵。
而故障矩阵的核心,就是定义故障等级,不同的故障等级对应不同的响应模式。一般而言,有如下几种故障。
1级:只上报故障;比如通讯信号延迟。
2级:限制扭矩;比如定子温度变高。
3级:不再输出扭矩,逆变器和电机形成回路,停止不下高压。
4级:不再输出扭矩,逆变器和电机形成回路,停止下高压。比如IGBT温度超高。
5级:碰撞故障,下电不可恢复,必须用专用工具清除。
实际开发过程中,每家公司都会有一个基础的故障矩阵,拿着这张故障矩阵,去适配客户比较关注的故障码即可。你可能还有做一下逻辑,往CAN上上报故障识别编码(如报出多个故障,你需要滚动发送)和故障等级(就是上面提到的)。
3.非核心功能处理
3.1
单踏板
这个东西嘛,就是VCU先给MCU发送负扭矩,车速降低到一定程度时,MCU进入转速模式,逐渐停下来。
3.2
主动减震
识别到轮速抖动,利用PI技术反向调节扭矩进行抖动消除。
3.3
主动加热
降低电机效率,从而能够加热水回路。
3.4
坡道辅助
在坡道上利用转速模式使得电机停下来,主要也是PI控制。
总的来看,电机控制软件开发也就是上面几部分了,主要还是集中于应用层的功能开发,至于底层软件,比如IoHwAb,Mcal,CDD等,对于实际的应用开发来说,确实用的比较少,可能也就是全新开发一款控制器或者更新PCBA板子上的某个芯片时,会开发一下底层,相关资料也可以参考一下。
根据我多年的工作经验,在软件领域,中国汽车工业的核心力量还是应该投入到控制策略开发上来。这篇帖子各位工友可以先看看,如果对哪一块比较感兴趣的话我可以着重以图文并茂的形式写写,以便各位能够不断提升自己,突破自己,从而带动整个产业的发展和进步。
来源已授权:
【电机控制技术帖】电机控制软件开发
小皮的文章 - 知乎
https://zhuanlan.zhihu.com/p/659048380
扫码关注我们
欢迎加入新能源汽车产业交流群
关注公众号后台回复关键词“社群”
即可获取入群方式