STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)

74 篇文章 117 订阅
订阅专栏

本模块支持串口采用串口实现数据采集处理

设备型号选择

目录

设备型号选择

六轴姿态测量陀螺仪模块简介

产品概述

产品特点

引脚说明

 模块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
1VCC3.3V/5V
2RXDPA2(USART2_TX)
3TXDPA3(USART2_RX)
4SCL
5SDA
6GNDGND
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;		//	置0
			USART_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;		//	置0
					
			USART_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文库

吾芯电子工作室

STM32HAL库实现JY61P陀螺仪
2201_75475731的博客
10-01 1037
JY61P可以通过串口进行数据通信,这使得它可以与各种设备和控制器进行连接和交互。下面是关于JY61P串口使用的简要介绍:硬件连接:将JY61P的串口引脚(TX和RX)连接到要使用的设备的串口引脚(如STM32的TX和RX引脚)。同时,确保连接共地(GND)引脚以建立电气连接。通信协议:JY61P使用标准的串口通信协议,通常是UART或USART。要与JY61P进行通信,需要设置相同的波特率(数据传输速率)、数据位、停止位和奇偶校验位等参数。通常,JY61P的默认波特率是115200。
维特智能六轴加速度计电子陀螺仪模块姿态角度传感器振动JY61P
Fred_1986的博客
04-20 736
1.项目介绍 随着车辆增多,道路上路况越来越复杂,尤其是对于半挂车这种中长型的厢式火车来讲,出现安全事故也越来越多,于是渐渐的关于货车监测安全系统行业慢慢崛起,运用两个角度传感器监测车头以及车厢旋转的角度,找到事业盲区,再通过算法调整摄像头进行监控,达到视野盲区的图像补偿 1、运用JY61P定制程序实现航向角监测 2、通过角度传感器给出的角度通过算法补偿摄像头,使摄像头监控视野盲区达到全息投影 2.难点分析 1、货车在路上运动的情况下会有较多的旋转以及震动,走走停停震动引起角度漂移的变化 通过定制算法的到
【传感器】JY61P
冲沖衝的博客
12-01 861
该产品是基于MEMS技术的高性能三维运动姿态测量系统。它包含三轴陀螺仪、三轴加速度计。
STM32G431RBT6读取jy61p数据
keilleil的博客
04-29 455
本贴记录STM32G431RBT6读取jy61p数据的代码以下内容来自手册:打开自带上位机->配置,我设置的参数如下:笔者采用STM32TUBEMX+keil5 HAL库的开发方式来实现。***usart1用于和上位机串口助手通信,usart2和jy61p串口通信。*** (2)打开接收中断,空闲中断,usart2从jy61p处获取原始数据 (3)在jy61p.h和jy61p.c文件里面解算原始数据,获取角速度和姿态jy61p.h jy61p.c (4)在主程序里面循
stm32控制舵机旋转到不同角度
热门推荐
qq_40499719的博客
07-29 8万+
最近学习了stm32,就想用它来控制舵机,然后写下这篇文章分享给大家,如果有理解不到位的地方欢迎大家指正。(我使用的是stm32f103ve型号的开发板,即使和你的型号不同,也有参考价值) 想要控制舵机的转动,首先你得知道舵的工作原理。 舵机的主要组成部分为伺服电机,所谓伺服就是服从信号的要求而动作。在信号来之前,转子停止不动;信号来到之后,转子立即运动。因此我们就可以给舵机输入不同的信号,...
陀螺仪JY61P&维特智能】通过单片机修改波特率和角度参考的方法
嵌入式行业打工人,不定期更新博客。
05-07 576
注:z轴归零需要在六轴算法的前提下,算法切换可以在上位机配置界面修改,九轴设备下的九轴算法是绝对角度,不能归零。2.修改波特率:FF AA 04 06 00。实现效果:单片机上电初始化后XYZ数值为0。4.保存: FF AA 00 00 00。3.保存: FF AA 00 00 00。3.保存: FF AA 00 00 00。1.解锁:FF AA 69 88 B5。1.解锁:FF AA 69 88 B5。1.1延时200ms。2.3延时200ms。1.1延时200ms。1.1延时200ms。
STM32陀螺仪、加速度计传感器的数据融合与姿态估计
weixin_66608063的博客
11-20 962
下面是一个简单的示例代码,演示了如何在STM32实现陀螺仪和加速度计数据的读取和融合,以实现姿态估计功能。本文将介绍如何将陀螺仪和加速度计传感器与STM32微控制器结合使用,通过数据融合算法实现对物体姿态的估计。提供稳定的电源以满足STM32陀螺仪和加速度计的工作需求,建议采用稳压电源或者电池供电。将陀螺仪和加速度计的引脚连接到STM32的对应引脚,通常通过I2C或SPI接口进行通信。通过合理的硬件设计和软件编程,可以针对具体的应用和需求进行姿态估计算法的优化和定制。
STM32】数码管显示按键控制舵机转动的角度(二)
hgfjv的博客
07-03 2265
舵机控制
Arduino驱动MPU-6050三轴加速度+三轴陀螺仪模块
优信电子的博客
06-26 4989
MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用IIC接口连接一个第三方的数字传感器。MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为250,500,1000,2000/秒(dps),加速度计可测范围为2,4,8,16g。......
Arduino Uno 连接JY-61陀螺仪模块 串口读取数据
凌顺实验室
12-07 2万+
最近偶然得到一块JY-61的陀螺仪模块, 其功能是,直接输出MPU6050经卡尔曼滤波等算法得出的角度,角加速度数据 省下很多功夫,但我对其算法更感兴趣 自己焊接的底板,手艺还有待提升 本示例演示的是串口方式读取数据,还有IIC连接,以后有机会再分享 实验效果 BOM Arduino Uno *1 JY-61 *1(含邮票底板) 跳线若...
STM32+陀螺仪+GPS代码
04-19
STM32+陀螺仪+GPS代码,是我们做项目的代码,有需要的可以参考一下
基于STM32陀螺仪数据采集程序
06-11
基于STM32陀螺仪数据采集程序
基于STM32的ICM20602陀螺仪数据获取
12-10
基于STM32的ICM20602陀螺仪数据获取,能够获取原始数据,并对数据做了标准化处理转化成了具体的角度和角速度以及温度
ADXL345陀螺仪模块资料(含源代码)
01-13
ADXL345的资料集合,有datasheet 51的通信代码等等 比较全
STM32实现MLX90614非接触测温串口显示(标准库HAL库实现
07-18
STM32实现MLX90614非接触测温串口显示(标准库HAL库实现) 博客地址: https://blog.csdn.net/XiaoCaiDaYong/article/details/131789415
STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库HAL库实现
最新发布
05-09
STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库HAL库实现) 博客链接: https://blog.csdn.net/XiaoCaiDaYong/article/details/138607812?spm=1001.2014.3001.5501
JY61P与arduino
04-09
的连接操作步骤是什么? 对于这个问题,我可以给您提供一些信息。JY61P是一款6轴惯性测量单元(IMU),通常用于测量物体的角度、加速度和角速度。如果您想将JY61P与Arduino连接起来,可以使用一个4针杜邦线,将JY61P的SCL引脚连接到Arduino的A5引脚,将JY61P的SDA引脚连接到Arduino的A4引脚。此外,您还需要将JY61P的VCC引脚连接到Arduino的5V引脚,将JY61P的GND引脚连接到Arduino的GND引脚。一旦您成功连接了JY61P和Arduino,您就可以使用Arduino编写代码,读取JY61P测量数据并进行相关操作。希望这可以帮助您解决问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • LCD1602芯片的使用——简单易懂 58651
  • 计算并输出给定正整数n的所有因子(不包括1和自身)之和 58223
  • C语言中putchar()函数的使用 50224
  • ESP8266 WIFI模块学习之路(3)——用手机APP进行功能控制LED灯 49300
  • 使用android studio环境新建一个工程——helloworld 48770

分类专栏

  • 工具使用 2篇
  • Java学习 1篇
  • C语言基础 46篇
  • 单片机c语言 74篇
  • android学习 6篇

最新评论

  • STM32F103实现激光测距传感器测距WT-VL53L0 L1

    小材大用: 可能要看它的产品文档

  • STM32F103实现激光测距传感器测距WT-VL53L0 L1

    DiegoGod: 请问用摩天射频L1-40能实现一样的效果吗,为什么我用的时候串口助手没显示距离

  • STM32实现MLX90614非接触测温串口显示(标准库与HAL库实现)

    小材大用: 明天提醒我

  • STM32实现MLX90614非接触测温串口显示(标准库与HAL库实现)

    六根辣条: 大佬,能分享一下HAL库源码吗表情包3082136681@qq.com

  • STM32模拟IIC与IIC四种实现数字光强采集模块GY30(标准库与HAL库)

    xushsb: 解决了解决了

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • C语言实现计算器混合运算(含括号,加减乘除)
  • STM32CubeMX实现4X5矩阵按键(HAL库实现)
  • STM32CubeMX实现矩阵按键(HAL库实现)
2024年4篇
2023年9篇
2022年11篇
2021年14篇
2020年12篇
2019年23篇
2018年21篇
2017年15篇
2016年20篇

目录

目录

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

PHP网站源码横岗模板网站建设罗湖关键词排名爱联seo观澜百度竞价平湖网站改版惠州建站惠州网页制作横岗建网站荷坳企业网站改版横岗关键词排名包年推广平湖seo西乡网站推广方案横岗网络广告推广石岩网站优化软件南联网站推广方案坂田百度竞价包年推广深圳网页制作西乡网站优化按天收费永湖网站制作大运百度seo木棉湾网站制作深圳营销网站坪地百度seo爱联网站推广罗湖百度网站优化排名布吉企业网站改版南澳网络营销大运百度网站优化排名爱联SEO按天扣费民治网站开发歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化