十轴IMU惯导模块及其应用

一、IMU模块简介

  • 该产品是基于MEMS技术的高性能三维运动姿态测量系统。它包含三轴陀螺仪、三轴加速度计,三轴电子罗盘运动传感器和气压计。通过集成各种高性能传感器和运用自主研发的姿态动力学核心算法引擎,结合高动态卡尔曼滤波融合算法,为客户提供高精度、高动态、实时补偿的三轴姿态角度,通过对各类数据的灵活选择配置,满足不同的应用场景。
  • 领先的基于 Kalman 滤波原理并具有自主知识产权的传感器融合算法,可以实时提供高达 200Hz更新率的数据,从而满足各种高精度的应用需求,实现准确的动作捕捉和姿态估计。产品内部集成自主研发的高精度校准和标定算法,提高产品的测量精度。
    在这里插入图片描述

二、移植过程

笔者由于使用 STM32F407ZGT6作主控,而亚博官方给的demo是STM32F1003C8T6,移植过程好曲折。首先我是想用IIC读取IMU模块的数据,然后发现很寄,不论怎么做读出来的数据都是0,改了快一个星期还没搞定;

1.IIC

官方给的例程里面,wit_c_sdk.h,wit_c_sdk.c,IOI2C.h,IOI2C.c,REG.h文件只有IOI2C是需要修改的部分,然后需要改的就是寄存器的部分,从这样
在这里插入图片描述
改成这样
在这里插入图片描述
都是哥们一行一行对着芯片手册改的,这是服了。
在这里插入图片描述
在这里插入图片描述
然后转而用串口读取数据,一两个小时就搞定了。
现在都不知道哪出问题了。

串口

需要使能两个串口,一个是向上位机也就是电脑发送数据,另一个是,利用串口读取IMU惯导模块的数据。首先需要在cube中配置UART/USART,打开与IMU进行串口同行的UART/USART的全局中断。
在keil的MX_UART4_Init中使能中断

HAL_UART_Receive_IT(&huart4, (uint8_t*)&RX_buffer, 1);  //手动开启中断

将中断服务函数从这样

void UART4_IRQHandler(void)
{
	unsigned char ucTemp;
	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
	{
		ucTemp = USART_ReceiveData(USART2);
		WitSerialDataIn(ucTemp);
		USART_ClearITPendingBit(USART2, USART_IT_RXNE);
	}
}
void Uart2Send(unsigned char *p_data, unsigned int uiSize)
{	
	unsigned int i;
	for(i = 0; i < uiSize; i++)
	{
		while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
		USART_SendData(USART2, *p_data++);		
	}
	while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
}

修改成这样

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == UART4)
    {
		WitSerialDataIn(RX_buffer);
//		printf("RX_buffer=%d",RX_buffer);
    }		
    HAL_UART_Receive_IT(&huart4, (uint8_t*)&RX_buffer, 1);
}
void Uart4Send(unsigned char *p_data, unsigned int uiSize)
{	
	 HAL_UART_Transmit(&huart4, (uint8_t *)p_data, uiSize, 1000);
}

因为HAL库的串口通信不需要阻塞式的接收数据,采用的是超时管理的机制,只需要数据收到时候要紧数据处理的函数就行。
在这里插入图片描述
三个轴的加速度计(Accelerometer,缩写为acc),三个轴的陀螺仪(Gyroscope,缩写为gyro),三个轴的磁力计(Magnetometer,缩写为mag),角度就直接是angle

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值