材料清单:

降压模块
OLED 屏幕
按键
舵机
开发板
MPU-6050

实验概述:

将MPU-6050采集到的数据转换成欧拉角,并用OLED 屏幕显示;三轴云台与MPU-6050之间形成闭环控制系统,达成一个简单的平衡系统

舵机控制

舵机主要由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置(也就是90°)。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。

因此,控制舵机主要是使用单片机产生一个频率为50HZ的pwm波,再通过控制占空比来控制舵机转动的角度。转动角度与占空比的关系如图:

storm32bgc三轴云台调参教程 三轴云台控制_storm32bgc三轴云台调参教程

MPU-6050

这是一些常用的寄存器

#define SMPLRT_DIV  0x19    //采样率分频,典型值:0x07(125Hz) */
#define CONFIG   0x1A       // 低通滤波频率,典型值:0x06(5Hz) */
#define GYRO_CONFIG  0x1B   // 陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) */
#define ACCEL_CONFIG 0x1C  // 加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) */

#define ACCEL_XOUT_H 0x3B  // 存储最近的X轴、Y轴、Z轴加速度感应器的测量值 */
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40

#define TEMP_OUT_H  0x41   // 存储的最近温度传感器的测量值 */
#define TEMP_OUT_L  0x42

#define GYRO_XOUT_H  0x43 // 存储最近的X轴、Y轴、Z轴陀螺仪感应器的测量值 */
#define GYRO_XOUT_L  0x44 
#define GYRO_YOUT_H  0x45
#define GYRO_YOUT_L  0x46
#define GYRO_ZOUT_H  0x47
#define GYRO_ZOUT_L  0x48

#define PWR_MGMT_1  0x6B // 电源管理,典型值:0x00(正常启用) */
#define WHO_AM_I  0x75 //IIC地址寄存器(默认数值0x68,只读) */

我使用的是正点原子的dmp姿态结算来读取角度,连接MPU-6050的时候最好不要用杜邦线!!!把线头拆开用铜丝缠一下,不然很容易初始化不成功。

代码

链接:https://pan.baidu.com/s/1EK89RgaVlTKeXpFQyMeqlA
提取码:cw0o
代码放在这里,有需要的自提。