1 前言
因为不管在Matlab中搞得多么花里胡哨,不把它用起来,多多少少有点虚,那么怎样把Matlab中的算法移植到MCU中进行验证呢,下面就来干这个事情。
2 模型搭建
直接上图,总图:

foc_control内部框图:

因为是测试,所以我是这么干的,先使用一个反Park变换和反Clark变换产生一个三相波形,其中反Clark模块内容如下:

产生的三相波形如下:

再来看看Clark变换的输出:

Park变换的输出:

到了这个时候,在matlab中的验证就结束了。
2 代码生成
在代码生成前,还需要做一件事情,matlab默认的数据类型都是double类型,因为生成的代码是需要在32位的单片机上运行的,所以我们需要把matlab模块中的一些输入输出数据类型改成single类型,举个例子如下:

改造完如下:

随后就可以生成代码了,右击foc_control模块,选择C/C++ Code->Embedded Coder Quick Start:

注:如果没有这个选项或者这个选项是灰色的,但是就说明你目前的matlab没有完整licence或者没有安装安装。
出现了界面后,一直点,一直点,直到出现设置硬件类型时,选择相应的硬件类型:

注:有些MCU产商会有自己的电机驱动库,比如TI,ST,NXP,会把一些函数进行优化重写,比如一些三角函数等math函数,这个时候可以通过安装相应的板载支持包,然后设置相应的硬件板载。
可以通过安装插件安装板载支持包:

然后在Model Settings里面选择相应的Hardware support,如果MATLAB中没有你想要的芯片,那么就随便选一个吧,我就选了NXP的K64。

然后就是一直继续,直到生成成功,如果中途遇到一些问题卡住了,可以直接下载我的例子:
FOC_Control_Matlab_MCU.7z
如果生成成功,会生成相应的文件,如下:

接下来,就是把相应的.c.h文件移植到MCU中了。如下:

打开生成的文件,稍微阅读一下就可以看出matlab生成代码的一些规则,比如rtU为输入,rtY为输出等等,需要细细品味。
下面是我的测试函数:

然后让其运行起来,将结果输出,可以看到下面的结果:

可以看出Clark和Park变换成功了。
本文介绍了如何将Matlab中的FOC(磁场定向控制)模型转换为C代码并移植到MCU进行验证。首先展示了模型搭建过程,包括反Clark和反Park变换的实现,然后详细阐述了代码生成的步骤,如调整数据类型、选择硬件支持包,并最终在MCU上运行验证,实现了Clark和Park变换的成功转化。
3322





