STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)

您所在的位置:网站首页 jy是什么标准代号 STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)

STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)

2024-07-13 18:26| 来源: 网络整理| 查看: 265

文章目录 0.相关基础知识介绍0.1六轴、九轴传感器有什么区别? 1.JY901模块简介1.1 产品概述1.2 性能参数1.3 实物图和接线 2.软件和使用说明书3.串口通信JY9013.1 cubemx工程配置3.2代码编写3.2.1 DMA空闲中断的开启3.2.2 添加JY901.h3.2.3 重定义需要的结构体和JY901数据结构体3.2.4 接收结构体初始化3.2.5 数据解算 3.3现象观测 4.I2C通信JY901

0.相关基础知识介绍

IMU模块中6轴、9轴包含哪些模块?

欧拉角、旋转矩阵、四元数合辑 这个确实复杂,如果以后有机会接触到飞控,再好好看看。

0.1六轴、九轴传感器有什么区别?

加速度传感器(即加速计)、角速度传感器(即陀螺仪)、磁感应传感器(即电子罗盘)。这三类传感器测量的数据在空间坐标系中都可以被分解为X,Y,Z三个方向轴的力,因此也常常被称为3轴加速度计、3轴陀螺仪、3轴磁力计。

加速度传感器(即加速计)检测横向加速角速度传感器(即陀螺仪)检测角度旋转和平衡磁感应传感器(即电子罗盘)获取磁场数据气压传感器获取海拔高度的数据

6轴 : 三轴(XYZ)加速度计 + 三轴(XYZ)陀螺仪(也叫角速度传感器) 9轴 : 6轴 + 三轴(XYZ)磁场传感器

1.JY901模块简介

以下内容来自JY901使用说明书V4.4,仅摘录了需要注意的内容。

1.1 产品概述

模块内部自带电压稳定电路, 工作电压 3.3v~5v, 引脚电平兼容 3.3V/5V 的嵌入式系统,连接方便。 模块内部集成了姿态解算器, 配合动态卡尔曼滤波算法, 能够在动态环境下准确输出模块的当前姿态, 姿态测量精度静态 0.05 度, 动态 0.1 度, 稳定性极高。 支持串口和 IIC 两种数字接口。 方便用户选择最佳的连接方式。 串口速率 2400bps~921600bps 可调, IIC 接口支持全速 400K 速率。(本博客采用串口通信)

1.2 性能参数

1、 电压: 3.3V~5V 2、 电流: SR; temp = huart1.Instance->DR; HAL_UART_DMAStop(&huart1); temp = hdma_usart1_rx.Instance->NDTR; //F1的板子 temp = hdma_usart3_rx.Instance->CNDTR; JY901_data.Rx_len = RXBUFFER_LEN-temp; JY901_Process(); //按照自己需求改写这个函数 JY901_data.Rx_flag = 1; } HAL_UART_Receive_DMA(&huart1,JY901_data.RxBuffer,RXBUFFER_LEN); /* USER CODE END USART1_IRQn 0 */ HAL_UART_IRQHandler(&huart1); /* USER CODE BEGIN USART1_IRQn 1 */ /* USER CODE END USART1_IRQn 1 */ } 3.2.2 添加JY901.h

淘宝客服提供。

#ifndef __JY901_H #define __JY901_H #define SAVE 0x00 #define CALSW 0x01 #define RSW 0x02 #define RRATE 0x03 #define BAUD 0x04 #define AXOFFSET 0x05 #define AYOFFSET 0x06 #define AZOFFSET 0x07 #define GXOFFSET 0x08 #define GYOFFSET 0x09 #define GZOFFSET 0x0a #define HXOFFSET 0x0b #define HYOFFSET 0x0c #define HZOFFSET 0x0d #define D0MODE 0x0e #define D1MODE 0x0f #define D2MODE 0x10 #define D3MODE 0x11 #define D0PWMH 0x12 #define D1PWMH 0x13 #define D2PWMH 0x14 #define D3PWMH 0x15 #define D0PWMT 0x16 #define D1PWMT 0x17 #define D2PWMT 0x18 #define D3PWMT 0x19 #define IICADDR 0x1a #define LEDOFF 0x1b #define GPSBAUD 0x1c #define YYMM 0x30 #define DDHH 0x31 #define MMSS 0x32 #define MS 0x33 #define AX 0x34 #define AY 0x35 #define AZ 0x36 #define GX 0x37 #define GY 0x38 #define GZ 0x39 #define HX 0x3a #define HY 0x3b #define HZ 0x3c #define Roll 0x3d #define Pitch 0x3e #define Yaw 0x3f #define TEMP 0x40 #define D0Status 0x41 #define D1Status 0x42 #define D2Status 0x43 #define D3Status 0x44 #define PressureL 0x45 #define PressureH 0x46 #define HeightL 0x47 #define HeightH 0x48 #define LonL 0x49 #define LonH 0x4a #define LatL 0x4b #define LatH 0x4c #define GPSHeight 0x4d #define GPSYAW 0x4e #define GPSVL 0x4f #define GPSVH 0x50 #define q0 0x51 #define q1 0x52 #define q2 0x53 #define q3 0x54 #define DIO_MODE_AIN 0 #define DIO_MODE_DIN 1 #define DIO_MODE_DOH 2 #define DIO_MODE_DOL 3 #define DIO_MODE_DOPWM 4 #define DIO_MODE_GPS 5 struct STime { unsigned char ucYear; unsigned char ucMonth; unsigned char ucDay; unsigned char ucHour; unsigned char ucMinute; unsigned char ucSecond; unsigned short usMiliSecond; }; struct SAcc//加速度 { short a[3]; short T; }; struct SGyro//角速度 { short w[3]; short T; }; struct SAngle//角度 { short Angle[3]; short T; }; struct SMag//磁场输出 { short h[3]; short T; }; struct SDStatus//端口状态数据输出 { short sDStatus[4]; }; struct SPress//气压高度 { long lPressure; long lAltitude; }; struct SLonLat//经纬度 { long lLon; long lLat; }; struct SGPSV { short sGPSHeight; short sGPSYaw; long lGPSVelocity; }; struct SQ //四元数 { short q[4]; }; #endif 3.2.3 重定义需要的结构体和JY901数据结构体 typedef struct { float angle[3]; }Angle; typedef struct { float a[3]; }Acc; typedef struct { float w[3]; }SGyro; typedef struct//四元数 { float q[4]; }SQ; typedef struct//磁场输出 { float h[3]; }SMag; typedef struct//气压高度 { float lPressure; float lAltitude; }SPress; typedef struct//经纬度 { float lLon; float lLat; }SLonLat; typedef struct User_USART { uint8_t Rx_flag; uint8_t Rx_len; uint8_t frame_head; //帧头 uint8_t RxBuffer[RXBUFFER_LEN]; //接收缓冲 Angle angle; //角度 Acc acc; //加速度 SGyro w; //角速度 SMag h; //磁场 SPress lPressure; //气压 SPress lAltitude; //高度 SLonLat lLon; //经度 SLonLat lLat; //维度 SQ q; //四元数 }User_USART; 3.2.4 接收结构体初始化 void User_USART_Init(User_USART *Data) { for(uint16_t i=0; i RxBuffer[i] = 0; Data->frame_head = 0x55; Data->Rx_flag = 0; Data->Rx_len = 0; } 3.2.5 数据解算 #define RXBUFFER_LEN 99 //接收9类数据,一共99位 User_USART JY901_data; struct SAcc stcAcc; struct SGyro stcGyro; struct SAngle stcAngle; struct SMag stcMag; struct SPress stcPress; struct SLonLat stcLonLat; struct SQ stcQ; void JY901_Process() { if(JY901_data.Rx_len


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3