0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32H5开发陀螺仪LSM6DSV16X(5)----上报匿名上位机

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 2025-12-30 17:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协议上报到上位机。通过获取传感器的四元数数据,并将其转换为欧拉角(Roll、Pitch、Yaw),然后按照协议格式化数据帧并通过串口传输到上位机。上位机接收后可进行实时显示和分析。这种方式广泛应用于姿态检测和控制系统,特别适合无人机机器人等需要姿态控制的场景。

最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。

视频教学

[https://www.bilibili.com/video/BV1sS5bzkEU9/]

样品申请

[https://www.wjx.top/vm/OhcKxJk.aspx#]

源码下载

[https://download.csdn.net/download/qq_24312945/91359810]

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。

主控为STM32H503CB,陀螺仪为LSM6DSV16X,磁力计为LIS2MDL。

参考程序

[https://github.com/CoreMaker-lab/STM32H503_LSM6DSV16X_LIS2MDL]

[https://gitee.com/CoreMaker/STM32H503_LSM6DSV16X_LIS2MDL]

上位机通讯

这里使用的是匿名助手的上位机

https://gitee.com/anotc/AnoAssistant

有专门的通讯协议

串口通讯协议格式如下所示,需要注意传输为小端模式传输。

对应的源地址和目标地址分别为0xFD和0xFE。

我们只需要上报加速度和陀螺仪数据,所以功能码为0x01,数据长度为0x0D,需要主要为小端模式传输。

陀螺仪工作方式

加速度计测量线性加速度,而陀螺仪测量角旋转。为此,他们测量了科里奥利效应产生的力。

陀螺仪是一种运动传感器,能够感测物体在一轴或多轴上的旋转角速度。它能够精确地感测自由空间中复杂的移动动作,因此成为追踪物体移动方位和旋转动作的必要设备。与加速计和电子罗盘不同,陀螺仪不需要依赖外部力量(如重力或磁场),可以自主地发挥其功能。因此,从理论上讲,只使用陀螺仪就可以完成姿态导航的任务。

陀螺仪的每个通道检测一个轴的旋转。也就是说陀螺仪通过测量自身的旋转状态,判断出设备当前运动状态,是向前、向后、向上、向下、向左还是向右呢,是加速(角速度)还是减速(角速度)呢,都可以实现,但是要判断出设备的方位(东西南北),陀螺仪就没有办法。

MEMS陀螺仪主要利用科里奥利力(旋转物体在有径向运动时所受到的切向力)原理,公开的微机械陀螺仪均采用振动物体传感角速度的概念,利用振动来诱导和探测科里奥利力。

MEMS陀螺仪的核心是一个微加工机械单元,在设计上按照一个音叉机制共振运动,通过科里奥利力原理把角速率转换成一个特定感测结构的位移。

两个相同的质量块以方向相反的做水平震荡。当外部施加一个角速率,就会出现一个科氏力,力的方向垂直于质量运动方向,如垂直方向箭头所示。产生的科氏力使感测质量发生位移,位移大小与所施加的角速率大小成正比,科氏力引起的电容变化即可计算出角速率大小。

科里奥利效应指出,当质量 (m) 以速度 (v) 沿特定方向移动并施加外部角速率 (Ω)(红色箭头)时,科里奥利效应会产生一个力(黄色箭头),导致质量垂直移动。该位移的值与应用的角速率直接相关。

变量定义。

/* USER CODE BEGIN 2 */
    float Yaw,Pitch,Roll;  //偏航角,俯仰角,翻滚角
    int16_t    acc_int16[3]    ={0,0,0};
    int16_t    gyr_int16[3]        ={0,0,0};    
    float acc[3] = {0};
    float gyr[3] = {0};    

    uint8_t data[21]={0};
    data[0]=0xAB;//帧头
    data[1]=0xFD;//源地址
    data[2]=0xFE;//目标地址        
    data[3]=0x01;//功能码ID    
    data[4]=0x0D;//数据长度LEN
    data[5]=0x00;//数据长度LEN 13

    uint8_t sumcheck = 0;
    uint8_t addcheck = 0;        


    int16_t angular_rate_raw[3]={0,0,0};    //pitch,roll,yaw
    uint8_t data_angular_rate_raw[16]={0};
    data_angular_rate_raw[0]=0xAB;//帧头
    data_angular_rate_raw[1]=0xFD;//源地址
    data_angular_rate_raw[2]=0xFE;//目标地址        
    data_angular_rate_raw[3]=0x03;//功能码ID    
    data_angular_rate_raw[4]=0x08;//数据长度LEN
    data_angular_rate_raw[5]=0x00;//数据长度LEN 8
    data_angular_rate_raw[6]=0x01;//mode = 1    

    data_angular_rate_raw[13]=0x00;//FUSION _STA:融合状态        
  /* USER CODE END 2 */

欧拉角数据的转换

将欧拉角 Roll、Pitch、Yaw 乘以 100,以保留两位小数的精度。并且为 Yaw 数据减去了 18000,这通常是为了将欧拉角的范围转换为 [-18000, 18000] 这样方便传输的范围。

Roll=euler[2];
                Pitch=euler[1];
                Yaw=euler[0];                    

                int16_t    Roll_int16;
                int16_t    Pitch_int16;                    
                int16_t    Yaw_int16;    

                Roll_int16 = (int16_t)(Roll);
                Pitch_int16 = (int16_t)(Pitch);
                Yaw_int16 = (int16_t)(Yaw);        


                Roll_int16=Roll_int16*100;
                Pitch_int16=Pitch_int16*100;
                Yaw_int16=Yaw_int16*100-18000;

数据帧填充

将转换后的 Roll_int16、Pitch_int16 和 Yaw_int16 数据依次填充到数据帧的相应位置。

//                Roll=Roll*100;
//                Pitch=Pitch*100;
//                Yaw=Yaw*100;
                data_angular_rate_raw[7]=Roll_int16 >>8;//roll
                data_angular_rate_raw[8]=Roll_int16;
                data_angular_rate_raw[9]=Pitch_int16 >>8;//pitch
                data_angular_rate_raw[10]=Pitch_int16;
                data_angular_rate_raw[11]=Yaw_int16 >>8;//yaw
                data_angular_rate_raw[12]=Yaw_int16;

校验和计算

使用了双层循环求和来计算校验和,这是一种累加和的方法,确保帧数据的完整性。

data_angular_rate_raw[13]=0;
                sumcheck = 0;
                addcheck = 0;
                for(uint16_t i=0; i < 14; i++)
                {
                sumcheck += data_angular_rate_raw[i]; //从帧头开始,对每一字节进行求和,直到 DATA 区结束
                addcheck += sumcheck; //每一字节的求和操作,进行一次 sumcheck 的累加
                }
                data_angular_rate_raw[14]=sumcheck;
                data_angular_rate_raw[15]=addcheck;

数据发送

通过 UART 发送封装好的 16 字节数据帧。

HAL_UART_Transmit(&huart1 , (uint8_t *)&data_angular_rate_raw, 16, 0xFFFF);    
//                printf("Roll=%.2f,Pitch=%.2f,Yaw=%.2fn",Roll,Pitch,Yaw)

演示

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2578

    文章

    55526

    浏览量

    794010
  • 陀螺仪
    +关注

    关注

    44

    文章

    897

    浏览量

    102117
  • 上位机
    +关注

    关注

    28

    文章

    1038

    浏览量

    57365
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32H5开发陀螺仪LSM6DSV16X(4)----中断获取SFLP四元数

    本文将介绍如何通过中断机制获取 LSM6DSV16X 传感器的 SFLP(Sensor Fusion Low Power)四元数数据。LSM6DSV16X 是一款高性能的 6 轴惯性传感器,支持
    的头像 发表于 12-30 17:05 2885次阅读
    <b class='flag-5'>STM32H5</b><b class='flag-5'>开发</b><b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>(4)----中断获取SFLP四元数

    陀螺仪LSM6DSV16X与AI集成(1)----轮询获取陀螺仪数据

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据。读取到的数据
    的头像 发表于 12-18 10:49 3522次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与AI集成(1)----轮询获取<b class='flag-5'>陀螺仪</b>数据

    陀螺仪LSM6DSV16X与AI集成(2)----姿态解算

    LSM6DSV16X包含三轴陀螺仪与三轴加速度计。
    的头像 发表于 12-18 10:51 4738次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与AI集成(2)----姿态解算

    陀螺仪LSM6DSV16X与AI集成(3)----读取融合算法输出的四元数

    LSM6DSV16X 特性涉及到的是一种低功耗的传感器融合算法(Sensor Fusion Low Power, SFLP). 低功耗传感器融合(SFLP)算法:
    的头像 发表于 12-18 10:53 3042次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与AI集成(3)----读取融合算法输出的四元数

    陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置

    LSM6DSV16X是一款高性能、低功耗的6轴IMU传感器,集成了3轴加速度计和3轴陀螺仪。本文将详细介绍如何配置和读取LSM6DSV16X传感器的FIFO数据,包括初始化、配置以及数
    的头像 发表于 07-18 10:40 3746次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与AI集成(7)----FIFO数据读取与配置

    陀螺仪LSM6DSOW开发(2)----上报匿名上位实现可视化

    本文档详细介绍了如何使用匿名助手的上位实现加速度计和陀螺仪数据的可视化显示。内容涵盖了加速度计和陀螺仪的工作原理、
    的头像 发表于 08-05 09:52 3287次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6</b>DSOW<b class='flag-5'>开发</b>(2)----<b class='flag-5'>上报</b><b class='flag-5'>匿名</b><b class='flag-5'>上位</b><b class='flag-5'>机</b>实现可视化

    陀螺仪LSM6DSV16X与AI集成(13)----中断获取SFLP四元数

    本文将介绍如何通过中断机制获取 LSM6DSV16X 传感器的 SFLP(Sensor Fusion Low Power)四元数数据。LSM6DSV16X 是一款高性能的 6 轴惯性传感器,支持
    的头像 发表于 11-25 11:44 3676次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与AI集成(13)----中断获取SFLP四元数

    陀螺仪LSM6DSV16X与AI集成(14)----上报匿名上位

    本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协议上报到上位。通过获取传感器的四元数数据,并将其转换为欧拉角(Roll、Pitch、Yaw),然后按照协议格式化
    的头像 发表于 11-25 11:53 4150次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与AI集成(14)----<b class='flag-5'>上报</b><b class='flag-5'>匿名</b><b class='flag-5'>上位</b><b class='flag-5'>机</b>

    STM32H5开发陀螺仪LSM6DSV16X(1)----轮询获取陀螺仪数据

    本文将介绍如何通过轮询(Polling)方式从LSM6DSV16X六轴惯性传感器中获取陀螺仪数据。轮询模式是一种常用的传感器读取方式,主控MCU定期查询陀螺仪输出寄存器,无需依赖中断机制即可实现数据采集。该方法适用于对响应时延要
    的头像 发表于 12-22 17:28 5904次阅读
    <b class='flag-5'>STM32H5</b><b class='flag-5'>开发</b><b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>(1)----轮询获取<b class='flag-5'>陀螺仪</b>数据

    请问lsm6dsv16x可以直接读取触摸手势吗?

    已经读出来了LSM6DSV16x的QVRmv值,也写出了单击的状态。但是在写触摸滑动手势时没有找到好的计算方式。请问是不是有直接读出这些手势的函数?
    发表于 07-02 08:14

    LSM6DSV16X内置的传感器融合算法SFLP,输出的四元数是自身坐标系下的还是全局坐标系下的?

    请问各位大佬,LSM6DSV16X内置的传感器融合算法SFLP,输出的四元数是自身坐标系下的还是全局坐标系下的?以及输出的陀螺仪偏置是实时更新的吗?谢谢!
    发表于 03-14 07:22

    ST LSM6DSV16X iNEMO惯性模块相关的使用信息和应用提示

    AN5763,LSM6DSV16X是一款ST的3 轴加速度计和 3 轴陀螺仪LSM6DSV16X 是系统级封装的 3 轴数字加速度计和 3 轴数字陀螺仪,具有数字 I²C、SPI
    发表于 08-31 11:12 0次下载

    LSM6DSV16X基于MLC智能笔动作识别(1)----轮询获取陀螺仪数据

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据。读取到的数据
    的头像 发表于 10-16 10:38 2624次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能笔动作识别(1)----轮询获取<b class='flag-5'>陀螺仪</b>数据

    LSM6DSV16X:集成机器学习与静电感应的高性能惯性测量单元

    STMicroelectronics LSM6DSV16X iNEMO惯性模块是一款三轴数字加速度计和三轴数字陀螺仪LSM6DSV16X具有三个内核,用于处理三个独立通道上的加速度和角速率数据
    的头像 发表于 10-28 11:52 1077次阅读
    <b class='flag-5'>LSM6DSV16X</b>:集成机器学习与静电感应的高性能惯性测量单元

    STM32H5开发陀螺仪LSM6DSV16X(3)----SFLP获取四元数

    在现代的运动跟踪和姿态检测应用中,低功耗、高精度的传感器数据融合处理变得越来越重要。LSM6DSV16X传感器集成了SFLP(Sensor Fusion Low Power)算法模块,可以在低功耗
    的头像 发表于 12-22 17:37 2935次阅读
    <b class='flag-5'>STM32H5</b><b class='flag-5'>开发</b><b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>(3)----SFLP获取四元数