于基stm32f4的姿态解算系统大学毕设论文Word文档格式.docx
- 文档编号:15916420
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:18
- 大小:690.67KB
于基stm32f4的姿态解算系统大学毕设论文Word文档格式.docx
《于基stm32f4的姿态解算系统大学毕设论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《于基stm32f4的姿态解算系统大学毕设论文Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
以STM32F4为处理器,通过I2C总线与MEMS陀螺仪加速速度计通信,16位FTFLCD液晶显示屏作为数据的实时显示,通过串口将MPU6050的数据和解算的姿态角上传上位机。
姿态解算系统的构架如图2-1。
2-1系统构架图
系统的功能:
(1)将STM32F4读取的MPU6050的数据上传上位机
(2)解算姿态角,上传四轴上位机进行仿真,并在LCD上实时显示姿态角。
(3)读取MPU6050的四元素并在LCD上显示。
(4)解算使用三子样四元素更新算法解算姿态角,并在LCD上显示。
3软硬件设计
3.1硬件设计
本实验所要用到的硬件资源如下:
1)指示灯DS0
2)KEY0按键
3)TFTLCD模块
4)串口
5)MPU6050
指示灯:
用到的指示灯DS0,位共阳型,连接到STM32F4的PF9引脚。
如图3-1所示。
图3-1SD0与STM32连接原理图
按键:
KEY0按下引脚PE4接上低电平。
判断PE4上的电平就可以知道按键的状态。
如图3-2所示。
3-2按键与STM32F4的连接原理图
TFTLCD模块:
4.3寸,分辨率为800*480,16真彩显示。
其与STM32F4的连接如图3-3所示。
引脚含义:
CS:
TFTLCD片选信号。
WR:
向TFTLCD写入数据。
RD:
从TFTLCD读取数据。
D[15:
0]:
16位双向数据线。
RST:
硬复位TFTLCD。
RS:
命令/数据标志(0,读写命令;
1,读写数据)。
图3-3TFTLCD与STM32F4的连接原理
MPU6050:
MPU6050内部整合了3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP:
DigitalMotionProcessor)硬件加速引擎,通过主IIC接口,向应用端输出完整的9轴融合演算数据。
MPU6050与STM32F4的连接如图3-4所示。
图3-4MPU6050与STM32F4的连接原理图
3.2软件设计
3.2.1底层驱动部分
程序的实现是在UCOSIII实时操作系统上实现,但是在使用操作系统前必须写好指示灯DS0、KEY0按键、TFTLCD模块、串口以及MPU6050的驱动,还有系统的移植。
本设计是在已经移植好的UCOSIII操作系统上进行的,所以就对UCOSIII移植到STM32F4上不做说明。
工程文件夹下的文件HARDWARE文件夹存放的是驱动文件,其中有IIC、KEY、LCD、LED、MPU6050文件分别是I2C、按键KEY、LCD、LED和MPU6050的驱动文件,如图4-1所示。
其中的UCOSIII文件夹为UCOSIII操作系统文件。
图4-1工程文件
LED文件夹中的led.c和led.h主要是对GPIO口和使能对应的GPIO时钟的操作。
KEY文件夹中的key.c和key.h主要是先初始化对应的GPIO口和实现一个按键扫描函数KEY_Scan()。
//mode:
0,不支持连续按;
1,支持连续按;
//返回值1表示,KEY0按下
//注意此函数有响应优先级,KEY0>
KEY1>
KEY2>
WK_UP!
!
u8KEY_Scan(u8mode)
{
staticu8key_up=1;
//按键按松开标志
if(mode)key_up=1;
//支持连按
if(key_up&
&
(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
{
delay_ms(10);
//去抖动
key_up=0;
if(KEY0==0)return1;
elseif(KEY1==0)return2;
elseif(KEY2==0)return3;
elseif(WK_UP==1)return4;
}elseif(KEY0==1&
KEY1==1&
KEY2==1&
WK_UP==0)key_up=1;
return0;
//无按键按下
}
在IIC文件夹中的myiic.c和myiic.h主要实现I2C读和写一个字节,IIC_Read_Byte()和IIC_Send_Byte()。
由于大家对I2C总线比较熟悉就不做多说明。
LCD文件夹中lcd.c和lcd.h主要实现一些对LCD屏的操作的函数。
用到的主要有LCD_ShowString/LCD_ShowxNum()/LCD_ShowNum()。
//显示数字,高位为0,则不显示
//x,y:
起点坐标
//len:
数字的位数
//size:
字体大小
//color:
颜色
//num:
数值(0~4294967295);
voidLCD_ShowNum(u16x,u16y,u32num,u8len,u8size);
//显示一个数字
//显示数字,高位为0,还是显示
//x,y:
起点坐标
数值(0~999999999);
//len:
长度(即要显示的位数)
//[7]:
0,不填充;
1,填充0.
//[6:
1]:
保留
//[0]:
0,非叠加显示;
1,叠加显示.
voidLCD_ShowxNum(u16x,u16y,u32num,u8len,u8size,u8mode);
//显示数字
//显示字符串
//width,height:
区域大小
//*p:
字符串起始地址
voidLCD_ShowString(u16x,u16y,u16width,u16height,u8size,u8*p);
//显示一个字符串,12/16字体
MPU6050中的文件mpu6050.c和mpu6050.h实现mpu6050的驱动。
只要对mpu6050的一些基本的设置和初始化以及数据的读取。
u8MPU_Init(void)
u8res;
IIC_Init();
//初始化IIC总线
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);
//复位MPU6050
delay_ms(100);
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);
//唤醒MPU6050
MPU_Set_Gyro_Fsr(3);
//陀螺仪传感器,±
2000dps
MPU_Set_Accel_Fsr(0);
//加速度传感器,±
2g
MPU_Set_Rate(50);
//设置采样率50Hz
MPU_Write_Byte(MPU_INT_EN_REG,0X00);
//关闭所有中断
MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);
//I2C主模式关闭
MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);
//关闭FIFO
MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);
//INT引脚低电平有效
res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
if(res==MPU_ADDR)//器件ID正确
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);
//设置CLKSEL,PLLX轴为参考
MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);
//加速度与陀螺仪都工作
MPU_Set_Rate(50);
//设置采样率为50Hz
}elsereturn1;
return0;
//得到温度值
//返回值:
温度值(扩大了100倍)
shortMPU_Get_Temperature(void)
//得到陀螺仪值(原始值),16位AD采集的值
//gx,gy,gz:
陀螺仪x,y,z轴的原始读数(带符号)
0,成功/其他,错误代码
u8MPU_Get_Gyroscope(short*gx,short*gy,short*gz)
//得到加速度值(原始值)
陀螺仪x,y,z轴的原始读数(带符号),16位AD采集的值
0,成功;
其他,错误代码
u8MPU_Get_Accelerometer(short*ax,short*ay,short*az)
//获得四元素
u8MPU_Get_Quaternion(float*quat)
//得到dmp处理后的数据(注意,本函数需要比较多堆栈,局部变量有点多)
//pitch:
俯仰角精度:
0.1°
范围:
-90.0°
<
--->
+90.0°
//roll:
横滚角精度:
-180.0°
<
+180.0°
//yaw:
航向角精度:
0,正常;
其他,失败
u8mpu_dmp_get_data(float*pitch,float*roll,float*yaw)
3.2.2基于UCOSIII操作系统部分
定时器实现四元素更新的三子样算法和姿态解算,其优先级为2,堆栈大小为256;
开始任务负责创建定时器和其他四个任务,其优先级为3,堆栈大小为128;
任务一实现开关对数据上传控制,优先级为4,堆栈大小为256;
任务二实现上传MPU6050输出数据和自己解算姿态到上位机,其优先级为5,堆栈大小为256;
任务三实现MPU6050的四元素读取并显示到LCD上,其优先级为6,堆栈大小为128;
任务四负责LCD数据和字符的显示,其优先级为7,堆栈大小为128。
Main函数中主要是初始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32f4 姿态 系统 大学 论文