前言
干活中用到了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

6751

被折叠的 条评论
为什么被折叠?



