STM32 Cubemax(十一) ——JY901陀螺仪数据的读取与简单数据处理
STM32 Cubemax(十一) ——JY901陀螺仪数据的读取与简单数据处理
文章目录
- STM32 Cubemax(十一) ——JY901陀螺仪数据的读取与简单数据处理
- 前言
- JY901简单介绍
- 一、上位机调试
- 二、Cubemax配置
- 三、代码
- 包含官方JY901.h文件
- 创建接收结构体和定义一些参数
- 接收处理函数编写和结构体初始化函数
- 一些细节的修改
- 实验结果
- 总结
前言
JY901是维特公司出品的9轴陀螺仪,个人在使用上感觉是十分不错的,他们家的产品都可以使用串口或者IIC来进行数据读取。且内部自带滤波效果,不需要对其数据进行处理,就可以直接使用。
如果买了他们家产品,应该都有他们家的上位机,这里就不给出链接了,如果有需要私聊。
JY901简单介绍
JY901这款陀螺仪,每次发送出来的数据,可以在上位机中查看,且可以在上位机中选择需要发送出来的数据。
我们分析原始数据或者看手册都可以知道,JY901每次发送出来的数据都是11位的,其中第一位位帧头,第二位为判断属于的类型。
一、上位机调试
我们在第一次使用时,记得将陀螺仪水平,然后点击加计校准,来校准陀螺仪。
我们在上位机中点击配置去修改一下陀螺仪的一些配置参数。
这里我将默认9600的波特率改为115200,将陀螺仪发送的内容改为只发送加速度,角速度,欧拉角。
其中加速度的类位为0x51,角速度为0x52,欧拉角为0x53
波特率看你通信需求,如果需要比较高速的情况,建议改为115200.
发送内容也是看需求勾选,然后到时候在代码那里做一点相应的修改即可。
二、Cubemax配置
我这里是直接使用了我之前配置用来和Openmv 通信的配置,详情请看下面这篇博客。
STM32 Cubemax(四) —— STM32利用DMA空闲中断与Openmv通信
配置是一模一样的!
三、代码
我们这里代码主要需要更改的就是接收的结构体,和处理函数。
包含官方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
创建接收结构体和定义一些参数
#define RXBUFFER_LEN 33 //接收3类数据,一共33位typedef struct
{float angle[3];
}Angle;typedef struct
{float a[3];
}Acc;typedef struct
{float w[3];
}SGyro;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; //角速度
}User_USART;
接收处理函数编写和结构体初始化函数
User_USART JY901_data;
struct SAcc stcAcc;
struct SGyro stcGyro;
struct SAngle stcAngle;//接收结构体初始化
void User_USART_Init(User_USART *Data)
{for(uint16_t i=0; i < RXBUFFER_LEN; i++) Data->RxBuffer[i] = 0;Data->frame_head = 0x55;Data->Rx_flag = 0;Data->Rx_len = 0;
}void JY901_Process()
{if(JY901_data.Rx_len < RXBUFFER_LEN) return; //如果位数不对for(uint8_t i=0;i<4;i++){if(JY901_data.RxBuffer[i*11]!= JY901_data.frame_head) return; //如果帧头不对switch(JY901_data.RxBuffer[i*11+1]){case 0x51: memcpy(&stcAcc,&JY901_data.RxBuffer[2 + i*11],8);for(uint8_t j = 0; j < 3; j++) JY901_data.acc.a[j] = (float)stcAcc.a[j]/32768*16; //官方加速度解算break;case 0x52: memcpy(&stcGyro,&JY901_data.RxBuffer[2 + i*11],8);for(uint8_t j = 0; j < 3; j++) JY901_data.w.w[j] = (float)stcGyro.w[j]/32768*2000; //官方角速度解算break;case 0x53: memcpy(&stcAngle,&JY901_data.RxBuffer[2 + i*11],8);for(uint8_t j = 0; j < 3; j++) JY901_data.angle.angle[j] = (float)stcAngle.Angle[j]/32768*180; //官方角度解算break;}}}
一些细节的修改
只需要把我那篇文章里的OpennMv_Data相关的内容都改成JY901_data和把处理函数OpenMvData_Process改成JY901_Process即可
实验结果
可以完美的读出角度,加速度,角加速度的值
总结
因为没有贴出比较详细的配置和代码,但大家只要看懂我那篇Openmv通信的代码配置后,根据其做一些代码修改和移植,是可以正常读出数据的。
完整工程代码下面自取:代码仓库
STM32 Cubemax(十一) ——JY901陀螺仪数据的读取与简单数据处理相关推荐
- 豆瓣新书速递数据爬取与简单数据处理 | 豆瓣爬虫 python pandas
豆瓣新书速递数据爬取与简单数据处理 概要 数据爬取 爬取豆瓣平台提供的数据,存储到本地 json 文件. 数据说明 URL 豆瓣新书速推 HTML https://book.douban.com/la ...
- STM32最小板完成音频数据的读取与DAC播放
目录 一.Flash简单介绍 1.Flash操作流程与操作选址 1.1.Flash操作流程 1.2 .如何查找并选定要写入Flash十六进制地址 2.Flash读写等相关原理 2.1.闪存的读取 2. ...
- MATLAB应用实战系列(五十一)-TXT数据的读取完美教程
前言 TXT文件是纯文本文件,matlab中读取文本文件的常用函数高级函数和低级函数两类型: 高级函数(需要调用一些低级函数,语法简单方便使用,但是可定制性差)包括: load 从文本文件导入数据到M ...
- STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)
文章目录 0.相关基础知识介绍 0.1六轴.九轴传感器有什么区别? 1.JY901模块简介 1.1 产品概述 1.2 性能参数 1.3 实物图和接线 2.软件和使用说明书 3.串口通信JY901 3. ...
- matlab读取grib2数据,matlab读取grib2数据
2018 基于通用模型的 GRIB 格式数据读取技术 王兵,李杰 (1. 南京航空航天大学 民航学院,江苏 南京 211106;2. 国家空管飞行流量技术重点实验室,江苏 南京 211106) 摘要: ...
- 【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
I2C练习 MPU6050简介 寄存器查询表格 STM32CubeMx配置 代码文件 mpu6050.h文件 mpu6050.c文件 main.c文件 总结 MPU6050简介 MPU-6000(60 ...
- 实践 基于 Arduino I2C读取 MPU6050 三轴陀螺仪数据
一.Arduino与MPU-6050的接线 六轴传感器模块MPU6050连线在Arduino UNO板子上,SDA接口对应的是A4引脚,SCL对应的是A5引脚.MPU6050需要5V的电源,可由UNO ...
- 【STM32学习】——USART串口数据包HEX/文本数据包收发流程串口收发HEX/文本数据包实操
文章目录 前言 一.数据包格式(江科大规定) 1.HEX数据包 2.文本数据包 3.两者对比 二.数据包收发流程 1.HEX数据包接收(只演示固定包长) 2.文本数据包接收(只演示可变包长) 三.实操 ...
- 加速度计和陀螺仪数据融合
本帖翻译自 IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南. 这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法.思想的讨论 介绍 本指南旨在向兴趣者介绍惯性M ...
最新文章
- 互联网协议 — HTTP/2 超文本传输协议第 2 版
- Java线程池详解及常用方法
- CloudStack管理员文档 - 虚拟机
- Fedora GNOME 的常用快捷键
- 指针做形参,形参的传递详解
- Oracle 日期时间函数大全
- SNMP实现交换机的信息采集——MIB
- bigdecimal 减_市市场监管局多措并举推进高频事项“减时效”
- linux下运行python unitest_Python单元测试unittest代码详解
- 产品研发测试在敏捷各环节的职责
- v-distpicker
- c语言中scanf的用法
- Teradata天睿公司任命王波为大中华区总裁
- 056.单链表就地逆置
- 给自家人做个招聘广告,前后端和移动工程师看过来
- 唯品会狂飙突进的去向
- 《Linux驱动:Nor flash驱动看这一篇就够了》
- javaWeb用户注册之用户名、密码、邮箱验证例题
- 【牛客网——算法刷题】开篇介绍
- EasyNVR完美搭配腾讯云CDN/阿里云CDN进行RTMP、HLS直播加速的使用说明