基于单片机的智能数显调温系统设计.docx

上传人:b****2 文档编号:408699 上传时间:2022-10-09 格式:DOCX 页数:21 大小:299.19KB
下载 相关 举报
基于单片机的智能数显调温系统设计.docx_第1页
第1页 / 共21页
基于单片机的智能数显调温系统设计.docx_第2页
第2页 / 共21页
基于单片机的智能数显调温系统设计.docx_第3页
第3页 / 共21页
基于单片机的智能数显调温系统设计.docx_第4页
第4页 / 共21页
基于单片机的智能数显调温系统设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于单片机的智能数显调温系统设计.docx

《基于单片机的智能数显调温系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的智能数显调温系统设计.docx(21页珍藏版)》请在冰豆网上搜索。

基于单片机的智能数显调温系统设计.docx

基于单片机的智能数显调温系统设计

单片机原理及系统课程设计

评语:

 

考勤10分

守纪10分

过程30分

设计报告30分

答辩20分

总成绩100分

 

专业:

信号

班级:

信号

姓名:

学号:

指导教师:

兰州交通大学自动化与电气工程学院

2016年12月30日

1、设计题目

基于单片机的智能数显调温系统设计

2、设计目的和方法

1.目的

本设计目的是根据环境温度实时显示并动态调温以保持环境温度在一固定范围。

2.方法

本设计采用工程化思想,从问题入手,透彻的分析问题,然后描绘出整体实现的思路,再将系统分割为一个个的小模块来分别进行功能的设计,模块化设计调试完成后整合为一体的程序再进行联调,最后采用EDA工程进行仿真实验,这样开发目的性强,周期短,成本低,且容易实现。

3、设计方案及原理

图1系统结构图

本系统如图1以主控制模块为核心,以温度采集模块、显示模块、电机驱动模块和加热模块为功能模块共五部分构成。

单片机作为主控制模块通过预定程序来对其他功能模块进行管理。

在整个系统运行过程中,首先由温度传感器采集环境温度并进行AD转换,主控将所得温度数据显示出来并进行判断,随后选择合适的调温模式驱动电机,本设计中当0℃≤T<25℃时,风扇停转;当25℃≤T≤50℃时,风扇转速与温度成正比降温;当T>50℃时,风扇以最快速度转动降温;当T<0℃时,风扇停转并使用电热器加热。

4、硬件设计

图2

如图2主要硬件选取的有AT89C51单片机、DS18B20数字温度传感器、LCD1602液晶屏、DC12V电机、热炉和若干电阻、电容、晶振、三极管、继电器和按键等。

A模块是12MHz晶振电路,为单片机提供稳定精确的时钟脉冲,有利于准确控制延时。

B模块为复位电路,提供两种复位模式,上电复位和手动复位。

系统上电后,电容充电使得RST高电平复位,当需要手动对系统复位时,短暂按下按键使得RST高电平复位,CPU从0000H开始执行程序。

C模块为DS18B20数字温度传感器,它是一种不需要外围设备、单口线双向传输且分辨率为可编程9-12位的温度传感器,其温度最大转换时间为750毫秒,其RAM前两个字节存放温度值,通过配置寄存器R0和R1控制分辨率。

D模块为LCD1602,支持16列2行,5×8点阵显示,8位数据接口,其内部字符发生存储器存储了160个不同的点阵ASCII码字符图形,可以直接使用,引脚定义及功能说明如表1所列。

引脚

功能说明

VSS

接地。

VDD

接电源(+5V)。

VEE

液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,

使用时可以通过一个10K的电位器调整对比度。

RS

RS为寄存器选择,高电平1时选择数据寄存器、

低电平0时选择指令寄存器。

RW

R/W为读写信号线,高电平

(1)时进行读操作,

低电平(0)时进行写操作。

E

使能端,写操作时,下降沿使能。

读操作时,E高电平有效。

D0-D7

8位数据总线,其中当D7位为1时,LCD忙,

将无法再处理其他的指令要求。

表1

E模块为PWM电机驱动电路,利用单片机的数字输出来对模拟电路进行控制,本次设计是单片机调制输出波形占空比来实现调速,驱动电机时使用了晶体管放大电路,D端可用作方向选择,PWM端可用作调速,驱动电路也可选用达林顿管或者专用的驱动器驱动电机,电机也可根据实际需求改变。

F模块为OVEN加热电路,利用单片机的一个口线控制继电器来控制电热器的通断,实现低温加热功能。

5、软件设计

1.主程序

系统程序采用模块化设计,系统上电之后,对DS18B20温度传感器和LCD1602进行初始化,随后显示系统初始化界面。

系统主要功能在循环中完成,先采集温度数据,进行温度数值转换并显示到LCD屏幕上,接下来根据温度范围的不同选择是加热还是散热,散热时又选择不同的散热等级进行散热。

如此往复循环,让温度平衡在某一水准,主程序中基本不进行功能操作,各个功能均调用各个功能子函数实现,数据除长周期变量,其他均使用参数传递,体现完整的工程化模块化思想,流程图如图3所示。

源代码详情见附录。

图3主程序流程图

2.温度读取程序

温度传感器选用的是较常用的DS18B20,使用时,先要对其进行初始化,初始化有严格的时序要求。

单片机应先向DS18B20发送一个长480-960μs的脉冲,再拉高至高电平15-60μs等待DS18B20响应低电平后一段时间即完成DS18B20的初始化。

一个简单的读取温度流程应如图4所示,复位DS18B20后由于本设计不需读取设备序列号故跳过读ROM直接启动温度转换,延时等待温度转换完成再次复位DS18B20,跳过读ROM写入一个读命令,从口线每8位循环读出一个字节,前两个字节是温度低字节和高字节。

单口线的特点是每次读写一个指令或者数据都需要每8位循环来完成一个字节的操作。

读出的温度数据在分辨率为12位时,温度低字节里包括4位小数与4位整数位,温度高字节里包括3位整数位与5位符号位,如图5将数据进行操作和整合成十进制BCD码以便LCD显示出正确的数值。

源代码详情及注解见附录。

图4温度读取程序流程图图5温度转化程序流程图

3.LCD显示程序

由于要求显示温度,用到很多的字符,LCD1602内部有字符集可供使用,显示效果较数码管友好。

LCD1602使用时也要先对其进行初始化设置,配合使能端通过D0-D7口线8位并行对LCD1602写入相应的命令即可。

基本显示是不可变友好提醒“TMonitor”和温度单位“℃”,动态显示的是温度的正负“+”、“-”和十进制温度数值,故而在初始化显示LCD时,先显示不可变的友好提醒和温度单位,这样随后的温度变化仅改变1位符号位和3位BCD数码即可,优化系统的效率。

写显示数据时,先选择写起始位置,每次写入一个字符,到写入字符串的末尾时停止。

动态更新温度数据流程如图6,先设定写入起始位置,判断温度正负标志位改变可变温度值字符串,而后更改变化后的数值,动态更新LCD显示。

源代码详情及注解见附录。

图6温度显示程序流程图

4.电机和电热器驱动程序

这部分的程序主要负责判断温度区间然后做出相应的控温措施。

主要的部件有两个,电机和电热炉分别用来降温和加热。

电机有停转,转速根据温度智能可调和全速三种状态,控制引脚的高低电平即可控制相应器件的工作状态,其中电机转速与温度成正比这种模式主要采用调制占空比来达到控速的目的。

源代码详情及注解见附录。

图7电机和电热器驱动程序流程图

6、系统仿真

如图8为环境温度为18℃时的仿真结果截图,LCD显示与环境温度相同为18℃,直流电机停转。

如图9为环境温度为35℃时的仿真结果截图,LCD显示与环境温度相同为35℃,直流电机转速为47.0转/分钟。

如图10为环境温度为60℃时的仿真结果截图,LCD显示与环境温度相同为60℃,直流电机转速为62.6转/分钟。

如图11为环境温度为-12℃时的仿真结果截图,LCD显示与环境温度相同为-12℃,直流电机停转,电热器加热。

图818℃仿真结果图

图935℃仿真结果图

图1060℃仿真结果图

图11-12℃仿真结果图

7、总结

课程设计是培养学生来综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

随着科学技术发展的日新日异,当今单片机在工业控制领域广泛应用,且EDA开发在实际中非常重要,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度,因此我们必须掌握这种简单高效的开发技术去实现各种工业控制实例。

回顾起此次课程设计,感触颇多,从理解题目到完成整个系统,从理论到实践,两个星期的日子里,可以学到很多很多的东西,同时巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。

在设计的过程中难免会遇到过各种各样的问题,同时还发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定要将以前所欠缺的知识再温故,多动手提高实际操作能力。

这次课程设计终于顺利完成,在设计中遇到了很多问题,学会利用书本,网络,人力资源等多种途径解决问题,这是对自己能力的一种提升。

在此,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

8、附录

main.c源程序代码:

/***********头文件***********/

#include

/***********符号定义***********/

#defineucharunsignedchar//定义缩写uchar

#defineuintunsignedint//定义缩写uint

#defineLCDDataP0//定义LCD的数据口为P0

/***********接口定义***********/

sbitDQ=P1^7;//设P1.7为温度传感器DS18B20控制位

sbitLCD_RS=P2^0;//设P2.0为LCD1602寄存器控制位

sbitLCD_RW=P2^1;//设P2.1为LCD1602读写控制位

sbitLCD_E=P2^2;//设P2.2为LCD1602使能控制位

sbitPWM=P3^7;//设P3.7为PWM调速系统脉冲转速控制位

sbitD=P3^6;//设P3.6为PWM调速系统电平转向控制位和加热器加热控制位

/***********变量定义***********/

uchart[2],temperature;//温度高低字节数组t,十进制温度temperature

ucharTempBuffer[12]={0x20,0x20,0x20,0x20,'\0'};//可变温度值

uchartab1[16]={0x54,0x20,0x4d,0x6f,0x6e,0x69,0x74,0x6f,0x72,'\0'};//不可变友好提醒“TMonitor”

uchartab2[16]={0xdf,0x43,'\0'};//不可变温度单位“℃”

/***********延时程序***********/

voiddelay_20ms()//延时20ms

{

uchari,temp;

for(i=20;i>0;i--)

{

temp=248;

while(--temp);

temp=248;

while(--temp);

}

}

voiddelay_38us()//延时38us

{

uchartemp;

temp=18;

while(--temp);

}

voiddelay_1520us()//延时1520us

{

uchari,temp;

for(i=3;i>0;i--)

{

temp=252;

while(--temp);

}

}

voiddelay_DS18B20(uinti)//DS18B20延时

{

while(i--);

}

voiddelay(uintx)//主程序延时

{

uchari;

while(x--)

for(i=0;i<123;i++);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1