2026 ADI CodeFusion 竞赛 - 基于MAX32690EVKIT实现实时姿态监测终端
完成的任务
【入门级题目2:姿态监测终端】
利用6轴IMU以50Hz以上采样率实时采集姿态数据,计算俯仰角、横滚角等姿态信息,并通过OLED或PC端实时显示设备姿态。当倾斜角超过设定阈值(如60°)或姿态变化异常时,1秒内触发报警。
项目描述
本项目设计并实现了一套基于 MAX32690EVKIT 和 MPU6050 六轴惯性传感器的实时姿态监测终端。系统能够持续采集三轴加速度与三轴角速度数据,在微控制器端完成传感器校准、数据换算、滤波和姿态角计算,并通过板载彩色 TFT 与 PC 串口终端展示当前姿态。当设备倾斜超过阈值或发生快速异常转动时,系统通过屏幕、LED 和串口信息进行报警。
系统采用 100 Hz 固定周期采样。上电后,用户首先将设备静置并按下 SW2,系统连续采集 200 个样本估计陀螺仪零偏和初始重力方向。校准完成后进入监测状态,持续输出俯仰角 Pitch、横滚角 Roll、角速度和工作状态。当 Pitch 或 Roll 的绝对值超过 60°时,终端进入报警状态;红色 LED 点亮,屏幕显示异常提示,PC 端同步收到报警文本。用户再次按下 SW2 可清除报警并返回监测界面。

3. 硬件介绍
3.1 MAX32690EVKIT
MAX32690EVKIT 是本项目的主控制与人机交互平台。其 MAX32690 MCU 采用 Arm Cortex-M4F 和 RSIC-V 双架构内核,适合执行传感数据处理、浮点姿态计算和实时控制。评估板提供 128×128 彩色 TFT、通用 LED、按键、USB 转串口、I²C 引出与调试接口,能够在一块板上完成采集、运算、显示、报警和下载调试。
3.2 MPU6050 六轴 IMU
MPU6050 集成三轴 MEMS 加速度计与三轴 MEMS 陀螺仪,通过 I²C 接口输出六轴原始数据。项目将其配置为 ±8 g 加速度量程、±1000 °/s 角速度量程,并启用约 42 Hz 的数字低通滤波设置。该配置为姿态变化保留足够动态范围,同时抑制部分高频噪声。
3.3 硬件连接
MPU6050 | MAX32690EVKIT | 作用 |
|---|---|---|
VCC | 3.3 V | 传感器供电 |
GND | GND | 公共参考地 |
SDA | P2.7 / I2C0_SDA | I²C 数据 |
SCL | P2.8 / I2C0_SCL | I²C 时钟 |
AD0 | GND | 地址选择为 |
INT | 未连接 | 当前采用定时轮询采样 |
开发板通过 USB/PWR-UART 接口连接电脑,用于供电、程序日志输出和效果观察。板载 LED 和 TFT 分别承担报警指示与状态显示。
4. 方案框图与设计思路
4.1 系统总体方案框图

方案设计遵循“采集稳定、结果直观、报警及时”的原则。首先使用硬件定时器产生 10 ms 周期节拍,保证采样频率稳定为 100 Hz。其次,MPU6050 驱动一次读取连续 14 字节寄存器,并将补码原始值换算为 g 和 °/s,减少多次总线访问带来的时间开销。再次,在进入正式监测前完成静态校准,消除安装方向和陀螺仪零偏对结果的影响。
对于倾角计算,加速度计在低动态状态下能够测得重力在三个轴上的投影。系统使用归一化后的重力向量计算横滚角和俯仰角,并使用滤波后的数据改善显示稳定性。陀螺仪则对快速姿态变化更敏感,可用于辅助判断异常旋转。阈值模块持续比较 Pitch、Roll 与角速度;一旦满足报警条件,即锁存报警状态,避免异常仅持续数个采样点时告警在屏幕上一闪而过。

报警阈值默认设为 60°。在 100 Hz 采样条件下,系统每 10 ms 获得一次新数据,判断和本地告警均在主循环内完成,因此可以满足题目规定的 1 秒响应要求。报警锁存后,只有明确按键操作才会复位,既方便现场演示,也能够防止操作者错过短时异常。
5. 软件流程、调试环境与关键代码
5.1 软件流程图

程序启动后依次完成开发板、系统时钟、TFT、I²C 和定时器初始化。若 MPU6050 身份寄存器或配置过程异常,屏幕显示传感器故障信息,串口输出错误阶段、状态寄存器和尝试次数,便于快速定位接线或总线问题。初始化成功后,屏幕提示用户保持设备静止并按下 SW2。校准完成前不进入姿态报警,避免上电晃动引发误判。
在运行阶段,TMR1 中断仅清除标志、累加采样计数并设置采样到期标志,实际 I²C 读取和浮点计算放在主循环中完成。这种设计缩短了中断服务时间,也便于统计“上一帧尚未处理而下一节拍已经到达”的遗漏次数。串口每秒输出一次采样数量、遗漏节拍、I²C 错误计数和当前状态,可直接证明实时采样是否稳定。
调试软件说明
项目使用 CodeFusion Studio™ 进行工程创建、编译、下载和调试。该平台基于 Visual Studio Code,并与 ADI 器件、工具链和系统配置流程集成。本项目在 Cortex‑M4 工程中选择 MAX32690 与 EvKit_V1 板级支持包,通过编译输出 ELF 文件,再使用调试接口下载至开发板。运行时同时观察 TFT、LED 与 115200 串口终端。


5.4 关键代码说明
采样频率由统一宏定义控制,定时器比较值根据内部时钟和目标频率计算。10 ms 的时间基准同时用于传感器时间戳、角度更新和报警响应计时。
#define SAMPLE_RATE_HZ 100U
#define SAMPLE_PERIOD_MS (1000U / SAMPLE_RATE_HZ)
timer_config.cmp_cnt = MXC_TMR_GetPeriod(
MXC_TMR1, MXC_TMR_IBRO_CLK, 1U, SAMPLE_RATE_HZ);
MPU6050 驱动从加速度起始寄存器连续读取 14 字节,将三轴加速度与三轴角速度从大端补码转换成物理量。±8 g 量程对应 4096 LSB/g,±1000 °/s 量程对应 32.8 LSB/(°/s)。
sample->accel_g[0] = (float)decode_i16(buf[0], buf[1]) / 4096.0f;
sample->accel_g[1] = (float)decode_i16(buf[2], buf[3]) / 4096.0f;
sample->accel_g[2] = (float)decode_i16(buf[4], buf[5]) / 4096.0f;
sample->gyro_dps[0] = (float)decode_i16(buf[8], buf[9]) / 32.8f;
sample->gyro_dps[1] = (float)decode_i16(buf[10], buf[11]) / 32.8f;
sample->gyro_dps[2] = (float)decode_i16(buf[12], buf[13]) / 32.8f;
姿态判断部分先计算 Pitch 和 Roll,再对角度绝对值进行阈值判断。报警状态采用锁存方式,TFT 显示、LED 与串口提示在同一事件中更新,确保用户能够从多个渠道观察到异常。
roll_deg = atan2f(ay, az) * 180.0f / PI;
pitch_deg = atan2f(-ax, sqrtf(ay * ay + az * az)) * 180.0f / PI;
if ((fabsf(roll_deg) >= 60.0f) || (fabsf(pitch_deg) >= 60.0f)) {
alarm_latched = true;
LED_On(LED_RED);
show_tilt_alarm(pitch_deg, roll_deg);
}
6. 实物演示及说明
本次活动中,使用MAX32690EVKIT和MPU6050,下面数连接的图

演示按照“连接确认—静置校准—实时姿态—阈值报警—手动复位”的顺序进行,使输入、计算结果与输出效果形成连续、可观察的闭环。通过 USB 将 MAX32690EVKIT 与电脑连接。上电后 TFT 出现欢迎界面,串口输出传感器型号与 100 Hz 采样配置。

完成校准:将设备水平放置并保持静止,按下 SW2。屏幕显示校准进度,约 2 秒后进入监测界面。

观察姿态:分别绕设备横轴和纵轴缓慢转动,观察 Pitch 与 Roll 数值随倾角连续变化;PC 串口同步显示姿态数据。

触发报警:将设备倾斜至任一方向超过 60°,屏幕切换为异常状态,红色 LED 点亮,串口输出倾斜报警与当前角度。

解除报警:将设备恢复正常姿态后按下 SW2,清除锁存告警,LED 熄灭,系统重新进入实时监测。
7. 遇到的难点及解决方法
7.1 I²C 通信偶发忙状态
调试初期,传感器读取可能出现总线忙或身份寄存器读取失败。解决方法是在需要调整默认的IIC短接帽
7.2 静态角度抖动
直接使用原始加速度计算角度时,桌面振动与传感器噪声会使显示数值跳动。项目通过 MPU6050 内部数字低通设置、上电静态校准以及软件端平滑处理降低噪声。显示更新频率与底层采样频率分开,使内部保持 100 Hz 计算,而屏幕以更适合阅读的节奏刷新。
7.4 报警在阈值附近反复跳变
当倾角正好在 60°附近时,噪声可能导致报警条件重复成立和解除。系统采用报警锁存策略:首次超限后保持报警,恢复正常姿态并主动按键复位。该方法逻辑清晰、演示可靠,也适合需要人工确认的安全监测场景。
8. 活动心得体会与建议
本次项目让我学会要得到稳定、可解释、能够用于报警的结果,需要同时处理采样时序、量程选择、零偏校准、滤波、坐标方向、角度计算和异常状态管理。
学会了 CodeFusion Studio™ 的使用,其将工程管理、编译、下载与调试集中在统一环境中,使 MAX32690 多核器件的工程结构更加清晰。