华南理工大学汽车专业模板——发动机进气温度测量系统.doc_第1页
华南理工大学汽车专业模板——发动机进气温度测量系统.doc_第2页
华南理工大学汽车专业模板——发动机进气温度测量系统.doc_第3页
华南理工大学汽车专业模板——发动机进气温度测量系统.doc_第4页
华南理工大学汽车专业模板——发动机进气温度测量系统.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.的脉冲信号送给计数器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: 配置寄存器结构 tmr1r011111低五位一直都是1,tm是测试模式位,用于设置ds18b20在工作模式还是在测试模式。在ds18b20出厂时该位被设置为0,用 户不要去改动。r1和r0用来设置分辨率,如下表所示:(ds18b20出厂时被设置为12位) 表4: 温度分辨率设置表 r1r0分辨率温度最大转换时间009位93.75ms 0110位187.5ms 1011位375ms 1112位750ms 5、高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算: 当符号位s=0时,直接将二进制位转换为十进制;当s=1时,先将补码变为原码,再计算十进制值。表 2是对应的一部分温度值。第九个字节是 冗余检验字节。 表5: ds18b20暂存寄存器分布 寄存器内容 字节地址温度值低位 (ls byte)0温度值高位 (ms byte)1高温限值(th)2低温限值(tl)3配置寄存器4保留5保留6保留7crc校验值8根据ds18b20的通讯协议,主机(单片机)控制ds18b20完成温度转换必须经过三个步骤:每一次读写之前都要对ds18b20进行 复位操作,复位成功后发送一条rom指令,最后发送ram指令,这样才能对ds18b20进行预定的操作。复位要求主cpu将数据线下拉500微秒,然后 释放,当ds18b20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主cpu收到此信号表示复位成功。 表6: rom指令表 指 令 约定代码功 能读rom33h读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应用程序都是由一个或多个组件通过接口链接起来,并通过nccgcc编译生成一个完整的可执行程序。blink程序是一个简单的nesc应用程序。它的主要功能是每隔1 s的时间间隔亮一次,关闭系统时红灯亮。其程序主要包括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 sbit dq=p25;/ds18b20的数据线和at89s51单片机的p2.5口相接,且定义dq为变量名void main() sendcommand_tmpconvert();/启动温度转换 sendcommand_tmpread(void);/ 发送读取温度命令 get_tmpvalue(void);/返回温度最终十进制值 /*发送温度转换命令函数 *功能:发送温度转换命令到ds18b20,启动温度转换功能*/void sendcommand_tmpconvert(void) while(init_ds18b20();/初始化ds18b20,等待返回低电平信号 writetods_onebyte(0xcc);/写入跳过序列号命令字 skip rom writetods_onebyte(0x44);/写入温度转换命令字 convert t,启动温度转换功能/*延时函数*功能:延时nx15us*/void delay_multi_15us(unsigned int n) 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,以便能进行后续读写操作*/bit init_ds18b20(void)/返回为位的函数,以便检测是否成功启动 dq=0;/先拉低延时一段时间 delay_multi_15us(50);/延时750us,协议要求480us980us,满足要求 dq=1;/再拉高延时 delay_multi_15us(6);/延时等待返回低电平 return(dq); delay_multi_15us(26);/再延时一段时间/* 写一字节数据函数*功能:向ds18b20写一个字节的数据内容*/void writetods_onebyte(char command) unsigned char i; /8位数据记位,为了节约资源定义为8位 bit temp; for(i=0;i1;/将其右移一位 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读一个字节的数据内容*/unsigned char readfromds_onebyte()/char类型函数,最后要返回一个字节数据 unsigned char i,dat; dat=0;/初始化存放读取内容的变量 for(i=0;i1; delay_multi_15us(4);/延时60us return(dat);/*发送读取温度命令函数 *功能:发送温度读取命令到ds18b20,读取ds18b20中的温度值*/void sendcommand_tmpread(void) while(init_ds18b20();/初始化ds18b20,等待返回低电平信号 writetods_onebyte(0xcc);/写入跳过序列号命令字 skip rom writetods_onebyte(0xbe);/写入温度读取命令字 ,以便后续读取温度值/*温度值获取和计算函数*功能:获得温度值并进行计算,得到最终十进制温度值*/int get_tmpvalue(void)/返回温度最终十进制值 unsigned int temp_tmpvalue;/存放中间温度变量 float temp;/存放中间的浮点数,因为分辨率为0.0625,故先算出来的应该为浮点数 unsigned char low,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单片机的认识。对于传感器的学习,应该从很久之前就开始接触,所以对于传

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论