一起游 手游攻略 手游评测 STM32H5开发陀螺仪LSM6DSV16X(5)----上报匿名上位机

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

时间: 来源:互联网 浏览:0

概述

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

我目前正在学习ST 和Renesas 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,需要主要以little endian模式传输。

陀螺仪工作方式

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

陀螺仪是一种运动传感器,能够感测物体在一个或多个轴上的旋转角速率。它可以准确地感知自由空间中的复杂运动,使其成为跟踪物体的运动、方向和旋转的必备设备。与加速度计和电子罗盘不同,陀螺仪不需要依赖外力(例如重力或磁场),可以自主执行其功能。因此,理论上,仅利用陀螺仪就可以完成姿态导航的任务。

陀螺仪的每个通道检测一个轴的旋转。也就是说,陀螺仪可以通过测量自身的旋转状态来确定设备当前的运动状态,是向前、向后、上、下、左、右,是加速(角速度)还是减速(角速度),但无法确定设备的方位(北、东、西、南)。

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

MEMS陀螺仪的核心是微加工机械单元,其设计为根据音叉机构共振运动,并通过科里奥利力原理将角速率转换为特定传感结构的位移。

两个相同质量的物体沿相反方向水平振荡。当外部施加角速率时,就会出现科里奥利力。力的方向垂直于质量运动的方向,如垂直箭头所示。产生的科里奥利力使传感质量发生位移,并且位移与施加的角速率成正比。角速率可以根据科里奥利力引起的电容变化来计算。

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

变量定义。

/* 用户代码开始2 */float 偏航、俯仰、横滚; //偏航角、俯仰角、横滚角int16_t acc_int16[3]={0,0,0}; int16_t gyr_int16[3]={0,0,0};浮点数acc[3]={0};浮动陀螺仪[3]={0}; uint8_t 数据[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}; //俯仰、横滚、偏航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]的范围,以方便传输。

滚=欧拉[2];螺距=欧拉[1];偏航=欧拉[0]; int16_t Roll_int16; int16_t Pitch_int16; int16_t Yaw_int16; (int16_t)(偏航); Roll_int16=Roll_int16*100; Pitch_int16=Pitch_int16*100; Yaw_int16=Yaw_int16*100-18000;

数据帧填充

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

//横滚=横滚*100;//俯仰=俯仰*100;//偏航=偏航*100; data_angular_rate_raw[7]=Roll_int16 8;//滚动data_angular_rate_raw[8]=Roll_int16; data_angular_rate_raw[9]=Pitch_int16 8;//音高data_angular_rate_raw[10]=Pitch_int16; data_angular_rate_raw[11]=Yaw_int16 8;//偏航data_angular_rate_raw[12]=Yaw_int16;

校验和计算

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

data_angle_rate_raw[13]=0;总和检查=0;添加检查=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('横滚=%.2f,俯仰=%.2f,偏航=%.2fn',横滚,俯仰,偏航)

演示

标题:STM32H5开发陀螺仪LSM6DSV16X(5)----上报匿名上位机
链接:https://yqqlyw.com/news/sypc/64521.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
  • 矢量网络分析仪在传感器散射参数与
  • BLDC无位置传感器控制方式介绍
  • 绯红之境兑换码最新2021 礼包兑换码大全

    绯红之境兑换码最新2021 礼包兑换码大全[多图],绯红之境兑换码怎么领取?绯红之境兑换码有哪些?绯红之境在今日

    2025-12-30
    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法

    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法[多图],三国群英传7霸王再临怎么玩?三国群英传7霸王再临

    2025-12-30
    妄想山海怎么加好友 加好友方法大全

    妄想山海怎么加好友 加好友方法大全[多图],妄想山海添加好友功能在哪里?妄想山海添加好友的方法是什么?好友添

    2025-12-30
    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略

    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略[多图],江南百景图又见桃花村钓鱼怎么钓?又见桃花村钓

    2025-12-30