概述
目录
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,外设引脚完全兼容
最后
以上就是哭泣牛排为你收集整理的Simulink 自动代码生成电机控制:自动定点化Fixed-Point Tool 使用1. 定点化前模型准备及注意事项2.定点化步骤3.生成代码的全部内容,希望文章能够帮你解决Simulink 自动代码生成电机控制:自动定点化Fixed-Point Tool 使用1. 定点化前模型准备及注意事项2.定点化步骤3.生成代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复