MBD_FOC代码生成中涉及到的算法实现

随着汽车电子技术的日益发展,MBD代码生成的方式在车辆控制软件的开发流程中应用日益增多,许多功能逻辑代码都用matlab/simulink来做了;其中不乏一些框架基本固定的代码,比如Foc的控制逻辑(速度环/位置环/电流环),笔者认为这种MBD代码生成的方式其实是不大适合生成速率比较高的代码的,MCU中电机控制的许多程序都是跑在100us的函数里中断执行,所以要求效率比较高,但是mbd生成的代码效率不经过打磨处理往往有些地方很多余,执行效率不大高;所以MBD这种形式更适合去搞VCU或者HCU这种控制频率要求不是特别高的软件。

言归正传,虽然不大适合,但是很多人还是拿模型来生成代码了,归根结低笔者认为可能是来自于电机的仿真模型太多,有人感觉用控制模型来生成代码比较简单,所以就拿来用了;用着用着毛病一大堆就比较难搞。下边罗列一些关于永磁同步电机mbd生成问题,想到哪说哪了,说不完下次继续更。

1.仿真模型->代码生成模型需要做的几件事?

1)模型的离散化,许多仿真模型都没有一个严格的采样频率,但是代码生成就比较严格,需要要求所有的模块都为离散模块,其中有基本的关于直轴交轴电流的滤波,三角函数sin,cos,其中三角函数sin和cos貌似如果直接用系统自带的函数,用的办法是泰勒级数展开,执行效率就很低,替代办法是存一个sin和cos的map,在模型端实现也就是查表模块。因为这个比较简单所以就不在赘述,下边主要说一下滤波器的离散化。

先描述一下foc重点需要的一个滤波器;一阶低通;应用的几个地方比如D轴和Q轴电流的处理,另外还有母线电压Udc的滤波。用一阶低通是为了合理分配算力,然后留给几个PI控制器更多的时间余量。用大白话说一下低通滤波器的离散方式,见下图;

这样离散的模型实现就比较直观了;当前时刻的输出=0.1*当前时刻输入+0.9*上一时刻输出。注意例子中的Ts就是这段代码跑2.的频率,一般的电机控制函数都是集成在了100us的中断函数中。

另外有时候做无感电机会用到带通滤波器;笔者无感做得少了解不多这个建议用matlab自带滤波器设计工具去搞,在命令行输入fadatool貌似。惊喜的是这个设计器能转化滤波器成基础模块,这样对编译很友好。

2.FOC的机构核心PI仿真阶段跟实物有啥不同?

主要就是需要切换离散形式的PI控制器,参数也要调整,reset积分清零接口要做合适,另外PI要做成抗饱和形式的。

第一点,参数要调整主要就是从连续的切到了离散的原因;第二个积分清零接口要甩出来,不然一直会有拉到头的积分值。程序是一直再跑的,一般的做法是通过给驱动芯片信号最后关断mos的行为。然后电机控制的pi积分重置。最后就是要用抗饱和。本质上很多算法都是直接最后调Ud和Uq的电压了,然后再去算pwm的占空比。pwm是有控制上限的。也就是0-100%。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值