1 系统功能介绍
本设计基于 STC89C52 单片机,实现了一个简易的跑步机监测与控制系统。其主要功能是通过 脉搏/心率传感器 检测运动者的心率,通过 霍尔传感器 检测电机转速,并结合 电机调速电路 模拟跑步机的速度调节。同时利用 LCD1602 液晶显示屏 实时显示运动者的心率与跑步机速度参数,让用户在运动过程中直观掌握自身状态和运动强度。
该系统的主要功能概括如下:
-
心率检测功能
通过脉搏/心率传感器采集人体的心跳信号,并经过 LM393 比较器电路 将微弱的模拟信号转换为稳定的数字脉冲信号,单片机对信号进行计数处理后计算出运动者的心率值,并实时显示。 -
速度检测功能
通过霍尔传感器对跑步机电机转速进行检测,利用单片机内部定时器对脉冲数进行统计换算为转速,从而实现跑步机速度的实时监测。 -
跑步机调速功能
通过电位器输入模拟信号,调节 PWM 波形占空比,从而改变电机转速,实现跑步机的速度控制。 -
LCD1602 显示功能
使用 LCD1602 显示屏同时显示两类数据:心率值(bpm,次/分钟)和电机转速(RPM,转/分钟),方便用户实时掌握运动情况。 -
系统整体稳定性与扩展性
系统不仅能够完成心率和速度监控,还能够扩展更多的传感器(如血氧传感器、温度传感器)以便进一步提升健康监测水平。
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 显示模块,构建了一个简易的跑步机心率与速度检测系统。系统能够实时检测并显示用户心率和跑步机速度,同时通过电位器调节电机转速,模拟实际跑步机的工作模式。
本系统的优势在于:
- 功能完整:实现心率检测、速度检测、速度调节与实时显示。
- 结构清晰:采用模块化设计,便于扩展。
- 智能化程度高:能够实时获取用户运动数据,辅助运动安全。
- 应用前景广:不仅适合跑步机,还可应用于健身设备的健康监测。
通过该设计,展示了 单片机在运动监控和健康检测中的实际应用,对智能健身设备的研发具有一定的参考价值。