华南理工大学汽车专业模板发动机进气温度测量系统资料.docx
- 文档编号:25081857
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:17
- 大小:105.58KB
华南理工大学汽车专业模板发动机进气温度测量系统资料.docx
《华南理工大学汽车专业模板发动机进气温度测量系统资料.docx》由会员分享,可在线阅读,更多相关《华南理工大学汽车专业模板发动机进气温度测量系统资料.docx(17页珍藏版)》请在冰豆网上搜索。
华南理工大学汽车专业模板发动机进气温度测量系统资料
的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
图7:
DS18B20测温原理框图
DS18B20有4个主要的数据部件:
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表1:
DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
表2:
DS18B20温度数据表
(3)DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器该字节各位的意义如下:
表3:
配置寄存器结构
TM
R1
R0
1
1
1
1
1
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:
(DS18B20出厂时被设置为12位)
表4:
温度分辨率设置表
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms
5、高速暂存存储器
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
表2是对应的一部分温度值。
第九个字节是冗余检验字节。
表5:
DS18B20暂存寄存器分布
寄存器内容
字节地址
温度值低位(LSByte)
0
温度值高位(MSByte)
1
高温限值(TH)
2
低温限值(TL)
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校验值
8
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表6:
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
表7:
RAM指令表
指令
约定代码
功能
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
6、DS1820的编程语言
传感器最初是用汇编和C语言实现的。
由于C语言不能有效、方便地满足面向传感器网络的应用开发,其目标代码比较长,经进一步研究设计出了支持组件化的新型编程语言——NESC。
其最大的特点是,将组件化/模块化思想和基于事件驱动的执行模型相结合。
现TinyOS操作系统和基于TinyOS的应用程序都是用NESC语言编写的,大大提高了应用开发的方便性和应用执行的可靠性。
本文以WSN为背景,通过一个基于TinyOS的灯闪烁实例——Blink,详细介绍NESC语言的结构以及用该语言如何实现组件化/模块化的应用程序,为深入研究TinyOS的应用开发提供一种实现方法。
1 NESC语言结构
NESC是C语言的扩展,精通C语言的程序员掌握这种语言相对比较快。
与C语言的存储格式不同,用NESC语言编写的文件是以“.nc”为后缀。
每个nc文件实现一个组件功能(组件化/模块化)。
在NESC程序中,主要定义两种功能不同的组件——模块(module)和配件(configuration)。
2 NESC应用程序的分析
每一个NESC应用程序都是由一个或多个组件通过接口链接起来,并通过ncc/gcc编译生成一个完整的可执行程序。
Blink程序是一个简单的NESC应用程序。
它的主要功能是每隔1s的时间间隔亮一次,关闭系统时红灯亮。
其程序主要包括3个子文件Blink.nc、BlinkM.nc和SingleTimer.nc。
(1)Blink.nc文件
这个文件为整个程序的顶层配件文件,关键字为configuration,通过“->”连接各个对应的接口。
(2)BlinkM.nc文件
BlinkM.nc为模块文件,关键字为module、command,通过其调用StdControl接口中的3个命令“init,start,stop”连接接口,是实现Blink程序的具体功能。
(3)SingleTimer.nc文件
NESCSingleTimer.nc为一个配件文件,主要通过TimerC和StdControl组件接口实现与其他组件之间的调用关系,配件文件还定义了一个唯一时间参数化的接口Timer。
7、DS1820使用中注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
7.1、较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
7.2、在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。
当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
7.3、连接DS1820的总线电缆是有长度限制的。
试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。
当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。
这种情况主要是由总线分布电容使信号波形产生畸变造成的。
因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
7.4、在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。
这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
第三部分系统程序和电路图
#include
sbitDQ=P2^5;//DS18B20的数据线和AT89S51单片机的P2.5口相接,且定义DQ为变量名
voidmain()
{
SendCommand_TmpConvert();//启动温度转换
SendCommand_TmpRead(void);//发送读取温度命令
Get_TmpValue(void);//返回温度最终十进制值
}
/************************发送温度转换命令函数****************************
**************功能:
发送温度转换命令到DS18B20,启动温度转换功能************/
voidSendCommand_TmpConvert(void)
{
while(Init_DS18B20());//初始化DS18B20,等待返回低电平信号
WritetoDS_onebyte(0xcc);//写入跳过序列号命令字SkipRom
WritetoDS_onebyte(0x44);//写入温度转换命令字ConvertT,启动温度转换功能
}
/*****************延时函数**************
*************功能:
延时Nx15us***********/
voiddelay_multi_15us(unsignedintN)
{
do{
_nop_();//1
_nop_();//2
_nop_();//3
_nop_();//4
_nop_();//5
_nop_();//6
_nop_();//7
_nop_();//8
_nop_();//9
_nop_();//10
_nop_();//11
_nop_();//12
_nop_();//13
N--;//计满15us后N减1
}while(N);
}
/*********************初始化函数******************************
***********功能:
初始化DS18B20,以便能进行后续读写操作********/
bitInit_DS18B20(void)//返回为位的函数,以便检测是否成功启动
{
DQ=0;//先拉低延时一段时间
delay_multi_15us(50);//延时750us,协议要求480us~980us,满足要求
DQ=1;//再拉高延时
delay_multi_15us(6);//延时等待返回低电平
return(DQ);
delay_multi_15us(26);//再延时一段时间
}
/******************写一字节数据函数*********************
************功能:
向DS18B20写一个字节的数据内容**********/
voidWritetoDS_onebyte(charcommand)
{
unsignedchari;//8位数据记位,为了节约资源定义为8位
bittemp;
for(i=0;i<8;i++)
{
temp=command&0x01;//将最低位提取出来
command>>1;//将其右移一位
if(temp)//如果写入的是1,则按1的操作:
先置DQ=0,延时15us,再置DQ=1,延时45us
{
DQ=0;
delay_multi_15us
(1);//延时15us
DQ=1;
delay_multi_15us(3);//延时45us
}
else//如果写入的是0,则按0的操作:
先置DQ=0,延时60us,再置DQ=1
{
DQ=0;
delay_multi_15us(4);//延时60us
DQ=1;
/******************读一字节数据函数*********************
************功能:
从DS18B20读一个字节的数据内容**********/
unsignedcharReadfromDS_onebyte()//char类型函数,最后要返回一个字节数据
{
unsignedchari,dat;
dat=0;//初始化存放读取内容的变量
for(i=0;i<8;i++)
{
DQ=0;//先拉低约4us,符合至少1us的要求
_nop_();
_nop_();
_nop_();
_nop_();
DQ=1;//再拉高延时
delay_multi_15us
(1);//延时15us
_nop_();//为了保证大于15us再延时几us
_nop_();
_nop_();
if(DQ)//如果读出为1,按1读:
{
dat=dat|0x80;//存进最高位,待会右移
}
else
{
dat=dat|0x00;//存进最高位,待会右移
}
dat=dat>>1;
delay_multi_15us(4);//延时60us
}
return(dat);
/************************发送读取温度命令函数****************************
**************功能:
发送温度读取命令到DS18B20,读取DS18B20中的温度值************/
voidSendCommand_TmpRead(void)
{
while(Init_DS18B20());//初始化DS18B20,等待返回低电平信号
WritetoDS_onebyte(0xcc);//写入跳过序列号命令字SkipRom
WritetoDS_onebyte(0xbe);//写入温度读取命令字,以便后续读取温度值}
/******************************温度值获取和计算函数***********************
***************功能:
获得温度值并进行计算,得到最终十进制温度值***********/
intGet_TmpValue(void)//返回温度最终十进制值
{
unsignedintTemp_tmpvalue;//存放中间温度变量
floattemp;//存放中间的浮点数,因为分辨率为0.0625,故先算出来的应该为浮点数
unsignedcharlow,high;//存放读取出来的温度低、高字节
SendCommand_TmpRead();//送读取温度命令
low=ReadfromDS_onebyte();//读取两个字节的数据,先送入低字节
high=ReadfromDS_onebyte();//再送入高字节
Temp_tmpvalue=high;//数据处理,将两个字节合并
Temp_tmpvalue<<=8;
Temp_tmpvalue|=low;
Final_tmpvalue=Temp_tmpvalue;//直接将无符号数变为有符号数
//因为计算机中对于负数是利用补码来表示的
//若是负值,读取出来的数值是用补码表示的,可直接赋值给int型的Final_tmpvalue
temp=Final_tmpvalue*0.0625;//使用DS18B20的默认分辨率12位,精确度为0.0625度,
//即读回数据的最低位代表0.0625度
return(Final_tmpvalue);//最终返回十进制有符号温度值
}
第四部分、课程设计总结:
时间过得真快,我们课程设计就这样就接近尾声了,其实在这次课程设计当中我发现自己也是学习到蛮多知识的。
我仍然记得刚刚开始接触这个课题的时候,真的有些懵了,因为我们没有学习过单片机这一门课程,好像也跟我们的专业没有太大的关系,而且第一反应就是虽然知道有单片机这家东西,但是不知道具体是什么,所以一开始不知道怎么下手开始我们的课程设计。
但是在慢慢看了我们的课程设计任务书以及指导书之后,我对这次的课程设计已经有了一个大体的了解。
然后通向我们的知道老师请教了些不懂的问题之后,我发现自己可以在借助老师提供的资料以及网上找到的资料之上可以进行我们的课程设计了。
在课程设计的过程当中,我也是收益良多的。
在这次课程设计当中,我首次发现原来单片机有那么知识的。
虽然以前经常听到一些学习过单片机相应课程的朋友说单片机是挺难得,但是一直没办法体会他们那时候的心情,现在等到我们亲自去接触的时候发现真的也是有一定难度的。
但是因为我们课程设计的要求比较简单,只是比较简单了解一下单片机的相关知识,所以,我们还是比较容易理解的。
对于单片机的学习,是一个比较新颖的知识,在这次课程设计当中,我对单片机的发展史与现状,以及单片机在汽车上的应用有了一定的了解,同时也对AT89S51单片机的主要性能特点、管脚说明以及单片机的编程语言了解与学习,加深我对AT89S51单片机的认识。
对于传感器的学习,应该从很久之前就开始接触,所以对于传感器这一类东西并没有感觉到陌生。
但是还是通过这次课程设计,首次那么认真地去了解有关于传感器的相关知识,尤其对DS-18B20数字温度传感器有了一定的了解与认识。
在课程设计当中,对DS-18B20数字温度传感器的技术性能、应用范围、产品型号与规格、接线说明、主要特征、外形与内部结构等等对DS-18B20数字温度传感器有了更加深入的了解。
其实,这已经不是我们第一次的课程设计了,所以我们对课程设计的做法都有自己的一套学习方法,我们都是根据自己的方法进行自己的课程设计的。
作为大学生的我们已经是成年人了,我们应该更加主动自主的学习,应该更好地规划我们的时间与未来。
其实我发现每次的课程设计当中,都是可以锻炼以及考验我们自己自主学习的。
不管是现在还是在未来的学习当中,自主学习能力是很重要的,这是我们都要好好学习的。
所以,总的来说,在这次课程设计当中,我不但学习到相应的单片机以及传感器的知识,我也锻炼了自己的自学能力,是自己的能力有了一定程度的提升。
第五部分、参考文献
1、新编MCS-51单片机应用设计(第3版),张毅刚,机械工业出版社,2006。
2、51系列单片机开发宝典,赵建领,电子工业出版社,2007。
3、单片机原理与应用,曹立军,西安电子科技大学出版社,2009。
4、单片机原理及串行外设接口技术,李朝青,北京航空航天大学出版社,2008。
5、传感器原理及工程应用,郁有文,西安电子科技大学出版社,2008。
6、常用传感器应用电路的设计与实践,何希才,科学出版社,2007。
7、传感器与检测技术,徐科军,电子工业出版社,2008。
8、ATMEL新型AT89S52系列单片机及其应用,孙育才,清华大学出版社,2005。
9、PIC单片机基础与传感器应用,秦明宏,科学出版社,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南理工大学 汽车 专业 模板 发动机 温度 测量 系统 资料