目录
一、引言
二、热敏电阻概述
三、STC8增强型单片机简介
四、基于STC8单片机的热敏电阻测温系统
五、热敏电阻测温系统的优化与扩展
提高测量精度
扩展系统功能
六、 温度计算步骤
通过ADC采样计算出热敏电阻位置的电压
通过欧姆定律计算热敏电阻的阻值
通过阻值查表得到温度
七、代码实现
六、总结
一、引言
在电子测温技术中,热敏电阻以其价格低廉、灵敏度高和响应速度快等特点,得到了广泛的应用。而STC8增强型单片机作为一款功能强大的微控制器,具有高性能、低功耗和易用性等优点,非常适合用于热敏电阻的数据采集和温度控制系统中。本文将探讨如何使用STC8增强型单片机来开发基于热敏电阻的温度测量系统。
二、热敏电阻概述
热敏电阻是一种半导体电阻器,其阻值会随着温度的变化而显著变化。根据阻值随温度变化的特性,热敏电阻可分为正温度系数(PTC)和负温度系数(NTC)两种。其中,NTC热敏电阻在温度升高时阻值减小,应用更为广泛。
三、STC8增强型单片机简介
STC8系列增强型单片机是一款高性能、低功耗的8位微控制器,具有高速的运算能力和丰富的外设接口,如ADC(模数转换器)、GPIO(通用输入输出)、UART(通用异步收发传输器)等。这些特性使得STC8单片机成为开发温度测量系统的理想选择。
四、基于STC8单片机的热敏电阻测温系统
- 硬件设计
- 将热敏电阻与STC8单片机的ADC接口连接,以便将热敏电阻的阻值转换为数字信号。
- 设计适当的电源电路和滤波电路,以确保热敏电阻的稳定工作和准确测量。
- 根据需要,可以添加显示模块(如LCD显示屏)或通信模块(如无线模块),以实现温度数据的显示和远程传输。
- 软件编程
- 初始化STC8单片机的ADC模块,并设置合适的采样率和分辨率。
- 编写程序以定期读取ADC接口上的数字信号,该信号反映了热敏电阻的阻值。
- 根据热敏电阻的阻值与温度之间的对应关系(通常通过查表或拟合曲线获得),将读取的阻值转换为对应的温度值。
- 将温度值进行处理和显示,或根据需要将其发送给远程设备。
五、热敏电阻测温系统的优化与扩展
-
提高测量精度
- 可以通过增加ADC的采样率和分辨率,以及优化滤波电路,来提高温度测量的精度。
- 也可以采用多点测量和平均算法,以减少环境噪声和随机误差的影响。
-
扩展系统功能
- 可以添加温度控制模块,如加热或制冷设备,以实现对温度的自动调节。
- 可以通过无线通信模块将温度数据发送给远程设备,以实现远程监控和控制。
- 还可以将温度数据与其他传感器数据(如湿度、光照等)进行融合,以实现更复杂的环境监测和控制功能。
六、 温度计算步骤
通过ADC采样计算出热敏电阻位置的电压
-
ADC_Value
就是通过ADC采样出来的的数值,范围是0-4096
。V_ntc
即为对应的电压值
通过欧姆定律计算热敏电阻的阻值
串联分压,电流不变。上面是热敏电阻ntc和10k电阻的电流等式,根据公式推导出热敏电阻的阻值计算公式:
通过阻值查表得到温度
根据阻值对照该热敏电阻提供的对照表,得到对应的温度值,下面是《热敏电阻与温度对照表》。
七、代码实现
以下是一个简单的示例代码,演示了如何在STC8增强型单片机上实现热敏电阻案例:
#include "STC8G_H_GPIO.h"
#include "STC8G_H_Delay.h"
#include "STC8G_H_Timer.h"
#include "STC8G_H_NVIC.h"
#define BUZZER P00
// C` D` E` F` G` A` B` C``
u16 hz[] = {1047, 1175, 1319, 1397, 1568, 1760, 1976, 2093};
void GPIO_config(void) {
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
GPIO_InitStructure.Pin = GPIO_Pin_0; //指定要初始化的IO,
GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P0, &GPIO_InitStructure);//初始化
}
void Timer_config(u16 hz_value) {
TIM_InitTypeDef init;
init.TIM_Mode = TIM_16BitAutoReload; //工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
init.TIM_ClkSource = TIM_CLOCK_1T; //时钟源 TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
init.TIM_ClkOut = DISABLE; //可编程时钟输出, ENABLE,DISABLE
/*
24MHz = 24000000
24000000 / 1000 = 24000(每毫秒震动的次数)
65535 - (24000 * 2) = 65535 - 48000 = 17535(装载初值)
*/
init.TIM_Value = 65536UL - (MAIN_Fosc / (hz_value * 2)); //装载初值 0~65535
init.TIM_Run = ENABLE; //是否运行 ENABLE,DISABLE
Timer_Inilize(Timer0, &init);
// 启用中断
NVIC_Timer0_Init(ENABLE, Priority_0);
}
extern void timer0_callback() {
// 当Timer触发中断函数时,调用此函数
BUZZER = !BUZZER;
}
int main() {
u8 i = 0;
EA = 1; // 打开总中断
GPIO_config();
Timer_config();
// 拉高不响说明是无源蜂鸣器(2Hz~4kHz),无源蜂鸣器需要一定频率(20Hz~20kHz)的高低电平才能响
//BUZZER = 1;
while(1) {
for (i = 0; i <= 7; i++) {
// i = 0,1,2,3,4,5,6,7
Timer_config(hz1[i]);
delay_ms(250);
delay_ms(250);
delay_ms(250);
delay_ms(250);
}
}
}
以上代码所需库函数文件:
六、总结
本文介绍了基于STC8增强型单片机开发热敏电阻测温系统的基本方法和步骤。通过合理的硬件设计和软件编程,可以实现对温度的精确测量和有效控制。在实际应用中,可以根据具体需求对系统进行优化和扩展,以满足不同场合下的温度测量和控制需求。