STM32新手入门教程:T型贴片式热电偶温度传感器的使用
STM32新手入门教程:T型贴片式热电偶温度传感器的使用
实现功能:利用STM32单片机采集T型贴片式热电偶温度传感器的温度数据,并显示在OLED显示屏上。
一:基础知识
STM32简介:是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M内核的32位微控制器系列,具有高性能、低功耗和丰富的外设接口等特点。 STM32微控制器广泛应用于各种嵌入式系统设计和开发中,适用于手机、电脑、电视、汽车电子、军工、无线基带、工控、消费电子、家电和医疗器械等领域。
二:硬件介绍
本例程采用STM32F103C8T6开发板、温度传感器使用T型贴片式热电偶温度传感器、热电偶型温度变送器模块、电流转电压模块;
三:软件介绍
本例程需要使用KEIL MDK软件以及STM32库文件进行编写程序;
四:硬件连接
首先使用万用表对电流转电压模块进行调试。使用IT6302三路可编程直流电源供应器其中一路给模块提供24V电压(24V+接模块VCC,24V-接模块GND),一路给模块输入电流端提供4-20mA直流电流(电流+接模块I+,电流-接模块I-),对模块的输出电压范围选择为0-3.3V(可通过模块的跳线帽选择相应的量程),将万用表量程调到直流电压20V挡位,模块VOUT端接万用表电压端正极,模块GND端接万用表电压端负极,使用IT6302直流电源给模块输入4mA时调节模块ZERO电位器直至万用表显示0V,输入20mA时调节SPAN电位器直至万用表显示3.3V,即调试完成。
图1:电流转电压模块调试接线图
模块调试完成后,即可对各传感器进行接线。将热电偶型温度变送器模块的1、2引脚分别接热电偶温度传感器的红黑插针,直流电源24V+接温度变送器的+端,温度变送器的-端接温度传感器的I+端,温度传感器的I-端接直流电源的24V-(这样才形成闭合回路);此时用调试完成的电流转电压模块,将其VOUT引脚接STM32F103C8T6单片机的PA1引脚(根据个人设置而定,可选引脚为PA0-PA7、PB0-PB1共10个模拟数字转换通道),电流转电压模块的GND引脚与单片机的GND引脚相连,即完成硬件接线。
图2:传感器与单片机接线图
五:程序代码
硬件连接完成后,即可在KEIL MDK软件中进行编程来实现在OLED显示屏上实时显示温度数据。
#include "stm32f10x.h" // Device header
void ADC_Config_Init(void)//ADC初始化配置
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC1 regular channel4 configuration */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1)==SET);
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1)==SET);
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//启动ADC1,软件方式
}
void GPIO_Config_Init(void)//GPIO初始化,PA1配置成ADC模拟输入
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
uint16_t ADC_Read(uint8_t ADC_Channel)//ADC寄存器值
{
ADC_RegularChannelConfig(ADC1, ADC_Channel,1,ADC_SampleTime_71Cycles5); // 配置当前要读取的通道
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
其他源文件(.c)需要包含这些头文件,以便使用外设的相关功能。
#include "stm32f10x.h" // Device header
#ifndef _AD_H
#define _AD_H
void ADC_Config_Init(void);
void GPIO_Config_Init(void);
uint16_t ADC_Read(uint8_t ADC_Channel);//ADC寄存器值
#endif
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "ADC.h"
int Volt1,Tem;//定义电压和温度
int main(void)
{
delay_init();//延时函数初始化,通过Systick中断实现1ms延时功能
OLED_Init();//OLED初始化
OLED_Clear();//清屏
GPIO_Config_Init();//PA4引脚配置成模拟输入
ADC_Config_Init();//ADC配置,ADC1通道0
OLED_ShowString(00,0,(uint8_t *)"Volt1: 000 mV");//显示电压值,单位mV
OLED_ShowString(00,2,(uint8_t *)"Tem: ");//显示温度值,单位℃
while (1)
{
delay_init();//延时函数初始化,通过Systick中断实现1ms延时功能
delay_ms(200);//等待200ms
ADCDat1 = ADC_Read(ADC_Channel_1);
Volt1 = (float)ADCDat1 / 4095 *3300;//数模转换公式
Tem = (float)ADCDat1 / 4095 *100;//现实的温度值
OLED_ShowNum(55,0,Volt1,4,16);//显示温度电压值,单位mV
OLED_ShowNum(45,2,Tem,3,16);//显示温度值,单位℃
delay_ms(200);//等待200ms
}
}
T型贴片式热电偶温度传感器的使用
作者:陆仁迦