温度测量控制系统的设计石化学院.docx
《温度测量控制系统的设计石化学院.docx》由会员分享,可在线阅读,更多相关《温度测量控制系统的设计石化学院.docx(19页珍藏版)》请在冰豆网上搜索。
温度测量控制系统的设计石化学院
电子工程设计(II)
温度测量控制系统的设计与实现
院(系、部):
姓名:
班级:
指导教师签名:
2014年1月10日
目录
摘要:
3
一、设计要求4
1.电路设计4
2.程序设计4
3.系统联调4
4.本学期关注的重点4
二、系统框图5
三、单片机控制模块设计与制作5
1、单片机模块原理图5
四、键盘显示模块设计与制作6
1、显示模块原理图6
五、D/A模块设计与制作6
1、模数转换原理图6
六、系统调试7
七、故障排除14
八、仪器、设备、元器件清单14
1、仪器设备及工具14
2、元器件清单15
九、温度测量控制系统的作品总体展示16
十、总结、收获与体会25
摘要:
单片机系统的开发应用给现代工业测控领域带来了一次新的技术革命,自动化、智能化均离不开单片机的应用。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
随着电子技术的发展,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么可编程控制器的出现则是给现代工业控制测控领域带来了一次新的革命。
随着人们生活质量的提高,酒店厂房及家庭生活中都会见到温度控制的影子,随着社会的发展,温度的控制要求也越来越高,对于室内温度控制也就相应的不断提高,而我们设计的温度控制系统就是为了达到这样的温度控制要求而进行设计的。
我们模拟制冷空调的控制过程。
能够显示当前温度和设定温度,显示误差不超过1℃,温控误差不超过±1℃。
关键字:
温度测量,温度控制,单片机,键盘显示,数模转换
一、设计要求
1.电路设计
⑴核心单元—单片机应用电路
⑵模拟量接口—A/D、D/A电路
⑶人机交互单元—显示、键盘控制电路
2.程序设计
⑴控制模/数转换进行温度数据采集。
⑵控制数/模转换改变控温元件工作状态,进行温度控制。
⑶控制键盘与显示器,进行控制温度设定和测量温度显示。
⑷将温度数据转换为显示温度数值的算法程序。
⑸控制温度精确、平稳变化的的算法程序。
3.系统联调
⑴电路系统联调,配合测试程序实现基本的测温、控温功能。
⑵程序联调,通过电路系统实现精确、平稳的温度控制。
4.本学期关注的重点
⑴设计并实现了一个能够精确、稳定控制温度的系统。
⑵知道了一个典型的电子系统应该具备哪些主要功能。
⑶知道了一个典型电子系统的设计实现过程和工作方法。
⑷知道如何设计测试方法、创造测试条件,对设计完成的电路模块或电路系统进行测试,使电路或系统的功能、指标充分展现。
⑸设计组装的电路系统出现故障,能够根据电路或系统的工作原理、自己掌握的专业知识以及积累的经验,快速确定故障范围和故障原因。
⑹掌握电路的设计方法,通过设计、计算实现电路设计要求。
⑺组装焊接电路,焊接可靠美观。
二、系统框图
图1温度测量控制系统总框图
三、单片机控制模块设计与制作
1、单片机模块原理图
图2单片机模块原理图
四、键盘显示模块设计与制作
1、显示模块原理图
图3显示模块原理图
五、D/A模块设计与制作
1、模数转换原理图
图4模数转换原理图
六、系统调试
开环控制程序调试
/*************************************************************************/
#include"C8051F020.h"//包含C8051F020硬件信息的头文件
#include"absacc.h"//包含绝对地址访问信息的头文件
#include"data_define.c"
#include"Init_Device.c"
#defineADCXBYTE[0x2000]
#defineDP1XBYTE[0x0000]
#defineDP2XBYTE[0x0001]
#defineDP3XBYTE[0x0002]
#defineDP4XBYTE[0x0003]
#defineCS2XBYTE[0x4000]
#defineTIMER0x80
unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedintkey=0;
unsignedchard=0x80;
ucharflag;
voiddelay(void);
voiddisplay(unsignedcharx,unsignedchary);
/************************************************
初始化
*************************************************/
voidinit()
{
Init_Device();
CS2=0x80;
DP1=0xff;
DP2=0xff;
DP3=0xff;
DP4=0xff;
}
/************************************************
读取温度
*************************************************/
voidtep(void)
{
unsignedlongintadc=0;
unsignedchary=0,z=0;
unsignedchard1=0,d2=0;
ADC=adc;/*启动A/D转换*/
delay();/*等待A/D转换结束*/
adc=ADC;
d1=d&0x0f;//AD值
d2=d&0xf0;
d2=d2>>4;
display(1,d1);
display(2,d2);
adc=(adc*100)/256;//温度值
z=adc/10;
display(4,z);
y=adc%10;
display(3,y);
}
voidkeyboard()
{
unsignedcharx;
ucharl_val,r_val,r_state,temp,conter,c;
key=0x0004;
x=1;
c=XBYTE[key];
if(r_state=~c&0x1f)
{
for(conter=1,temp=0x01;conter<6;++conter,temp=temp<<1)
if((r_state&temp)!
=0)
{
r_val=conter;
l_val=x;
if(r_val==1&&l_val==1)
{
if(flag==0)
{
flag=0xff;
d=d+1;
CS2=d;
}
}
elseif(r_val==5&&l_val==1)
{
if(flag==0)
{
flag=0xff;
d=d-1;
CS2=d;
}
}
}
}
elseflag=0x00;
}
voidmain(void)
{
init();
flag=0x00;
while
(1)
{
tep();
keyboard();
}
}
voiddisplay(unsignedcharx,unsignedchary)/*数值显示函数*/
{
if(x==3)DP3=table[y];
elseif(x==4)DP4=table[y];
elseif(x==2)DP2=table[y];
elseDP1=table[y];
}
voiddelay(void)/*延时函数*/
{
unsignedinti;
for(i=0;ifor(i=0;ifor(i=0;i}
闭环控制程序调试
/*************************************************************************/
#include"C8051F020.h"//包含C8051F020硬件信息的头文件
#include"absacc.h"//包含绝对地址访问信息的头文件
#include"data_define.c"
#include"Init_Device.c"
#defineADCXBYTE[0x2000]
#defineDP1XBYTE[0x0000]
#defineDP2XBYTE[0x0001]
#defineDP3XBYTE[0x0002]
#defineDP4XBYTE[0x0003]
#defineCS2XBYTE[0x4000]
#defineTIMER0x80
unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedintkey=0;
unsignedchard=0x80;
unsignedcharinput1=0,input2=0;
unsignedcharinput=0;
unsignedchary=0,z=0;
ucharflag;
voiddelay(void);
voiddisplay(unsignedcharx,unsignedchary);
/************************************************
自定义延迟
*************************************************/
voiddelay_ms()
{
unsignedinti;
for(i=0;i<=400;i++)
delay();
}
/************************************************
初始化
*************************************************/
voidinit()
{
Init_Device();
CS2=0x80;
DP1=0xff;
DP2=0xff;
DP3=0xff;
DP4=0xff;
}
/************************************************
读取温度
*************************************************/
voidtep(void)
{
unsignedlongintadc=0;
unsignedchard1=0,d2=0;
ADC=adc;/*启动A/D转换*/
delay();/*等待A/D转换结束*/
adc=ADC;
display(1,input1);
display(2,input2);
adc=(adc*100)/256;//温度值
z=adc/10;
display(4,z);
y=adc%10;
display(3,y);
}
/************************************************
键盘
*************************************************/
voidkeyboard()
{
unsignedcharx;
ucharl_val,r_val,r_state,temp,conter,c;
key=0x0004;
for(x=1;x<5;x++,key++)
{
c=XBYTE[key];
if(r_state=~c&0x1f)
{
for(conter=1,temp=0x01;conter<6;++conter,temp=temp<<1)
if((r_state&temp)!
=0)
{
r_val=conter;
l_val=x;
if((r_val>=1&&r_val<6)&&(l_val>=1&&l_val<=2))//+1
{
if(flag==0)
{
delay_ms();
if(flag==0)
{
flag=0xff;
input2=(l_val-1)*5+(r_val-1);
}
}
}
elseif((r_val>=1&&r_val<6)&&(l_val>=3&&l_val<=4))//-1
{
if(flag==0)
{
delay_ms();
if(flag==0)
{
flag=0xff;
input1=(l_val-3)*5+(r_val-1);
}
}
}
}
}
elseflag=0x00;
}
}
voidmain(void)
{
init();
flag=0x00;
while
(1)
{
tep();
keyboard();
input=input2*10+input1;
if(input<=(z*10+y))
{
d=0x00;
CS2=d;
}
else
{
d=0xff;
CS2=d;
}
}
}
/************************************************
数值显示函数
*************************************************/
voiddisplay(unsignedcharx,unsignedchary)
{
if(x==3)DP3=table[y];
elseif(x==4)DP4=table[y];
elseif(x==2)DP2=table[y];
elseDP1=table[y];
}
voiddelay(void)/*延时函数*/
{
unsignedinti;
for(i=0;ifor(i=0;ifor(i=0;i}
七、故障排除
这学期我们感到的压力很大,因为这学期的电路比上学期的难度大太多,特别开始的时候我们的数码管那块板块焊完了结果检查出来电路焊错,当时真的想放弃了,不过还是坚持了下来,把线全拆了重新开始焊!
终于,小心的焊完了电路。
在接下来的调试过程中,也会出现好多小问题,比如数码管显示不完全等常见现象,,还有一些虚焊的问题,接触不良问题,最后经过细心调试都一一解决.
在编程过程中,由于对c语言知识了解不多,不过在刘知音,闫硕,穆诗瑶等人的的帮助下,我们顺利的完成了一个个程序,在这我们要谢谢他们。
八、仪器、设备、元器件清单
1、仪器设备及工具
万用表
示波器
电烙铁
剥线钳
镊子、电源
试验台
2、元器件清单
键盘显示电路
元器件
器件个数
数码管
2
26管脚排针
2
74LS273
4
74LS244
1
74LS138
1
74LAS00
4
电阻300Ω
4
电阻4.7KΩ
5
键盘
1
DIP40IC插座
1
DIP20IC插座
1
DIP16IC插座
1
DIP14IC插座
1
线路板
1
导线、焊锡
若干
数/模转换电路
元器件
器件个数
26管脚排针
2
芯片DAC0832
1
NE5532
1
芯片底座
3
电阻7.5、K15K、30K
各一个
线路板
1
导线、焊锡
若干
单片机电路图
26管脚排针
2
C8051F023
1
74LS373
1
芯片底座
1
74LS137
1
线路板
1
导线、焊锡
若干
九、温度测量控制系统的作品总体展示
自己拍照!
!
!
!
!
十、总结、收获与体会
通过本次实训,我们最不仅熟练掌握了自动控制的知识,而且也拥有了实际设计的能力,具备了一线工作人员应具备的基本素质。
本次实训,更是在老师的指导和帮助下,借助学校给我们提供的物质平台,培养自己分析、解决实际问题的能力和勇于创新的科学精神的起点。
我们在本次实训中受益非浅,但我们不能把这些能力的获得和老师的不停指导分开。
在此特别的感谢各位老师的细心的辅导。
.在大家的共同协作努力下,我们顺利的完成了单片机的实训,并掌握了汇编语言。
在此,我代表我们所有参加本次实训的同学,向帮助和指导过我们的老师,说声:
“谢谢,亲爱的老师,您们辛苦了。
”,我也应该向给我们提供物质平台的学校——北京石油化工学校,道个谢:
“因为你的存在,我收获了我这一生当中最为珍贵的东西,我永远无法把你忘记!
在整个实验过程中我们遇到了许多问题,虽然在实验之前做过一些准备工作,但在真正做的时候还是常常出现心有余而力不足的情况,让我们常常感慨“书到用时方恨少”。
仔细想想,我们所做的准备工作还不够到位,不能群策群力的针对问题想出合理的解决方法。
这次实验的过程给了我们很大的启发,对我们今后的学习和工作都有很大的帮助和促进,并且带给了我们宝贵的经验。
在今后的道路上我们一定会吸取这次试验的宝贵经验和教训努力把事情做好。
通过这次课程设计,我真正领略到“团队合作”的真正含义,我们的课设是一个团队的任务,团队需要个人,个人也离不开团队,必须发扬团结合作的精神,这种精神是一个灵魂,它号召着我们心往一处想,劲往一处使,共同奋斗,共同努力,也正是这种精神激励着我们圆满的完成了此次课程设计的任务,达到了预期的成果。
在接下来我们进行了对我们来说较难的环节——编写功能较为单一的小程序。
虽然是小程序,但大一时我们学C++语言似乎都是为了应付考试或者做一些比较常规的题目,导致我们对C++语言不够重视,忽略了C++的重要性。
而这次课程设计却给我们的将所学知识运用于解决实际问题的机会,起初我们对编程充满了迷惘,不知从何下手,觉得编程是不可能完成的一件事。
俗话说“不怕功夫深铁杵磨成针”,经过老师、同学的讲解与帮助和我们用心的学习与研究,对编程有了初步的模型,经过不断地编写修改与调试小程序,句段比较少,一些错误都很容易被检查出来。
通过这次编程我们认识到细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到需要的结果。