PMSM之FOC控制 番外篇1-使用Matlab生成代码,MCU验证
1 前言
??因为不管在Matlab中搞得多么花里胡哨,不把它用起来,多多少少有点虚,那么怎样把Matlab中的算法移植到MCU中进行验证呢,下面就来干这个事情。
2 模型搭建
??直接上图,总图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/c01551bab26c445399d65393b8f9acf1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??foc_control内部框图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/4a53de0639ff43f4ae93b8ac54f1f16e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??因为是测试,所以我是这么干的,先使用一个反Park变换和反Clark变换产生一个三相波形,其中反Clark模块内容如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/40a7be843dd442f6b0014c55ef598ed6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??产生的三相波形如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/6ca3583d639c4d3e88760cb16094497e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??再来看看Clark变换的输出: ![在这里插入图片描述](https://img-blog.csdnimg.cn/494daf5ed74c4502b96c58d9abfab6b5.png) ??Park变换的输出: ![在这里插入图片描述](https://img-blog.csdnimg.cn/c55655888fc342a3bc330954c9259f46.png) ??到了这个时候,在matlab中的验证就结束了。
2 代码生成
??在代码生成前,还需要做一件事情,matlab默认的数据类型都是double类型,因为生成的代码是需要在32位的单片机上运行的,所以我们需要把matlab模块中的一些输入输出数据类型改成single类型,举个例子如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/27dea90be3584eefa857d31a625df319.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_18,color_FFFFFF,t_70,g_se,x_16) ??改造完如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/129c79809bf7473bae1deda4e6a2243e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??随后就可以生成代码了,右击foc_control模块,选择C/C++ Code->Embedded Coder Quick Start: ![在这里插入图片描述](https://img-blog.csdnimg.cn/1b990d4ba55f4aa9a6afa8fa617400dd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??注:如果没有这个选项或者这个选项是灰色的,但是就说明你目前的matlab没有完整licence或者没有安装安装。
??出现了界面后,一直点,一直点,直到出现设置硬件类型时,选择相应的硬件类型: ![在这里插入图片描述](https://img-blog.csdnimg.cn/cc4bc141b7764cae839355b63746d4f3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??注:有些MCU产商会有自己的电机驱动库,比如TI,ST,NXP,会把一些函数进行优化重写,比如一些三角函数等math函数,这个时候可以通过安装相应的板载支持包,然后设置相应的硬件板载。
??可以通过安装插件安装板载支持包: ![在这里插入图片描述](https://img-blog.csdnimg.cn/084d8d2b61f843cca03e4749c7863d08.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??然后在Model Settings里面选择相应的Hardware support,如果MATLAB中没有你想要的芯片,那么就随便选一个吧,我就选了NXP的K64。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cb92f372f91b451184c2890bf6fc50b1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??然后就是一直继续,直到生成成功,如果中途遇到一些问题卡住了,可以直接下载我的例子: FOC_Control_Matlab_MCU.7z
??如果生成成功,会生成相应的文件,如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/161109467d924149b4842ceb4f779257.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_16,color_FFFFFF,t_70,g_se,x_16) ??接下来,就是把相应的.c.h文件移植到MCU中了。如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/cac5f00bc61748fab2e755a66b2fdb5b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_14,color_FFFFFF,t_70,g_se,x_16) ??打开生成的文件,稍微阅读一下就可以看出matlab生成代码的一些规则,比如rtU为输入,rtY为输出等等,需要细细品味。
??下面是我的测试函数: ![在这里插入图片描述](https://img-blog.csdnimg.cn/ea2d74faee3b4bb591fbf27765e02f4d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??然后让其运行起来,将结果输出,可以看到下面的结果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c727a011ae48968937fd26d123cb57.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP54yr54iq,size_20,color_FFFFFF,t_70,g_se,x_16) ??可以看出Clark和Park变换成功了。
END
|