GitHub链接:https://github.com/dawn-qvq/knee-joint

引言

  • 研究背景与意义:姿态采集在医疗康复、运动科学中的应用需求,便携式设备的优势。
  • 现有技术挑战:电源管理、多传感器集成、实时数据处理等问题。
  • 本文创新点:集成多路 DC-DC 电源的便携系统设计,实现高精度膝关节角度测量。

系统总体设计
  • 功能需求分析

    • 膝关节角度测量的精度与实时性要求
    • 多传感器(如 IMU、压力传感器)协同工作需求
    • 低功耗与长续航的电源管理目标
  • 硬件架构

    • 多路 DC-DC 电源模块设计:输入电压范围、输出稳压特性、效率优化
    • 主控单元选择:低功耗 MCU-STM32F103C8T6
    • 传感器选型:IMU(MPU6050)、柔性应变传感器等
  • 软件架构

    • 实时数据采集与滤波算法(DMP)
    • 无线通信协议(蓝牙/BLE )
    • 上位机或移动端数据处理与可视化

多路 DC-DC 电源设计
  • 电源需求分解
    电压分级需求 系统包含多种硬件模块,供电电压不统一:STM32 主控、MPU6050 传感器需要3.3V 低噪声稳压电源;HC-08 蓝牙等外设需要5V 供电,因此需要设计 Buck 降压、LDO 线性稳压多路电源架构。
    精度与抗干扰需求 MPU6050 姿态采集对电源纹波极其敏感,开关电源噪声会导致角度数据漂移、误差增大。因此系统采用 DC-DC 供外设、LDO 供精密传感器 的分层供电方式,有效降低干扰,保证角度精度≤1°。
    稳定性与安全性需求 设备采用锂电池供电,存在反接、过压、浪涌风险,因此需要设计电源保护电路,防止烧坏主控与传感器,保证设备长期稳定工作。
    低功耗便携需求 项目为便携设备,需要较高电源转换效率。采用 Buck DC-DC 高效率降压,减少发热、降低功耗,提升整机续航能力。
    电量检测需求 为避免设备低压工作导致数据异常,增加电池电压检测电路,实现实时电量监测,保障系统可靠运行。

  • 关键电路设计

    • 升降压拓扑选择(Buck-Boost/LDO)
    • 效率优化:同步整流、轻载模式切换
    • PCB 布局要点:减少纹波与交叉干扰
  • 作为整机锂电池供电总入口,集成防反接、过压钳位、硬件总开关三重硬件防护,为后级 Buck、LDO、传感器电路提供安全、可控的电池母线 VBAT 电源,适配本项目便携式康复姿态采集设备的电池供电场景。

    • 防反接保护:P 沟 MOS 管 HY19P03,若锂电池插头正负极插反,MOS 自动截止,阻断反向电流,保护 STM32、MPU6050、蓝牙等核心芯片不被烧毁,避免康复设备现场误插电源损坏硬件。
      整机通断控制:拨动开关 S1 作为设备总电源开关,康复使用时拨至导通上电,闲置时断开断电,降低静态功耗,延长便携设备续航。
      过压浪涌防护:稳压二极管 BZT52C16 将输入母线电压钳位在 16V 以内,防止锂电池异常高压、插拔瞬间浪涌击穿后级 Buck/LDO 电源芯片与 IMU 传感器。
      电阻 R1、R5 匹配 MOS 栅极与稳压管限流,保证开关逻辑稳定,防止器件过流损坏。
    • 对锂电池 VBAT 母线电压电阻分压采样,输出适配 STM32 ADC 量程的检测信号,实现电池电量实时监测、低电量预警,是便携康复设备电源管理的关键采样电路。
      分压网络将锂电池高压缩小至 0~3.3V,匹配 STM32 单片机 ADC 采集上限,主控可换算锂电池剩余电压,推算设备剩余续航。
      配合软件逻辑实现低电量提醒:电池电压过低时,通过 HC-08 蓝牙向手机 APP 推送低电量提示,提醒康复使用者充电。
      LED1 电源指示灯,直观判断设备供电状态,方便调试、现场康复使用时快速识别设备是否上电。
      采样信号独立引出,不干扰功率电源回路,避免电压采样噪声影响 MPU6050 角度采集精度。
      使用方式
      硬件接线:电路输出引脚 SFEER 连接 STM32 单片机任意 ADC 输入 IO 口;VBAT + 接前级保护电路输出母线,GND 与整机信号地共地;
      软件使用:STM32 循环采集 ADC 电压采样值,通过分压比例计算锂电池实际电压;
      项目业务逻辑:
      电压正常区间:设备以 100Hz 频率持续采集膝关节姿态数据,蓝牙稳定上传;
      电压低于阈值:主控降低数据上传频率,手机端弹窗提示低电量;
      调试判断:LED1 熄灭代表无电池输入,LED 常亮代表供电正常,ADC 无采样数值则检查分压电路接线。
    • 采用 Buck 开关电源拓扑,将锂电池宽范围输入电压高效率降压输出稳定 5V 直流,为本项目HC-08 蓝牙模块、柔性压力传感器等外设供电,是多路自研 DC-DC 电源的核心功率支路。

      高效率开关降压:对比线性 LDO,Buck 转换效率可达 85% 以上,大电流外设工作时发热更少,大幅延长便携式康复设备电池续航,匹配项目低功耗、长续航设计目标。
      独立 5V 供电隔离:蓝牙、压力传感器使用独立 Buck 电源供电,功率噪声不会直接串入 3.3V 主控 / IMU 电源回路,降低开关电源噪声对 MPU6050 角度采集精度的干扰,保证角度误差≤1° 的指标。
      稳定输出 5V 电压,满足 HC-08 蓝牙模块、柔性应力传感器的额定工作电压需求,保障 300B/s 蓝牙传输速率、低延迟数据传输。
       使用方式
      硬件输入:VIN 引脚接入电源保护电路输出的 VBAT 锂电池母线;输出 5V_VCC 接入 HC-08 蓝牙模块、柔性压力传感器供电引脚,同时作为后级 LDO 电路输入电源;
      上电逻辑:整机开关导通后,Buck 自动启动,持续输出稳定 5V,蓝牙模块上电自动建立与手机的无线连接;
      项目调试:若蓝牙出现断连、传输卡顿,排查 Buck 输出电压是否跌落、输出滤波电容是否焊接完好;
      适用场景:设备外设大电流负载专用供电,不用于 STM32、MPU6050 这类对噪声敏感的精密传感器。
    • 将 Buck 输出的 5V 电压线性稳压,输出低纹波、低噪声纯净 3.3V 电源,专门给STM32 主控、MPU6050 六轴姿态传感器精密模拟电路供电。

      超低噪声供电:LDO 线性稳压无开关频率干扰,输出电源纹波极小,避免 Buck 开关噪声污染 MPU6050 内部陀螺仪、加速度计采样,保障项目角度测量精度 1°、误差≤1° 的核心指标。
      为主控与 IMU 提供额定 3.3V 工作电压,支撑 I²C 通信、100Hz 高频姿态数据采集、DMP 硬件姿态解算算法稳定运行。
      分级供电隔离架构:外设 5V 电源与主控 3.3V 电源物理分离,实现功率回路、信号地分区布局,是你项目 PCB 降噪设计的核心电路。
       使用方式
      硬件输入:LDO 输入引脚接 Buck 电路输出的 5V_VCC;输出 3.3V 电源连接 STM32 单片机、MPU6050 传感器、OLED 显示屏;
      整机工作流程:上电后 LDO 稳定输出 3.3V,STM32 初始化 I2C、MPU6050 DMP、串口、蓝牙驱动,开启 100Hz 姿态采集;
      调试排查:若 MPU6050 角度数据漂移严重、测量误差超标,检查 LDO 输出电压稳定性、输出滤波电容是否焊接到位;
      负载限制:LDO 仅驱动小电流精密芯片,不外接蓝牙、压力传感器等大电流外设,防止 LDO 过热压降。
  • 实测性能

    • 转换效率(12V 输入下各通道效率 ≥90%)
    • 纹波电压(≤50mV)与负载调整率

姿态采集算法实现
  • MPU6050传感器数据融合

    • I2C通信
      I2C 通信内容介绍如下:首先时钟总线信号 CLK 从始至终为主机所控制,每次通信的开始和结束信号也由主机所发出。其中 SCL 为 高电平时,SDA 电平由高到低为起始信号, SCL 为低电平时, SDA 电平由低到高为 结束信号。当起始信号出现后每八位为一字节数据进行通信,通信期间 CLK 为高电 平时 SDA 的电平信息为该位的数据信息。而每八位数据发送完毕后就有一次是否成 功接收的信号应答,主机将释放 SDA 总线等待 CLK 一周期的从机应答,若 SDA 应 答信号为高电平则表示数据接收失败,而低电平则表示为成功接收数据,主机进行 下一字节数据的发送接收或发送结束标志结束本次通信。并且在起始信号发出后的膝关节稳定度检测系统设计与实现 ,第一个字节前 7 位数据为本次进行点对点通信的从机地址第 8 位数据表示状态为接 收或发送,即主机希望该地址的从机在本次的通信中处于发送状态或接收状态。在 总线上与该地址不匹配的从机将不会接收和回应本次的通信内容直到接收到结束信 号后才会等待下一次起始信号进行地址匹配。通过这种方式完成了对多个从机的信 号发送或接收。
    • MPU6050原始数据处理:加速度计与陀螺仪校准

       
      MPU6050 的姿态解算使用了硬件内部的运动引擎 DMP( 全称 Digital
      Motion Processor)直接输出四元数。减轻主控芯片的运算压力,经实际数据测试结果也表明这种方式得到的数据时间延迟更小,计算结果的误差范围也更小
       
      //mpu6050,dmp初始化
      //返回值:0,正常
      //    其他,失败	
      u8 MPU6050_DMP_Init(u8 id)
      {
      	st.hw->addr=id;
      	//else st.hw->addr=0x69;
      	MPU6050_IIC_IO_Init();                                                    
      	if(!mpu_init())                                                               //mpu初始化
      	{	
      		mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL);		                      //设置需要的传感器
      		mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);	                      //设置fifo
      		mpu_set_sample_rate(DEFAULT_MPU_HZ);	   	  		                        //设置采集样率,多久更新fifo,并产生int中断
      		dmp_load_motion_driver_firmware();   	  			                          //加载dmp固件
      		dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));//设置陀螺仪方向
      		dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT | DMP_FEATURE_TAP |
      		    DMP_FEATURE_ANDROID_ORIENT | DMP_FEATURE_SEND_RAW_ACCEL | DMP_FEATURE_SEND_CAL_GYRO |
      		    DMP_FEATURE_GYRO_CAL);	   	 					                                //dmp_enable_feature
      		dmp_set_fifo_rate(DEFAULT_MPU_HZ);   	 			                            //设置采集样率,多久更新fifo,并产生int中断
      		run_self_test();		                                                        //自检
      		mpu_set_dmp_state(1);                                                   //使能
      	}
      	return 0;
      }
    • 膝关节角度计算:四元数/欧拉角转换
      首先四元数由一个实部和三个虚部组成,通常写成以下形式
      这里分别将大腿处模块和小腿处模块的四元数数据表示为
      则两个向量相对值可通过计算表示为

      将四元数应用在余弦矩阵中表示

      最终可计算得到偏转的欧拉角
  • 	int i, a[105];
    		for(i=0;i<100;i++)
    		{
    			a[i]=MPU6050_DMP_Get_Data(&q0,&q1,&q2,&q3);				//读取姿态信息(其中偏航角有飘移是正常现象)
    			Delay_ms(10);
    		}
    		for(i=0;i<100;i++)Serial_SendByte(a[i]);
    		while(1);
    		MPU6050_DMP_Get_Data(&q0,&q1,&q2,&q3,0x69);
    		MPU6050_DMP_Get_Data(&p0,&p1,&p2,&p3,0x68);
    		qr=q0*p0-q1*p1-q2*p2-q3*p3;
    		qx=-q1*p0+q0*p1+q3*p2-q2*p3;
    		qy=-q2*p0-q3*p1+q0*p2+q1*p3;
    		qz=-q3*p0+q2*p1-q1*p2+q0*p3;
           // 四元数转欧拉角计算公式,乘以57.3是弧度转角度(180/π≈57.3)
    		pitch = asin(-2 * qx * qz + 2 * qr* qy)* 57.3;	// pitch
    		roll  = atan2(2 * qy * qz + 2 * qr * qx, -2 * qx * qx - 2 * qy* qy + 1)* 57.3;	// roll
    		yaw   = atan2(2*(qx*qy + qr*qz),qr*qr+qx*qx-qy*qy-qz*qz) * 57.3;	//yaw
    		Serial_SendNumber(abs(roll), 3);	
    		delay_s(1);
  • HC-08数据传输

    该模块共提供 6 个引脚,其中 STATE 引脚为状态输出引脚,可通过读取该引脚
    的电平判断蓝牙设备是否处于连接状态,高电平为连接状态,低电平为断开状态。
    RXD TXD 分别为串口通信的读取引脚和发送引脚。 VCC GND 为电源引脚。
    KEY 引脚可使主机清除配对过的从机地址记忆。该模块可支持主 / 从机两种工作模式,
    在主机模式下可搜索工作范围内的从机设备,通过查询匹配蓝牙地址和密码与一个
    或多个目标设备进行连接通信,在理想环境下最多可同时与 7 个蓝牙从机设备进行
    通信。而在从机模式下只能等待被主机匹配连接,连接完成后即可与主机进行双向
    通信。在本系统中将检测模块的蓝牙设备设置为从机模式,手机端 APP 作为蓝牙主

    机设备进行连接。

    在本系统中蓝牙模块使用的波特率为 9600bit/s ,数 据长度为 8 位,不设置奇偶校验,停止位 1 位。在程序中编写了蓝牙模块发送指令 void Serial_SendNumber(uint32_t Number, uint8_t Length),其中变量 Number 为需要 发送的数据,Length 为所发送数据的十进制位数。调用函数后将会把变量拆分为个 位,十位,百位等字符数分多次传输。
    void Serial_SendByte(uint8_t Byte)
    {
    	USART_SendData(USART1, Byte);
    	while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    }
    
    void Serial_SendNumber(uint32_t Number, uint8_t Length)
    {
    	uint8_t i;
    	for (i = 0; i < Length; i ++)
    	{
    		Serial_SendByte(Number / Serial_Pow(10, Length - i - 1) % 10 + '0');
    	}
    }


    完成所需配置后 HC-08 模块会自动保存该配置,在之后的使用中无需重新进行
    配置上电即可正常进行通信使用。

系统集成与测试
  • 原型机搭建

    • 3D 打印外壳与人体工程学设计
    • 传感器固定方式(绑带/贴片)
  • 性能验证

    • 角度测量精度(与光学运动捕捉系统对比,误差 ≤1°)
    • 续航测试(典型工况下连续工作 ≥8 小时)
    • 抗干扰能力(多设备共存环境下的无线稳定性)

应用场景与展望
  • 医疗康复:术后膝关节活动度监测
  • 运动科学:运动员动作分析与损伤预防
  • 未来改进方向:AI 驱动的自适应校准、能量收集技术集成

结论
  • 总结系统优势:高集成度、低功耗、高精度
  • 潜在社会价值与商业化前景
Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐