[嵌入式开发模块]GY25倾斜角度传感器 驱动模块

前言

干活中用到了GY25传感器模块,写了相应的驱动程序,放出来。

这个模块本身的协议比较简单,所以模块的驱动也很小巧。

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

GY25简介

概述

GY-25 是一款低成本倾斜度模块。工作电压3-5v 功耗小,体积小。其工作原理,是通过陀螺仪与加速度传感器经过数据融合算法最后得到直接的角度数据。此倾斜度模块以串口TTL 电平全双工方式与上位机进行通信。该产品精度高,稳定性高。能够在任意位置得到准确的角度,输出的波特率有9600bps 与115200bps有连续输出与询问输出两种方式,可适应不同的工作环境。与所有的单片机及电脑连接。

通信协议

(1)串口通信参数(默认波特率值115200 bps,)

波特率:9600 bps 校验位:N 数据位:8 停止位:1
波特率:115200 bps 校验位:N 数据位:8 停止位:1
注意:波特率选择可通过PCB 上焊接点选择。

(2)模块输出格式,每帧包含8 个字节(十六进制):

①.Byte0: 0xAA 帧头标志
②.Byte1: 0x00~0xFF 航向角高8 位
③.Byte2: 0x00~0xFF 航向角低8 位
④.Byte3: 0x00~0xFF 俯仰角高8 位
⑤.Byte4: 0x00~0xFF 俯仰角低8 位
⑥.Byte5: 0x00~0xFF 横滚角高8 位
⑦.Byte6: 0x00~0xFF 横滚角低8 位
⑧.Byte7: 0x55 帧结束标志

计算方法: 角度= 高8 位<<8|低8 位(结果为实际角度乘以100)
例:一帧数据 <0xAA-0x00-0x64-0x03-0XE8-0x27-0x10-0x55>
表示:航向角=1.00 度
俯仰角=10.00 度
横滚角=100.00 度

(3)命令字节,由外部控制器发送至模块(十六进制)

①.0xA5+0x51: 查询模式,直接返回角度值,需每次读取都发送
②.0xA5+0x52: 自动模式,直接返回角度值,只需要初始化时发一次
③.0xA5+0x53: 自动模式,ASCII 码输出,便于直接电脑串口助手查看
④.0xA5+0x54: 校正模式,校正俯仰横滚角0 度,需要保持水平时候发送
⑤.0xA5+0x55: 校正模式,校正航向0 度,航向任意角度清零

驱动文件

GY25Driver.h

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

#ifndef   GY25DRIVER_H
#define   GY25DRIVER_H

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

#include <stdint.h>

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

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

/*
******************************************************************************************
*                                         CONSTANT
******************************************************************************************
*/

// Frame Header byte of data frame
#define GY25DF_HEADER  0xAA
// Frame Ender byte of data frame
#define GY25DF_ENDER   0x55
// length (in byte) of data frame
#define GY25DF_LENGTH  8

// Frame Header byte of command frame
#define GY25CF_HEADER          0xA5
// Query mode
#define GY25CMD_QUERY          0x51
// Automatic mode
#define GY25CMD_AUTO           0x52
// Automatic mode(ASCII)
#define GY25CMD_AUTO_ASCII     0x53
// Calibrate pitch and roll angle
#define GY25CMD_CALI_PITCHROLL 0x54
// Calibrate course angle
#define GY25CMD_CALI_COURSE    0x55

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

typedef struct GY25STRUCT_DATA{
   
   
  int16_t angleCourse;  // = 'real angle' * 100
  int16_t anglePitch ;  // = 'real angle' * 100
  int16_t angleRoll  ;  // = 'real angle' * 100
} GY25Data;

typedef void (* GY25FUNC_DATA)(GY25Data data);

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

void GY25Cmder_Init(void (* outChannel)(uint8_t b));
void GY25Cmder_Query(void);
void GY25Cmder_EnterModeAuto(void);
void GY25Cmder_EnterModeAuto_ASCII(void);
void GY25Cmder_CalibratePitchRoll(void);
void 
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值