基于DS18B20温度传感器温控系统的Proteus仿真.docx
- 文档编号:26558881
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:15
- 大小:180.10KB
基于DS18B20温度传感器温控系统的Proteus仿真.docx
《基于DS18B20温度传感器温控系统的Proteus仿真.docx》由会员分享,可在线阅读,更多相关《基于DS18B20温度传感器温控系统的Proteus仿真.docx(15页珍藏版)》请在冰豆网上搜索。
基于DS18B20温度传感器温控系统的Proteus仿真
基于DS18B20温度传感器温控系统的Proteus仿真
DS18B20温度传感器是美国DALLAS半导体公司推出的支持“一线总线”接口的传感器。
具有功耗低、性能高、抗干扰能力强的特点,可以直接将温度转化为串行数字信号供处理器处理。
DS18B20传感器具有以下一些特性:
(1)测温范围-55C至+125C,在-10C至+85C时的精度为正负0.5C;
(2)适应电压的范围在3.0至5.5V;
(3)单线接口,只用一条口线就可以与微处理器的双向通信;
(4)支持多点组网,多个DS18B20并接在一根口线上就可实现多点测温;
(5)测量结果直接输出数字温度信号,通过单线串行传输给微处理器;
(6)具有负压特性,电源极性接反芯片不会烧坏,只是不能正常工作;
(7)可编程分辨率为9至12位,对应的分辨温度分别是0.5°C,0.25C,0.125C,0.0625C,能够实现高精度测温。
(8)在9位分辨率时可在93.75ms内把温度值转换为数字;在12位分辨率时可在750us内把温度值转换为数字;
(9)传送数据时可传送CRC校验码,抗干扰纠错能力强。
DS18B20的引脚封装图如下:
PINASSIGNMENT
BOTTOM\-lEW
各引脚定义如下:
PINDESCRIPTION
GND*Ground
DQ-
Vdd-
NC-
DataInOut
PowerSupplyVoltage
NoConnect
GND电源地
DQ信号输入输出
VDd:
电源正极
NC空
DS18B20单总线技术:
DS18B20采用单条信号线,既可以传输数据,也可以传输时钟。
其数据传输是双向的,这种单总线技术线路简单,硬件开销小,成本低廉,便于总线扩展与维护。
单总线通常需要外接一个4.7K的上拉电阻。
它与处理器的连接非常简单,通常连接方式如下图:
DS18B20工作原理
1.ROM功能命令
(1)[33H]ReadROM读ROM把DS18B20传感器的ROM中编码读出来。
(2)[55H]MatchROM匹配ROM发出该命令接着会发送64位包含具体DS18B20序列
号的ROM编码,与该编码序列号相同的DS18B20就会做出响应,序列号不匹配的DS18B20继续等待,不做响应。
由于不同的DS18B20序列号不一样,所以通过该命令可以访问控
制具体的DS18B2Q
(3)[FOH]SearchROM搜索ROM用于识别各个DS18B20的64位ROM
(4)[CCH]SkipROh跳过ROM当只有一个DS18B20时,使用该命令可以忽略64位ROM地址,直接向DS18B20发送温度变换命令。
(5)[ECH]AlarmSearch告警搜索。
执行后,温度超出上限或者下限的芯片做出响应。
主机与多个DS18B20连接,要对众多在线DS18B20的某一个进行通信,首先要逐个与DS18B20连接,读出其序列号;然后将所有的DS18B20挂接到总线上,单片机发出匹配指令55H,接着主机提供64位序列,之后就可以与序列号相应的DS18B20进行数据交换。
主机与单个DS18B20连接时,不需要读取或者匹配ROM只要使用跳过指令CCH就可
以进行数据转换和读取操作。
(1)[44H]ConvertT温度转换。
启动DS18B20进行温度转换。
12位精度转换时最长
为750ms,转换结束后将数据存入内部9字节的RAM
(2)[4EH]WriteScratchpad写暂存器。
发出该命令后,将两字节的数据写入内部RAM的第2、3字节,作为上、下限温度数据。
(3)[BEH]ReadScratchpad读暂存器。
读取内部9字节的温度数据。
(4)[48H]CopyScratchpad复制暂存器。
将RAM中的第2、3字节的内容复制到E2PROM
(5)[B8H]RecallE2重调E2PROM将E2PROM内容恢复到RAM中的第3、4字节。
(6)[B4H]ReadPowerSupply读供电方式。
读取DS18B20的供电模式。
2.工作时序图
(1)初始化
Step1:
数据线置低电平
Step2:
延时800us左右(时间范围为480us至960us)
Step3:
数据线拉高电平
Step4:
延时40us左右(时间范围为15us至60us)
(2)读数据
逐位读取数据,然后把8位数据组成1个字节。
编写程序时分为两个部分,一个实现读取一位数据,另一个实现读取一个字节数据。
读取数据步骤:
Stepl:
数据线置低电平
Step2:
延时5us左右(大于1us即可)
Step3:
数据线拉高电平
Step4:
延时10us左右(这次延时和第一次延时之和接近15us左右)
Step5:
读取一位数据
Step6:
延时60us左右(大于45us即可)
Step7:
重复上面步骤,直到读完一个字节
(3)写数据
写数据分为写数据位1和数据位0。
写数据位1步骤:
Stepl:
数据线置低电平
Step2:
延时5us左右(大于1us即可)
Step3:
数据线拉为高电平
Step4:
延时70us左右(大于55us即可)
写数据位0步骤:
Stepl:
数据线置低电平
Step2:
延时70us左右(大于60us即可)
Step3:
数据线拉高电平
Step4:
延时5us左右(不要太小)
根据DS18B20的结构和性能,在Proteus中构建仿真工程,电路连接图如下:
上面的电路要实现的功能是,把传感器测量的温度显示到1602液晶上。
温度变化的范围是
0C至99.9C,温度传感器通过设置可以设定温度调节的步长,这里取温度变化的步长为
0.1C,设置如下图:
ComponentReference:
U2
Hidden:
ComponentValue:
|DSiaB20
Hidden:
PCEPackage:
709?
0
HideAll
FamilyCode:
|加
HidtAIIV
ROMSerialhknber:
E3C530
|HrieAII二
AutcxnatitS&nalizadon:
-
Currentvalue:
24.0
HideAll
Granulari^:
Hid?
All
J
AdvancedProperties:
TimeF\jlseDelayHigh
二
3Du
|HideAll
J
OtherProperties:
EKcludefromlirnulationExcludefrcmPCBLayoutEdit刃Ipropertiesastent
Attachhiewrchvnwdule
"Hidecommonpins
设置好之后,就可以根据DS18B20的特性和控制方式编写程序。
参考程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodedisp[]="0123456789";
ucharcodedisp2[]="Tempreture";
ucharcodedisp3[]="AC";
sbitIcden=卩2人0;sbitIcdrw=P2Al;sbitIcdrs=P2A2;
定义无符号整型形参
定义浮点型形参
//延时500ms程序
sbittempt=P2A3;uintu_temp;//floatf_temp;//
voiddelay(uintx){
uinti,j;
for(i=0;i for(j=0;j<130;j++); } voidwrite_com(ucharcom) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; delay(5); } voidwrite_data(uchardate)// { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; delay(5); } voidlcd_init() { lcden=0; lcdrw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } voiddisplay_tempt(uintdate) { uchari,j,k; i=date/100; j=date%100/10;k=date%100%10; //液晶写命令 液晶写数据 //液晶初始化 //温度数据显示 //十位 //个位 //小数位 write_com(0x80+0x40+5); write_data(disp[i]); write_data(disp[j]);write_data('.');write_data(disp[k]); } voidreset_tempt() //DS18B20复位,初始化 { uinti; tempt=0; i=90;//延时 while(i>0)i--; tempt=1; i=4;//延时while(i>0)i--; } bitread_bit() {uinti;bitdat;tempt=0;i++;tempt=1;i++;i++;dat=tempt;i=8;while(i>0)i--;returndat; } ucharread_tempt() {uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=read_bit();dat=(j<<7)|(dat>>1);//}//returndat; II读一位DS18B20数据 //延时 II延时 II延时 II读一个字节DS18B20数据 将读取的数据位按读取先后顺序,从低位到高位(从右往左)排列保存到 dat } voidwrite_byte(uchardat)II写一个字节数据到DS18B20 voidconvert_tempt() {reset_tempt();delay (1);write_byte(0xcc);write_byte(0x44); } //读取DS18B20寄存器中的温度数据 uinti;ucharj;bittestbit; for(j=1;j<=8;j++) { testbit=dat&0x01;//每次只写一位数据 dat=dat>>1; if(testbit) { tempt=0; i++;//延时 tempt=1; i=8;//延时 while(i>0)i--; } else { tempt=0; i=8;//延时 while(i>0)i--; tempt=1; i++;//延时 i++; } } } //DS18B20开始获取温度并进行转换 uintget_tempt() {uchara,b;reset_tempt();delay (1);write_byte(0xcc);write_byte(0xbe);a=read_tempt(); b=read_tempt();u_temp=b;u_temp<<=8; u_temp=u_temp|a;f_temp=u_temp*0.0625;//u_temp=f_temp*10;// returnu_temp;// 精度为12位,所以分辨率为0.0625乘以10,将实际温度扩大10倍返回的u_temp是整型数据 voiddisplay()//静态文字显示{ uchari,j; write_com(0x80+3); for(i=0;i<10;i++) { write_data(disp2[i]); } write_com(0x80+0x40+10);for(j=0;j<2;j++) { write_data(disp3[j]); } } voidmain()//主函数 { uchari; lcd_init(); display(); while (1) { convert_tempt(); for(i=0;i<10;i++) { display_tempt(get_tempt()); } } } 谨供参考学习使用,如有错误欢迎指正。 欢迎您的下载, 资料仅供参考! 致力为企业和个人提供合同协议,策划案计划书,学习课件等等 打造全网一站式需求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DS18B20 温度传感器 温控 系统 Proteus 仿真
![提示](https://static.bdocx.com/images/bang_tan.gif)