最近疫情比较严重,居家隔离,突然想要尝试无传感基于卡尔曼滤波器角度速度观测控制自动生成代码生成的实验,有些收获,在这里记录一下。
目录
1.模型搭建和仿真
2.自动代码生成和系统验证
3.总结
1.模型搭建和仿真
Q矩阵:系统噪声
R矩阵:测量噪声
P0矩阵:状态方差
下图是EKF的算法模型,用的是Simulink模型搭建
为了小电机能正常启动,采用了IF的开环强拉启动后再切闭环的方案,都是通过Simulink实现
EKF估计的转速和实际转速(开始是开环强拉,转速会有波动),进入闭环后和实际转速基本一致
EKF估计的角度
通过Simulink搭建的EKF仿真没有问题,开始生成代码验证
2.自动代码生成和系统验证
生成代码后集成到Keil的工程里面,以下是Simulink生成的代码
好家伙,在STM32F401(主频84MHz)的平台上,从进中断计算完成到出中断的时间需要84us,PWM的频率是10KHz,后面仔细去查找原因后发现EKF的观测器执行时间太长,比起滑模算法来讲更占用时间
调整编译器的优化选项:
选择version 6的编译器
选择优化选项-O2:
执行时间从84us直接降到50us左右,电机正常运行。
运行效果演示:
3.总结
目前发现基于EKF的观测器计算量比较大,对于低端的MCU来讲压力还是比较大,后面再看看能不能把算法优化,节省时间。
对于不同的电机,需要对
Q矩阵:系统噪声
R矩阵:测量噪声
进行调优