STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)
本模块支持串口采用串口实现数据采集和处理
设备型号选择
目录
设备型号选择
六轴姿态测量陀螺仪模块简介
产品概述
产品特点
引脚说明
模块UART与MCU连接
应用领域
模块与单片机的接线表设计
标准库实现
HAL库实现
单片机选择:STM32F103
维特智能六轴加速度电子陀螺仪传感器姿态角度测量模块:JY61P
六轴姿态测量陀螺仪模块简介
产品概述
- 该产品是基于MEMS技术的高性能三维运动姿态测量系统。它包含三轴陀螺仪、三轴加速度计。通过集成各种高性能传感器和运用自主研发的姿态动力学核心算法引擎,结合高动态卡尔曼滤波融合算法,为客户提供高精度、高动态、实时补偿的三轴姿态角度,通过对各类数据的灵活选择配置,满足不同的应用场景。
- 领先的基于 Kalman 滤波原理并具有自主知识产权的传感器融合算法,可以实时提供高达 200Hz 更新率的数据,从而满足各种高精度的应用需求,实现准确的动作捕捉和姿态估计。
- 拥有国内领先的高精度转台设备仪器,产品内部集成自主研发的高精度校准和标定算法,提高产品的测量精度。
- 同时提供用户所需要的各种上位机、使用说明、开发手册、开发代码,使得针对各类需求的研发产品特点时间降至最低。
产品特点
- 模块集成高精度的陀螺仪、加速度计,采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法,能够快速求解出模块当前的实时运动姿态。
- 采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
- 模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态, 姿态测量精度 0.2度 ,稳定性极高,性能甚至优于某些专业的倾角仪。
- 模块内部自带电压稳定电路,工作电压3.3~5V,引脚电平兼容3.3V/5V的嵌入式系统,连接方便。
- 支持串口和IIC两种数字接口。方便用户选择最佳的连接方式。串口速率4800bps~230400bps可调,IIC接口支持全速400K速率。
- 最高200Hz数据输出速率。输出内容可以任意选择,输出速率0.2~200Hz可调节。
- 保留4路扩展端口,可以分别配置为模拟输入,数字输入,数字输出等功能。
- 具备GPS连接能力。可接受符合NMEA-0183标准的串口GPS数据,形成GPS-IMU组合导航单元。
- 采用邮票孔镀金工艺,可嵌入用户的PCB板中。
- 4层PCB板工艺,更薄、更小、更可靠。
引脚说明
模块UART与MCU连接
应用领域
● 虚拟现实/增强现实,头戴显示器
● 大规模农业自动耕种
● 高空作业安全监控
● 无人机,载人飞行器
● 工业姿态监控
● 人体动作跟踪/捕捉
● 机器人,自动引导运输车
● 行人导航
● 无人驾驶/辅助驾驶
● 军事,智能武器装备
模块与单片机的接线表设计
序号 | 激光测距模块 | 单片机STM32 |
1 | VCC | 3.3V/5V |
2 | RXD | PA2(USART2_TX) |
3 | TXD | PA3(USART2_RX) |
4 | SCL | |
5 | SDA | |
6 | GND | GND |
7 | - | PA9(USART1_TX) |
8 | - | PA10(USART1_RX) |
标准库实现
核心代码如下:
void USART2_IRQHandler(void) //串口2中断服务程序
{char tempBuffer[100] = ""; // 中间转存数组char i = 0; // 循环变量 if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){USART_ClearITPendingBit(USART2, USART_IT_RXNE);//清除标志位aRxBuffer =USART_ReceiveData(USART2);//(USART1->DR); //读取接收到的数据RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; // 接收数据if(2 == Uart1_Rx_Cnt && (0X55 != RxBuffer[0] || 0X51 != RxBuffer[1])){memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组Uart1_Rx_Cnt = 0; // 置0USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断 为了处理数据return;}if(44 == Uart1_Rx_Cnt){RxSucceeflag = 1; // 数据成功接收标志USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);//关闭串口接受中断 为了处理数据if(0X51 == RxBuffer[1]){memset(tempBuffer,0x00,sizeof(tempBuffer)); //清空数组for(i=0;i<11;i++){tempBuffer[i] = RxBuffer[i]; }if(1 == checkSum(tempBuffer)){aX = (float)((float)((RxBuffer[3]<<8)|RxBuffer[2])/32768.0*16*9.8);aY = (float)((float)((RxBuffer[5]<<8)|RxBuffer[4])/32768.0*16*9.8);aZ = (float)((float)((RxBuffer[7]<<8)|RxBuffer[6])/32768.0*16*9.8);//USART_SendData(USART1, 'A');}}if(0X52 == RxBuffer[12]){memset(tempBuffer,0x00,sizeof(tempBuffer)); //清空数组for(i=11;i<22;i++){tempBuffer[i-11] = RxBuffer[i]; }if(1 == checkSum(RxBuffer)){wX = (float)(((RxBuffer[14]<<8)|RxBuffer[13])/32768.0*2000);wY = (float)(((RxBuffer[16]<<8)|RxBuffer[15])/32768.0*2000);wZ = (float)(((RxBuffer[18]<<8)|RxBuffer[17])/32768.0*2000);//USART_SendData(USART1, 'B');}}if(0X53 == RxBuffer[23]){memset(tempBuffer,0x00,sizeof(tempBuffer)); //清空数组for(i=22;i<33;i++){tempBuffer[i-22] = RxBuffer[i]; }if(1 == checkSum(RxBuffer)){RollX = (float)(((RxBuffer[25]<<8)|RxBuffer[24])/32768.0*180);PitchY = (float)(((RxBuffer[27]<<8)|RxBuffer[26])/32768.0*180);YawZ = (float)(((RxBuffer[29]<<8)|RxBuffer[28])/32768.0*180);//USART_SendData(USART1, 'C'); }}memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组Uart1_Rx_Cnt = 0; // 置0USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断 为了处理数据}}
}
实现效果:
HAL库实现
核心代码:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{char tempBuffer[100] = ""; // 中间转存数组char i = 0; // 循环变量 /* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE: This function Should not be modified, when the callback is needed,the HAL_UART_TxCpltCallback could be implemented in the user file*/if(huart == &huart2){ //while(HAL_OK != HAL_UART_Transmit(&huart1, (uint8_t *)RxBuffer, 44,0xFFFF)); // 输出指定长度if(0X55 != RxBuffer[0] || 0X51 != RxBuffer[1]){memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组while(HAL_OK != HAL_UART_Transmit(&huart1, (uint8_t *)"ERROR", 5,0xFFFF)); // 输出指定长度while(HAL_OK != HAL_UART_Receive_IT(&huart2, (uint8_t *)RxBuffer, 44)); //开启接收中断,并保证开启成功 return;}RxSucceeflag = 1; // 数据成功接收标志if(0X51 == RxBuffer[1]){memset(tempBuffer,0x00,sizeof(tempBuffer)); //清空数组for(i=0;i<11;i++){tempBuffer[i] = RxBuffer[i]; }if(1 == checkSum(tempBuffer)){aX = (float)((float)((RxBuffer[3]<<8)|RxBuffer[2])/32768.0*16*9.8);aY = (float)((float)((RxBuffer[5]<<8)|RxBuffer[4])/32768.0*16*9.8);aZ = (float)((float)((RxBuffer[7]<<8)|RxBuffer[6])/32768.0*16*9.8);//while(HAL_OK != HAL_UART_Transmit(&huart1, (uint8_t *)"加速度\r\n", strlen("加速度\r\n"),0xFFFF));}}if(0X52 == RxBuffer[12]){memset(tempBuffer,0x00,sizeof(tempBuffer)); //清空数组for(i=11;i<22;i++){tempBuffer[i-11] = RxBuffer[i]; }if(1 == checkSum(RxBuffer)){wX = (float)(((RxBuffer[14]<<8)|RxBuffer[13])/32768.0*2000);wY = (float)(((RxBuffer[16]<<8)|RxBuffer[15])/32768.0*2000);wZ = (float)(((RxBuffer[18]<<8)|RxBuffer[17])/32768.0*2000);//while(HAL_OK != HAL_UART_Transmit(&huart1, (uint8_t *)"角速度\r\n", strlen("角速度\r\n"),0xFFFF));}}if(0X53 == RxBuffer[23]){memset(tempBuffer,0x00,sizeof(tempBuffer)); //清空数组for(i=22;i<33;i++){tempBuffer[i-22] = RxBuffer[i]; }if(1 == checkSum(RxBuffer)){RollX = (float)(((RxBuffer[25]<<8)|RxBuffer[24])/32768.0*180);PitchY = (float)(((RxBuffer[27]<<8)|RxBuffer[26])/32768.0*180);YawZ = (float)(((RxBuffer[29]<<8)|RxBuffer[28])/32768.0*180);//while(HAL_OK != HAL_UART_Transmit(&huart1, (uint8_t *)"滚转角\r\n", strlen("滚转角\r\n"),0xFFFF));}}memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组while(HAL_OK != HAL_UART_Receive_IT(&huart2, (uint8_t *)RxBuffer, 44)); //开启接收中断,并保证开启成功 }
}
实现效果:
如有问题或需求可私信交流
源码链接(标准库与HAL库):
STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)-C文档类资源-CSDN文库
吾芯电子工作室
STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)相关推荐
- 维特智能六轴加速度计电子陀螺仪模块姿态角度传感器振动JY61P
1.项目介绍 近年来随着台风.洪水.泥石流塌陷等灾害性天气频发,古树名木,园林树木,大自然树木等会遭到严重破坏,基于安全管理和科学应对目的,梳理受损古树名木的类别.危害.日常预防和应急清理措施以及遇到 ...
- 三轴加速度传感器和六轴惯性传感器_一文读懂三轴,六轴,MEMS陀螺仪(角速率传感器)的区别...
原标题:一文读懂三轴,六轴,MEMS陀螺仪(角速率传感器)的区别 随着现代科技的不断发展,陀螺仪也被应用到越来越多的领域和行业,例如我们常见纸飞机等飞行类游戏,赛车类游戏等.以陀螺仪为核心的惯性制导系 ...
- 【STM32】标准库与HAL库对照学习教程六--位带操作
[STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...
- STM32标准库、HAL库特点与应用
新手在入门STM32的时候,一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发. 对于刚入门的朋友可能没法直观了解这些不同开发发方式彼此之间的区别,本文试图以一种非常直白的方 ...
- 【STM32】标准库与HAL库对照学习教程八--串口通信详解
[STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...
- 【STM32】STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲
[STM32]STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲 一.前言 二.时钟是什么 三.时钟树 1.时钟树图 2.时钟树讲解 左边部分 中间部分 右边部分 特殊部分 四.初始化 ...
- 【STM32】标准库与HAL库对照学习教程外设篇--超声波测距传感器
[STM32]标准库与HAL库对照学习教程外设篇--超声波测距传感器 一.前言 二.准备工作 三.超声波测距传感器 1.原理说明 2.使用说明 四.标准库使用传感器 1.实验程序 2.实验效果 五.H ...
- 【STM32学习】(30)STM32实现18B20温度采集(标准库和HAL库实现)
单片机型号:STM32F103 源码下载链接:(2条消息) STM32实现18B20温度采集(标准库和HAL库实现)-电信文档类资源-CSDN下载 现要求完成温度采集并在串口或液晶屏上显示.我们这里使 ...
- 【STM32】标准库与HAL库对照学习教程十三--软件IIC控制AT24C02
[STM32]标准库与HAL库对照学习教程十三--软件IIC控制AT24C02 一.前言 二.准备工作 三.AT24C02(EEPROM)介绍 1.AT24C02简介 2.引脚功能 3.设备地址 四. ...
最新文章
- pytorch的backward
- 【深度学习】深入浅出nnUnet的数据处理方法
- python编程入门t-python高级编程——入门语法(二)
- python fetchall方法_Python连接MySQL并使用fetchall()方法过滤特殊字符
- boost::lambda::member_pointer_action用法的测试程序
- 彩扩机项目--死区,另辟蹊径使用即将导通的一路的电压得能量对需要关闭的一路的电容进行放电...
- Rust 多久更新一次?
- 解析mysqlbinlog日志_关于mysql-binlog日志解析框架
- svn汉化插件安装步骤
- kafka开启kerberos,报错server not found in kerberos database
- linux sz命令详解,Linux中rz命令和sz命令使用详解大全
- vue、vant上传附件功能实现
- linux系统下安装wrk和使用
- 互联网公司客户如何选择短信平台或短信通道需要知道的基本知识
- ❤Linux文件、目录与磁盘格式总结❤
- 常用数据结构与经典算法 简单讲解与示例代码
- python程序设计搜题软件_智慧职教云课堂APPPython程序设计(常州工业职业技术学院)期末考试搜题公众号答案...
- 地图渲染——四色定理的实现(AO+C++)
- 双通道中频信号数字下变频及相位差估计(FPGA)
- 三、全国计算机三级数据库考试——操作题(1—5套)