单片机温度报警系统设计
1.1 设计要求
1.1.1 设计任务
1.硬件设计:根据所选题目要求,完成基于单片机的完整硬件接口电路设计。
2.系统程序设计:根据需要画出程序流程图,设计出全部汇编程序并给出程序设计说明和程序注释。
3.系统调试: 通过调试硬件及软件实现温度报警系统,并分析实验误差及总结。
1.1.2 性能指标要求
1.采集端使用基础的热电偶或者热敏电阻NTC(非模块化组件),测量误差正负1摄氏度。
2.报警输出为LED灯或者继电器
3.显示系统可为LCD等显示温度状态和报警状态。
1.2.1 基本原理
热敏电阻NTC(Negative Temperature Coefficient),是负温度系数,其阻值会随着温度的升高而呈指数下降。通过ADC芯片采集热敏电阻的电路两端的电压值将模拟信号转换为相应的数字信号并发送给单片机,单片机则将ADC采集的数字信号推算这个电压就可计算出此时NTC的阻值进而推出其温度值,并在OLED屏显示温度值,通过设置温度报警温度,就可以知道当前温度是否报警。
1.2.2 总体框图
图1
2 系统硬件电路设计
2.1硬件原理图设计
本次实验介绍基于STC89C52单片机的NTC热敏电阻温度报警系统的设计与实
现,本次实验的硬件原理图如下图2.1
3.2 系统各功能模块子程序流程设计
本次实验使用keil进行编程,主要的模块子程序有五部分组成,都使用了模块化编程,下面是简单的介绍。
1.OLED显示程序
oled.c是OLED屏幕的显示程序通过调用单个显示函数void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)来显示单个字符,调用void OLED_ShowNum(u8 x,u8 y,u16 num,u8 len,u8 size)来显示温度数值,调用void OLED_ShowCHinese(u8 x,u8 y,u8 no)显示单个汉字;x和y对应的是屏幕的x坐标和y坐标。下图6是本次实验显示用到的函数。
图6
2.ADC0832驱动程序
ADC0832.c是ADC0832的驱动程序,程序里面的unsigned char Get_ADC_Result()是ADC采集模拟量的函数。驱动程序的编写是通过ADC0832的时序图进行编写的,主要的流程顺序是首先进行1.初始化2.选择模式3.选择通道4.等待接收数据5.关闭片选;下图是ADC0832的驱动程序
图7
3.延时程序
图8是本次实验的延时子函数,通过调用可以起到延时作用。
图9
4. ADC采集处理程序
为了能够使ADC采集到的数据的准确和可靠,需要对ADC采集的数据进行一定的算法处理,下面是本次实验使用的AD中值滤波法的,每次连续采样21次返回中间值。
图10
5.计算温度值程序
NTC10KB3950.c是对ADC采集处理好后的数据进行转换成温度值的程序,使用的分方法是公式法;温度的计算公式为:Rt = R x EXP(Bx(1/T1-1/T2))
这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;其中T2=(273.15+25),Rt 是热敏电阻在T1温度下的阻值;R是热敏电阻在T2常温下的标称阻值;B值是热敏电阻的重要参数;EXP是e的n次方;这个公式需要将AD值转化为电阻值。图11是由公式推算的程序
图11
-
- 系统联调
将编写的程序下载到电路仿真软件,进行功能调试,观察OLED
屏是否有温度显示,按下按键可以对显示的报警温度值进行修改,当温度超过设定的报警温度后报警灯会被点亮。下图是Proteus仿真原理图
图8
图8中RV1是滑动变阻器,可以通过滑动改变其阻值,相当于热敏电阻。电压表可以知道滑动变阻器的两端电压值,调试时可以参考NTC热敏电阻的数据手册的阻温特性表计算出不同温度下对应的输出电压值,记录好数据,分析其温度是否正确。
下图9,10,11,12是用Excel列出的不同温度下的阻值和电压及其ADC大小。本次实验选择的ADC的位数是8位,所以输出的ADC值范围是0到255之间。通过计算公式欧姆定律可以求出不同温度下的热敏电阻的电压值,方便后面分析。
作者:创客IT