基于51单片机跑步机脉搏心率检测霍尔测速设计

1 系统功能介绍

本设计基于 STC89C52 单片机,实现了一个简易的跑步机监测与控制系统。其主要功能是通过 脉搏/心率传感器 检测运动者的心率,通过 霍尔传感器 检测电机转速,并结合 电机调速电路 模拟跑步机的速度调节。同时利用 LCD1602 液晶显示屏 实时显示运动者的心率与跑步机速度参数,让用户在运动过程中直观掌握自身状态和运动强度。

该系统的主要功能概括如下:

  1. 心率检测功能
    通过脉搏/心率传感器采集人体的心跳信号,并经过 LM393 比较器电路 将微弱的模拟信号转换为稳定的数字脉冲信号,单片机对信号进行计数处理后计算出运动者的心率值,并实时显示。

  2. 速度检测功能
    通过霍尔传感器对跑步机电机转速进行检测,利用单片机内部定时器对脉冲数进行统计换算为转速,从而实现跑步机速度的实时监测。

  3. 跑步机调速功能
    通过电位器输入模拟信号,调节 PWM 波形占空比,从而改变电机转速,实现跑步机的速度控制。

  4. LCD1602 显示功能
    使用 LCD1602 显示屏同时显示两类数据:心率值(bpm,次/分钟)和电机转速(RPM,转/分钟),方便用户实时掌握运动情况。

  5. 系统整体稳定性与扩展性
    系统不仅能够完成心率和速度监控,还能够扩展更多的传感器(如血氧传感器、温度传感器)以便进一步提升健康监测水平。


2 系统电路设计

2.1 单片机最小系统电路

系统核心控制器为 STC89C52 单片机,具有足够的 I/O 口资源和定时器/中断功能,适合实现脉搏检测和速度测量。

  • 使用 12MHz 晶振电路,保证单片机正常运行。
  • 复位电路采用上电复位和按键复位相结合方式,确保系统可靠启动。
  • 电源电路为单片机及外围模块提供稳定的 5V 电压。

2.2 脉搏/心率传感器与 LM393 比较器电路

脉搏传感器通过光电反射或压力感应方式获取心跳信号。由于输出信号幅度微弱,需通过 LM393 比较器进行信号整形:

  • 输入端为脉搏信号,输出为数字脉冲波。
  • 单片机通过外部中断捕获脉冲信号,计算一定时间内的脉冲数,再换算为心率值(bpm)。

2.3 霍尔测速电路

霍尔传感器通过检测电机旋转时的磁场变化输出脉冲信号。

  • 将其输出端接入单片机定时器计数端口。

  • 单片机根据脉冲频率计算电机转速。

  • 转速换算公式:

    转速 (RPM) = (单位时间脉冲数 × 60) / 每转脉冲数
    

2.4 电机控制电路

采用 PWM 调速方式 控制直流电机转速。

  • 通过单片机输出 PWM 信号控制驱动电路。
  • 驱动电路一般采用 MOSFET 或 L298N 电机驱动芯片实现大电流输出。
  • 电位器作为输入接口,通过 ADC 或模拟比较方式改变 PWM 占空比,实现跑步机速度调节。

2.5 LCD1602 液晶显示电路

LCD1602 通过 8 位并行或 4 位并行方式与单片机相连,实时显示心率值和电机速度值。
显示内容示例:

Heart:  78 bpm
Speed: 120 RPM

2.6 电源电路

整个系统采用 5V 稳压电源

  • 单片机、LCD 和传感器供电均为 5V。
  • 电机部分采用独立供电,并通过驱动芯片与单片机隔离,避免电机干扰影响系统。

3 程序设计

程序部分由以下几个模块组成:主控模块、心率检测模块、速度检测模块、电机控制模块、LCD 显示模块。


3.1 主程序框架

#include <reg52.h>
#include "lcd1602.h"
#include "delay.h"

unsigned int heartRate = 0;
unsigned int speed = 0;

void main()
{
    LCD_Init();
    Timer0_Init();    // 心率计数
    Timer1_Init();    // 霍尔测速
    PWM_Init();       // 电机控制
    
    while(1)
    {
        heartRate = getHeartRate();
        speed = getSpeed();
        
        LCD_ShowString(0,0,"Heart:");
        LCD_ShowNum(0,7,heartRate,3);
        LCD_ShowString(0,11,"bpm");
        
        LCD_ShowString(1,0,"Speed:");
        LCD_ShowNum(1,7,speed,3);
        LCD_ShowString(1,11,"RPM");
    }
}

3.2 心率检测模块

通过外部中断捕获心跳脉冲信号,统计单位时间脉冲数,计算心率。

unsigned int heartCount = 0;

void Timer0_Init()
{
    TMOD |= 0x01;   // 定时器模式
    TH0 = (65536-46080)/256;  // 定时50ms
    TL0 = (65536-46080)%256;
    ET0 = 1; EA = 1;
    TR0 = 1;
}

void External_Int0() interrupt 0
{
    heartCount++;   // 检测到一个心跳
}

unsigned int getHeartRate()
{
    unsigned int bpm = heartCount * 60 / 10;  // 10秒统计换算为每分钟
    heartCount = 0;
    return bpm;
}

3.3 速度检测模块

通过霍尔传感器输出脉冲,利用定时器统计,计算电机转速。

unsigned int hallCount = 0;

void Timer1_Init()
{
    TMOD |= 0x10;   // 定时器1
    TH1 = (65536-46080)/256;  // 定时50ms
    TL1 = (65536-46080)%256;
    ET1 = 1; EA = 1;
    TR1 = 1;
}

void Hall_Interrupt() interrupt 2
{
    hallCount++;
}

unsigned int getSpeed()
{
    unsigned int rpm = hallCount * 60 / 10; // 10秒统计换算
    hallCount = 0;
    return rpm;
}

3.4 电机调速模块

利用 PWM 改变占空比,实现电机速度调节,电位器作为输入信号。

void PWM_Init()
{
    // 初始化PWM输出,可通过定时器方式产生PWM波
}

void setMotorSpeed(unsigned char duty)
{
    // duty为占空比0~100
    // 控制电机转速
}

3.5 LCD 显示模块

void LCD_Display(unsigned int heart, unsigned int speed)
{
    LCD_ShowString(0,0,"Heart:");
    LCD_ShowNum(0,7,heart,3);
    LCD_ShowString(0,11,"bpm");
    
    LCD_ShowString(1,0,"Speed:");
    LCD_ShowNum(1,7,speed,3);
    LCD_ShowString(1,11,"RPM");
}

4 总结

本设计以 STC89C52 单片机为核心,结合脉搏传感器、霍尔测速、电机驱动和 LCD 显示模块,构建了一个简易的跑步机心率与速度检测系统。系统能够实时检测并显示用户心率和跑步机速度,同时通过电位器调节电机转速,模拟实际跑步机的工作模式。

本系统的优势在于:

  1. 功能完整:实现心率检测、速度检测、速度调节与实时显示。
  2. 结构清晰:采用模块化设计,便于扩展。
  3. 智能化程度高:能够实时获取用户运动数据,辅助运动安全。
  4. 应用前景广:不仅适合跑步机,还可应用于健身设备的健康监测。

通过该设计,展示了 单片机在运动监控和健康检测中的实际应用,对智能健身设备的研发具有一定的参考价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

点灯师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值