材料清单:
降压模块
OLED 屏幕
按键
舵机
开发板
MPU-6050
实验概述:
将MPU-6050采集到的数据转换成欧拉角,并用OLED 屏幕显示;三轴云台与MPU-6050之间形成闭环控制系统,达成一个简单的平衡系统
舵机控制
舵机主要由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置(也就是90°)。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。
因此,控制舵机主要是使用单片机产生一个频率为50HZ的pwm波,再通过控制占空比来控制舵机转动的角度。转动角度与占空比的关系如图:
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的时候最好不要用杜邦线!!!把线头拆开用铜丝缠一下,不然很容易初始化不成功。
材料清单:
降压模块
OLED 屏幕
按键
舵机
开发板
MPU-6050
实验概述:
将MPU-6050采集到的数据转换成欧拉角,并用OLED 屏幕显示;三轴云台与MPU-6050之间形成闭环控制系统,达成一个简单的平衡系统
舵机控制
舵机主要由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置(也就是90°)。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。
因此,控制舵机主要是使用单片机产生一个频率为50HZ的pwm波,再通过控制占空比来控制舵机转动的角度。转动角度与占空比的关系如图:
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的时候最好不要用杜邦线!!!把线头拆开用铜丝缠一下,不然很容易初始化不成功。
举报