资源简介
STM32F1单片机+四元数欧拉角姿态解算+MPU6050+HMC5883L+MS5611+曲线打印完整工程代码.
燕骏编程规范:
https://download.csdn.net/download/zzw5945/10397028
燕骏串口打印曲线上位机:
https://download.csdn.net/download/zzw5945/10397194
代码片段和文件信息
/*
***********************************************************************
* YanJunFly V1.0 - Copyright (c) 2017
* All rights reserved.More information please browse www.yanjuntech.cn
* 燕骏智控——以极客技术推进工程教育
* 手把手教你,如何从头开始做一个电子设计类项目。
* 我们将以 四轴飞行器 为项目载体,带领大家进行项目式学习做出属于自己的四旋翼。
*
* 其他声明:
* 对代码中产生的bug,本人不承担任何直接或间接的损害赔偿
* 若使用本代码即视为默认本条款。若发现bug,请将详细信息
* 发送下面链接至评论区,谢谢!
* http://www.yanjuntech.cn/forum.php?gid=87
*
* 文件名称:control.ccontrol.h
* 文件摘要:无
*
* 注意事项:
* 1、有的32型号没有 定时器5678 如STM32F103RBT6 使用stm32cube查看
* 2、外设时钟初始化的时候,鼠标右键 进底层看看时钟函书 上面的注释,有没有对应好
* 如 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 ENABLE);
* 3、各种中断 如果不知道,是哪个中断名字,可以复制一下,ctrl + f,然后使用find in files
* 在文件中查找,能分方便的查出来,如已知:TIM3_IRQHandler,想查定时器1的中断服务函数
* ctrl+f快捷键,弹出查找 find in files ,然后点击查找结果 即可找到 TIM1_UP_IRQHandler
*
* 当前版本:v1.0
* 当前作者:YJ_朱子文
* 完成日期:2017-3-16 17:45:05
* 改动说明:创建文件
*
* 取代版本:无
* 原 作 者:YJ_朱子文
* 完成日期:2017-3-16 17:45:05
***********************************************************************
*/
#include “./Control/control.h“
/**************************/
/* 声明实时姿态数据 */
CONTROL_AttitudeDataTypedef x_AttitudeNow =
{
{0.0f0.0f0.0f}
{0.0f0.0f0.0f}
{0.0f0.0f0.0f}
{0.0f0.0f0.0f}
};
/*
***********************************************************************
*函数名称:void TIM3_IRQHandler(void)
*函数功能:定时器3中断服务函数
*
*使用说明:硬件自动调用
*入口参数:无
*返 回 值:无
*
*函数作者:YJ_朱子文
*创建日期:2017-3-17 09:58:14
***********************************************************************
*/
extern float f_AccInertiaAfterFilter;
void TIM3_IRQHandler(void)
{
/* SENSOR_SensorTypedef该数据类型在sensor.h文件中 */
static SENSOR_SensorTypedef x_SensorData ={0};
/* 大地坐标系(惯性坐标系)下的加速度值 这个驱动工程中没有使用到
实际上在IMU.C姿态解算 四元数转欧拉角算法中 计算的数据。
在这里定义了这个结构体变量,是因为总工程中的sensor中用到了
*/
static CONTROL_3FloatDataTypedef x_AccInertia = {0.0f};
/* 用于分频的系数 */
static uint32_t ui_Timer30Ms = 0;
static uint32_t ui_Timer2Ms = 0;
/* 判断是否更新中断 UIF 位是否置位 */
if (TIM3->SR & (uint32_t)(1))
{
/* 每1ms调用一次数据读取函数 */
vSensorDataRead(&x_SensorData(SENSOR_3FloatDataTypedef *)&x_AccInertia);
if(++ui_Timer2Ms > 2)
{
ui_Timer2Ms = 0;
/* 调用姿态解算函数 */
vImuUpdate((IMU_AttitudeTypedef *)&x_AttitudeNow
(IMU_SensorTypedef *)&x_SensorData
(IMU_3FloatTypedef *)&x_AccInertia);
/* 由于这里IMU是反着放的 放在了飞机背面 所以要经过计算处理才能得到真正的角度数据 */
x_AttitudeNow.x_OriginalAngle.f_X = x_AttitudeNow.x_OriginalAngle.f_X;
if(x_AttitudeNow.x_OriginalAngle.f_Y > 0.0f)
{
x_AttitudeNow.x_OriginalAngle.f_Y = (x_AttitudeNow.x_OriginalAngle.f_Y - 180.0f);
}else
{
x_AttitudeNow.x_OriginalAngle.f_Y = (x_AttitudeNow.x_OriginalAngle.f_Y + 180.0f);
}
/* 减去地面起飞偏置的角度值 得到现在正确角度 */
x_AttitudeNow.x_AngleNow.f_X = x_AttitudeNow.x_OriginalAngle.f_X - x_SensorCaliInitData.x_AngleInitData.f_X;
x
相关资源
- 基于MEMS传感器的插值法姿态解算算法
- 基于STM32F103C8T6及NRF24L01的摔倒检测+
- 基于labview IMU 姿态解算上位机
- MPU6050、磁力计、气压计传感器原理及
- 陀螺仪原理及应用
- MPU6050姿态解算STM32源码(互补滤波、
- 姿态解算8--成功测距.rar
- 扩展卡尔曼滤波姿态解算
- MPU6050姿态解算STM32源码卡尔曼滤波
- px4飞控EKF姿态解算方法
- SPI_adis16470 主机版本 飞控算法的姿态
- K60 mpu6050 姿态解算
- BMX055九轴姿态传感器模块K60 KEA128四元
- STM32+MPU6050+HMC5883L+BMP180姿态解算程序
- STM32F103C8T6 USB HID下位机程序/MPU6050姿态
- EKF 扩展卡尔曼 姿态解算 数据融合
- IMU姿态解算
- AHRS姿态解算资料
- 匿名姿态解算算法带注释
- MPU6050姿态解算STM32源码(互补滤波)
- 互补滤波器四元数姿态解算算法
- mpu6050 姿态解算 四元数 欧拉角
- stm32F407 库函数的麦轮手动车 PS2手柄
- STM32 mpu6050 HMC5883 互补滤波 姿态解算
- 姿态解算多传感器
评论
共有 条评论