云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于STM32F4的姿态解算系统

基于STM32F4的姿态解算系统

  • 62 次阅读
  • 3 次下载
  • 2025/5/2 2:16:45

} }

} t++;

OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err); //延时10ms

}

LCD_ShowNum(30+48+8,240,temp/10,3,16); LCD_ShowNum(30+48+40,240,temp,1,16); temp=yaw*10; if(temp<0) {

LCD_ShowChar(30+48,260,'-',16,0); temp=-temp;

//转为正数

//去掉负号 //显示整数部分

//显示小数部分

//显示负号

//显示整数部分

//显示小数部分

}else LCD_ShowChar(30+48,260,' ',16,0);

LCD_ShowNum(30+48+8,260,temp/10,3,16); LCD_ShowNum(30+48+40,260,temp,1,16); t=0;

LED0=!LED0;//LED闪烁

由于四元素的四个数都是大于0小于1,所以借鉴前面的经验,只需要显示小数部分。将q扩大100000000

倍后变成整数显示在LCD上。任务3的函数如下:

void task3_task(void *p_arg) {

float quat[4]={0,0,0,0}; OS_ERR err; CPU_SR_ALLOC(); OS_CRITICAL_ENTER();

LCD_ShowString(30,300,200,16,16,\ POINT_COLOR=BLACK;//设置字体为黑色 //POINT_COLOR=BLUE;//设置字体为蓝色

LCD_ShowString(30,320,200,16,16,\ LCD_ShowString(30+100,320,200,16,16,\ LCD_ShowString(30+100*2,320,200,16,16,\LCD_ShowString(30+100*3,320,200,16,16,\

OS_CRITICAL_EXIT(); while(1) {

if(MPU_Get_Quaternion(quat)==0); //读取MPU6050 DMP处理后的数据 {

printf(\四元素为q0=%f q1=%f q2=%f q3=%f\\r\\n\LCD_ShowxNum(70,320,quat[0]*10000000,7,16,0x80);

//显示小数部分

//显示小数部分

//显示小数部分 //显示小数部分

LCD_ShowxNum(70+100,320,quat[1]*10000000,7,16,0x80); LCD_ShowxNum(70+100*2,320,quat[2]*10000000,7,16,0x80); LCD_ShowxNum(70+100*3,320,quat[3]*10000000,7,16,0x80);

OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err); //延时10ms

} }

}

任务四负责LCD上显示一些字符,只执行一次。任务四的服务函数如下:

void task4_task(void *p_arg) {

POINT_COLOR=RED;//设置字体为红色

LCD_ShowString(30,340,200,16,16,\ POINT_COLOR=BLACK;//设置字体为黑色

LCD_ShowString(30,380,200,16,16,\ . C\ }

LCD_ShowString(30,400,200,16,16,\ . C\

LCD_ShowString(30,360,200,16,16,\ LCD_ShowString(30+100,360,200,16,16,\ LCD_ShowString(30+100*2,360,200,16,16,\LCD_ShowString(30+100*3,360,200,16,16,\

LCD_ShowString(30,420,200,16,16,\ yaw= . C\

定时器定时进行50ms的周期定时,其优先级为2,是这几个任务中最高的,主要负责三子样旋转矢量算法。

三子样四元素更新算法的步骤为:

2h],[tk,tk?h]三个时间段的角增量,??1,??2,??3; 3927??1???2???2????3???1?; (2)计算旋转矢量Φ?h????1???2???3?2040(1)分别计算[tk,tk?],[tk,tk?(3)由旋转矢量构造增量四元素q?h?;

h3Φ??cos()??2?ΦΦ?x?sin()?2?其中Φ??Φ,Φ,Φ?, Φ?Φ2?Φ2?Φ2。 q?h???ΦxyzxyzΦ??Φy?Φsin(2)??ΦΦ?z?sin()?2??Φ(4)利用Q?tk?1??Q?tk?1??q?h?计算更新后的四元素Q?tk?1?; (5)利用更新后的四元素Q?tk?1?得到姿态变换矩阵Cb。

n?q12?q02?q22?q32?Cbn??2?q1q2?q0q3??2?qq?qq?1302?2?q1q2?q0q3?q2?q0?q3?q12?q2q3?q0q1?2222??T11T12T13???

2?q2q3?q0q1????TTT23??21222222?q3?q0?q2?q1???T31T32T33??2?q1q3?q0q2?

??T32)?pitch?arcsin(?T31roll?arctan(?) ?T33??T12yaw?arctan()?T22?为了实现上面的功能本实验做了如下的一些设计。MPU6050的陀螺仪输出是角速度,所以需要先

积分得到角度,再用角度计算角增量。选取h?120ms,计算角增量按下图4-2所示。

图4-2 角增量计算方法

由于定时器回调函数有点多,这里就不给出程序,具体程序可以见工程文件包中的main.c文件。

4实验

正对开机时刻的MPU6050的状态为初始状态。实验结果见下图4-1到4-5。

图4-1 开机后的状态

图4-2 LED灯的情况

图4-3 与四轴上位机连接

搜索更多关于: 基于STM32F4的姿态解算系统 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} } } t++; OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err); //延时10ms } LCD_ShowNum(30+48+8,240,temp/10,3,16); LCD_ShowNum(30+48+40,240,temp,1,16); temp=yaw*10; if(temp<0) { LCD_ShowChar(30+48,260,'-',16,0); temp=-temp; //转为正数 //去掉负号 //显示整数部分

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com