温度控制电机系统的设计0Word格式文档下载.docx
《温度控制电机系统的设计0Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《温度控制电机系统的设计0Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
本次课程设计分为硬件和软件两部分。
(1)硬件部分
对于测温电路、显示电路、电机系统我们要有足够的了解。
温度传感器DS18B20的测温原理,数码管显示数据的基本原理以及电机的正反转我们都应通过查阅相关资料,熟练掌握。
(2)软件部分
首先,编程软件Keil和仿真软件Protues必须应用熟练。
其次,我们应该知道如利用单片机端口电平的变化来驱动数码管、电机等。
2温度控制电机系统方案制定
2.1方案提出
方案一
由于本模块是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。
而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。
图1系统方案一
方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。
图2系统方案二
2.2方案比较
比较上述两种方案,第一种方案采用热敏电阻感温,引起电流或者电压的变化,然后用A/D转换测出温度,这种方法不仅繁琐而且误差很大,灵敏度也不高。
相反方案二采用温度传感器DS18B20测量温度,方便快捷,并且精度更高。
2.3方案论证
温度传感器是该模块的关键器件,本系统选用的是美国Dallas半导体公司生产的数字化温度传感器DS18B20。
DS18B20支持“一线总线”接口,测量温度范围为-55℃~+125℃,被测温度用符号扩展的16位数字量方式串行输出,在-10~+85℃范围内,精度为±
0.5℃。
DS18B20采集到的现场温度直接以先进的单总线数据通信方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
DS18B20可程序设定9~12位的分辨率,精度可达±
DS18B20具有内置的EEPROM,用户设定的分辨率和报警温度都可存储在其中,且掉电后依然存在。
2.4方案选择
比较上述两种方案,显然方案二在很多方面都优于方案一,无论是测量精度还是实际电路的设计,都比较不错,故而本次设计采用的是方案二。
3温度控制电机系统方案设计
3.1各单元模块功能介绍及电路设计
1.温度显示模块设计
(1)功能介绍
本次设计显示模块采用的是四位共阳数码管显示,通过温度传感器DS18B20测出温度数据,传给单片机,然后在数码管上显示处出来。
温度数据显示要求能区分正负,而且能够显示温度符号.C。
(2)电路设计
具体电路如下图所示:
图3显示模块电路图
2.温度采集模块设计
此部分主要由温度传感器DS18B20构成,通过传感器采集外界温度。
图4温度采集电路
3.单片机最小系统
最小系统是指一个真正可用的单片机的最小配置系统。
MCS-51系列AT98C51片内有4KB的ROM/EPROM,因此只需要外接晶体振荡器和复位电路就可构成最小系统。
该最小系统的特点如下:
1)由于片外没有扩展存储器和外设,P0、P1、P2、P3都可以作为用户I/O接口使用。
2)片内数据存储器有128B,地址空间为00H~7FH,没有片外数据存储器。
3)内部有4KB的程序存储器,地址空间为0000H~0FFFH,没有片外程序存储器。
4)可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。
(2)电路设计
图5单片机最小系统
4.电机系统
(1)功能介绍
当温度传感器检测到外界温度大于或者等于50时,直流电机正向转动;
当温度传感器检测到外界温度小于50时,直流电机停止转动。
图6电机系统
3.2电路参数的计算及元器件的选择
(1)电路参数的计算
a.整流电路参数
输出电压平均值:
Uo(AV)=
2
输出电流平均值:
IO(AV)=
平均整流电流:
ID(AV)=
最大反向电压:
URM=
b.滤波电路参数
滤波电容选择:
RLC=(3~5)
一般选几十至几千微法的电解电容,耐压>
(2)元器件的选择
表1器件清单
器件名称
数量
7SEG-MPX4-CA
1
DS18B20
AT89C51
CRYSTAL
CAP-ELEC
MOTOR
BUTTON
RES
CAP
RESPACK-8
3.3特殊器件的介绍
(1)温度传感器DS18B20
内部结构:
DS18B20内部结构由64bit闪速ROM、温度传感器、非易失性温度报警触发器TH和TL配置寄存器等4个数字器件组成,如图7。
温度传感器DS18B20是通过温度对振荡器的频率影响来测量温度,如图8。
DS18B20内部有2个不同温度系数的振荡器,低温度系数振荡器输出的时钟脉冲信号在高温度系数振荡器产生的门周期内进计数。
计数初值被预置-55℃相对的基数值,如计数器在高温度系数振荡器输出的门周期结束前计数为零,表示测量温度值高于-55℃,被预置在-55℃的温度寄存器的值加1,重复该过程,直到高温度系数振荡器门周期结束止,温度寄存器中的值就是被测的温度值。
该值由主机通过发读存储器命令读出,经取补和十进制转换,得到实测的温度值。
斜率累加器用于补偿和修正温度振荡器的非线性,以产生高分辨率的温度测量。
通过改变温度每升高1℃,计数器须经计数值实行补偿。
为获得所需分辨率,必须知道该数值及在给定温度处每1℃的计数值(斜率累加器的值)。
图7DS18B20的内部结构
图8DS18B20测温原理图
(2)AT89C51单片机
AT89C51是美国ATMEL公司生产的低电压高性能CMOS8位单片机,片内含4Kbytes可反复檫写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MSC-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域[1]。
图9单片机管脚图
管脚介绍:
如图9所示[4]:
(1)电源引脚:
Vcc(40脚):
电源端,接+5V电源。
Vss(20脚):
接地端,接+5V电源地端。
(2)时钟振荡器外接晶体引脚:
XTAL1和XTAL2。
AT89C51内部有一个振荡器和时钟产生电路。
XTAL1(19脚):
片内振荡电路反相放大器输入。
XTAL2(18脚):
片内振荡电路反相放大器输出。
(3)控制信号引脚:
RST、ALE、PSEN、EA
RST(9脚):
复位信号输入端,高电平有效。
保持两个机器周期高电平时,完成复位操作。
ALE/PROG(30脚):
地址锁存允许输出端/编程脉冲输入端,正常时,连续输出振荡器频率的1/6正脉冲信号。
访问片外存储器时:
作为锁存P0口低8位地址的控制信号。
对89C51片内ROM编程写入时:
作为编程脉冲输入端。
PSEN(29脚):
外部程序存储器读选通输出信号访问片外ROM时,输出负脉冲作为读ROM选通常连接到片外ROM芯片的输出允许端(OE)作外部ROM的读选通信号[2]。
EA/Vpp(31脚):
外部程序存储器地址使能输入/编程电压输入端。
平常,接“1”时,CPU访问片内4KB的ROM,当地址超4KB时,自动转向片外ROM中的程序。
当接“0”时,CPU只访问片外ROM。
第2功能Vpp对8751编程时,编程电压输入端。
(4)输入/输出端口引脚P0、P1、P2、P3
4个8位的并行输入/输出端口,共32个引脚。
作为通用输入/输出端口,P0、P2和P3端口又各自有第2功能。
通用输入/输出端口
准双向口:
作输入时要先对锁存器写“1”。
P0端口(P0.0—P0.7,第39—32脚):
漏极开路的准双向口,输出能驱动8个74LS类型的负载。
P1端口(P1.0—P1.7,第1—8脚):
内部带上拉电阻的准双向口,输出能驱动4个74LS负载。
P2端口(P2.0—P2.7,第21—28脚):
P3端口(P3.0—P3.7,第10—17脚):
P0、P2、P3端口的第二功能
P0端口:
在CPU访问外部存储器或I/O接口时,P0口分时提供低8位地址(A0-A7)和8位数据(D0-D7)总线。
这时,需要一个8位锁存器,利用ALE(地址锁存允许)来锁存P0口低8位地址信号。
P2端口:
在CPU访问外部存储器或I/O接口时,P2口提供高8位地址(A8-A15)的总线信号。
P3端口:
在CPU访问外部存储器或I/O接口时,P3口提供读、写控制总线信号。
还提供串行通信、外部中断、计数器的外部计数输入信号等。
如表2所示。
3.4系统整体电路图
图10系统整体电路图
4温度控制电机系统仿真和调试
4.1仿真软件介绍
Proteus是一种低投资的电子设计自动化软件,提供SchematicDrawing,SPICE仿真与PCB设计功能,这一点proteus与multisim比较类似,只不过它可以仿真单片机和周边设备,可以仿真51系列AVR,PIC等常用的MCU,与keil和MATLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真,例如373,led,示波器,Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IC器件,⋯编译方面支持Keil和MATLAB,里面有大量的例子参考。
(1)Proteus可提供的仿真元件资源Proteus软件提供了可仿真数字和模拟、交流和直流等数千种元器件和多达30多个元件库。
(2)Proteus可提供的仿真仪表资源虚拟仪器仪表的数量、类型和质量,是衡量仿真软件实验室是否合格的一个关键因素。
在Proteus软件中,理论上同一种仪器可以在一个电路中随意的调用。
除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似但功能更多。
这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。
这些都尽可能减少了仪器对测量结果的影响。
Proteus可提供的调试手段
(3)Proteus提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
Keil是德国开发的一个51单片机开发软件平台,最开始只是一个支持C语言和汇编语言的编译器软件。
后来随着开发人员的不断努力以及版本的不断升级,使它已经成为了一个重要的单片机开发平台,不过KEIL的界面并不是非常复杂,操作也不是非常困难,很多工程师的开发的优秀程序都是在KEIL的平台上编写出来的。
可以说它是一个比较重要的软件,熟悉他的人很多很多,用户群极为庞大,要远远超过伟福等厂家软件用户群,操作有不懂的地方只要找相关的书看看,到相关的单片机技术论坛问问,很快就可以掌握它的基本使用了。
(1)Keil的μVision2可以进行纯粹的软件仿真(仿真软件程序,不接硬件电路);
也可以利用硬件仿真器,搭接上单片机硬件系统,在仿真器中载入项目程序后进行实时仿真;
还可以使用μVision2的内嵌模块KeilMonitor-51,在不需要额外的硬件仿真器的条件下,搭接单片机硬件系统对项目程序进行实时仿真。
(2)uVision2调试器具备所有常规源极调试,符号调试特性以及历史跟踪,代码覆盖,复杂断点等功能。
DDE界面和shift语言支持自动程序测试。
4.2系统仿真实现
(1)温度大于等于50度时电机正转
图11温度为60度时仿真电路
(2)温度小于50度时电机停止转动
图12温度为45度时仿真电路
4.3系统测试
(1)HEX文件的生成[5]
1)单击软件开发系统KeiluVision,单击“KeilnVision”菜单中的“Project”,在此下拉菜单中单击“NewProject”选项后,弹出“CreatNewProject”对话框,键入新项目名称。
然后在弹出的“SelectDevice”对话框中选择单片机的类型AT89C51。
2)单击“uVision”菜单中的“File”,在此下拉菜单中,选择“New”后,打开一个空的文本编窗口,在此窗口中键入程序,创建新的源程序“温度控制电机系统.C文件。
3)在左边的“Project”窗口的“File”页中单击文件组,再单击鼠标右键后,在弹出的窗口中选中“AddFilestoGroup‘SourceGroup1’”选项,将相应的源程序文件导入到“SourceGroup1”中。
4)在“Project”下拉菜单中,选择“OptionsforTarget”,将会弹出“OptionsforTarget”对话框,在此对话框中“Output”选项卡中的“CreateHEXFile”选项。
5)在“Project”下拉菜单中,选择“RebuildallTargetFiles”项,若程序编译成功将生成“温度控制电机系统.HEX”文件。
(2)调试与仿真[3]
1)在ProtuesISIS编辑窗口中,单击鼠标右键将AT89C51单片机选中并单击鼠标左键,弹出“EditComponent”对话框,在对话框的“ClockFrequency”栏中设置单片机晶振频率为11.0592Hz,在“ProgramFile”栏中单击图标
,选择之前生成的“温度控制电机系统.HEX”文件。
2)在ProtuesISIS编辑窗口的“File”菜单中选择“SaveDesign”选项,保存设计,生成“温度控制电机系统.DSN”文件。
3)在ProtuesISIS编辑窗口中单击
或在“Debug”菜单中选择
,运行结果如下图所示。
单击DS18B20中的
或
,表示外界温度发生变化,观察显示器和电机的变化是否符合要求。
4.4数据分析
(1)在DS18B20中将温度下调到45摄氏度,然后进行仿真,可以观察到数码管上显示45.C,同时直流电机不会工作。
重复几次操作现象完全相同。
(2)分别将传感器的温度调到50摄氏度和60摄氏度,进行仿真,可以观察到数码管上分别显示50.C和60.C,电机都是正向转动。
由上面的操作可知,本次设计基本能够符合设计要求,能够利用温度的变化来控制直流电机的转向。
5总结
5.1设计小结
在本次设计中,的确遇到很多问题,让我知道理论和实际的差别,在研究实际问题是我们需要考虑诸多干扰因素与人为因素,而在仿真测试时一切都是理想状态。
理论联系实际,理论应用与实际对于我们每一个人来说都是一个必不可少的阶段,我们应当勇于尝试,敢于试验。
5.1收获体会
课程设计是一项综合素质的考验,如果说在过去三年里,我们的学习是一个知识的积累过程,那么现在的课程设计就是对过去所学的知识的综合应用,是对理论进行深化和重新认识的实践活动。
在这近两个月的课程设计中,我们有艰辛的付出,也有了收获。
知识固然得到了巩固和提高,但我相信在实践中的切身体会将会使我在以后的工作和学习中终身受用。
首先,学习能力和解决问题的信心都得到了提高。
在本次课程设计的过程中,遇到了很多困难,但是在查阅了很多有关书籍和向同学请教后终于解决了。
通过这次课程设计,我不仅对理论有了更深一步的认识,还培养了自学能力和解决问题的能力,更重要的是,培养了克服困难的勇气和信心。
其次,我们的课程设计之所以能基本完成,要深深地感谢我们的指导老师的悉心指导和帮助。
5.2展望
随着“信息时代”的到来,作为获取信息的手段——传感器技术得到了显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。
传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。
因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。
由于传感器能将各种物理量、化学量和生物量等信号转变为电信号,使得人们可以利用计算机实现自动测量、信息处理和自动控制,但是它们都不同程度地存在温漂和非线性等影响因素。
传感器主要用于测量和控制系统,它的性能好坏直接影响系统的性能。
因此,不仅必须掌握各类传感器的结构、原理及其性能指标,还必须懂得传感器经过适当的接口电路调整才能满足信号的处理、显示和控制的要求,而且只有通过对传感器应用实例的原理和智能传感器实例的分析了解,才能将传感器和信息通信和信息处理结合起来,适应传感器的生产、研制、开发和应用。
另一方面,传感器的被测信号来自于各个应用领域,每个领域都为了改革生产力、提高工效和时效,各自都在开发研制适合应用的传感器,于是种类繁多的新型传感器及传感器系统不断涌现。
温度传感器是其中重要的一类传感器。
其发展速度之快,以及其应用之广,并且还有很大潜力。
6参考文献
[1]谢维成,杨加国等.单片机原理与应用及C51程序设计[M].清华大学出版社,2009,7.
[2]宋戈,黄鹤松等.51单片机应用开发范例大全[M].人民邮电出版社,2010,1.
[3]侯玉宝,陈忠平等.基于Protues的51系列单片机设计与仿真[M].电子工业出版社,2010,8.
[4]陈忠平,曹巧媛等.单片机原理及接口[M].清华大学出版社,2007.
[5]吴金戌,沈庆阳等.8051单片机实践与应用[M].清华大学出版社2002.
7附录
7.1系统主要功能展示图
图13系统主要功能图
7.2器件清单
表2器件清单
源程序
#include"
reg51.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^0;
sbitp20=P2^0;
sbitp21=P2^1;
sbitp22=P2^2;
sbitp23=P2^3;
codeuchartab[]={0XC0,0XF9,0XA4,0XB0,0X99,//0~9
0X92,0X82,0XF8,0X80,0X90};
codeuchartab1[]={0X40,0X79,0X24,0X30,0X19,//0~9
0X12,0X02,0X78,0X00,0X10};
uchara,b,t,h;
intk;
ucharbai,shi,ge,xiao;
voiddelay(unsignedinti)
{
while(i--);
}
//初始化函数
bitint_DS18B20(void)
unsignedcharx=0;
DQ=1;
//DQ复位
delay(8);
//延时片刻
DQ=0;
//单片机将DQ拉低
delay(80);
//精确延时大于480us
//拉高总线
delay(14);
x=DQ;
//延时片刻后,如果x=0则初始化成功,x=1则初始化失败
delay(20);
returnx;
//读一个字节
Read(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
{
//给脉冲信号
dat>
>
=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
//写一个字节
Write(unsignedchardat)
unsignedchari=0;
for(i=8;
i>
i--)
DQ=dat&
0x01;
delay(5);
delay(4);
//启动转换
voidint__(void)
{
while(int_DS18B20());
//如果为一重新初始化
Write(0xCC);
//跳过读序号列号的操作
Write(0x44);
//启动温度转换
voidmain(void)
uintcount=0;
P2=0X00;
int__();
delay(2200);
for(count=0;
count<
1000;
count++)//开机显示0
{p20=1;
//百位
P0=tab[0];
//负符号
delay(20);
p20=0;
p21=1;
//十位
p21=0;
p22=1;
//个位
delay(0);
p22=0;
p23=1;
//显示温度标志C
P0=0xc6;
p23=0;
}
while
(1)
{
delay(120);
//跳过读序号列号的操作
Write(0xBE);
//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=R