《鱼缸温度控制系统.ppt》由会员分享,可在线阅读,更多相关《鱼缸温度控制系统.ppt(124页珍藏版)》请在三一办公上搜索。
1、1,鱼缸温度控制系统,实验一:温度采集与显示,2,实验目的掌握温度传感器的原理、工作方式和使用方法复习使用数码管进行字符的显示,3,实验要求使用温度传感器进行温度的采集使用数码管进行温度的显示,要求保留小数点后两位有效数字,4,实验需求与设计分析硬件需求温度传感器数码管温度传感器选型,5,温度传感器简述发展阶段分立式温度传感器模拟集成温度传感器智能温度传感器数字化、集成化、网络化,6,温度传感器原理(一),塞贝克热电效应两种不同电导体或半导体的温度差异而引起两种物质间的电压差的热电现象,7,热电效应示意图,8,温度传感器原理(二),热电阻导体的电阻随温度变化而改变,通过测量其阻值推算出被测量物
2、体的温度,9,制造的材料:纯金属一般工作温度:-200+500,10,其他红外测温辐射测温表面波测温.,11,集成温度传感器的分类模拟式温度传感器逻辑输出温度传感器数字式温度传感器温度传感器的供应商,12,模拟式温度传感器传统的模拟温度传感器,如热电偶、热敏电阻和电阻温度检测器(RTDS)对温度的监控,在一些温度范围内线性不好,需要进行冷端补偿或引线补偿;热惯性打,相应时间慢。集成模拟温度传感器与之相比,具有灵敏度高、线性度好、响应速度快等优点,而且它还将驱动电路、信号处理电路以及必要的逻辑控制电路集成在单片IC上,有实际尺寸小、使用方便等优点。常见的模拟温度传感器电压输出型和电流输出型两种,
3、电压输出型有LM3911、LM335、LM45、AD22103、电流输出型有AD590。,13,模拟温度传感器MAX6605(电压输出型),14,逻辑输出温度传感器在许多应用中,我们并不需要严格测量温度值,只关心温度是否超出一个设定范围,一旦超出所规定的范围,则发出报警信号,启动或关闭风扇、空调、加热器或其他控制设备,此时可选用逻辑输出式温度传感器。LM56、MAX6501-MAX6504、MAX6509/6510是其中的典型代表。,15,LM56功能和引脚,16,数字式温度传感器最大特点,直接输出温度的数值内含不挥发型存储器,可以设定温度值的上限或者下限可以直接通过寄存器进行设置工作方式常见
4、数字温度传感器的数字接口:I2C、SPI、1-Wire常见代表:AD7416、DS1620、DS1820,17,DS1620SPI接口(DQ、CLK、RST#),18,温度传感器的比较,19,温度传感器的供应商,ADI公司AD74xx、AD78xx系列、ADM102x系列(数字输出型)TM35/6/7(电压输出型)MAXIM&DALLASDS16XXDS18X2XMAX6509/10NS国家半导体公司LM76/77/83/92,20,温度传感器选型数字型价格精度要求工作范围关键字“温度传感器”,21,硬件电路设计系统结构框图,22,DS18B20的引脚定义pin1:GNDpin2:DQ(数据通
5、道)pin3:Vdd,23,引脚定义,24,DS18B20寄生电源电路,25,DS18B20的供电方式方式一:使用DQ引脚进行供电寄生电源供电,26,方式二:使用Vdd进行供电外部电源供电,27,开发板原理图设计,28,上拉电阻R43(容易引起误会的地方),29,上拉电阻的作用:提高驱动能力寄生电源供电时供电(当DQ高电平时),30,MCU上引脚连接,31,P3.x内部结构,32,P3口的每一位除了普通的I/O口外,都有第二功能,功能如下图所示,33,34,35,程序设计流程,36,DS18B20驱动分析1-Wire接口读、写操作,37,DS18B20的操作过程DS18B20 resetROM
6、操作命令功能操作命令每次使用ROM命令之前都需要进行reset操作,两个ROM命令除外:SEARCH ROMF0hALARM SEARCHECh,38,ROM 命令集,39,功能命令集,40,DS18B20通信流程图,41,DS18B20 RESET操作,操作过程主设备发送reset脉冲DS18B20发送一个应答信号presence脉冲应答信号的作用通知主设备,有从设备挂载在1-Wire总线上表明从设备已经准备好接受数据,42,1-Wire 信号,信号的分类reset 信号presence 信号写0信号读0信号写1信号读1信号,43,Reset 信号&Presence 信号,44,unsign
7、ed char ow_reset(void)unsigned char presence;DQ=1;DQ=0;/pull DQ line low;delay(250);/leave it low for 600usdelay(100);DQ=1;/allow line to return highdelay(30);/wait for presence40uspresence=DQ;/get presence signaldelay(100);/wait for end of timeslot 200us return presence;/presence signal returned,45
8、,写0信号&写1信号,46,void write_bit(char bitval)DQ=1;DQ=0;/pull DQ low to start timeslotdelay(2);if(bitval=1)DQ=1;/return DQ high if write 1delay(30);/hold value for remainder of timeslot 65usDQ=1;/Delay provides 16us per loop,plus 24us.Therefore delay(5)=104us,47,读0信号&读1信号,48,unsigned char read_bit(void)u
9、nsigned char i;DQ=1;DQ=0;/pull DQ low to start timeslot;DQ=1;/then return highdelay(1);/delay 7usi=DQ;return(i);/return value of DQ line,49,void write_byte(char val)unsigned char i;unsigned char temp;for(i=0;i i;/shifts val right i spacestemp,50,unsigned char read_byte(void)unsigned char i;unsigned
10、char value=0;for(i=0;i 8;i+)if(read_bit()value|=0 x01 i;delay(20);/wait for rest of timeslot delay45usreturn(value);,51,作业,对驱动程序unsigned char read_bit(void)和void write_bit(char bitval)进行分析尝试自己写void write_byte(char val)和unsigned char read_byte(void)这两个驱动,52,驱动程序,unsigned char ow_reset(void);unsigned
11、char read_bit(void);unsigned char read_byte(void);void write_bit(char bitval);void write_byte(char val);,53,主函数设计,程序设计流程,54,程序初始化,数码管显示的初始化设置工作方式设置译码方式温度传感器的初始化主设备reset脉冲18B20 presence脉冲,55,初始化代码数码管的初始化CH452_Write(CH452_SYSON2);/两线制方式CH452_Write(CH452_BCD);/BCD译码Write_Disp();/数码管显示DS18B20初始化 ow_rese
12、t();,56,void Write_Disp()CH452_Write(CH452_DIG0|time0);CH452_Write(CH452_DIG1|time1);CH452_Write(CH452_DIG2|time2);CH452_Write(CH452_DIG3|time3);time 数组的初值都是0 x88,所以一开始的时候,在显示温度之前,最后4个数码管是全部点亮的,57,DS18B20 reset时序要求,主设备拉低DQ信号至少480us;主设备释放DQ信号,并进入接收模式;内部上拉电阻将DQ信号拉高;DS18B20检测到上升沿,然后等待1560us,紧接着应答一个6024
13、0us的低电平,58,unsigned char ow_reset(void)unsigned char presence;DQ=1;DQ=0;delay(250);delay(100);DQ=1;delay(30);presence=DQ;delay(100);return presence;,59,延迟函数1 void delays(unsigned char times)void delays(unsigned char times)unsigned char onescd=5;for(;times 0;times-)/Delay times second.for(onescd=5;on
14、escd 0;onescd-)/Delay one second.delayms(200);,60,延迟函数2 void delayms(unsigned char times)void delayms(unsigned char times)unsigned char onems=CLK;unsigned char ms=200;for(;times 0;times-)for(onems=CLK;onems 0;onems-)ms=200;while(ms-);,61,温度采集,1-Wire总线工作方式,62,温度采集分为两个步骤发指令,要求DS18B20采集温度进行转化主设备读取温度寄存器
15、(2byte)中的数据,63,控制DS18B20进行温度转换ow_reset();/resetwrite_byte(0 xcc);/ROM命令 write_byte(0 x44);/功能命令读取温度ow_reset();write_byte(0 xcc);write_byte(0 xbe);temp_lsb=read_byte();temp_msb=read_byte();,64,write_byte(0 xbe);/使能读数据发送完上面这个命令之后,主设备就可以从Byte0开始连续读取数据,byte0和byte1中存放的是经过转换后的温度值18B20内存地址,65,18B20温度寄存器数据格
16、式如下图所示其中:BIT11是符号位,用来区分零下或者零度以上温度BIT10BIT0存放的是转换后的温度数值,66,数据处理,输入的数据是2byte的二进制数输出的数据是十进制数,小数点后保留两位有效数字,小数点前也是两位处理过程小数部分数据处理整数部分数据处理,67,原码、补码和反码,机器数的表示原码:将数的真值形式中“+”号用“0”表示,“-”号用“1”表示时,叫做数的原码形式,简称原码。反码:对正数来说,其反码和原码的形式相同;对负数来说,反码为其原码的数值部分各位变反。补码:对正数来说,其补码和原码的形式相同;对于负数,补码为其反码的末位加1。,68,举例,69,如何根据补码求原码?求
17、解步骤:将补码减去一,得到反码将反码各位取反,得到原码,70,求原码举例测量到的温度是0.5,求发送的2byte的数据测量到的温度是-55,求发送的2byte的数据2byte的数据为0 xFF5E,求现在的温度2byte的数据为0 x0191,求现在的温度,71,数据处理步骤,先判断数据的符号计算小数部分计算整数部分,72,数据处理代码,先判断数据的符号 if(temp_msb 0 x7f)temp_lsb=(temp_lsb-1);temp_msb=temp_msb;Temp_Flag=1;,73,计算小数部分 Temp_Decimal=(temp_lsb,74,温度的显示,通过补码到原码的
18、转换得到的是要显示数据整数部分和小数部分,还要先计算要显示的每一位,然后进行显示计算每一位数值time0=Temp_Decimal%10;time1=Temp_Decimal/10;time2=Temp_Integer%10|0 x80;time3=Temp_Integer/10;数码管显示Write_Disp();,75,回顾程序设计流程,76,温度传感器DS18B20DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式;温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625。,77,其他封装形式,78,开发板硬件设计,
19、79,DS18B20的主要技术参数供电电压:3.0V5.5V测量温度范围:-55+125测量精度:0.5(-10+85)912bit存储温度数据转换时间750ms(max)接口:1-Wire bus软件与DS1822兼容,80,DS1822的主要技术参数供电电压:3.0V5.5V测量温度范围:-55+125测量精度:2(-10+85)912bit存储温度数据转换时间750ms(max)接口:1-Wire bus软件与DS18B20兼容,81,DS18B20常见应用恒温控制消费类电子产品热传感系统通风和空调系统控制温度检测系统,82,引脚定义,83,内部结构框图,84,64 bit ROM co
20、de,独一无二的设备号总线可以挂载多个设备64-bit编码的组成,85,多设备电路设计,86,多个设备识别,SEARCH ROM Command 流程图分析SEARCH ROMF0h,87,88,算法过程描述,1、DS18B20 reset2、主设备发送ROM SEARCHF0h命令3、所有从设备接受到这个命令之后,都对主设备进行响应:先发送BIT0的数据到总线上,然后再发送BIT0的反码(取反后的数据)到总线上所有设备都向总线发送数据时,这些数据相当于是一个线与的操作(也就是说,如果同时发送0和1,那么线与的结果是0,主设备接收到的数据也是0),89,主设备连续接受到两位数据后,这两个数据可
21、能四种情况,并分别代表不同的意义:情况一00:连接到总线上的设备的这个bit的数据不一样,有的是1,有的是0,也就是说至少有两个设备挂载在总线上;情况二01:连接到总线上的设备的这个bit的数据相同,都是0情况三10:连接到总线上的设备的这个bit的数据相同,都是1情况四11:没有设备连接到总线上,90,4、主设备根据接收到的数据进行响应操作:如果是情况四,则直接退出;如果是情况三,则主设备发送1到总线上;如果是情况二,则主设备发送0到总线上;如果是情况一,则主设备发送0到总线上;(注意这种情况下实际上是发生一次选择,我们称之为分支)5、从设备将接收到的数据和现在的bit位上的数据进行比较,如
22、果相同,则不作处理,如果不同,则不再响应主设备6、从设备继续响应主设备:发送BIT1的数据到总线上,然后再发送BIT1的反码到总线上.,91,从设备一直响应到BIT63,这样就识别出了一个ROM code下面开始识别第二个ROM code:从第1步开始重新执行,执行到倒数最后一次分支处时,这时主设备同样面临一次分支选择,这次主设备选择向总线上发送1,92,93,算法举例:ROM100110101.ROM210101010.ROM311110101.ROM400010001.,94,作业1:单一设备时,读取设备号,并进行数据格式的分析作业2:简述多设备时,如何进行设备的识别,95,内容回顾,硬件
23、设计部分供电DQ程序设计部分程序设计流程DS18B20操作流程ROM命令funtion命令1-Wire信号时序DS18B20驱动温度的读取过程(数据的存储)数值的处理(原码、补码、反码)64-bit rom code,96,Scratchpad Memory,97,Memory map,98,温度寄存器,数据格式,99,TH和TL寄存器,数据格式,100,警报信号的操作在DS18B20进行一次温度转换之后,这个得到的温度值将会和用户所设置的两个临界值进行比较,这两个临界值分别存放在1个byte的TH和TL这两个寄存器中,最高位S用来代表这个值是正值还是负值TH和TL这两个寄存器一个存放的是触发
24、警报信号的温度上限值,一个存放的下限值,只要实际得到的温度超过了这两个值,就会发出警报信号(这里指修改一个警报的标志位)如果下次转换的温度在设定的界限之间,则会关闭这个警报的标志位,101,配置寄存器,数据格式和使用方法默认情况下R1=1;R0=1,102,循环冗余校验字CRC,循环冗余校验字(CRC,cyclic redundancy check)通过计算64bit ROM 中的其他56bit数据得到64 bit ROM code中的CRC的数值通过计算暂存器里面的Byte0Byte7(8字节)的数据,得到暂存器里面CRC的数值可以用来检验得到的数据是否正确,方法就是重新计算CRC的值,然后
25、分别与ROM中的CRC或者与寄存器中CRC的值进行比较,如果一致,说明收到的数据没有错误,如果不一致,说明数据有误,103,为什么要数据校验,通俗的说,就是为保证数据的完整性用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。,104,奇偶校验,奇校验:实际要发送的数据等于校验位(1位)+等待发送的数据,实际发送的数据要满足1的个数为基数这个性质偶校验:实际要发送的数据等于校验位(1位)+等待发送的数据,实际发送的数据要满足1的个数为偶数这个性质,105,举例,106,奇偶校验的问题,奇偶校验:只能检测误码数为奇数个
26、的情况,如果误码数为偶数个,则无法检验,107,bcc异或校验法,把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把她附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。,108,算法实现unsigned uCRC=0;for(int i=0;iDataLenth;i+)uCRC=Datai;,109,其他校验方法,MD5校验数字签名海明校验,110,CRC的计算,等式表示:问题:如何实现?,111,CRC的硬件实现,移位寄存器+异或门,112,113,CRC特性一,如果寄存器中存放的8bit
27、数据和即将输入的8bit数据相同,则当这8bit输入结束后,寄存器中所有位都是0,114,CRC特性二,如寄存器中的数据和即将输入的数据(8bit)的每一位都不相同,则数据输入结束后,寄存器里面的值一定是35h,115,CRC的软件实现,硬件实现CRC只是一种方法使用软件编程也能实现CRC查找表(Lookup Table)算法描述NEW CRC=Tablei for i=0 to 255where i=(Current CRC)EXOR(Input byte),116,查找表,117,软件实现举例,ROM code:A200,0000,01B8,1C02hfamily code:02hSeri
28、al Number:0000,0001,B81ChCRC初始值0000,0000h,118,DS18B20操作举例(一),应用场景:多个DS18B20加载总线上主机从指定某一DS18B20进行温度转换通过读取CRC来进行数据校验,119,操作步骤,120,DS18B20操作举例(二),应用场景总线上只挂载一个DS18B20主设备配置TH、TL和配置寄存器(configuration register)读取数据,并进行CRC检验复制暂存器的数据到E2PROM中,121,操作步骤,122,续上一页,123,DS18B20使用总结,精度高、设计简单其他使用注意点较小的硬件开销需要相对复杂的软件进行补偿多设备时,需要考虑总线驱动问题远距离使用时,要考虑线路分布电容和阻抗匹配问题,124,