当前位置: 首页 > news >正文

基于瑞萨的血压测量仪电路实现

一、系统架构设计

基于瑞萨的血压测量仪系统架构分为传感器模块模拟前端(AFE)微控制器(MCU)执行模块通信模块电源模块,具体如下:

传感器模块

模拟前端(AFE)

微控制器(RL78)

执行模块(气泵/电磁阀)

通信模块(BLE)

显示模块(LCD)

电源模块

  • 传感器模块:采集袖带内的压力信号(静压+脉搏波),采用Honeywell ABPDANN005PG2A3(12位I2C数字输出,精度±0.25%FS)。

  • 模拟前端(AFE):对传感器信号进行放大、滤波和模数转换,采用RL78/H1D内置AFE(24位ΔΣ ADC、PGA、运算放大器)。

  • 微控制器(MCU):核心控制单元,运行血压算法(示波法),控制执行模块和通信模块,采用RL78/H1D(16位CPU,128KB Flash,8KB RAM)。

  • 执行模块:控制袖带的充放气过程,采用MITSUMI MAP-AM-265气泵(6V,400mmHg)和Yujin KSV05B电磁阀(6V,快速放气)。

  • 通信模块:实现蓝牙数据传输,采用RL78/G1D BLE模块(支持蓝牙4.0)。

  • 显示模块:显示血压值和状态,采用4位8段LCD(RL78/H1D内置LCD控制器驱动)。

  • 电源模块:提供稳定供电,采用4节AAA电池(6V)或DC 6V适配器,通过XC6206-3.3V稳压至3.3V。

二、硬件电路设计

1. 传感器模块电路

核心器件:Honeywell ABPDANN005PG2A3(I2C数字输出)。

电路连接

  • VCC:3.3V(来自稳压电路);

  • GND:接地;

  • SCL:连接RL78的I2C时钟引脚(如P1.0);

  • SDA:连接RL78的I2C数据引脚(如P1.1);

  • INT:中断引脚(可选,用于触发数据读取)。

设计要点

  • 传感器输出为12位数字信号(I2C),无需额外ADC,直接连接RL78的I2C接口;

  • 需在SCL/SDA线上添加10kΩ上拉电阻(符合I2C标准)。

2. 模拟前端(AFE)电路

核心器件:RL78/H1D内置AFE(24位ΔΣ ADC、PGA、运算放大器)。

电路设计

  • 放大电路:采用RL78/H1D内置可编程增益放大器(PGA),增益设置为100倍(放大传感器输出的毫伏级信号);

  • 滤波电路:采用RL78/H1D内置IIR数字滤波器(截止频率5Hz),滤除高频噪声(如电源干扰、运动噪声);

  • ADC转换:采用RL78/H1D内置24位ΔΣ ADC(采样率100Hz),将模拟信号转换为数字信号(有效精度18位)。

    设计要点

  • PGA增益需根据传感器输出范围调整(如传感器输出0-3V,PGA增益100倍后,输出0-300V,需匹配ADC输入范围);

  • IIR滤波器系数可通过瑞萨GUI工具模拟计算(如压力传感器波形提取),并写入RL78固件。

3. 微控制器(RL78/H1D)电路

核心器件:RL78/H1D(R5F11NMGAFB#10,80pin LFQFP)。

电路连接

  • I2C接口:连接传感器(SCL/P1.0,SDA/P1.1);

  • PWM接口:连接气泵(P2.0,控制充气速度);

  • GPIO接口:连接电磁阀(P2.1,控制放气);

  • LCD接口:连接4位8段LCD(COM0-COM3,SEG0-SEG7);

  • UART接口:连接BLE模块(TX/P3.0,RX/P3.1)。

    设计要点

  • RL78/H1D内置LCD控制器,无需额外驱动芯片,直接驱动4位8段LCD;

  • PWM频率设置为1kHz(气泵控制),占空比可调(0-100%);

  • UART波特率设置为9600bps(BLE通信)。

4. 执行模块电路

核心器件:MITSUMI MAP-AM-265气泵(6V)、Yujin KSV05B电磁阀(6V)。

电路设计

  • 气泵驱动:采用P沟道MOSFET(IRLML6402)NPN三极管(DTC114),RL78的PWM信号(P2.0)控制三极管导通,进而控制MOSFET通断,实现气泵充气;

  • 电磁阀驱动:采用NPN三极管(DTC114),RL78的GPIO信号(P2.1)控制三极管导通,实现电磁阀放气。

    设计要点

  • 气泵和电磁阀的电源需与MCU电源隔离(采用6V独立电源),避免干扰;

  • MOSFET和二极管(SS34)需添加10kΩ限流电阻(保护MCU引脚)。

5. 通信模块电路

核心器件:RL78/G1D BLE模块(支持蓝牙4.0)。

电路连接

  • TXD:连接RL78的UART接收引脚(P3.0);

  • RXD:连接RL78的UART发送引脚(P3.1);

  • VCC:3.3V;

  • GND:接地。

    设计要点

  • BLE模块需与手机APP(如Android/iOS)配对,传输血压数据(收缩压、舒张压、脉搏率);

  • 手机APP需支持BLE GATT协议(如Nordic Semiconductor的nRF Connect)。

6. 电源模块电路

核心器件:4节AAA电池(6V)、DC 6V适配器、XC6206-3.3V(低压差稳压器)。

电路设计

  • 输入:6V电源(电池或适配器);

  • 输出:3.3V(供给传感器、MCU、BLE模块等);

  • 滤波:在稳压芯片输入/输出端添加0.1μF陶瓷电容(去耦,减少电源噪声)。

    设计要点

  • 电池需采用低功耗型号(如Panasonic Eneloop),续航时间≥30天;

  • 适配器需支持过压保护(如TVS管SMBJ36A),避免损坏电路。

参考代码 基于瑞萨的血压测量仪电路+源代码+设计文档www.youwenfan.com/contentcss/70636.html

三、软件算法设计

1. 主程序流程

系统初始化

传感器校准

等待用户按键

启动测量

气泵充气

电磁阀放气

采集压力信号

运行血压算法

显示结果

蓝牙传输

  • 系统初始化:初始化RL78的I2C、PWM、UART、LCD等外设;

  • 传感器校准:读取传感器零点(无压力时的输出),补偿温度漂移;

  • 等待用户按键:用户按下“开始”键,启动测量;

  • 气泵充气:RL78输出PWM信号,控制气泵充气至180mmHg(高于收缩压);

  • 电磁阀放气:RL78输出GPIO信号,控制电磁阀以3-5mmHg/秒的速度放气;

  • 采集压力信号:RL78通过I2C读取传感器输出的压力信号(100Hz采样率);

  • 运行血压算法:从压力信号中提取脉搏波,计算收缩压、舒张压和脉搏率;

  • 显示结果:LCD显示血压值和状态(如“120/80 mmHg”);

  • 蓝牙传输:将血压数据发送至手机APP。

2. 血压算法(示波法)

核心步骤

  • 信号预处理:对采集的压力信号进行IIR低通滤波(截止频率5Hz),去除高频噪声;

  • 脉搏波提取:通过移动平均法提取脉搏波的包络(即脉搏波的峰值序列);

  • 特征点检测

    • 平均压(MAP):脉搏波包络的最大值对应的袖带压力;

    • 收缩压(SP):采用斜率差法(或FAN算法),找到脉搏波包络左侧(收缩压侧)的最平缓点;

    • 舒张压(DP):采用脉搏降幅百分比法,找到脉搏波包络右侧(舒张压侧)的幅度下降最快点;

  • 结果校准:根据传感器校准参数,补偿温度漂移和线性误差。

代码实现(简化版)

// 定义血压数据结构typedefstruct{floatsystolic;// 收缩压(mmHg)floatdiastolic;// 舒张压(mmHg)floatpulse_rate;// 脉搏率(次/分钟)}BloodPressure;// 示波法血压算法BloodPressureoscillometric_algorithm(float*pressure_signal,intsignal_length){BloodPressure bp;floatmax_amplitude=0.0f;intmax_index=0;intmap_index=0;intsp_index=0;intdp_index=0;// 1. 提取脉搏波包络(移动平均法)floatenvelope[signal_length];for(inti=0;i<signal_length;i++){envelope[i]=moving_average(pressure_signal,i,5);// 5点移动平均if(envelope[i]>max_amplitude){max_amplitude=envelope[i];max_index=i;}}// 2. 计算平均压(MAP)map_index=max_index;bp.systolic=envelope[map_index];// 3. 计算收缩压(SP):斜率差法floatmin_slope_diff=1000.0f;for(inti=0;i<map_index;i++){floatslope_diff=calculate_slope_diff(envelope,i,map_index);if(slope_diff<min_slope_diff){min_slope_diff=slope_diff;sp_index=i;}}bp.diastolic=envelope[sp_index];// 4. 计算舒张压(DP):脉搏降幅百分比法floatmax_drop_percent=0.0f;for(inti=map_index;i<signal_length;i++){floatdrop_percent=(envelope[i]-envelope[i+1])/envelope[i]*100;if(drop_percent>max_drop_percent){max_drop_percent=drop_percent;dp_index=i;}}bp.pulse_rate=calculate_pulse_rate(envelope,signal_length);returnbp;}// 移动平均函数floatmoving_average(float*signal,intindex,intwindow_size){floatsum=0.0f;inthalf_window=window_size/2;for(inti=index-half_window;i<=index+half_window;i++){if(i>=0&&i<signal_length){sum+=signal[i];}}returnsum/window_size;}// 斜率差计算函数floatcalculate_slope_diff(float*envelope,intstart,intend){floatslope=(envelope[end]-envelope[start])/(end-start);floatdiff_sum=0.0f;for(inti=start;i<end;i++){floatcurrent_slope=(envelope[i+1]-envelope[i]);diff_sum+=fabs(current_slope-slope);}returndiff_sum/(end-start);}// 脉搏率计算函数floatcalculate_pulse_rate(float*envelope,intsignal_length){intpulse_count=0;for(inti=1;i<signal_length;i++){if(envelope[i]>envelope[i-1]&&envelope[i]>envelope[i+1]){pulse_count++;}}return(pulse_count/(signal_length/100))*60;// 100Hz采样率,转换为次/分钟}

设计要点

  • 脉搏波包络提取需采用移动平均法形态学滤波(如膨胀、腐蚀),确保包络平滑;

  • 特征点检测需采用斜率差法(收缩压)和脉搏降幅百分比法(舒张压),提高准确性;

  • 算法需通过临床测试(与医用血压计对比),调整参数(如移动平均窗口大小、斜率差阈值)。

3. 通信协议(BLE)

核心协议:BLE GATT(Generic Attribute Profile)。

服务与特征

  • 服务UUID:0x180D(心率服务);

  • 特征UUID:0x2A37(心率测量值);

  • 数据格式:采用IEEE 11073-20601标准,包含收缩压、舒张压、脉搏率等信息。

    代码实现(简化版)

// BLE模块初始化voidble_init(){// 配置UART波特率为9600bpsuart_init(9600);// 发送BLE模块初始化命令uart_send("AT+INIT\r\n");// 等待模块响应while(uart_receive()!="OK");// 配置GATT服务和特征uart_send("AT+GATTADDCHAR=0x180D,0x2A37,0x10,0x01\r\n");// 等待模块响应while(uart_receive()!="OK");}// 发送血压数据voidble_send_data(BloodPressure*bp){// 格式化数据为IEEE 11073-20601格式uint8_tdata[8];data[0]=0x00;// flags(无时间戳)data[1]=(uint8_t)(bp->systolic/10);// 收缩压(整数部分)data[2]=(uint8_t)((bp->systolic-data[1]*10)*10);// 收缩压(小数部分)data[3]=(uint8_t)(bp->diastolic/10);// 舒张压(整数部分)data[4]=(uint8_t)((bp->diastolic-data[3]*10)*10);// 舒张压(小数部分)data[5]=(uint8_t)(bp->pulse_rate/10);// 脉搏率(整数部分)data[6]=(uint8_t)((bp->pulse_rate-data[5]*10)*10);// 脉搏率(小数部分)data[7]=0x00;// 保留// 发送数据uart_send("AT+CHARWRITE=0x2A37,");for(inti=0;i<8;i++){uart_send_int(data[i]);uart_send(",");}uart_send("\r\n");}

设计要点

  • BLE模块需与支持IEEE 11073-20601标准的手机APP配对(如Nordic Semiconductor的nRF Connect);

  • 数据传输需采用CRC校验(如CRC16),确保数据完整性。

http://www.jsqmd.com/news/449609/

相关文章:

  • 《创业之路》-891- 法律的本质是利用国家的群体的力量,强制性约束自私的人性、打击残酷的兽性,维持社会的稳定。
  • HC04-Arduino UNO-LED开关
  • Qwen3-VL:30B模型应用:智能文档处理系统开发
  • 《创业之路》-892- 法律的本质是秩序,正义只是它的副产品
  • 【2026最新携程酒店爬虫分享】用Python批量爬取酒店评论,含回复内容一键保存Excel!
  • 企业级智能菜谱推荐系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • vsg 编译
  • 模拟化妆品保质期,输入开封时间,环境温度,预测有效成分衰减,提醒及时更换。
  • TS/JS多智能体开发实战:从单Agent到OpenClaw
  • 文昌美食推荐:南山萝卜煨牛排、脆皮烧鸡与蒜蓉开边虾的高性价比对比攻略
  • 万象熔炉·丹青幻境与ComfyUI工作流整合:可视化节点式创作
  • DeepSeek-OCR部署教程:HTTPS反向代理配置(Nginx)保障Web访问安全
  • 大厂Java面试实战:从电商系统架构设计到分布式系统优化全解析
  • 思考:完全背包-为什么先遍历背包再遍历物品是“排列数”,先遍历物品再遍历背包是“组合数”
  • 深圳AI营销实践复盘,亲测有效
  • Chandra OCR效果展示:老扫描数学题80.3分识别,公式符号+上下标精准还原截图
  • 黑马-产品经理就业班V6.0|价值8980元|2022年|完结无秘
  • Meta-Llama-3-8B-Instruct镜像详解:如何快速搭建并测试对话效果
  • LiuJuan20260223Zimage模型Java客户端开发:从零构建图像生成SDK
  • 【四旋翼控制】基于双环纯P控制器级联 外环调节姿态,内环控制电机推力实现快速干扰抑制和精确设定点跟踪附Matlab代码
  • [原创开源] 三进制/n+1进制芯片底层架构设计思路与实现可行性分析
  • 实力强的高速改扩防撞水泥墩源头厂家盘点 昇顺交通设施厂口碑如何 - 工业品牌热点
  • 职业灭绝倒计时:AI替代率80%的软件测试岗位清单与转型战略
  • 代码随想录算法训练营 Day04 | 链表 part02
  • gte-base-zh GPU部署优化教程:显存占用<2.1GB的轻量级Embedding服务
  • 小白也能懂:Qwen3-Embedding-4B如何帮你快速构建智能问答系统
  • 聊聊2026年江苏靠谱的通过式抛丸机公司,哪家质量优有答案 - mypinpai
  • vLLM优化ERNIE-4.5-0.3B-PT推理:动态角色切换PD解聚与卷积码量化实践
  • 明湾中学阶段:寻找自我,面向未来
  • selenium抓包的具体操作(学习自用)