下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 / 10单片机大作业温度控制系统设计一、温度控制系统设计发展历史及意义在工业企业中 , , 如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人 员努力解决的问题。这类控制对象惯性大 , ,滞后现象严重 , ,存在很多不确定的因素 , ,难以建立 精确的数学模型 , ,从而导致控制系统性能不佳 , , 甚至出现控制不稳定、失控现象。传统的继电 器调温电路简单实用 , , 但由于继电器动作频繁 , , 可能会因触点不良而影响正常工作。控制领 域还大量采用传统的 PIDPID 控制方式,但 PIDPID 控制对象的模型难以建立,并且当扰动因素不明确 时, ,参数调整不便仍是普遍存在的
2、问题。而采用数字温度传感器DS18B20DS18B20 因其内部集成了A/DA/D 转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温 度更加精确。数字温度传感器 DS18B2CDS18B2C 只用一个引脚即可与单片机进行通信,大大减少了接 线的麻烦,使得单片机更加具有扩展性。由于DS18B2CDS18B2C 芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20DS18B20 做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器DS18B2CDS18B2C 进行范围的温度检测。二、DS18B2C工作原理DS18B
3、20DS18B20 勺读写时序和测温原理与 DS1820DS1820 相同,只是得到的温度值的位数因分辨率不同 而不同,且温度转换时的延时时间由 2s2s 减为 750ms750ms DS18B20DS18B20 测温原理如图 3 3 所示。图中 低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1 1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器 2 2 的脉冲输入。计 数器 1 1和温度寄存器被预置在-55-55C所对应的一个基数值。计数器 1 1 对低温度系数晶振产生 的脉冲信号进行减法计数,当计数器 1 1 的预置值减到 0 0 时,温度寄
4、存器的值将加 1 1,计数器 1 1 的预置将重新被装入,计数器 1 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如 此循环直到计数器 2 2 计数到 0 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为 所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器 1 1 的预 置值。三、系统软件流程图2 / 10四、电路原理图1.DS18B201.DS18B20 温度传感器检测电路温度采集通过数字化的温度传感器 DS18B20DS18B20 通过 QDQD 接向单片机的 P3.0P3.0 口 DS18B20DS18B20 温度传感器电路如图 5.35.3 所
5、示。3 / 102.2.二极管显示报警电路二极管显示报警电路如下图所示。通过单片机的P3.4P3.4 和 P3.5P3.5 两个端口送出,采用的是高电平驱动,使其发光发出警告。3.整体原理图五、程序设计1 1)读出温度子程序i”4 / 10读出温度子程序的主要功能是读出 RAMRAM 中的 9 9 字节,在读出时需进行 CRCCRC 校验,校验有错时 不进行温度数据的改写,程序流程图如图5.105.10 所示。5 / 10DS18B20DS18B20 的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的 目的,同时,要注意读进来的是高位在后低位在前,共有1212 位数,小数
6、4 4 位,整数 7 7 位,还有一位符号位。图 510 读出温度子程序*读出温度子程序的主要功能是读出 RAMRAM 中的 9 9 字节,在读出时需进行 CRCCRC 校验,校验有错 时不进行温度数据的改写,程序流程图如图 5.105.10 所示。6 / 10DS18B20DS18B20 的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的7 / 10目的,同时,要注意读进来的是高位在后低位在前,共有1212 位数,小数 4 4 位,整数 7 7 位,还有一位符号位。2 2)写入子程序写入子程序的流程图如 5.115.11 所示。F进位,c 清脚P3R P3 卜0-8 /
7、10li 时|皿*1 F#ft,iViSbznf?.六、主要程序#in clude#in clude#define uchar unsigned char#define uint unsigned int #define duan P0#define wei P1sbit DSPORT=P3A7;void Delay1ms(uint y);void Delay5ms();uchar Ds18b20Init();void Ds18b20WriteByte(uchar dat);uchar Ds18b20ReadByte();void Ds18b20ChangTemp();int Ds18b20R
8、eadTemp();void DigDisplay();void LcdDisplay(int temp);uchar code segta10=0 xc0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90; unsigned charDisplayData8;void main()while(1)LcdDisplay(Ds18b20ReadTemp();void Delay1ms(uint y)uint x;for( ; y0; y-)for(x=110; x0; x-);/* 函 数 名: Ds18b20Init* 函数功能: 初始
9、化* 输 入: 无* 输 出: 初始化成功返回 1,失败返回 0*uchar Ds18b20Init()9 / 10uchar i;DSPORT = 0; / 将总线拉低 480us960usi = 70;while(i-);/延时 642usDSPORT = 1;/然后拉高总线,如果 DS18B2 做出反应会将在 15us60us 后总线拉低i = 0;while(DSPORT)/ 等待 DS18B2 拉低总线Delay1ms(1);i+;if(i5) 等待 5MSreturn 0;/ 初始化失败return 1;/ 初始化成功* 函 数 名: Ds18b20WriteByte* 函数功能:
10、向 18B20 写入一个字节* 输入* 输出: 无void Ds18b20WriteByte(uchar dat)uint i, j;for(j=0; j= 1;/* 函 数 名 : Ds18b20ReadByte* 函数功能: 读取一个字节* 输入* 输出:无*/uchar Ds18b20ReadByte()uchar byte, bi;uint i, j;for(j=8; j0; j-)DSPORT = 0;/ 先将总线拉低 1usi+;10 / 10DSPORT = 1;/ 然后释放总线i+;i+;延时 6us 等待数据稳定bi = DSPORT; / 读取数据,从最低位开始读取/*将
11、byte 左移一位,然后与上右移 7 位后的 bi,注意移动之后移掉那位补 0。*/ byte = (byte 1) | (bi 7);i = 4;/读取完之后等待 48us 再接着读取下一个数while(i-);return byte;/*函 数 名 : Ds18b20ChangTemp函数功能:让 18b20 开始转换温度输入输 出:无void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0 xcc);II跳过 RO 操作命令Ds18b20WriteByte(0 x44);/ 温度转换命令II Delay1ms(
12、100);II 等待转换成功,而如果你是一直刷着的话,就不用这个延时了I*函数名*函数功能:发送读取温度命令*输入* 输出:无*/Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0 xcc);/ 跳过 RO 操作命令Ds18b20WriteByte(0 xbe);/ 发送读取温度命令/* 函 数 名 : Ds18b20ReadTemp* 函数功能 : 读取温度* 输入* 输出: 无*/int Ds18b20ReadTemp()11 / 10int temp = 0;uchar tmh, tml;Ds18b20ChangTemp();/ 先写入转换命令/ 然
13、后等待转换完后发送读取温度命令tml =Ds18b20ReadByte();/ 读取温度值共 16 位,先读低字节tmh =Ds18b20ReadByte();/ 再读高字节temp = tmh;temp = 8;temp |= tml;return temp;函 数 名: LcdDisplay()函数功能: LCD 显示读取到的温度输入: v输出: 无void LcdDisplay(int temp)/lcd 显示float tp;if(temp 0)/ 当温度值为负数DisplayData0 = 0 x40;/ 因为读取的温度是实际温度的补码,所以减 1,再取反求出原码 temp=temp
14、-1;temp=temp;tp=temp;temp=tp*0.0625*100+0.5;/留两个小数点就*100 , +0.5 是四舍五入,因为 C 语言浮点数转换为整型的时候把小数 点/ 后面的数自动去掉,不管是否大于 0.5,而+0.5 之后大于 0.5 的就是进 1 了,小于 0.5 的就/ 算由?.5 ,还是在小数点后面elseDisplayData0 = 0 x00;tp=temp;/ 因为数据处理有小数点所以将温度赋给一个浮点型变量/ 如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5;/留两个小数点就*100 , +0.5 是四舍五入,因为 C 语言浮点数转换为整型的时候把小数 点/ 后面的数自动去掉,不管是否大于 0.5,而+0.5 之后大于 0.5 的就是进 1 了,小于 0.5 的就/ 算加上 0.5,还是在小数点后面。DisplayData1 = segtatemp / 10000;12 / 10DisplayData2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋清场协议书范本
- 房屋破裂赔偿协议书
- 房屋继承托管协议书
- 房屋股份出让协议书
- 房屋装修物业协议书
- 房屋资金监管协议书
- 房屋遗产分配协议书
- 房屋预付金合同协议
- 房租中介定金协议书
- 房租退租转租协议书
- 第23课《富贵不能淫》课件 2025-2026学年统编版语文八年级上册
- 商场客服服务礼仪培训
- 2025年专升本物理学热力学与统计物理试卷(含答案)
- 企业品牌形象策划与宣传材料制作模板
- 广交摊位申请书范本
- 进口食品企业质量安全管理制度
- 河南省体育彩票管理中心聘用人员招聘笔试真题2024
- 人力资源岗位岗前培训试题及答案
- 解决学习问题的做法
- 2025年麻醉科住院医师规范化培训试题及答案
- 2025年广西职业院校技能大赛中职组(产品数字化设计与开发赛项)参考试题(附答案)
评论
0/150
提交评论