东华多路温度巡回检测仪的设计报告.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多路温度巡回检测仪的设计
一设计任务及要求:
设计一个多路温度检测仪,共有8个测温点,每个点连续检测8次,以平均值代表该点温度,并轮流在LED显示器上显示。测试检测元件为铂热电阻Pt1000, 温度测量范围为100℃——+500℃,测量精度为±1℃。系统每隔10秒完成一个点的测量,测量值除在LED显示器上显示外,还必须通过串行口(RS485)发送到上位机。任何时刻,可以通过按键切换显示通道。
二设计框图
三实验原理
以AT89C51单片机为核心的多路温度巡回检测控制系统,主要用来对多路温度测量结果进行选择性监控;该系统主要由单片机、传感器、多路转换开关、A/D转换器和驱动显示电路等组成。其中温度传
感器将温度信号转化成电压的信号,为了提高设计的精度,用具有低零点漂移繁荣放大器OP193将采集来的微弱的电压信号放大。由于单片机处理的是数字信号,所以用模数转换电路将放大的模拟电信号转换成数字量输入到单片机,通过AT89C51的软件控制对输入的数字信号进行处理后输出,通过八位共阴极LED数码管动态扫描驱动电路MAX7219对测量结果进行显示。
四实验电路设计
(1)温度传感器——18B20
DS18B20 的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周
期可分为两个部分,即温度检测和数据处理。DS18B20 数字温度传感器具有超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加
功能强。
DS18B20 的主要特征:
全数字温度转换及输出。
先进的单总线数据通信。
最高 12 位分辨率,精度可达土 0.5摄氏度。
12 位分辨率时的最大工作周期为 750 毫秒。
可选择寄生工作方式。
检测温度范围为100°C ~+500°C
内置 EEPROM,限温报警功能。
64 位光刻 ROM,内置产品序列号,方便多机挂接。
(2)CPU主控模块——AT89C51
At89C51是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中
断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器8K 字节在系统可编程 Flash。
五实验调试及运行结果
六设计体会
通过这次对多路温度巡回检测系统的设计,让我了解了利用所学单片机知识设计电路的程序与方法,也让我了解了关于多路温度巡回检测系统的基本原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。通过这次学习,让我对各种电路都有了大概的了解,对proteus软件的使用也更为熟练。对于这些电路还是应该自己动手实际操作才会有深刻理解。
七试验程序源代码
#include
#include
#include
#include
#define PCF8591 0x90 //PCF8591的地址选择第零号通道
#define NOKEY 0xff //OXff代表没有按键按下
#define START 0x00 // 0x00 代表PCF8591开始转化的命令
sbit cd4051A= P2^4; //CD4051 的通道值用于选择输入的通道号sbit cd4051B= P2^3;
sbit cd4051C= P2^2;
unsigned char OPEN=1; //总开关标志
unsigned char keynumber; //按键值
unsigned char volatile send; //串口发送标志
unsigned char volatile channel=0; // 当前通道
unsigned char volatile tick=0;
code unsigned char disc1[]={"Temp of No. :"};
unsigned int temperature[8]={250,250,250,250,250,250,250,250}; //设置温度初始值
/**************************************函数声明部分**************************************************************/
unsigned char Keyscan(void); //键盘扫描
void AD_Convert(unsigned char); //AD转换程序
void Display(unsigned char k); // 显示程序
void TargetInit(void);
void Delay(unsigned char delay);
void Lcddisplay(unsigned char number);
void Delay(unsigned char);
/************************************************************************** ***************************************************/
void Delay(unsigned char timedelay) //延时函数
{
unsigned char i;
for(;timedelay<0;timedelay--)
{
for(i=0;i<110;i++);
}
}
// 硬件的初始化//
void TargetInit(void)
{
TMOD=0x21;
TR1=0;