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陀螺仪数据的读取与简单数据处理相关推荐

  1. 豆瓣新书速递数据爬取与简单数据处理 | 豆瓣爬虫 python pandas

    豆瓣新书速递数据爬取与简单数据处理 概要 数据爬取 爬取豆瓣平台提供的数据,存储到本地 json 文件. 数据说明 URL 豆瓣新书速推 HTML https://book.douban.com/la ...

  2. STM32最小板完成音频数据的读取与DAC播放

    目录 一.Flash简单介绍 1.Flash操作流程与操作选址 1.1.Flash操作流程 1.2 .如何查找并选定要写入Flash十六进制地址 2.Flash读写等相关原理 2.1.闪存的读取 2. ...

  3. MATLAB应用实战系列(五十一)-TXT数据的读取完美教程

    前言 TXT文件是纯文本文件,matlab中读取文本文件的常用函数高级函数和低级函数两类型: 高级函数(需要调用一些低级函数,语法简单方便使用,但是可定制性差)包括: load 从文本文件导入数据到M ...

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

    文章目录 0.相关基础知识介绍 0.1六轴.九轴传感器有什么区别? 1.JY901模块简介 1.1 产品概述 1.2 性能参数 1.3 实物图和接线 2.软件和使用说明书 3.串口通信JY901 3. ...

  5. matlab读取grib2数据,matlab读取grib2数据

    2018 基于通用模型的 GRIB 格式数据读取技术 王兵,李杰 (1. 南京航空航天大学 民航学院,江苏 南京 211106;2. 国家空管飞行流量技术重点实验室,江苏 南京 211106) 摘要: ...

  6. 【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪

    I2C练习 MPU6050简介 寄存器查询表格 STM32CubeMx配置 代码文件 mpu6050.h文件 mpu6050.c文件 main.c文件 总结 MPU6050简介 MPU-6000(60 ...

  7. 实践 基于 Arduino I2C读取 MPU6050 三轴陀螺仪数据

    一.Arduino与MPU-6050的接线 六轴传感器模块MPU6050连线在Arduino UNO板子上,SDA接口对应的是A4引脚,SCL对应的是A5引脚.MPU6050需要5V的电源,可由UNO ...

  8. 【STM32学习】——USART串口数据包HEX/文本数据包收发流程串口收发HEX/文本数据包实操

    文章目录 前言 一.数据包格式(江科大规定) 1.HEX数据包 2.文本数据包 3.两者对比 二.数据包收发流程 1.HEX数据包接收(只演示固定包长) 2.文本数据包接收(只演示可变包长) 三.实操 ...

  9. 加速度计和陀螺仪数据融合

    本帖翻译自 IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南. 这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法.思想的讨论 介绍 本指南旨在向兴趣者介绍惯性M ...

最新文章

  1. 互联网协议 — HTTP/2 超文本传输协议第 2 版
  2. Java线程池详解及常用方法
  3. CloudStack管理员文档 - 虚拟机
  4. Fedora GNOME 的常用快捷键
  5. 指针做形参,形参的传递详解
  6. Oracle 日期时间函数大全
  7. SNMP实现交换机的信息采集——MIB
  8. bigdecimal 减_市市场监管局多措并举推进高频事项“减时效”
  9. linux下运行python unitest_Python单元测试unittest代码详解
  10. 产品研发测试在敏捷各环节的职责
  11. v-distpicker
  12. c语言中scanf的用法
  13. Teradata天睿公司任命王波为大中华区总裁
  14. 056.单链表就地逆置
  15. 给自家人做个招聘广告,前后端和移动工程师看过来
  16. 唯品会狂飙突进的去向
  17. 《Linux驱动:Nor flash驱动看这一篇就够了》
  18. javaWeb用户注册之用户名、密码、邮箱验证例题
  19. 【牛客网——算法刷题】开篇介绍
  20. EasyNVR完美搭配腾讯云CDN/阿里云CDN进行RTMP、HLS直播加速的使用说明

热门文章

  1. showToast的使用
  2. 打马赛克就安全了吗?GitHub热榜的“AI消除马赛克”,上线三天收获近万star
  3. 通过爬虫爬取一些图片
  4. debian linux下载路径,Debian 常用命令,debian常用命令
  5. linux调节伽马值软件,LightBulb(屏幕伽马值自动调整)
  6. qt 不规则图形 消除锯齿
  7. 51蛋骗鸡数码管显示A-Z字母
  8. 【合作伙伴大练兵-安全】NGFW盒式防火墙问题排查和维护
  9. 史上首例!阿里程序员写的这一行代码,被国家博物馆收藏了
  10. linux添加驱动模块,Linux驱动模块添加