硬件平台:stm32f103c8t6
传感器:mpu6050
源码+模块连接:链接
最近的项目涉及到了运动控制,无刷电机,有刷电机,舵机,都在最近轮番登台。
本身也是做电机控制的,对这些电机也都比较熟悉。
在项目中用到了一个两轴舵机云台支架。感觉挺有趣,结合mpu6050传感器,做一个跟随角度运动的两轴云台。
实验效果:
这个程序原理并不难,一共可以分三个步骤:
第一步:mpu6050 角度融合,利用DMP库采集实际的测量角度。
第二步:舵机控制
第三步:将mpu6050采集到的角度范围映射到舵机控制的数值范围
mpu6050是IIC通信的,在这里我们用软件模拟iic协议,就是图片中的IIC.c那个文件,mpu6050.c那个文件是mpu6050初始化文件,这个文件需要配合数据手册来配置寄存器,也可以直接参考网上其它博客讲解的MPU6050的初始化配置。
inv_mpu.c和inv_mpu_dmp_motion_driver.c这两个文件是DMP库,这个文件挺复杂的,里面感觉写的乱糟糟的,参与了角度获取和初始化,如果实在看不明白,可以直接把这些文件移植到你的工程中,毕竟只是取个角度而已。
舵机控制在我之前的博客中有专题讲解,就是给一个50hz的pwm,在0.5ms-20ms的脉宽中控制角度。在这里不在讲解了。
接下来是区间映射函数,这个函数还是挺好用的,可以在很多方面直接移植,完成区间映射的效果,达到事半功倍,这个是函数。具体用法参考一下工程吧,就不具体讲解了,不懂得话也可以给我留言。
float map(float value,float fromLow,float fromHigh,float toLow,float toHigh)
{
return ((value-fromLow)*(toHigh-toLow)/(fromHigh-fromLow)+toLow);
}
在测试的过程中发现云台会出现“赵四抽”的现象,用串口将角度数据打出后发现,是因为yaw的数值会发生跳动,传感器是我自己做的,怀疑焊接有虚焊,又焊一块,发现云台不在抽了,通过串口打出的角度数据也都比较平稳。
最后,希望大家实验顺利,学习愉快。