[嵌入式开发模块]JY61姿态角度传感器 驱动模块

本文介绍了一种用于JY61姿态角度传感器的驱动程序设计,该程序包括指令器和接收机两部分,支持串口通信,能够处理加速度、角速度和角度数据包,适用于嵌入式系统。

前言

干活中用到了JY61姿态角度传感器,写了相应的驱动程序,放出来。

驱动被设计为拥有指令器和接收机两个部分,完全被动方式运行,与具体的平台解耦,只支持串口通讯。

JY61简介

概述

JY61姿态角度传感器 六轴模块

  • 采用高精度的陀螺加速度计MPU6050,通过处理器读取MPU6050的测量数据然后通过串口输出,免去了用户自己去开发MPU6050复杂的IIC协议,同时精心的PCB布局和工艺保证了MPU6050收到外接的干扰最小,测量的精度最高。
  • 模块内部自带电压稳定电路,可以兼容3.3V/5V的嵌入式系统,连接方便。
  • 采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
  • 模块保留了MPU6050的IIC接口,以满足用户访问底层测量数据(加速度、角速度)的需求。
  • 模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.05度,稳定性极高。

通信协议

(1)串口通信参数

  • 电平:TTL
  • 波特率:9600/115200 bps
  • 停止位:1
  • 校验位0

(2)数据包
模块发送至上位机每帧数据分为3个数据包,分别为加速度包、角速度包和角度包,3个数据包顺序输出。波特率115200时每隔10ms输出一帧数据。

加速度包:

角速度包:

角度包:


(3)控制指令


以上都是从数据手册上复制黏贴下来的,很复杂吧。

但是没事!驱动程序已经都帮你搞定了!

驱动文件

JY61Driver.h

/*
*******************************************************************************************
*
*                                    JY61 DRIVER MODULE
*                                       JY61驱动模块
*
* File : JY61Driver.h
* By   : Lin Shijun(https://blog.youkuaiyun.com/lin_strong)
* Date : 2020/05/03
* version: V1.0
* History: 2020/05/03 V1.0 the prototype
* Note   : The JY61 driver is divided into two part, i.e. cmder and recver. The cmder is for
*          sending the JY61 command. The recver is for resolving data from the JY61.
********************************************************************************************
*/

#ifndef JY61DRIVER_H
#define JY61DRIVER_H

/*
******************************************************************************************
*                                    INCLUDE
******************************************************************************************
*/

#include <stdint.h>

/*
******************************************************************************************
*                                    DEBUG CONFIGURATION
******************************************************************************************
*/

// to enable debug messages in this module
// #define JY61_DEBUG

/*
******************************************************************************************
*                                       TYPE DEFINE
******************************************************************************************
*/

typedef enum {
   
   
  JY61DT_Acc,  // Acceleration
  JY61DT_AgV,  // Angular Velocity
  JY61DT_Ang,  // Angle
} JY61DataType;

typedef struct JY61STRUCT_DATA{
   
   
  JY61DataType t;
  // m/s^2  when t = Acc
  // °/s   when t = AgV
  // °     when t = Ang
  float x;
  float y;
  float z;
  float temp;  // ℃
} JY61Data;

typedef void (* JY61FUNC_DATA)(const JY61Data * data);

/*
************************************************************************************
*                                    INTERFACES
************************************************************************************
*/

void JY61Cmder_Init(void (* outChannel)(uint8_t *buf, uint16_t len));
void JY61Cmder_Destroy(void);
void JY61Cmder_InitializeAngle(void);
void JY61Cmder_CalibrateAccelerometer(void);
void JY61Cmder_SleepOrWakeup(void);
void JY61Cmder_SerialOutput(void);
void JY61Cmder_IICOutput(void);
void JY61Cmder_BaudRate115200(void);
void JY61Cmder_BaudRate9600(void);
void JY61Cmder_HorizontalInstall(void);
void JY61Cmder_VerticalInstall(void);


void JY61Recver_Init(JY61FUNC_DATA onRecvData);
// Call it to modify the call-back function.
void JY61Recver_RegisterCallback(JY61FUNC_DATA onRecvData);
void JY61Recver_CleanupBuffer(void);
// Feed the receiver every byte received so that receiver can notify user
// the resolved data for each frame.
void JY61Recver_Feed(uint8_t nextByte);
void JY61Recver_Destroy(void);

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值