硬件平台:stm32f103c8t6

传感器:mpu6050

源码+模块连接:链接

        最近的项目涉及到了运动控制,无刷电机,有刷电机,舵机,都在最近轮番登台。

        本身也是做电机控制的,对这些电机也都比较熟悉。

        在项目中用到了一个两轴舵机云台支架。感觉挺有趣,结合mpu6050传感器,做一个跟随角度运动的两轴云台。

 实验效果:

storm32二轴云台_自动驾驶

这个程序原理并不难,一共可以分三个步骤:

第一步:mpu6050 角度融合,利用DMP库采集实际的测量角度。

第二步:舵机控制

第三步:将mpu6050采集到的角度范围映射到舵机控制的数值范围

storm32二轴云台_自动驾驶_02

        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的数值会发生跳动,传感器是我自己做的,怀疑焊接有虚焊,又焊一块,发现云台不在抽了,通过串口打出的角度数据也都比较平稳。

最后,希望大家实验顺利,学习愉快。