维特WT901CTTL角度传感器学习笔记

参考官方网站 WT901C-TTL/232产品规格书 (yuque.com)

一、WT901CTTL介绍

重要数据:

摘自官网:三维运动姿态测量系统

包含三轴陀螺仪、三轴加速度计、三轴电子罗盘等运动传感器。

结合高动态卡尔曼滤波融合算法,提供高精度、高动态、实时补偿的三轴姿态角度。

模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.2°,稳定性极高,性能甚至优于某些专业的倾角仪。

Z轴航向角加入地磁传感器滤波融合,解决了6轴算法中,由于陀螺仪积分的漂移引起的累计误差,可长期稳定输出航向角数据。

注意: 要由于有磁场检测,使用前需要校准,而且使用时需要远离磁干扰区域、电子设备、磁铁、扬声器等硬磁性物体至少20cm的距离。

模块内部自带电压稳定电路,工作电压5~36V, 引脚电平兼容5V/36V的嵌入式系统,连接方便。
最高200Hz数据输出速率。

输出内容可以任意选择,输出速率0.2~200Hz可调节。
支持串口接口。
串口速率4800bps~230400bps可调。

二、上手

使用上位机

官方上位机下载:软件下载 (yuque.com)

我下载的当前最新版本 2024.7.16

注意!!!接线RX接TX,TX接RX,5V供电,如果用杜邦线一定按到底,一定要接紧,串口会闪烁。

使用TTL转串口,连接到电脑

显示COM10  



 

解压打开 默认串口号9600,在搜索设备上面选择自己的设备号(WT901TTL),然后点+号对勾

出现角度数值。

如果没出现,官网常见问题找找看   点→   常见问题 (yuque.com)

通过串口助手接收数据

  (以下是如何通过计算传感器发送的16进制数据,得到角度值) 

在上位机配置信息那里可以选择输出角度,角速度,磁场等,选择输出什么,在串口助手就会接收

到不同包头的数据包。如55,53作为包头里面的数据就是角度的信息。

查手册:

找到55,53开头的数据

角度计算

提取数据:55 53 09 FF 73 FF 22 E3 C7 46 34(后三位表示温度,以及求和)

09 FF为例,求翻滚角按低位在前,高位在后发送的,求角度X

09对应低位,FF对应高

先求以下公式结果:

 (RollH<<8|RollL)

此数据对应10进制为65289

上位机接收数据后会将数据转换为short类型(-32768~32767)一共2^16=65536个数,显然此数

据小于65536,减去65536,(和高中圆心角转换类似,355°也可以写作-5°)转换完为-246

之后按公式:-246/32768*180=-1.35

 同理可得

73 FF 俯仰角:

22 E3 偏航角: 

 

与上位机显示值一致。

### STM32F407与WT901CTTL模块配合使用 #### 使用UART接口通信配置 为了使STM32F407能够与WT901CTTL惯性测量单元(IMU)模块正常工作,需通过USART实现两者之间的数据交换。具体来说,可以利用串口来发送命令给IMU并接收其返回的数据流。 ```c #include "usart.h" // 初始化USART1用于连接WT901CTTL void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; // 设置波特率为115200bps huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } ``` 上述初始化函数设置了一个标准的异步串行通讯参数集[^1]。 #### 数据读取处理逻辑 当从WT901CTTL接收到一帧完整的姿态角信息时,通常会按照特定协议解析这些字节序列: ```c uint8_t rx_buffer[12]; // 假定每包有效载荷不超过12个字节 float yaw, pitch, roll; void ProcessReceivedData(uint8_t *data) { memcpy(rx_buffer, data, sizeof(rx_buffer)); // 解析角度值(假设采用浮点数表示) union FloatUnion { uint8_t bytes[4]; float value; } angle_union; // Yaw轴偏航角 memcpy(angle_union.bytes, &rx_buffer[2], 4); yaw = angle_union.value; // Pitch俯仰角 memcpy(angle_union.bytes, &rx_buffer[6], 4); pitch = angle_union.value; // Roll横滚角 memcpy(angle_union.bytes, &rx_buffer[10], 4); roll = angle_union.value; // 打印调试信息至电脑终端 printf("Yaw:%f\tPitch:%f\tRoll:%f\n", yaw, pitch, roll); } ``` 此部分展示了如何对接收缓冲区中的原始二进制数据进行解码,并转换成易于理解的角度数值。 #### 定期轮询机制 为了让应用程序持续获取最新的传感器状态更新,在主循环里加入周期性的查询操作可能是必要的做法之一: ```c int main(void) { /* ...其他初始化代码... */ while (1) { HAL_Delay(10); // 短暂延时减少CPU占用率 // 向WT901CTTL请求当前的姿态信息 const char cmd_get_attitude[] = {0x55, 0x55, 0x0E, 0x00}; HAL_UART_Transmit(&huart1, (uint8_t *)cmd_get_attitude, sizeof(cmd_get_attitude), HAL_MAX_DELAY); // 接受来自设备的回答 uint8_t response[12]; HAL_UART_Receive(&huart1, response, sizeof(response), HAL_MAX_DELAY); // 处理新获得的信息 ProcessReceivedData(response); } /* 不应到达这里 */ } ``` 这段程序片段说明了怎样构建一个简单的控制回路去不断向IMU询问最新测得的方向变化情况,并及时作出响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

源2526

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

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

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

打赏作者

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

抵扣说明:

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

余额充值