模拟空调.docx
- 文档编号:5524129
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:30
- 大小:2.41MB
模拟空调.docx
《模拟空调.docx》由会员分享,可在线阅读,更多相关《模拟空调.docx(30页珍藏版)》请在冰点文库上搜索。
模拟空调
物理与机电工程学院课程设计报告
课程名称:
电子系统设计
系部:
物理与机电工程学院
专业班级:
电子信息工程08级
学生姓名:
周剑波
学号:
2008041547
指导教师:
赖义汉
完成时间:
2011年6月12日
报告成绩:
评阅意见:
评阅教师日期
模拟空调系统设计
物理与机电工程学院电子信息工程
学号:
2008041547姓名:
周剑波指导老师:
赖义汉
【摘要】
空调是常见的家用电器,在我们的生活中提供了舒适的室内条件,在本次设计中,结合我们常见的空调,模拟出它的工作原理,使我们对空调是如何工作有个感性的认识。
采用STC12C5410AD单片机作为系统的主控单元,使用常用的12864型号液晶对我们需要看到数据进行显示,文字和数字是其更加直观,利用单总线形式的DS18B20数字温度传感器来对室温进行测量,红外遥控器对系统进行目标温度和风速的控制,利用单片机具有的PWM功能,对LED灯进行控制来模拟制冷制热系统以及风扇,LED的亮度强弱来示意制冷热和风速的强弱。
【关键词】空调单片机12864传感器遥控PWM
目录
一.设计总体思路,基本原理和框图.................................4
二.单元电路设计………………………………………….4
三.总电路图及元器件清单……………………………….6
四.安装与调试步骤……………………………………….7
五.故障分析与改进……………………………………….8
六.功能测试与分析……………………………………….8
七.结论与心得体会……………………………………….9
八.程序流程图与代码……………………………………11
九.参考文献………………………………………………24
一、设计总体思路、基本原理和框图
总体框图如下图所示
根据设计思路本次设计可分为六个模块,最主要的是MCU主控模块,用来数据处理和控制输入输出,用温度传感器模块进行温度信号采集,液晶显示器模块用来显示当前需要显示的信息方便使用者使用和让使用者有个比较直观的感觉,遥控(现成的,无需自制)用来设定系统的目标温度和风速,使用接收头来接受遥控发出的编码信号,模拟设备模块主要用来示意外部设备的工作状态及强度,下载模块用于调试阶段使用,蜂鸣器主要用来提示按键按下的有效性。
二、单元设计电路
1主控MCU
主控MCU如图1所示,图中采用STC125410AD为主控MCU,晶振频率为12.0M,Crst(47uf),Rrst(1K)组成上电复位电路。
C3、C4用来对电源滤波,使系统更加的稳定
图1
2温度传感器模块
温度传感器模块如图2所示,采用达拉斯公司生产的数字温度传感器DS18B20进行数据采集,其采用单总线数据传输,具有硬件简单的优势,而且数据采集周期短,精度高,量程大,可以达到室温计的要求,其数据总线与P2.5相接。
图2图3图4
3红外接收头模块
红外接收头如图3所示,使用普通的红外接收头,对杂信号有滤除功能,接收性能非常稳定。
4模拟设备LED
模拟设备如图4所示,使用LED表示,用PWM1和PWM3分别对设备控制,PWM1控制红色LED模拟制冷制热设备,PWM3控制绿色LED模拟风速,
5液晶显示
液晶显示模块如图5所示,采用12864显示,可以显示汉字,其具有操作简单显示字符多特点,并接R0(104)进行对比度调节,P1为数据接口,P2.6,P2.7,P3.7为控制线。
图5图6
6蜂鸣器
蜂鸣器模块如图6所示,P3.4接蜂鸣器,蜂鸣器外加Q(9013)作为电流放大驱动,使其声音更宏亮,由于蜂鸣器里有线圈,故加上二极管进行续流,以免Q被线圈产生的电压击穿。
R5(1K)为限流电阻。
7下载模块
下载模块如图7所示,使用MAX232进行电平信号的转换,由于串口线是工头,故板上使用母头给以配套。
三、总电路图及元件清单
1、总原理图如图6所示
图6
2、PCB图如图7所示
图7
3、元器件清单
元件名称
主要参数
数量
元件名称
主要参数
数量
LCD
12864
1个
电解电容
0.1UF
1个
MCU
STC125410AD
1个
10UF
1个
47UF
2个
芯片座
DIP28
1个
瓷片电容
30PF
2个
DIP16
1个
104
4个
晶振
12.0M
1个
红外接收头
三脚
1个
蜂鸣器
1个
定值电阻
10K
1个
遥控器
NEC制
1个
1K
2个
二极管
IN4007
1个
220
3个
三极管
9013
1个
排针
3排
电位器
104
1个
温度传感器
DS18B20
1个
MAX232
16脚
1个
母头
九孔
1个
四、安装与调试步骤
印制正确的电路板,打好孔,先将比较矮的元器件焊上,不耐温的选择在最后焊接,芯片先放管座,逐个管脚焊接,整个板焊好后才把芯片插上,液晶先插排针,也要等到整个板焊接好后才插上,晶振、蜂鸣器和传感器元件先焊圆柱排孔,在插上,不要直接焊接,以免焊接时损坏,焊接时一定要按正确的方式焊接以避免虚焊,焊好了后下载程序,接通电源,触摸芯片看看是否发热,调整液晶的对比度,然后对照任务书,看能不能达到任务书所要求的性能,如不能达到检查电路以及程序。
安装后如图8所示。
图8
五、故障分析与改进
在一开始刚下进程序时并没用达到想象中的效果,液晶屏不显示数据,只有背光亮,于是我就调节了对比度,调节过程中还是不会显示数据,只是在液晶上显示出一些黑格,每个字符都是全黑,可以知道硬件出问题了,特别是液晶模块部分,于是我就开始用万用表检查是否短路和断路,在液晶部分有个地方布线比较密集,而且线比较细,是最容易发生断路和短路的地方,检查之后还是没查出问题,于是再去检查别的还是没出来,最后还是回到液晶部分,终于发现有个管脚虚焊了,于是对每个排针加固了一遍,再次上电便达到了想要的效果,液晶显示出了文字,硬件算是没问题。
虽然会显示文字,但是还是不会显示出正确的温度数据,温度传感器模块有点问题,仔细检查了一下程序,找不到问题,再次看了看现象,发现在开始的欢迎字母的移动速度与预期不一致,于是想到了时钟问题,由于我使用的是1T的单片机,比普通51单片机要快12倍,而DS18B20具有严格的时序要求,所以很快就知道了程序中出错的地方了。
改正程序中一些时间延时之后系统就能正常运行了。
六、功能测试与分析
(1)下面是所设计的功能列表
1:
室温以及各种工作状态显示
2:
目标温度可设定
3:
无线遥控控制
4:
智能调整制冷制热(模拟设备)
5:
制冷制热强度按温差分等级
6:
可调风速(模拟设备)
7:
欢迎标语
遥控按键的用法:
4、6键分别用来对风速的加减,2、8键分别用来对目标温度设定的加减。
遥控如图9
图9
(2)上电对功能进行测试
上电之后首先看屏幕上是否会出现欢迎字幕,字幕之后显示出室温、设定、风速、状态等文字,温度数据是否与实际相符,然后按遥控的按键,看是否能对风速和目标温度进行设定,用手触摸温度传感器看温度是否变化并自动调整状态。
图10
七、结论与心得体会
本次设计的总体思路设计、程序设计以及最终调试主要由我来完成的。
从开始设计到设计结束我们花了两个星期的时间,前一周主要是商量设计方案、画板制板、由于那时候各科目要做试验比较多加上工艺实验室开放受限,所以花了这么久时间,第二个星期由我开始做程序部分,虽然程序不太长,但是经验少、水平有限,在这个上面还是花了不少的时间,加上硬件做的也有点问题,在联调的时候比较麻烦。
通过这次设计能使我们学到很多的东西,提高了硬件电路设计的能力、程序设计的能力以及调试的能力。
硬件设计要有很多的基础知识,电路基础、模电、数电、单片机、PROTEL等,这都是我们之前学过的专业基础课,这次设计我们都用上了,使我们对之前学过的知识进行应用及巩固;程序设计使用C语言,学单片机之前不懂得C学来有什么用,只知道要应付考试,现在懂得了C的重要性,而且还要学会结合实际的硬件进行软硬结合编程;最后调试可以说是最难的一个步骤了,是最考验一个人的耐性的时候,由于做板的工艺条件不是很好,一旦出问题,要一个一个模块的去检查,硬件检查完了还要检查程序,这个是在书本上学不到的,只有自己去经历、去做才会领悟到这些东西,总结出一些经验,以后可以利用自己之前的经验去解决问题,做多了自然就会掌握很多的调试技巧。
作品调试出来后会有很大的成就感,使自己更喜欢做这些事情。
本次系统设计让我们有点在做毕业设计的感觉,也有点电子竞赛的感觉。
我们三人成队,各自分工协作,使我们有办事团队精神,这点像电子竞赛;作品完成后,我们要自己上台讲解我们的作品,以及老师提问我们进行解答,完成后我们写出设计报告,对我们的作品制作进行总结这点像做毕业设计。
经过这次设计,虽然我们很忙,感觉非常的累,头脑总是处于疲劳状态,但是我觉得很值得,因为我学到了很多东西,很多在平常学不到的在这次设计中我学到了。
这次设计比之前的实训更有成就感,这次做出来的作品相比以前更加的智能化,不会像以前做的那么的单调,无趣。
通过这次使我更加喜欢了这个专业,对这些东西增加了兴趣,对我以后的学习增加了动力,我将会更加的努力,学习好这个专业领域的更多的知识,为以后的工作铺路。
八、程序流程图与代码
(1)流程图
主程序流程图数据更新流程图红外解码流程图温度读取流程图
(2)程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitIRIN=P3^2;//红外接收器数据线
sbitLCD_RS=P2^6;
sbitLCD_RW=P2^7;
sbitLCD_EN=P3^7;
sbitBEEP=P3^4;//蜂鸣器驱动线
sbitDQ=P2^5;//温度传感的数据总线
ucharIRCOM[4],flag,wencha,num;
uintwendu;
ucharkongwen=25;
ucharfengji=0;
ucharcodetable[]="室温:
";
ucharcodetable0[]="恒定";
ucharcodetable4[]="制冷";
ucharcodetable5[]="制热";
ucharcodetable3[]="设定:
";
ucharcodetable6[]="状态:
";
ucharcodetable7[]="风速:
";
ucharcodetable8[]="欢迎使用";
ucharcodetable9[]="WelcomeToUse";
ucharcodetable10[]="0123456789.C";
/**************延时x毫秒******************/
voiddelayms(intx)
{
unsignedchary;
for(;x>0;x--)
for(y=111;y>0;y--);
}
/************延时s*0.14MS******/
voiddelay(unsignedchars)
{
unsignedchari;
while(s--)
{
for(i=0;i<13;i++){}
}
}
/************x微秒延时******************/
voiddelayus(uintuseconds)
{
for(;useconds>0;useconds--);
}
ucharow_reset(void)//复位
{ucharpresence;
DQ=0;//DQ低电平
delayus(348);//480us
DQ=1;//DQ高电平
delayus(36);//等待
presence=DQ;//presence信号
delayus(300);
return(presence);
}//0=presence,1=nopart
ucharread_byte(void)//从1-wire总线上读取一个字节
{
uchari;
ucharvalue=0;
for(i=8;i>0;i--)
{value>>=1;
DQ=0;
DQ=1;
delayus(12);
if(DQ)value|=0x80;
delayus(72);}
return(value);
}
voidwrite_byte(charval)//向1-WIRE总线上写一个字节
{
uchari;
for(i=8;i>0;i--)//一次写一字节
{
DQ=0;
DQ=val&0x01;
delayus(60);
DQ=1;
val=val/2;
}
delayus(60);
}
voidRead_Temperature()//读取温度
{
uinta;
union{
ucharc[2];
uintx;
}temp;
ow_reset();
write_byte(0xCC);//跳过ROM
write_byte(0xBE);//读
temp.c[1]=read_byte();
temp.c[0]=read_byte();
ow_reset();
write_byte(0xCC);
write_byte(0x44);//开始
a=temp.x;
a=a*0.625+0.5;
wendu=a;
}
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码*/
voidlcd_wcmd(ucharcmd)
{
LCD_RS=0;
P1=cmd;
delayms(5);
LCD_EN=1;
delayms(5);
LCD_EN=0;
}
/*写显示数据到LCDRS=H,RW=L,E=高脉冲,D0-D7=数据。
*/
voidlcd_wdat(uchardat)
{
LCD_RS=1;
P1=dat;
delayms(5);
LCD_EN=1;
delayms(5);
LCD_EN=0;
}
/*LCD初始化设定*/
voidlcd_init()
{
LCD_EN=0;
lcd_wcmd(0x30);//16*2显示,5*7点阵,8位数据
lcd_wcmd(0x0c);//显示开,关光标
lcd_wcmd(0x01);//清除LCD的显示内容
}
/*设定显示位置*/
voidlcd_pos(ucharX,ucharY)
{
ucharpos;
if(X==0)
{X=0x80;}
elseif(X==1)
{X=0x90;}
elseif(X==2)
{X=0x88;}
elseif(X==3)
{X=0x98;}
pos=X+Y;
lcd_wcmd(pos);//显示地址
}
voiddisplay1(ucharnum1)
{
uchara;
lcd_pos(1,8-num1);
for(a=0;a<(2*num1);a++)
{
lcd_wdat(table8[a]);
}
}
voiddisplay2(ucharnum1)
{
uchara;
lcd_pos(2,8-num1);
for(a=0;a<(2*num1);a++)
{
lcd_wdat(table9[a]);
}
}
/***************遥控扫描***********/
voidkeyscan()
{ucharaa,w;
w=wendu/10;
if(flag==1)
{flag=0;
switch(num)
{
case0x00:
break;
case0x01:
kongwen++;
if(kongwen>=45)
kongwen=45;
break;
case0x02:
break;
case0x04:
if(fengji==0)
fengji=4;
elsefengji--;
break;
case0x05:
break;
case0x06:
fengji++;
if(fengji==5)
fengji=0;
break;
case0x08:
break;
case0x09:
kongwen--;
if(kongwen<=10)
kongwen=10;
break;
case0x0a:
break;
case0x0c:
break;
case0x0d:
break;
case0x0e:
break;
}
}
lcd_pos(0,3);//写室温值
lcd_wdat(table10[wendu/100]);//室温十位
lcd_wdat(table10[(wendu%100)/10]);//室温个位
lcd_wdat(table10[10]);
lcd_wdat(table10[(wendu%100)%10]);//室温小数位
lcd_wdat(0x09);
lcd_wdat(table10[11]);
lcd_pos(1,3);//写设定温度值
lcd_wdat(table10[kongwen/10]);
lcd_wdat(table10[kongwen%10]);
lcd_wdat(0x09);
lcd_wdat(table10[11]);
if(kongwen==w)
{
aa=0;//写恒定
lcd_pos(2,3);
while(table0[aa]!
='\0')
{
lcd_wdat(table0[aa]);
aa++;
}
wencha=0;
}
elseif(w>kongwen)
{
aa=0;//写制冷
lcd_pos(2,3);
while(table4[aa]!
='\0')
{
lcd_wdat(table4[aa]);
aa++;
}
wencha=w-kongwen;
}
else{
aa=0;//写制热
lcd_pos(2,3);
while(table5[aa]!
='\0')
{
lcd_wdat(table5[aa]);
aa++;
}
wencha=kongwen-w;
}
switch(wencha)//制冷热的速度设置
{
case0:
CCAP1H=0;
lcd_pos(2,5);
lcd_wdat('');
lcd_wdat('');
break;
case1:
case2:
CCAP1H=40;
lcd_pos(2,5);
lcd_wdat('');
lcd_wdat('1');
break;
case3:
case4:
CCAP1H=110;
lcd_pos(2,5);
lcd_wdat('');
lcd_wdat('2');
break;
case5:
case6:
CCAP1H=180;
lcd_pos(2,5);
lcd_wdat('');
lcd_wdat('3');
break;
default:
CCAP1H=255;
lcd_pos(2,5);
lcd_wdat('');
lcd_wdat('4');
}
switch(fengji)//风速设置
{
case0:
CCAP3H=0;
lcd_pos(3,3);
lcd_wdat('');
lcd_wdat('0');
break;
case1:
CCAP3H=40;
lcd_pos(3,3);
lcd_wdat('');
lcd_wdat('1');
break;
case2:
CCAP3H=110;
lcd_pos(3,3);
lcd_wdat('');
lcd_wdat('2');
break;
case3:
CCAP3H=180;
lcd_pos(3,3);
lcd_wdat('');
lcd_wdat('3');
break;
case4:
CCAP3H=255;
lcd_pos(3,3);
lcd_wdat('');
lcd_wdat('4');
break;
}
}
voidmain()
{
ucharaa;
BEEP=0;
LCD_RW=0;//只写
IRIN=1;//I/O口初始化置高没信号就为高
flag=0;//是否有按键按过标志
IE=0x81;//允许总中断中断,使能INT0外部中断
TCON=0x01;//触发方式为负跳变触发
lcd_init();//液晶初始化
for(aa=1;aa<9;aa++)//写"欢迎使用WelcomeToUse"
{
display1(aa);
display2(aa);
delayms(12000);
}
lcd_wcmd(0x01);//清除LCD的显示内容
lcd_wcmd(0x01);//清除LCD的显示内容
lcd_pos(0,0);//写”室温“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 空调