实时仿真案例分享(一)丨自定义电机FPGA实时仿真

首页    经典案例    实时仿真案例分享(一)丨自定义电机FPGA实时仿真
写在前面
 
 

在实际的电力电子实时仿真应用中,用户会遇到各种各样的仿真问题,一时不知道是什么原因造成的,森木磊石会从开发者的角度,来给大家分享一些实际系统调试中遇到的案例,并分析造成的原因,帮助大家更好的使用实时仿真技术。

今天给大家带来的是 自定义电机FPGA实时仿真案例分享
 

案例背景

 

用户的应用为高速的BLDC电机控制。电机采用实测数据进行变参建模。为了更准确模拟,离线仿真步长设置为1e-6。

 

 

离线仿真模型

 

在实时仿真模型中,电机模型采用的是自定义电机模型,实现在FPGA 上运行,采用1-D插值的方式进行变参仿真,逆变器模型采用的是EasyGo Power Electronic Solver的LC建模,运行在FPGA 上,仿真步长1us。

 

用户将自己搭建的变参电机模型运行在FPGA上,外部接上DSP控制器进行控制器硬件在环控制。离线验证好的模型在下载至FPGA硬件上运行时,发现仿真出现的结果存在差异。下面具体针对问题看看如何分析。

 

问题1:空载情况下电流不为0

 
 
 

实时仿真过程中,发现Tl为0,或者很小情况下,电流依然很大。这不符合实际情况。

 

 

于是先做同工况下的离线测试,离线仿真发现也遇到同样的问题。所以定位问题在模型建模上。

 

由于采用的是自定义电机模型,电机模型与逆变器之间需要进行模型解耦。分析怀疑是解耦上出现问题。传统电机与电力电子之间的解耦,电机都等效为电流源。而在这次验证的自定义电机模型内,由于建模算法实现的问题,发现这种电流源的解耦方式并不适用,会一开始就有一个不小的电流值,所以考虑换成电压源串联电机阻抗的解耦方式。

 

 

修改后离线验证空载下电流已为0,同样更改实时模型后,实时仿真结果验证也正确了,问题解决。

 

 

结论:没有固定的解耦方式,根据实际建模情况选择最合适的解耦方式,能够更好更准确的模拟实际情况

 

问题2:更改工况下仿真结果差距较大

 
 
 

我们先将仿真结果进行问题重现。

 

Simulink仿真结果:

 

 

而同样的设置,在森木磊石PPEC-HIL的仿真下,结果差别很大:

 

 

先分析离线仿真和实时仿真可能存在的区别。

 

1、离散化方式不同

离线仿真中一般默认选的是Tustin,而FPGA实时仿真中采用的是Backward Euler的方式,所以将离散化方式改成Backward Euler的方式,发现离线结果变化不大。排除掉离散化方式造成的结果不一致的原因。

 

 

2、建模方式不同

离线仿真采用的是阻抗二值法建模,而FPGA上电力电子开关的仿真采用的是LC建模,参数为Gs。Gs的设定与运行的工况就会有关系了。通常比较合理的Gs值为(电流有效值/电压有效值),在上一个实时仿真上一个工况下,电流很小的情况下,Gs设为了0.1。当更改了工况后,此时看到电流幅值为140-148左右,而EMF 此时幅值为11.8左右。所以还选用Gs为0.1明显已经不太适用了。通过估算,Gs=12比较合适。我们进行验证:

 

 

效果有了明显改善,EMF、电机电流、Te的数值基本一致了,有一点完全在接受范围内的误差,问题解决。但发现新问题,转速大小比Simulink结果还是有较大的差距(56150 RPM和51550 RPM),误差在8%左右,不容忽视。

 

结论:LC开关建模下,不同工况下Gs的选取可能存在较大差异,实时的修改Gs值能够更好的模拟暂态特性

 

问题3:转速误差问题

 
 
 

上一个问题分析过程中发现新的问题,转速误差过大。因为离线仿真计算都是双精度的数值计算,而在FPGA上的计算有数值精度的问题,所以并不会完全一致,所以是存在一定的可接受误差的。

 

为了找到误差产生的原因,我们进行模型单元测试,直接设定转速为50000转,并只保留Te,把其他影响转速的值都先去掉,设为0。

 

 

这样运行0.5s看结果,simulink的EMF和电机电流:

 

 

森木磊石PPEC-HIL仿真的EMF和电机电流:

 

 

可以看到,EMF基本是一致的,电机电流略有不同,可能是数值精度影响,但这基本在可接受范围内。

 

Simulink仿真的Te和对Te*(1/J)积分的结果:

 

 

森木磊石PPEC-HIL仿真结果的Te和对Te*(1/J)积分的结果:

 

 

所以分析这种情况:虽然Te也在一个很小的误差范围内,但是通过乘以了 (1/J=5.848e6)这个很大的数放大误差了之后,再把通过积分把误差累加了起来导致速度的不一致。

 

做一下误差累加的离线验证,在转矩Te后加上一个0.001的误差,然后仿真0.5s,可以看到误差随着仿真的时间增长不断累计变大,0.5s的误差就放大到了2924。证实确实是由于J值不是很合理,导致小误差被积分放大,实际控制的时候就存在了一个固定误差。可以合理调整J值,会得到较好的结果。

 

 

结论:合理的参数设置能解决一些由于极小误差累积出的静态误差。

 
2022年3月28日 10:48
浏览量:0
收藏