基于stm32+铂电阻设计的测温仪(代码片段)

DS小龙哥 DS小龙哥     2022-11-30     278

关键词:

1. 前言

设计一种针对特定企业气体温度测量的工况(要求测量精度较高的)进行实际测量。热电阻用来做测量用的电阻有两类,即铂和铜,它们与温度的函数关系是一样的,但实用测温范围不一样,工厂实际测温中要求的精度也不同,铂比铜的测温范围要宽一些,精度也高一些,要确定一个具体的企业。如:电子电路印刷焊接流水线、热水工厂、锅炉类企业、烟囱类等,他们的温度范围不同。

主要研究内容: 铂电阻传感器是利用电阻率随温度变化的特性(阻–温效应)而制成(实际上热金属电阻主要有铂和 铜两种)的一类热电阻传感器,测温范围大约是在-200—850摄氏度之间,有较宽的测温范围,广泛地应用于温度的基准、标准测量中。而气体的温度变化范围较大,有很大的不确定性。因此要求测气体温度的热电阻具有较好的物理化学性质,电阻温度系数要大,线性度要好,性能可靠,精度高,特性复现性好,有较好的标准电阻铂电阻的测量精度与铂的纯度有关系,纯度越高,测量的精度就越好,它有两段温区的特性方程,三种不同的温度系数,两种不同的标准电阻值,测量可通过分度表数值(对应的阻—温关系来确定,可以用方程表达出可测量和被测量的关系。

设计总结:

(1)采用铂电阻PT100测量温度

(2)采用MAX31865温度测量模块读取PT100电阻的温度

(3)采用LCD显示屏显示测量的温度

(4)主控单片机采用STM32F103RCT6

2. 硬件选型

2.1 STM32F103RCT6

2.2 USB数据线

2.3 PT100温度传感器

2. 4 MAX31865测温模块

3. STM32程序设计

3.1 文字取模

3.2 keil工程

需要整个工程源码的可以去这里下载:
https://download.csdn.net/download/xiaolong1126626497/85896877

3.3 硬件接线

硬件连接方式:
1. TFT 1.44 寸彩屏接线
GND   电源地
VCC   接5V或3.3v电源
SCL   接PC8(SCL)
SDA   接PC9(SDA)
RST   接PC10
DC    接PB7
CS    接PB8
BL	  接PB11

2. 板载LED灯接线
LED1---PA8
LED2---PD2

3. 板载按键接线
K0---PA0 
K1---PC5 
K2---PA15

4. MAX31865测温模块
PA2(TX)--RXD 模块接收脚
PA3(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(5.0V)

3.4 main.c代码

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include <string.h>
#include "timer.h"
#include "oled.h"
#include <string.h>
#include <stdlib.h>
#include "font.h"
#include "MAX31865.h"

//JTAG模式设置,用于设置JTAG的模式
//mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭;	   
#define JTAG_SWD_DISABLE   0X02
#define SWD_ENABLE         0X01
#define JTAG_SWD_ENABLE    0X00		  
void JTAG_Set(u8 mode)

	u32 temp;
	temp=mode;
	temp<<=25;
	RCC->APB2ENR|=1<<0;     //开启辅助时钟	   
	AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
	AFIO->MAPR|=temp;       //设置jtag模式




int main()

    char *max31865_p=NULL;
    u32 i=0;
    u8 key=0;
    u32 time_cnt=0;
    JTAG_Set(JTAG_SWD_DISABLE); //释放PA15
    LED_Init();  //LED灯初始化
    KEY_Init();  //按键初始化
    delay_init(72);
    USART1_Init(115200); //串口1初始化-打印调试信息
    Lcd_Init();    //LCD初始化
    Lcd_Clear(0);  //清屏为黑色
    LCD_LED_SET;   //通过IO控制背光亮		

   printf("系统开始运行...\\r\\n");
   delay_ms(2000); //等待系统稳定
   LCD_ShowChineseFont(16*0,0,16,HZ_FONT_16[6],RED,0);
   LCD_ShowChineseFont(16*1,0,16,HZ_FONT_16[7],RED,0);
   LCD_ShowChineseFont(16*2,0,16,HZ_FONT_16[8],RED,0);
   LCD_ShowChineseFont(16*3,0,16,HZ_FONT_16[9],RED,0);
   LCD_ShowChineseFont(16*4,0,16,HZ_FONT_16[10],RED,0);
   LCD_ShowChineseFont(16*5,0,16,HZ_FONT_16[11],RED,0);
   LCD_ShowChineseFont(16*6,0,16,HZ_FONT_16[12],RED,0);
   LCD_ShowChineseFont(16*7,0,16,HZ_FONT_16[13],RED,0);
   
    //温度传感器硬件检测
    while(1)
    
        key=MAX31865_Init();
        if(key==0)break;
        delay_ms(1000);
        printf("MAX31865检测失败.\\r\\n");
    
   printf("MAX31865检测成功.\\r\\n");
   Lcd_Clear(0);  //清屏为黑色
    
   //文字提示
   LCD_ShowChineseFont(16*1,0,16,HZ_FONT_16[0],WHITE,0);
   LCD_ShowChineseFont(16*2,0,16,HZ_FONT_16[1],WHITE,0);
   LCD_ShowChineseFont(16*3,0,16,HZ_FONT_16[2],WHITE,0);
   LCD_ShowChineseFont(16*4,0,16,HZ_FONT_16[3],WHITE,0);
   LCD_ShowChineseFont(16*5,0,16,HZ_FONT_16[4],WHITE,0);
   LCD_ShowChineseFont(16*6,0,16,HZ_FONT_16[5],WHITE,0);
   

   printf("系统正常运行.....\\r\\n");      
   while(1)
   
        delay_ms(10);
       
        //按键可以手动控制开启窗帘和LED灯
        key=KEY_Scan();
        if(key)
        
            printf("key=%d\\r\\n",key);
            LED2=!LED2;
        
        
        //轮询时间到达
        if(time_cnt>500)
        
            time_cnt=0;
            LED1=!LED1;
            LED2=!LED2;
            //获取一次温度
            max31865_p=MAX31865_GetTemp();
            printf("当前温度:%s\\r\\n",max31865_p);
            
            //实时显示
            Gui_DrawFont_GBK16(0,0,WHITE,0,(u8*)"              ");
            Gui_DrawFont_GBK16(52,72,WHITE,0,(u8*)max31865_p);
        
        
        // 接收WIFI返回的数据
        if(USART2_RX_FLAG)
        
            USART2_RX_BUFFER[USART2_RX_CNT]='\\0';
            
            printf("串口收到的数据:\\r\\n");
            for(i=0;i<USART2_RX_CNT;i++)
            
                printf("%c",USART2_RX_BUFFER[i]);
            
            USART2_RX_CNT=0;
            USART2_RX_FLAG=0;
        
	 

4. 代码分析

(1)系统常规硬件初始化

在main()函数开头的这一部分代码主要是完成对应的GPIO口初始化配置。比如:LED灯、按键、串口、延时函数、LCD显示屏初始化,并通过LCD显示屏显示一些提示文字。

初始化主要是完成硬件模块使用的GPIO口模式配置,时钟配置。

下面看看按键的初始化:

代码里主要做了2件事:(1)开启GPIO口对应的时钟。 (2)配置GPIO口的模式。按键作为输入器件,检测外部输入,模式就配置为输入模式。8就表示上下拉输入模式。

在keil软件里如果想看某个函数原型代码,可以双击选择这个函数或者变量,鼠标点击右键,选择Go to Defin…。

如果跳转失败,首先得确保工程可以正常编译,并且没有错误。

(2)MAX31865初始化

代码86行位置进行了MAX31865初始化,MAX31865是转化铂电阻温度的芯片,MAX31865内部采用串口协议与单片机通信,支持AT指令。单片机发送AT\\r\\n过去后,正常情况下MAX31865会返回OK\\r\\n,用这个方式检测MAX31865是否正常运行。检测成功就退出循环继续执行。

(3)实时转换温度显示

在代码的主循环里,按照500毫秒的频率读取一次铂电阻的温度,然后实时显示在LCD屏上。

并且控制开发板上的两盏LED灯改变一次状态,也就是500ms闪烁一次。

基于stm32单片机设计的红外测温仪(带人脸检测)(代码片段)

...的地方进行人体温度测量。当前设计的这款红外非接触式测温仪由测温硬件+上位机软件组合而成,主要用在地铁、车站入口等地方,可以准确识别人脸进行测温,如果有人温度超标会进行语音提示并 查看详情

基于stm32设计的健康检测设备(测温心率计步)(代码片段)

1.项目介绍本文介绍的项目是基于STM32设计的健康检测设备,支持体温测量,心率检测,支持运动计步(采用MPU6050陀螺仪实现),支持WIFI传输数据到手机APP打印显示。硬件环境介绍:MCU采用STM32F103C8T6心率传感器采用PulseSenso... 查看详情

stm32cubemx-配置spi驱动max31865读取铂电阻温度(代码片段)

文章目录STM32CubeMX-配置SPI驱动MAX31865读取铂电阻温度一、初始准备1.硬件平台2.软件平台3.原理图接线二、操作步骤1.CubeMX生成初始化代码1.1建立工程(通用步骤)1.2开启串口1.3配置SPI1.4配置GPIO1.5生成代码(通用步骤... 查看详情

17基于stm32的非接触红外测温器

17、基于STM32的非接触红外测温器引言1系统概述1.1设计任务1.2设计要求2方案设计与论证2.1芯片选择方案2.2系统概述:2.3设计要求:2.4系统总体设计思路2.5各功能模块程序实现原理分析3STM32性能介绍及硬件设计3.1STM32单片机性能介... 查看详情

17基于stm32的非接触红外测温器

17、基于STM32的非接触红外测温器引言1系统概述1.1设计任务1.2设计要求2方案设计与论证2.1芯片选择方案2.2系统概述:2.3设计要求:2.4系统总体设计思路2.5各功能模块程序实现原理分析3STM32性能介绍及硬件设计3.1STM32单片机性能介... 查看详情

stm32驱动模数转换芯片ads1120(2-pt100铂电阻测温度)

1.先看下原理图,原理图是电流从IDAC1流出,提供驱动,然后R(REF)这个电阻上的电压作为参考,读取AIN0和AIN1的电压,那么可以测量出来电阻值。 查看详情

基于stm32智能路灯灯光自动控制系统设计-毕设课设资料(代码片段)

实现的功能如下,下图是仿真原理图:通过ARM内部的ADC采集光敏电阻电压,判断电压值电压值低于设定的值,表示光强太弱,开路灯光强合适,显示OK灯不亮stm32内部ADC采集电压光敏电阻,调节光强 【... 查看详情

6☞基于stm32的电子秤设计√★(代码片段)

6、💗💗☞基于STM32的电子秤设计√★💗💗文章目录6、💗💗☞基于STM32的电子秤设计√★💗💗Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、系统... 查看详情

6☞基于stm32的电子秤设计√★(代码片段)

6、💗💗☞基于STM32的电子秤设计√★💗💗文章目录6、💗💗☞基于STM32的电子秤设计√★💗💗Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、系统... 查看详情

1基于stm32的音乐喷泉√♥(代码片段)

1、基于STM32的音乐喷泉文章目录1、基于STM32的音乐喷泉Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计2.1、芯片选择方案2.2、系统概述:2.3、系统总体设计思路2.4、各功能模块程序实现原理分析2.4.1.水泵驱... 查看详情

1基于stm32的音乐喷泉√♥(代码片段)

1、基于STM32的音乐喷泉文章目录1、基于STM32的音乐喷泉Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计2.1、芯片选择方案2.2、系统概述:2.3、系统总体设计思路2.4、各功能模块程序实现原理分析2.4.1.水泵驱... 查看详情

9★♥★基于stm32单片机的颜色检测仪设计♥☆(代码片段)

9、★♥★基于STM32单片机的颜色检测仪设计♥☆文章目录9、★♥★基于STM32单片机的颜色检测仪设计♥☆引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、系统概述2.3、设计要求2.4、系统总体... 查看详情

9★♥★基于stm32单片机的颜色检测仪设计♥☆(代码片段)

9、★♥★基于STM32单片机的颜色检测仪设计♥☆文章目录9、★♥★基于STM32单片机的颜色检测仪设计♥☆引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、系统概述2.3、设计要求2.4、系统总体... 查看详情

5♥☆基于stm32的智能手环√★☆(代码片段)

5、♥☆基于STM32的智能手环√★☆💙💙文章目录5、♥☆基于STM32的智能手环√★☆💙💙Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2系统概述2.3、设计要求2.4、系... 查看详情

5♥☆基于stm32的智能手环√★☆(代码片段)

5、♥☆基于STM32的智能手环√★☆💙💙文章目录5、♥☆基于STM32的智能手环√★☆💙💙Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2系统概述2.3、设计要求2.4、系... 查看详情

基于stm32无刷电机bldc速度控制器系统设计-毕设课设资料(代码片段)

可调转速通过可调电阻和STM32的ADC功能,实现500-4596范围的速度调节。通过定时器1的PWM互补输出六路PWM控制电机的转动,驱动器使用L293D和IRF540MOS管。换向使用的是外部中断,测速使用的是定时器2的三鹿输入捕获,... 查看详情

4☛基于stm32的电子打铃器√★☆(代码片段)

4、💙💙☛基于STM32的电子打铃器√★☆💙💙文章目录4、💙💙☛基于STM32的电子打铃器√★☆💙💙Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、... 查看详情

4☛基于stm32的电子打铃器√★☆(代码片段)

4、💙💙☛基于STM32的电子打铃器√★☆💙💙文章目录4、💙💙☛基于STM32的电子打铃器√★☆💙💙Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、... 查看详情