基于STM32单片机的跑步机心率检测proteus仿真原理图PCB

本文介绍了一款基于STM32F103RCT6单片机的智能运动设备,通过LCD1602实时显示跑步者的心率和速度,并配备按键控制功能及心率上限报警。设计还包括心率检测模块和电源接口,配合EXTI和TIM3实现定时和中断功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能:
0.本系统采用STM32F103RCT6作为单片机
1.系统采用LCD1602液晶实时显示转速 心率以及跑步时间等情况
2.系统设计有三个功能按键可以控制电机的启停以及复位跑步时间
3.心率检测采用成熟的功能模块,再将该信号经过比较器处理之后送入单片机
4.采用DC002作为电源接口可直接输入5V给整个系统供电
5.系统设置有心率上限值,一旦心率超过上限 声光将会报警

原理图:
在这里插入图片描述

PCB :
在这里插入图片描述

主程序:

#define __MAIN_C
#include "main.h"
#include "stdio.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "bsp_gpio.h"
#include "bsp_clkconfig.h"
#include "bsp_delay.h"
#include "bsp_GeneralTim.h" 
#include "bsp_lcd1602.h"
#include "bsp_key.h"
#include "bsp_exti.h"

#define DIAMETER 30 //直径mm

volatile CreatByte Flag;
uint8_t datIndex = 0;
float heartRateBuf[6] = {0}; //暂存心率值
float heartRate = 0;
char tab0[16]; //显示内容缓存
uint16_t timeSecond = 0;
uint16_t timeMinute = 0;
uint16_t pulseCnt = 0;
uint32_t timeCnt = 0;

int main(void)
{	
    dispFlag = 1;
    refreshFlag = 0;
    updateFlag = 0;
    startFlag = 0;

    // 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MH
    HSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz

    // GPIO端口初始化
    GPIO_Config();
    Key_GPIO_Config();
    LCD_GPIO_Init();

    LCD_Init();
    LCD_Clear();
    DelayMs(250);
    LCD_DispStr(0, 0, "    Welcome!    ");
    DelayMs(1000);
    LCD_Clear();
    sprintf(tab0, "Speed:%5.1fkm/h ", (float)pulseCnt * DIAMETER * 3.14 * 3.6 / 1000);
    LCD_DispStr(0, 0, tab0); //显示转速 第一行
    sprintf(tab0, "HR:%3dbpm %3dm%02d", (uint16_t)heartRate, timeMinute, timeSecond);
    LCD_DispStr(0, 1, tab0); //显示心率

    EXTI_MOTOR_Config();
    GENERAL_TIM_Init(); //初始化TIM
    GENERAL_TIM3_CH3_INPUT_CAPTURE(); //配置TIM3的CH3为输入捕获模式
    TIM_ITConfig(GENERAL_TIM3, TIM_IT_Update | GENERAL_TIM3_IT_CCx, ENABLE); // 开启更新和捕获中断

    while (1)
    {    
        if (refreshFlag == 1)
        {
            TIM_ITConfig(GENERAL_TIM3, TIM_IT_Update | GENERAL_TIM3_IT_CCx, DISABLE); // 关闭更新和捕获中断
            
            refreshFlag = 0;
            heartRateBuf[datIndex] = (float)timeCnt / 1000.0; //算出间隔时间
            timeCnt = 0;
            datIndex++;
            if (datIndex > 3) //记录到超过等于2次时间
            {
                datIndex = 1;   //计数从1开始
                updateFlag = 1; //测得2次开始显示
            }
            
            TIM_ITConfig(GENERAL_TIM3, TIM_IT_Update | GENERAL_TIM3_IT_CCx, ENABLE); // 开启更新和捕获中断
        }
        
        if (dispFlag == 1) //更新显示标志置位
        {
            dispFlag = 0; //更新显示标志清零
            if (updateFlag == 1) //如果显示关  检测心率是否真实
            {
                updateFlag = 0;
                heartRate = 60000 / ((heartRateBuf[1]/2) + (heartRateBuf[2]/2)); //心率计算 2次求平均值
                if (heartRate > 120)
                {
                    BUZZER_ON;
                }
                else
                {
                    BUZZER_OFF;
                }
                sprintf(tab0, "HR:%3dbpm", (uint16_t)heartRate);
                LCD_DispStr(0, 1, tab0); //显示心率
            }

            sprintf(tab0, "%3dm%02d", timeMinute, timeSecond);
            LCD_DispStr(10, 1, tab0); //显示时间
            sprintf(tab0, "Speed:%5.1fkm/h ", (float)pulseCnt * DIAMETER * 3.14 * 3.6 / 1000);
            LCD_DispStr(0, 0, tab0); //显示转速 第一行
            pulseCnt = 0;

        }

        KeyProcess();
    }
}

/*********************************************END OF FILE**********************/

仿真演示视频:
https://www.bilibili.com/video/BV1FR4y1R7Kb/

实物演示视频:
https://www.bilibili.com/video/BV1b5411X7f7/

随着社会的发展和进步,人们的生活水平提高,越来越多的人喜欢在业余时间锻炼,跑步对于身材的保持有一定作用,消耗卡路里毕竟快,所以跑步机一般为健身首选,使人们的业余越来越充实。跑步机控制系统控制也作为跑步机的核心,应用各种高级技术。跑步机智能化的实现已经成为可能。不可或缺的跑步机也引领了时代潮流,大众对智能跑步机要求越来越多。为了满足需求,跑步机的设计也在不断改善。此次我们设计的模拟跑步机是基于AT89C51单片机,能够显示跑步者跑步时间,消耗的热量,跑的里程和速度,调节坡度,控制电机转动,方便跑步者获取需要的信息。 1.写好编程进行电机控制,采用的是四相双四拍的方式,实现电机的反转和正转。 2.在程序中加入按键控制,精确到不同按键拥有不同功能,通过按键设定速度,体重,坡度,并且可以进行电机转动控制。 3.利用定时器和中断来表示时间。 4.利用微分的方法累计出里程,利用公式累积算出消耗的热量。 5.利用LCD显示屏显示的速度,里程,体重,时间,热量消耗。 接通电源,先设定好初始值,LCD显示屏会显示初始值。接着由定时器统计时间,根据需要设定速度和坡度,然后根据按键扫描结果得到设定的相应值。计算距离的函数和热量的公式在主函数中运行。按下按键,相应按键功能就会执行,随着时间的改变,里程和消耗能量的值也会改变。 时间显示由定时器计时,定时器采用方式1,,其中使用了定时中断定时1s,到了1s就中断,计时器加1. 坡度和速度调节:速度控制主要是根据编程来实现速度变化,本设计采用按钮调节,每按一次加速(坡度增加)或减速(坡度减少)键,速度和坡度会有相应提升或减慢。 热量计算:热量=体重*里程*K(1.036). 里程计算:每100ms计算一次距离,累积得到总里程。 步进电机:采用四相双极性步进电机,双四拍控制。 以下是驱动原理: 中间部分是转子,由一个永磁体组成,边上的是定子绕组。当定子的一个绕组通电时,将产生一个方向的电磁场,如果这个磁场的方向和转子磁场方向不在同一条直线上,那么定子和转子的磁场将产生一个扭力将定子扭转。依次改变绕组的磁场,就可以使步进电机正转或反转(比如通电次序为A->B->C->D正转,反之则反转)。而改变磁场切换的时间间隔,就可以控制步进电机的速度了,这就是步进电机的驱动原理。正转驱动:BC AC AD BD反转驱动 BD AD AC BC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值