随着生活的改善,消费水平的提高。越来越多的普通居民开始使用冰箱。每年冰箱的市场额都在千万以上。随着中国电子行业的高速发展。一个个新型的企业开始计入抢夺市场的竞争中。使得供应生产商,在保证质量和顾客需要的前提下,纷纷消减陈本,制定不同的战略。目前各大冰箱控制器的生产厂家存在着更加残酷的竞争,只有把握住优质的技术,结合低廉的陈本才能为企业,迎来生存的机会。基于这种情形,我们认为现如今,在家电的低端市场,廉价实用性强的控制器为各大产品提供了巨大优势,这种优势是在竞争中无法忽略的。我们的产品追求廉价实用,节能环保,突出用户地位更加人性化,应用宽泛。
1 系统总体介绍
这是一个基于51单片机的电冰箱控制系统,通过51单片机控制其余的温控设备以及其余的扩展设备,从而达到系统预期的目的。电路简单实用,而且经济廉价,适用于很多场合。51单片机的控制也很方便简单,而且能做到控制系统的作用。
产品特色有:
人机交互式控制,必要时可根据顾客的个人意愿设置停开时间比,满足不同的需要;
成本低,手动调节部分可以控制在10元以下,主控部分在25元以下,甚至可以更低一些;
可人为控制停机,防止因为制冷剂等原因造成不停进而损坏压缩机;
防止因为断电等高压启动损坏压缩机。
2 系统硬件组成
本系统由单片机最小系统、时间控制器、液晶模块、温度采集模块以及给单片机供电的电源模块等模块组成,下面分别做详细的介绍。
2.1 单片机供电电路
单片机工作的电压是5V的直流电,所以我们要为单片机供应持续不变的直流电信号,这样才能保证单片机工作的稳定,以及单片机在处理数据上的持续性。单片机在工作时由时钟频率决定其输出波形。从市用的普通交流电出发,我们可以设计出给单片机供电的电源电路。
首先把交流电接入小型变压器,把220V的交流电变成15V的交流电,然后经过整流桥整流,滤波电路滤波,可以得到接近12V的直流电压,再经过7805的集成稳压片,就可以得到5V的直流电了。当然有时候要采用小型蓄电池作为最初的电源,我们把7805的电路另作一个模块放在一边备用。 电路图如图一:
图一:稳压电路
2.2 时间控制器电路
这是一种小型的低成本时间控制器,可人为设定不同的开停比,控制冰箱开或停,模拟温控过程。电路成本低(小于10元),可靠性较高,适合于广大用户使用。该模块的电路图如图二所示:
图二:时间控制器电路
此电路核心为一片555时基电路,在此构成可调占空比的无稳态多谐振荡器。由555的工作原理可知,其③脚输出电压由②、⑥脚的输入电压决定。R3、D6、RP2、R5、C3构成充电支路,当C3上的电压小于2/3Vcc(Vcc为555的工作电源电压)时,③脚输出高电平,K1释放,LED1熄灭,一旦C3上的充电电压升高至2/3Vcc时,则555内部RS触发器翻转,③脚输出低电平,K1吸合,LED1点亮,同时⑦脚内部的放电管对地导通,C3通过R4、RP1、D5支路对⑦脚放电,直到C3上的电压降至1/3Vcc时,⑦脚停止放电③脚又恢复输出高电平;此后C3又通过充电支路进行充电……周而复始。
充电时间T1=0.693(R3+R5+RP2)C3
放电时间T2=0.693(R4+RP1)C3
设计中R3取16kΩ,R4取100 kΩ,R5取270 kΩ,RP1、RP2均取4.7 MΩ的电位器,C3为1000μF的低漏电铝电解电容器,则T1、T2的定时最长可达约54分钟。由于C3漏电流的存在,实际定时可达80分钟。
电路中,RP1、RP2分别为开机调节及定时调节电位器,LED1、LED2分别定时、电源指示。R1、C1、D1~D4及C2、ZD、R2等组成简单的电容降压稳压电路,提供555时基电路及继电器K1的工作电源。开机后,电路自动进入延时启动状态,如需快速启动,可按一下轻触开关S1,则可实现快启功能。
对于实际的电路图,C1需选用耐压大于400V的聚丙烯电容器。K1可选触点电流大于5A的高灵敏度继电器。C3应选用漏电尽可能低的电解电容器,这样生产时的一致性较好,不然时间误差会很大。
制作完成后,一般情况无须调试。将电冰箱插入CZ上,RP1、RP2调于最小位置(均为5分钟定时),通电后LED2亮。约5分钟后,LED1熄灭、K1释放。如果实现开机时快启,只需按一下S1即可。调节RP1、RP2,即可完成不同的时间通断比,使接于CZ上的电冰箱受其控制而实现节能。
2.3 温度采集电路
我们用到的温度采集芯片是常用的DS18B20,我们用的是形如三极管封装的三脚外形,这种封装的芯片才电路连接上很是方便,三脚分别是电源端、接地端和信号端,只要分别接入电路节能正常工作。但是在用该芯片对温度采集时还得用到AD转换的芯片。我们用的是ADS1286P。在进行温度采集时我们对三个不同地点的温度分别进行采集,用AD转换芯片转换后送给单片机进行数据的分析和处理。从而再进行对其他模块进行控制。这种电路在连接和处理上都是很简单的,编程上也很便捷,适合很多场合的使用。
ADS1286P的原理图如图三:
图三:ADS1286P的原理图
ADS1286P和DS18B20的连接也很方便。作为一种AD转换的芯片,前者在使用上和其它一些AD处理芯片的应用也差不多。由于在温度采集时会涉及三个点的采集,所以两者的连接图没有画在一起。DS18B20的电路图如图四所示:
图四:温度采集电路
2.4 语音控制模块
我们用到的语音芯片是ISD1700系列的ISD1760。这种芯片的特点有:可录、放音十万次,存储内容可以断电保留一百年;可以用两种控制方式,两种录音输入方式,两种放音输出方式;可处理多达255段信息;有丰富多样的工作状态提示;多种采样频率对应多种录放时间;音质好,电压范围宽,应用灵活等。工作电压在2.4V-5.5V,最高不能超过6V,静态电流0.5-1uA,工作电流20mA。在用该芯片时可以利用独立键盘工作模式,可以用按键进行录放功能,还有快进、擦除、音量控制、直通放音和复位等功能。芯片采用的是28脚直插式封装,管脚图如图五:
图五:ISD1700系列引脚图
在放音方面,也由两种模式,分别是边沿触发和电平触发模式,都由/PLAY管脚触发。芯片的擦除还可以采用单个擦出和全体擦除,在该芯片的使用上很是便捷,而且这种芯片设有控制音量大小的管脚和复位管脚以及快进管脚,都能够用按键来进行控制。在满足要求的前提下,这种芯片的性价比也相对很高,能够适应很多场合的使用。
该芯片的典型应用电路如图六所示:
图六:ISD1760应用电路
2.5 单片机最小系统以及液晶显示模块
这是整个系统的核心部分,是系统工作的必要条件,也是个模块连接到一起的链接枢纽。
在单片机最小系统中,我们需要给单片机工作提供必要的条件:由外部晶振给与单片机工作的时钟频率,还应有复位电路和供电电路。单片机采用宏晶公司的STC89C51单片机,这种单片机不仅便宜,而且在使用上也很方便。它不仅在编程上便捷,在造价上也很经济实惠,而且对于像这种简单的控制也能起到很好的控制作用。整个系统都由单片机来进行控制,采集到的温度信号传给单片机进行处理,完了再对其余模块进行控制,以达到对整个系统的控制。图七就是单片机最小系统和液晶显示模块的电路图:
图七:单片机最小系统+液晶电路
3 系统软件设计
系统的软件设计是针对硬件的各个方面,硬件的集成就是软件程序的集成。其中包括了温度的采集,A/D转换,液晶显示,语音报警以及自动手动的调节部分等等各个部分。
各部分程序的集合就构成了整个系统的完整程序,用51单片机来控制整个系统的实现。系统中还用到了继电器,这是一个用低电压控制高电压的元器件,能够对一些高于5V的模块进行驱动。
整个程序的设计围绕着各个模块的连接,更关键的是和主控芯片51单片机的连接。
下图是整个系统的硬件组成图,以及各个模块的连接图,从图中我们就可以看出系统软件设计的思路。如图八
图八:系统硬件组成图
系统源程序见附录一。
4 总结
在这几个月的项目制作中,我们学到了很多的东西,也完成了这个项目。从这个项目中,我们学到了很多东西,在硬件制作和软件编程上都得到了很大的提高。整个项目的制作过程就是一个发现问题—解决问题的过程,也可以说是发现困难—解决困难的过程。在整个过程中我们遇到了很多的困难,包含在整个系统的各个方面。当我们发现困难的时候,我们会在网上找相关的资料,然后一起讨论,把困难给解决。当然很多时候,这不是一个很容易的事儿,很多东西不是那么容易就给解决的,这时候我们会从不同的方案中选择、实验,淘汰掉那些不能达到目的的方案,最后得到我们需要的方案。当然,很多时候我们还会请教实验室的学长们,他们帮助我们解决了不少问题,这样我们才能完成整个系统。
在此,感谢学校给我们这个学习和锻炼的机会,让我们能够在实践中学习,把实践和理论相结合,从而学到更多的知识。感谢孙岩老师的耐心指导与帮助,希望以后能有机会得到更大的锻炼。
参考文献:
【1】 郭天祥.《51单片机C语言教程》北京:电子工业出版社 2009.1
【2】 赵建领.《Protel电路设计与制版宝典》 北京:电子工业出版社 2007.1
【3】 赵建领.《51系列单片机开发宝典》北京:电子工业出版社 2008.4
【4】 张伟,孙颖,赵晶.《Protel99SE高级应用》北京:人民邮电出版社 2007.7
【5】 周润景,张丽娜.《Protel99SE原理图与印制电路板设计》北京:电子工业出版社 2008.8
【6】 戴佳,戴卫恒,刘博文.《51单片机C语言应用程序设计实例精讲》第二版北京:电子工业出版社 2008.12
【7】 虞立信,陈波,虞立工.《电冰箱模糊控制器的研制》 《家用电器科技》1997年04期
【8】 丛树松.会说话的电冰箱[J].家电科技 1983年03期
【9】 孙凤斌. 电冰箱时间控制器.中国:90217787.7 ;1991.1.30
附件程序:
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar bdata SR0_L;
uchar bdata SR0_H;
uchar bdata SR1;
uchar APCL=0;APCH=0;
uchar PlayAddL , PlayAddH;
uchar RecAddL,RecAddH;
uchar flag1=0;
sbit ds=P1^0;
uchar id[3][8]={{40,235,18,249,1,0,0,121},{40,159,23,249,1,0,0,239},{40,205,27,155,1,0,0,25}};
sbit RS=P3^6;
sbit EN=P2^0;
sbit p01=P3^1;
sbit CMD=SR0_L^0;
sbit FULL=SR0_L^1;
sbit PU=SR0_L^2;
sbit EOM=SR0_L^3;
sbit INTT=SR0_L^4;
sbit RDY=SR1^0;
sbit ERASE=SR1^1;
sbit PLAY=SR1^2;
sbit REC=SR1^3;
uchar bdata flag=0;
sbit PR_flag=flag^1;//0放音,1录音
sbit Erase_flag=flag^4;
sbit Stop_flag=flag^7;
sbit SS=P1^1;
sbit SCK=P1^2;
sbit MOSI=P1^3;
sbit MISO=P1^4;
sbit LED=P3^0;
//sbit Key_AN=P2^1;
//sbit Key_STOP=P2^2;
//sbit Switch_PR=P2^3;
uchar ff;
void ISD_Init();
unsigned char ISD_SendData(unsigned char dat);
void ISD_PU(void);
void ISD_Clr_Int(void);
void ISD_Rd_Status(void);
void ISD_WR_APC2(uchar apcdatl,uchar apcdath) ;
void ISD_SET_PLAY (unsigned char Saddl,Saddh,Eaddl,Eaddh);
void delay_us(uint);
/*********************************
液晶**************
*********************/
void write_command(uchar com)
{
RS=0;
P0=com;
delay_us(5);
EN=1;
delay_us(5);
EN=0;
}
void write_da
{
RS=1;
P0=da
delay_us(5);
EN=1;
delay_us(5);
EN=0;
}
void yejing_init()
{
EN=0;
write_command(0x38);
write_command(0x0c);
write_command(0x06);
write_command(0x01);
}
/*********************************
18B20
*************************8***/
void delay(uint t)
{
for(;t>0;t--);
}
void ow_reset()
{
bit pre=1; //工作标志
while(pre)
{
while(pre)
{
ds=1;
_nop_(); //延时
_nop_();
ds=0;
delay(50); //550US
ds=1;
delay(5); //55US
pre=ds; //presence=0继续下一步
}
delay(45); //500US
pre=~ds;
}
ds=1;
}
//********************************
//写一个字节函数
void write_byte(uchar t)
{
uchar i;
for(i=0;i<8;i++)
{
ds=1;
_nop_(); _nop_();
ds=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();//5us
if((t&0x01)==0x01)
{
ds=1;
}// DQ=t&0x01; //最低位移出
else
{
ds=0;
}
delay(6); //66us
t=t>>1; //右移1位
}
ds=1;
delay(1);
}
//********************************************
//读一个字节函数
uchar read_byte()
{
uchar i;
uchar value=0;
for(i=0;i<8;i++)
{
ds=1;
_nop_(); _nop_();
value=value>>1;
ds=0;
_nop_(); _nop_(); _nop_(); _nop_(); //4us
ds=1;
_nop_(); _nop_(); _nop_(); _nop_(); //4us
if(ds==1)
{
value=value|0x80;
}
delay(6); //66us
}
ds=1;
return(value);
}
uint dealwith(uchar hbit,uchar lbit)
{
float newtemp;
uint temp=0,inttemp=0;
temp=hbit;
temp=temp<<8;
temp=temp|lbit;
temp<<=4;
temp>>=4;
newtemp=temp*0.0625+0.05;
inttemp=newtemp*10;
return (inttemp);
}
void display(uchar add,uint date)
{
uint shi,ge,sfen;
shi=date/100;
ge=date%100/10;
sfen=date%10;
switch(add)
{
case 0:write_command(0x80); break;
case 1:write_command(0x80+8); break;
case 2:write_command(0x80+0x40); break;
}
if(flag1==0) write_da
else {write_da
write_da
write_da
write_da
write_da
write_da
}
//void get_id(uchar *p)
//{
//ow_reset();
//write_byte(0x33); //Skip ROM
//for(n=0;n<8;n++) *p++=read_byte(); //读取64位ROM ID
//}
void conver(uchar k )
{
uchar wenh=0,wenl=0;
uchar n;
float tentemp;
// ds=P1^0;
ow_reset(); //复位
write_byte(0xcc); //不进行编号匹配
write_byte(0x44); //进行温度转换
while(!ds);
ow_reset();
//DQ_SendByte(0xcc); // Skip ROM
write_byte(0x55); //发送ID匹配命令
for(n=0;n<8;n++) write_byte(id[k][n]); //发送64 bit ID
// ow_reset();
// write_byte(0xcc); //不进行编号匹配
write_byte(0xbe); //发读命令
wenl=read_byte(); //温度低八位
wenh=read_byte(); //温度高八位
if(wenh>128) flag1=1;
tentemp=dealwith(wenh,wenl); //数据处理
display(k,tentemp);
}
void main()
{
uchar k;
yejing_init();
delay_us(1);
ISD_Init();
while(1)
{
for(k=0;k<=2;k++)
{
conver(k);
delay_us(20);
}
// ISD_SET_PLAY(PlayAddL,PlayAddH,RecAddL,RecAddH);
/* do{ISD_Rd_Status();ISD_SET_PLAY(16,0,31,0);
}while(RDY==0);
ISD_Clr_Int();
do{ISD_Rd_Status(); ISD_SET_PLAY(32,0,46,0);
}while(RDY==0);
ISD_Clr_Int();
do{ISD_Rd_Status(); ISD_SET_PLAY(47,0,62,0);
}while(RDY==0);
ISD_Clr_Int();
do{ISD_Rd_Status(); ISD_SET_PLAY(63,0,75,0);
}while(RDY==0);
ISD_Clr_Int();
do{ISD_Rd_Status(); ISD_SET_PLAY(76,0,84,0);
}while(RDY==0);
ISD_Clr_Int();
do{ISD_Rd_Status(); ISD_SET_PLAY(85,0,97,0);
}while(RDY==0);
ISD_Clr_Int();
// do{ISD_Rd_Status(); ISD_SET_PLAY(68,0,72,0);
// }while(RDY==0);
// ISD_Clr_Int();
do{ISD_Rd_Status(); ISD_SET_PLAY(98,0,110,0);
}while(RDY==0);
ISD_Clr_Int();
*/
}
}
/*************************
ISD1760子程序
*********************/
void ISD_Init()
{
uchar i=2;
SS=1;
SCK=1;
MOSI=0;
do
{
ISD_PU();
delay_us(50);
ISD_Rd_Status();
}
while(CMD||(!PU));
ISD_WR_APC2(0x40,0x04);//
do
{
ISD_Rd_Status();
}
while(RDY==0);
do
{
LED=0;
delay_us(300);
LED=1;
delay_us(300);
i--;
}
while(i>0);
}
uchar ISD_SendData(uchar dat)
{
uchar i,j,BUF_ISD=dat;
SCK=1;
SS=0;
for(j=4;j>0;j--);
for(i=0;i<8;i++)
{
SCK=0;
for(j=2;j>0;j--);
if(BUF_ISD&0x01)MOSI=1;
else MOSI=0;
BUF_ISD>>=1;
if(MISO)BUF_ISD|=0x80;
SCK=1;
for(j=6;j>0;j--);
}
MOSI=0;
return BUF_ISD;
}
void ISD_PU()
{
ISD_SendData(0x01);
ISD_SendData(0x00);
SS=1;
delay_us(50);
}
void ISD_Clr_Int()
{
ISD_SendData(0x04);
ISD_SendData(0x00);
SS=1;
}
void ISD_Rd_Status()
{
uchar i;
ISD_SendData(0x05);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
for(i=2;i>0;i--);
SR0_L=ISD_SendData(0x05);
SR0_H=ISD_SendData(0x00);
SR1=ISD_SendData(0x00);
SS=1;
}
void ISD_WR_APC2(uchar apcdatl,uchar apcdath)
{
ISD_SendData(0x65);
ISD_SendData(apcdatl);
ISD_SendData(apcdath);
SS=1;
}
void ISD_SET_PLAY(uchar Saddl,uchar Saddh,uchar Eaddl,uchar Eaddh)
{
ISD_SendData(0x80);
ISD_SendData(0x00);
ISD_SendData(Saddl);
ISD_SendData(Saddh);
ISD_SendData(Eaddl);
ISD_SendData(Eaddh);
ISD_SendData(0x00);
SS=1;
}
void delay_us(uint aa)
{
uint i,j;
for(i=0;i for(j=0;j<120;j++); }
上一篇:基于52单片机的智能小车的设计与制作
下一篇:c51与汇编语言的接口
推荐阅读最新更新时间:2024-03-16 15:10
设计资源 培训 开发板 精华推荐
- 芯启源(上海)将持续发力,“做深做精”EDA及IP产品
- 本田严厉警告日产:若与鸿海合作,那么本田与日产的合作将终止
- Microchip推出新款交钥匙电容式触摸控制器产品 MTCH2120
- Matter对AIoT的意义:连接AIoT设备开发人员指南
- 我国科学家建立生成式模型为医学AI训练提供技术支持
- Diodes 推出符合车用标准的电流分流监测器,通过高精度电压感测快速检测系统故障
- Power Integrations面向800V汽车应用推出新型宽爬电距离开关IC
- 打破台积电垄断!联电夺下高通先进封装订单
- Ampere 年度展望:2025年重塑IT格局的四大关键趋势
- 存储巨头铠侠正式挂牌上市:首日股价上涨超10%