多路温度巡回检测.docx
《多路温度巡回检测.docx》由会员分享,可在线阅读,更多相关《多路温度巡回检测.docx(19页珍藏版)》请在冰豆网上搜索。
多路温度巡回检测
电子技术课程设计报告书
课题名称
多路巡回温度检测系统
姓名
xxx
学号
2008080231
院、系、部
物理与电子科学系
专业
电子信息科学与技术
指导教师
xxx
2018年1月4日
一、设计任务及要求:
设计任务:
设计一个测温范围在0~100℃温度巡回检测系统,完成系统的软硬件设计,学习掌握机电一体化系统的设计方法,提高学习新知识、新技能的能力,培养独立设计的能力。
要求:
测试点数:
8路温度检测
测量范围:
-10℃~80℃
测量精度:
±0.1℃
电源电压:
±5V
显示方式:
数码管显示
指导教师签名:
年月日
二、指导教师评语:
指导教师签名:
年月日
三、成绩
指导教师签名:
年月日
一、绪言……………………………………………………………………………1
<一)设计任务………………………………………………………………1
<二)控制方案选择…………………………………………………………1
二、系统设计………………………………………………………………………2
<一)硬件电路设计…………………………………………………………2
<二)元器件选择……………………………………………………………2
<三)电路原理图……………………………………………………………3
三、模块说明………………………………………………………………………3
<一)温度传感器……………………………………………………………3
<二)主控模块………………………………………………………………4
四、流程图………………………………………………………………………4
五、程序设计………………………………………………………………………5
六、系统仿真………………………………………………………………………12
结束语……………………………………………………………………………13
参考文献………………………………………………………………………………13
一、绪言
<一)设计任务
本设计是一个多路温度巡回检测系统。
用信号调节器处理输入的电信号,将其变为适用于指示装置的信号。
信号可能需要放大到足够的振幅以使指示装置产生明显的变化。
还有其它类型的信号调节器如分压器,或整流器、滤波器、斩波器等到整形电路。
常用的指示装置一般是偏转仪表,如电压表、电流表、欧姆表等通用仪表。
电子检测设备可以用来测量电流、电压、电阻、温度、声平、压力及其它物理量。
尽管指示仪器的刻度盘上显示出了度量单位,但因为电流的流动,指针的显示是有偏差的。
<二)控制方案选择
1、多功能温度巡回检测的方案论证
以89C51单片机为核心的多路温度巡回检测控制系统,用来对八路温度测量结果进行选择性监控;此系统主要由单片机、传感器、多路转换开关、A/D转换器和驱动显示电路组成。
其中传感器用具有可编程电源关断模式的低功耗集成温度传感器TMP36GS进行信号采集,将温度信号转化成电压的信号,为了提高设计的精度,用具有低零点漂移繁荣放大器OP193将采集来的微弱的电压信号放大,因为单片机处理的是数字信号,所以用到含有片内八路选择开关的ADC0809模数转换器,将放大的模拟电信号转换成数字量输入到单片机,通过89C51的软件控制对输入的数字信号进行处理后输出,通过八位共阴极LED数码管动态扫描驱动电路MAX7219对测量结果进行显示。
电子检测设备一般由3个部分组成:
传感器、信号调节器、指示装置。
传感器将非电信号转换成电信号,因而,只有当所测量的电量是非电信号时才需要传感器。
、
二、系统设计
<一)硬件电路设计
1、主要元器件选择
主要元器件选用型号和数量如表2-1所示:
表2-1主要元器件清单
序号
材料名称
规格型号
数量
1
单片机
AT89S52
1
2
晶振
12MHz
1
数字温度传感器
18B20
2
四位数码管
1
蜂鸣器
无源
1
三极管
9013
1
2、电路原理图
采用AT89S52单片机控制多路温度巡回检测系统的电路原理如图2-2所示
<三)模块说明
1、温度传感器——18B20
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。
其一个工作周
期可分为两个部分,即温度检测和数据处理。
DS18B20数字温度传感器具有超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强。
对于我们普通的电子爱好者来说,DS18B20的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。
DS18B20的主要特征:
全数字温度转换及输出。
先进的单总线数据通信。
最高12位分辨率,精度可达土0.5摄氏度。
12位分辨率时的最大工作周期为750毫秒。
可选择寄生工作方式。
检测温度范围为–55°C~+125°C(–67°F~+257°F>
内置EEPROM,限温报警功能。
64位光刻ROM,内置产品序列号,方便多机挂接。
2、CPU主控模块——AT89S52
At89s52是一种低功耗、高性能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。
<四)流程图
1、流程图
系统整体流程图,如下图所示:
<五)程序设计
1、18B20温度程序:
#include
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6。
sbitwela=P2^7。
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
//0123
0x66,0x6d,0x7d,0x07,
//4567
0x7f,0x6f,0x77,0x7c,
//89ab
0x39,0x5e,0x79,0x71,0x80}。
//cdef.
voiddisplay(
//uchar,uchar,uchar,
uchar,uchar,uchar>。
voiddelay_led(uintz>。
voidinit_led(>。
voidzhuanhuan(>。
uintaa。
ucharwei_1,wei_2,wei_3,v,wei_4,wei_5,wei_6。
uintshuju。
//得到的温度值
uchartemp[2]={0,0}。
//存放DS18B20的温度寄存器值
uintvalue=0。
sbitFWD=P1^1。
//负温度显示指示
sbitDQ=P2^0。
//数据线
sbitFM=P2^3。
//控制蜂鸣器
voidReadSerialNumber(void>。
ucharsn1,sn2,sn3,sn4,sn5,sn6,sn7,sn8。
//存放DS18B20的64位序列号
voidow_reset(void>。
voidtmstart(void>。
voidReadSerialNumber(void>。
voidRead_Temperature(void>。
voidwrite_byte(char>。
uintread_byte(void>。
voiddelay_18B20(uint>。
voidbaojing(>。
/*******主函数**********/
voidmain(>
{
init_led(>。
//初始化子程序
tmstart(>。
delay_18B20(50>。
/*等待转换结束*/
while(1>
{
Read_Temperature(>。
delay_18B20(50>。
tmstart(>。
delay_18B20(50>。
/*等待转换结束*/
zhuanhuan(>。
display(
//wei_1,wei_2,wei_3,
wei_4,wei_5,wei_6>。
baojing(>。
}
}
/******延时函数*********/
voiddelay_led(uintz>
{
uintx,y。
for(x=z。
x>0。
x-->
for(y=110。
y>0。
y-->。
}
/******led初始化函数******/
voidinit_led(>
{
wela=0。
dula=0。
//一般位选和段选开始时要清零
}
/********显示函数*********/
voiddisplay(
//ucharwei_1,ucharwei_2,ucharwei_3,
ucharwei_4,ucharwei_5,ucharwei_6>
{
/*dula=1。
P0=table[wei_1]。
dula=0。
wela=1。
P0=0xdf。
wela=0。
delay_led(1>。
//延时1秒
P0=0xdf。
dula=1。
P0=table[wei_2]。
dula=0。
wela=1。
P0=0xef。
wela=0。
delay_led(1>。
dula=1。
P0=table[wei_3]。
dula=0。
wela=1。
P0=0xf7。
wela=0。
delay_led(1>。
*/
dula=1。
P0=table[wei_4]。
dula=0。
wela=1。
P0=0xfb。
wela=0。
delay_led(1>。
dula=1。
P0=table[wei_5]+0x80。
//小数点显示+80H即可
dula=0。
wela=1。
P0=0xfd。
wela=0。
delay_led(1>。
dula=1。
P0=table[wei_6]。
dula=0。
wela=1。
P0=0xfe。
wela=0。
delay_led(1>。
}
//========18b20程序=================*/
voiddelay_18B20(uintseconds>//延时
{
for(。
seconds>0。
seconds-->。
}
/******************************************
18b20程序
******************************************/
//===============复位===========
voidow_reset(void>
{
ucharpresence。
DQ=0。
//
delay_18B20(44>。
//
DQ=1。
//
delay_18B20(3>。
//
presence=DQ。
//
//
delay_18B20(12>。
//
}
//=========从总线上读取一个字节========
uintread_byte(void>
{
uchari。
for(i=8。
i>0。
i-->
{
value>>=1。
DQ=0。
//pullDQlowtostarttim
_nop_(>。
_nop_(>。
_nop_(>。
_nop_(>。
DQ=1。
//thenreturnhigh
if(DQ>
{
value|=0x80。
}
delay_18B20(4>。
//waitforrestoftimeslot
}
return(value>。
}
//===========向18B20写一个字节=================
voidwrite_byte(charval>
{
uchari,j。
for(i=8。
i>0。
i-->//writesbyte,{
DQ=0。
//pullDQlowtostarttimeslot
j++。
/*延时4us*/
DQ=val&0x01。
delay_18B20(8>。
//holdvalueforremainderoftimeslot
DQ=1。
j++。
val>>=1。
}
}
//============读取温度============
voidRead_Temperature(void>
{
intk,i。
inttemple。
/*存放读取的温度值将其除以16即为得到的值*/
ow_reset(>。
k++。
//延时4us
write_byte(0xCC>。
//Sk_nop_(>。
ipROM
k++。
//延时4us
write_byte(0xBE>。
//readregister
k++。
k++。
//延时8us
temp[0]=read_byte(>。
//读取低字节
temp[1]=read_byte(>。
//读取高字节
//if(!
(temp[0]&0x80>>/*当低位寄存器第八位为0时*/
//{}
i=temp[1]。
i<<=8。
/*把b放到高八位上去*/
i|=temp[0]。
/*将a放到底八位上去*/
i&=0x07ff。
if((temp[1]&0x08>>
{
temple=~i+1。
//如果为负温则去除其补码
FWD=0。
/*表示温度为负数*/
}
else
{
temple=i。
FWD=1。
/*表示温度为正数*/
}
//temple=temp[1]*0x100+temp[0]。
shuju=temple*10/16。
}
voidReadSerialNumber(void>
{
ow_reset(>。
//复位
delay_18B20(1>。
//延时
write_byte(0x33>。
//发送读序列号子程序
sn1=read_byte(>。
//读取第一个序列号,应为16H;
sn2=read_byte(>。
//读取第二个序列号,应为10H。
sn3=read_byte(>。
//
sn4=read_byte(>。
//
sn5=read_byte(>。
//
sn6=read_byte(>。
//
sn7=read_byte(>。
//
sn8=read_byte(>。
}
//=======初始化============
voidtmstart(void>
{
ow_reset(>。
//复位
delay_18B20(1>。
//延时
//ReadSerialNumber(>。
write_byte(0xCC>。
//跳过序列号命令,对所有器件有效
write_byte(0x44>。
//发转换命令44H,
}
//========报警===========//
voidbaojing(>
{
if(aa>=250>
FM=0。
elseFM=1。
}
<六)系统仿真
在完成了交通灯控制器硬件设计和软件设计以后,便进入系统的调试阶段。
系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,如可选用Keil软件进行软件调试,用Proteus软件完成硬件调试。
1、Proteus调试
结束语
完成情况:
经过两个周的努力,完成了多路巡回温度检测系统方案的设计,用AT89S52单片机实现温度控制。
所得收获:
通过这次课程设计,使我得到了一次用专业知识和专业技能去分析问题、解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及用汇编语言设计程序的思路技巧等方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
参考文献
【1】肖来胜、夏术泉编著《单片机技术实用教程》华中科技大学出版社,2004
【2】梅开乡主编《数字逻辑电路》电子工业出版社2003
【3】陈尔绍主编《传感器实用装置制作集锦》人民邮电出版社2001
【4】王新贤主编《通用集成电路速查手册》山东科学技术出版社2002
【5】扬素行主编《模拟电子技术基础简明教程》高等教育出版社2004
【6】欧阳斌林等编著《单片机原理及应用》中国水利水电出版社2001
【7】眭碧霞《单片机及其应用》西安电子科技大学出版社2000