第八章V1.5-MPU6050陀螺仪使用方法 MPU6050姿态解算dmp MPU6050姿态解算STM32 STM32小车MPU6050直线行驶 STM32标准库教程 STM32江科大
当前视频版本V1.5.0
现在有两个版本小车
V1.5.0
V3.3.0-STM32智能小车
视频
V1.5.0:库函数开发。功能:循迹、避障、跟随、遥控、电池电压显示等。
V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制。
MPU6050姿态传感器使用(这个没有用视频也没有讲给大家自行扩展使用)
温湿度传感器、光照传感器、摄像头模块都是大家自己可以扩展使用的其中摄像头教程再规划中
移植正点原子例程文件。
添加xxx.c 与xxx.h文件
如图
6050_SDA–PB9
6050_SCL–PB8
更改驱动代码
更改mpuiic.c中的的MPU_IIC_Init(void) 函数
//初始化IIC
void MPU_IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//先使能外设IO PORTB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIO
GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_8); //PB9,PB9输出高
}
更改mpuiic.h 相关宏
//IO方向设置
#define MPU_SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}//注意这里 容易出错
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;}
//IO操作函数
#define MPU_IIC_SCL PBout(8) //SCL
#define MPU_IIC_SDA PBout(9) //SDA
#define MPU_READ_SDA PBin(9) //输入SDA
注意理解
//IO方向设置
#define MPU_SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}//注意这里 容易出错
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;}
检查6050其他程序发现在mpu6050.c中有对PA15的初始化 我们需要将其注释掉,防止影响其他程序。
在main.c声明部分变量
extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态
extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值
在main.c定义变量
float pitch,roll,yaw; //欧拉角
short aacx,aacy,aacz; //加速度传感器原始数据
short gyrox,gyroy,gyroz; //陀螺仪原始数据
short temp; //温度
初始化6050与mpu
MPU_Init(); //初始化MPU6050
while(MPU_Init()!=0);
while(mpu_dmp_init()!=0);
通过mpu 获得数据
delay_ms(500);
mpu_dmp_get_data(&pitch,&roll,&yaw);//返回值:0,DMP成功解出欧拉角
printf("nr 俯仰角=%0.2f 横滚角=%0.2f 偏航角=%0.2f nr", pitch,roll,yaw);
发现读取数据为零,搜索发现
然后尝试
mpu_dmp_get_data 使用方法
delay_ms(500);
while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0){}
printf("nr 俯仰角=%0.2f 横滚角=%0.2f 偏航角=%0.2f nr", pitch,roll,yaw);
可以获得数据