利用51单片机 linux系统在arm板上显示的温度测量仪表毕业设计论文.docx
《利用51单片机 linux系统在arm板上显示的温度测量仪表毕业设计论文.docx》由会员分享,可在线阅读,更多相关《利用51单片机 linux系统在arm板上显示的温度测量仪表毕业设计论文.docx(38页珍藏版)》请在冰豆网上搜索。
利用51单片机linux系统在arm板上显示的温度测量仪表毕业设计论文
绍兴文理学院
数理信息学院
课程设计报告书
题目温度测量仪表
课程设计任务书
班级
电信101
姓名
姚丽平
题目
温度测量仪表
技术参数、设计要求、
检测数据
1、能完成温度的数据传输
2、完成串口通信
3、在ARM开发板上显示出温度
设计进度安排或工作计划
2013.7.3~2013.7.5:
教师布置课题,学生查询相关资料,完成方案选择、确定验证方案。
2013.7.6~2013.7.8:
设计模块划分、实现及各模块仿真图设计。
2013.7.8~2013.7.11:
设计整体实现、调试及验证,并开始撰写报告。
2012.7.12:
课程设计报告撰写并定稿,上交。
其它
认真阅读智能仪器仪表课程设计报告撰写规范;课题小组经协商好要指定组长并明确分工,形成良好团队工作氛围;基于课题基本要求,各小组与指导老师讨论,再将课题细化、增加要求;课题小组每成员均需各自撰写一份课程设计报告。
温度测量仪表
摘要
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于89S51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器DS18B20数据采集过程。
对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
嵌入式系统采用的是微处理器,实现相对单一的功能,采用独立的操作系统,往往不需要大量的外围器件。
因而在体积上功耗上有其自身的优势,相比之下,一个使用WindowsCE的PDA,仅靠机内电源使用几天,而一台笔记本仅仅能够支持三小时左右。
其实一个软硬件高度结合的产物,能提高执行速度和系统的可靠性。
关键词单片机;DS18B20;温度传感器;数字温度计;AT89S51;嵌入式系统
1.设计概述
温度控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,常用的控制电路根据应用场合和所要求的性能指标有所不同,在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。
这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。
传统的继电器调温电路简单实用,但由于继电器动作频繁,可能会因触点不良而影响正常工作。
控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。
而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。
数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。
由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。
更能串接多个数字温度传感器DS18B20进行范围的温度检测。
2.设计方案
我们选取的方案主要实现温度的检测以及通过ARM板显示这两个大功能,以及读取这个相对较为容易的功能。
因此在温度检测这一模块上,利用DS18B20这一目前比较先进的温度传感器,可以很精确地感测实时温度,对于DS18B20的通讯协议的控制,读取测量的温度值,经过一定的算法,可以把温度转化为十进制,先暂存起来。
经显示模块调用,通过ARM,最终在电脑上显示。
图2-1硬件总框图
3.设计实现
3.1系统设计原理
3.1.1温度测量模块
图3-1DS18B20图例
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出北侧温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
①独特的单线接口仅需要一个端口引脚进行通信;
②多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
③无须外部器件;
④可通过数据线供电,电压范围为3.0~5.5V;
⑤零待机功能;
⑥温度以9或12位数字量读出;
⑦用户可定义的非易失性温度报警设置;
⑧报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
⑨负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。
图3-2DS18B20内部结构图
64位ROM的位结构如图3所示。
开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
非易失性温度报警器触发器TH和TL,可通过软件写入户报警上下限。
图3-364位ROM结构图
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图4所示。
头2个字节包含测得的温度信息,第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义热图5所示。
低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换得精度位数,即用来设置分辨率,定义方法见表1。
图3-4高速暂存RAM结构图
图3-5配置寄存器
表3-1DS18B20分辨率的定义规定
由表3-1可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度转换时间越长。
因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6,7,8字节保存未用,表现为逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。
单片机可以通过单线接口读出数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
温度值格式如图3-6所示。
图3-6温度数据值格式
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码转换为原码,再计算十进制。
表3-2是一部分温度值对应的二进制温度数据。
表3-2DS18B20温度与测得值对应表
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH,TL字节内容作比较。
若T>TH或T因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。
主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到ROM数据是否正确。
DS18B20的测温原理如图3-8所示。
图中第温度系数晶振的震荡频率受温度的影响很小,用于产生固定频率的脉冲送给减法计数器1;高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入.图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数震荡器产生的时钟脉冲计数,进而完成温度测量。
计数门的开启时间由高温度系数震荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1,温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1所对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将被重新装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。
图3-7中的斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被预测值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要,系统对DS18B20的各种操作必须按协议进行。
操作协议为:
初始化DS18B20→发ROM功能命令→发存储器操作命令→处理数据。
图3-7DS18B20测温原理图
DS18B20与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如图3-8所示.单片机端口接单线总线,为为保证有效DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
图3-8DS18B20采用寄生电源的电路图
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。
采用寄生电源供电方式时VDD和GND端均接地。
由于单线制只有一根线,因此发送接口必须是三态的。
3.1.2AT89S51单片机
图3-9AT89S51引脚图
本设计中所用的单片机型号为AT89S51,其主要特性为:
1)有CHMOS工艺的节能运行方式
2)兼容MCS51指令系统
3)3个16位可编程定时/计数器中断
4)2个串行中断
5)2个外部中断源
6)2个读写中断口线
7)低功耗空闲和掉电模式
8)8k可反复擦写(>1000次)FlashROM
9)256x8bit内部RAM
10)时钟频率0-24MHz
11)可编程UART串行通道
12)共6个中断源,3级加密位
13)软件设置睡眠和唤醒功能
3.1.3ARM核心控制模块
ARMCortex-A8处理器基于ARMv7体系结构,能够将速度从600MHz提高到1GHz以上。
Cortex-A8处理器可以满足需要在300mW以下运行的移动设备的功率优化要求;以及需要2000DhrystoneMIPS的消费类应用领域的性能优化要求。
图3-10ARMCortex-A8
Tiny210核心板介绍:
Tiny210核心板主要采用了2.0mm间距的双排针,引出CPU大部分常用功能引脚,并力求和Tiny6410核心板大小一致(64x50mm),引脚兼容(P1,P2,CON2);另外还根据S5PV210芯片的性,分别引出了标准的miniHDMI接口,和1.0mm间距的贴片CON1座(51Pin),以作用户扩之用,Tiny210标配512M内存和512M闪存(SLC),并可选配256M/1GB闪存(SLC)。
串口介绍:
S5PV210本身总共有4个串口,其中UART1为四线的功能串口,UART0、2、3为两线串口。
在本开发板上,UART0和UART1已经经过RS232电平转换,它们分别对应于COM0和COM1,你可以通过附带的交叉串口线和PC互相通讯。
图3-11引脚定义图
图3-12引脚定义图
ARM微控制器是整个系统的核心部件,主要功能为控制各个功能模块正常的工作。
在系统初始化完毕后,ARM-CORTEXA8启动温度传感器,然后对所采集的数据进行处理,将需要备份的数据存储到FLASH当中。
同时通过PS232将数据送到上位机进行处理显示。
3.2系统设计程序流程框图
图3-13主函数流程图
对DS18B20温度模块进行初始化,利用51单片机调用DS18B20头文件读取温度数据,并进行数据处理。
编写串口通信程序利用串口向ARM发送数据,最后在ARM端读取串口数据获取温度值,并显示在LCD上。
4.设计验证
图4-1串口助手接收到的数据
图4-1中,数据按5个字节发送,首先发送01,再将转化成十进制的数据按百位、十位、个位的顺序分别加上0x30,最后按和校验方式发送第五个数据,即将前四个数据的高位和低位相加所得。
所以图中标识数据所得的温度为33.5度。
图4-2linux显示的数据
图中第二行与第三行为正常的数据发送,以01为首数据,按8个字节发送,即图中数据分别为34.5度和34.4度,校验正确。
5.总结
在做课程设计的过程中,通过理论联系实际,不断的学习和总结经验,巩固了所学的知识,提高了处理实际问题的能力。
我的理论和实践水平都有了较大的提高。
在本设计中,我熟练掌握了单片机硬件设计和接口技术,对温度传感器的原理及应用有了一定的了解,同时,我对linux系统有了一定的了解,掌握了各种控制电路及其相关元器件的使用。
这次课程设计过程中也让我认识到了团队合作的重要性。
通过这次课程设计,我不仅学会如何将所学专业知识运用到实际生活中,还学会如何克服未知的困难,解决难题的方法,为将来毕业设计的顺利进行打下了基础。
这次设计过程中也让我认识到了很多不足,在今后的学习过程中我一定努力补缺补漏,多实践,将理论知识更好地应用于实践。
最后感谢各位指导老师的指导。
参考文献
[1]童诗白,华成英.模拟电子技术基础[M].北京:
高等教育出版社,2006
[2]张齐,杜群贵.单片机应用系统设计技术[M]. 北京:
电子工业出版社,2007
[3]中国机械工业教育协会组编.《单片机原理与应用》.机械工业出版社.2001
[4]求是科技.单片机通信技术与工程实践[M].北京:
人民邮电出版社,2005
[5]张洪润电子线路与电子技术[M].清华大学出版社[M],2005
[6]郭永贞主编数字电子技术[M].西安电子科技大学出版社2000
[7]李广弟单片机基础[M],北京:
北京航空航天大学出版社,2001
[8]杨金岩等.8051单片机数据传输接口扩展技术与应用实例[M].北京:
人民邮电出版社,2005
附录
实物图
主程序源代码
51单片机代码:
主函数:
#include
#include
#include
#include
#include
/***************************************************************************
#defineHD7279_RESET0xa4
#defineHD7279_TEST0xbf
#defineHD7279_RLC0xa3
#defineHD7279_RRC0xa2
#defineHD7279_RL0xa1
#defineHD7279_RR0xa0
#defineHD7279_DECODE00x80//0x80代表数码管110进制
#defineHD7279_DECODE10xc8//0xC8代表数码管116进制
#defineHD7279_UNDECODE0x90//0x90代表数码管1直接显示
#defineHD7279_HIDE0x98
#defineHD7279_FLASH0x88
#defineHD7279_SEGON0xe0
#defineHD7279_SEGOFF0xc0
#defineHD7279_READ0x15
1、下载数据并按方式0译码数据格式10000a2a1a0dpxxxd3d2d1d0
2、下载数据并按方式1译码数据格式11001a2a1a0dpxxxd3d2d1d0
3、下载数据但不译码数据格式10010a2a1a0dpabcdefg
4、闪烁控制数据格式10001000d7d6d5d4d3d2d1d0
5、消隐控制数据格式10011000d7d6d5d4d3d2d1d0
6、段点亮控制数据格式11100000XXd5d4d3d2d1d0
7、段关闭控制数据格式11000000XXd5d4d3d2d1d0
读键盘指令:
数据格式00010101d7d6d5d4d3d2d1d0
********************************************************************************/
/********************延时函数,延时单位1ms
*********************/
unsignedcharrev=0xaa;
unsignedcharflag=0x00;
unsignedinttemp[5];
unsignedintnum;
voidDelay_ms(unsignedintMs)
{
intus,usn;
while(Ms!
=0)
{
usn=4;
while(usn!
=0)
{
us=0xfa;
while(us!
=0){us--;};
usn--;
}
Ms--;
}
}
voidsend_int(void)
{
TMOD=0x20;//定时器1工作于8位自动重载模式,用于产生波特率
//定时器0工作在16位方式
TH1=0xFD;//波特率9600
TL1=0xFD;
SCON=0x50;//设定串行口工作方式
PCON=0x00;//波特率倍增
TR1=1;
}
voidsend_char(unsignedchartxd)
//传送一个字符
{
SBUF=txd;
while(!
TI);//等特数据传送
TI=0;//清除数据传送标志
}
voidmain()
{
unsignedintt0,i;
chart1;
send_byte(HD7279_RESET);//注意:
HD7279复位后,必须经过大概25MS,才会正常工作!
Delay_ms(50);
send_int();//串口初始化
while
(1)
{
t0=ReadTemperature();
temp[0]=t0%10;//个
temp[1]=t0%100/10;
temp[2]=t0%1000/100;//百
temp[3]=t0/1000;//千
t1=0x01;
send_char(t1);
t1=temp[2]+0x30;
send_char(t1);
t1=temp[1]+0x30;
send_char(t1);
t1=temp[0]+0x30;
send_char(t1);
t1=0x91+temp[0]+temp[1]+temp[2];
send_char(t1);
for(i=0;i++;i<100)
{
_nop_();
}
if(RI==1)
{
rev=SBUF;
RI=0;
}
}
}
HD7279头文件:
#include"reg52.h"
#include
#ifndef_HD7279A_H_
#define_HD7279A_H_
sbitHD7279A_CS=P2^2;//pin1
sbitHD7279A_CLK=P1^1;//pin2
sbitHD7279A_DATA=P1^2;//pin3
sbitHD7279A_KEY=P1^3;//pin4
//commanddefine
#defineHD7279_RESET0xa4
#defineHD7279_TEST0xbf
#defineHD7279_RLC0xa3
#defineHD7279_RRC0xa2
#defineHD7279_RL0xa1
#defineHD7279_RR0xa0
#defineHD7279_DECODE00x80
#defineHD7279_DECODE10xc8
#defineHD7279_UNDECODE0x90
#defineHD7279_HIDE0x98
#defineHD7279_FLASH0x88
#defineHD7279_SEGON0xe0
#defineHD7279_SEGOFF0xc0
#defineHD7279_READ0x15
voidDelay_ms(unsignedintMs);
voidDelay_us(unsignedcharUs);
voidsend_byte(unsignedcharc);
unsignedcharrecv_byte(void);
voidwrite_hd7279(unsignedcharcmd,unsignedchardat);
unsignedcharread_hd7279(unsignedcharcmd);
voidsend_byte(unsignedcharc)
{
unsignedchari,j,k;
HD7279A_CS=0;
HD7279A_DATA=1;
for(i=0;i<30;i++)
{
//_nop_();
}
for(i=0;i<8;i++)
{
if(c&0x80)
{
HD7279A_DATA=1;
}
else
{
HD7279A_DATA=0;
}
HD7279A_CLK=1;
for(j=0;j<8;j++)
{