Simulink 自动代码生成电机控制:自动定点化Fixed-Point Tool 使用

目录

1. 定点化前模型准备及注意事项

2.定点化步骤

3.生成代码


1. 定点化前模型准备及注意事项

1)模型参数设置

创建两组完全一样的电机参数,一组是浮点数放到电机模型里面,一组是算法的参数,由其是在无感或者对电机参数有要求的算法定点化需要把其区分开,不然定点化后电机模型的参数会报错 

2)设置系统输入范围

众所周知,定点数据需要根据数据的范围确定是乘2的N次方,如果输入数据的范围太小可能会导致数据溢出,如果输入数据范围太大,精度可能会不高,这就需要根据实际的系统进行匹配,如这里我们设置的目标转速和实际转速的范围是0-6000RPM,输入的相电流10A以内,因为我们的小电机是10A以内的。输出是PWM对应定时器的比较值0-4200。如下图配置好后可以通过Simulink查看数据范围的工具查看有没有配对。

3)创建变量Log分析定点化前后容差

记录所选信号,Log相应的信号就可以了,这个可以让我们在Data Inspector里面看到所选信号的变化,等效一个很方便的示波器。

以上,配置好后仿真一下,浮点模型仿真效果:

 

2.定点化步骤

 创建定点化工程后有如下的几步

1. New新建一个定点化流程

2. Prepare检查是否满足准备工作

3. CollectRanges 收集数据范围

4. Propose Data Types 建议数据类型,就是定点化工具根据数据的范围自动适配数据类型

5. Apply Data Types 应用数据类型,检查完自动匹配的数据类型没有问题就点它

6. Simulate with Embedded Types 应用完数据后就变成定点化模型了,这一步就是仿真定点化后的模型,输出仿真结果

7. Compare Results 仿真完后没有问题就就比较定点化前和定点化后的结果,查看容差是否满足要求

 

1)打开定点化工具,New-->Iterative Fixed-Point Conversion

2)选择相要定点化的模块,就是我们设置输入输出范围的那个模块,并设置容差,这里根据自己需要设置,也可以不设置,大不了后面报错,不影响定点化的进行,只要保证模型最后运行结果满足自己需求即可,这里设置了一个速度容差100,Id和Iq的测量值为1,方便定点化后进行比较

 配置好后点 Prepare, 定点化工具会自动检测是模型是否满足定点化,如下图:

第一个创建恢复点是红色感叹号,这个没关系定点化前备份好原浮点模型,因为定点化过程会把数据都改了,提前做好备份是每个工程师的习惯!这里不用管直接进行下一步

 

 3)Collect Ranges 收集数据范围

这一步就是定点化工具通过仿真,收集每个数据的范围然后合理定点化数据,这就是为什么我们要创建电机的运行实例,不同的输入电压,不出的负载,越多的输入输出实例,定点化后问题越少!

直接点Collect Ranges,慢慢等待它仿真完。

仿真完后就出现每个输入输出的数据范围,可以检查下有没有不合理的。 

4)Propose Data Types 建议数据类型

如下图,数据类型都自动定义了,双击一下Name就可以直接跳转到模型,也可以通过模型的输入输出,右键选择Fixed-Point Tool Result就可以跳转到模型定点化后的数据类型,方便我们评估自动定点化的值是否合理。这里一般会把PWM输出的范围改成Int16,也可以不用动,生成代码后再移位操作就可以了。

5)Apply Data Types 应用数据类型

应用数据类型后,输入输出的数据类型都变成定点了

6)Simulate with Embedded Types 仿真定点化后的模型

点了之后慢慢的等待仿真结束吧!

 仿真结果如下,好像和浮点仿真的波形差不多,定点后会有各种问题,数据溢出是经常碰到的,反正各个环节慢慢查就好了,再用Compare Results来比较下定点前后的结果

7)Compare Results

红叉很多,但是不要慌很多变量是我们Log出来了,但是没有设置容差,默认容差是0,所以都超过范围了

看看我们的波形对比:

速度误差挺大,但是不要紧,可以接受,如果不能接受再去优化数据范围就可以了,这个应该是PI定点后误差造成的

 

 Valpha, beta也有误差,还有相位的延迟,但是不要紧,能控住,我们用硬件跑跑再验证下

 以上就是定点化的过程

总结:以上只是Simulink定点化的一个应用流程,实际应用中为找到数据失真或者溢出的问题,可以用浮点的模块和定点的模块放在同一个仿真里面,对比仿真输出的结果,用数据类型转换来互相传递参数,再验证各个模块的输入和输出是否在合理范围内,或者单独对某一个模块进行定点化,再通过浮点模块来验证,等。反正目的是要在硬件上运行在系统需求范围内! 

3.生成代码

用这种方法我们实现了Hall FOC和无感FOC模型的定点化,并成功的运行在STM32F103/5/7等系列的MCU

小板子芯片是F401,64PIN,只需要把芯片换成F10系列64PIN,外设引脚完全兼容

  • 13
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡洛斯伊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值