单片机实验恒温冰箱.docx
《单片机实验恒温冰箱.docx》由会员分享,可在线阅读,更多相关《单片机实验恒温冰箱.docx(15页珍藏版)》请在冰豆网上搜索。
单片机实验恒温冰箱
迷你恒温冰箱
一课程设计目的
1通过对本课程的设计加深对AVR单片机的认识、了解以及掌握
2、掌握JETC串口进行数据传输的应用,并学会使用外部芯片辅助项目设计。
3加深对硬件电路的了解以及掌握,掌握对模数转换部分以及对中断部分的应用。
4、通过此次课程设计将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力。
5培养团队意识,锻炼分工合作以及协调能力。
二设计原理
利用DS18B20芯片实现温度探测和温度信号输入,利用3个七段数码管显示温度。
当温度高于临界温度15°时,单片机则输出信号,通过继电器控制半导体制冷片及风扇工作,使冰箱实现制冷功能。
三用途与功能
1、利用DS18B20芯片实现温度探测和温度信号输入,显示室内温度,并随室内温度变化而变化。
2、利用3个七段数码管显示温度,温度精确度为0.5。
3、当外界温度高于15度时,利用单片机输出信号,通过继电器控制半导体制冷片及风扇工作,使冰箱实现制冷功能。
4、制冷片不工作即冰箱不工作时绿灯亮,工作时红灯亮。
四设计功能模块
迷你恒温冰箱的功能主要有4个模块构成:
探测模块,显示模块,主控模块以及制冷驱动模块
。
设计功能模块图及各功能模块分析:
设计功能模块图
1探测模块
对于温度传感器,理想情况下应该能够随时高效地感应到所在整个空间内的温度变化。
鉴于性价比高的考虑,我们选择了DS18B20作为本系统中的温度传感器。
DS18B20是DALLAS半导体器件公司生产的可编程一线数字温度传感器芯片,它仅用一线就可完成与单片微控制器的硬件接口,具有使用简单方便、分辨率高的优点。
2显示模块
我们使用3位共阴7段数码管输出温度数据,因测量温度精确到0.5°
2.3主控模块
我们直接选用Atmel公司的ATmaga16L单片机作为主控模块。
Mega16是高性能、低功耗的8位AVR微处理器,具有先进的RISC结构,内部集成两个具有独立预分频器和比较器功能的8位定时器/计数器和一个具有预分频器、比较功能和捕捉功能的16位定时器计数器。
可通过JTAG对MCU进行程序烧写及仿真。
内置晶振,使用方便。
2.4制冷驱动模块
我们选用的是TEC12705半导体制冷片,通过5腿继电器控制其工作。
四电路设计图
六程序流程图
七程序代码
#include
#include
unsignedchards1820_reset(void);
unsignedintds1820_read_temp(void);
flashunsignedcharled_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flashunsignedcharposition[4]={0x0E,0x0D,0x0B,0x07};//初始化中断
intled_buf[4];
unsignedcharpoist=0;
#defineDQ_INDDRA&=~(1<#defineDQ_OUTDDRA|=(1<#defineDQ_CLRPORTA&=~(1<#defineDQ_SETPORTA|=(1<#defineDQ_RPINA&(1<unsignedcharm;
unsignedcharflag;/*中断标志缓存*/
/*
延时函数
延时时间:
iX10+16uS。
CPU频率为:
1MHz。
*/
voiddelay_10us(unsignedchari){
if(i==0)
{
return;
}
while(i--)
{
NOP();
NOP();
NOP();
NOP();
}
}
/*DS18B20复位函数*/
unsignedchards1820_reset(void){
unsignedchari;
flag=SREG;/*中断保护*/
CLI();/*关闭中断*/
DQ_OUT;
DQ_CLR;
delay_10us(49);/*延时500uS(480-960)*/
DQ_SET;
DQ_IN;
delay_10us(7);/*延时80uS*/
i=DQ_R;
delay_10us(49);/*延时500uS(保持>480uS)*/
if(flag&0x80){/*恢复中断*/
SEI();
}
if(i)
{
return0x00;
}
else
{
return0x01;
}
}
/*DS18B20读取函数*/
unsignedchards1820_read_byte(void)
{
unsignedchari;
unsignedcharvalue=0;
flag=SREG;/*中断保护*/
CLI();/*关闭中断*/
for(i=8;i!
=0;i--){
value>>=1;
DQ_OUT;
DQ_CLR;
NOP();/*延时4uS*/
NOP();
NOP();
NOP();
DQ_SET;
DQ_IN;
NOP();/*延时10uS*/
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
if(DQ_R)
{
value|=0x80;
}
delay_10us(5);/*延时60uS*/
}
if(flag&0x80)
{/*恢复中断状态*/
SEI();
}
return(value);
}
/*DS18B20字节写入函数*/
voidds1820_write_byte(unsignedcharvalue){
unsignedchari;
flag=SREG;/*中断保护*/
CLI();/*关闭中断*/
for(i=8;i!
=0;i--)
{
DQ_OUT;
DQ_CLR;
NOP();/*延时4uS*/
NOP();
NOP();
NOP();
if(value&0x01)
{
DQ_SET;
}
delay_10us(7);/*延时80uS*/
DQ_SET;/*位结束*/
value>>=1;
}
if(flag&0x80)
{/*恢复中断状态*/
SEI();
}
}
/*启动DS1820转换*/
voidds1820_start(void){
ds1820_reset();
ds1820_write_byte(0xCC);/*保留地址*/
ds1820_write_byte(0x44);/*启动转换*/
}
/*DS8B20读取温度*/
unsignedintds1820_read_temp(void)
{
unsignedinti;
unsignedcharbuf[9];
ds1820_reset();
ds1820_write_byte(0xCC);/*保留地址*/
ds1820_write_byte(0xBE);/*读取温度*/
for(i=0;i<9;i++)
{
buf[i]=ds1820_read_byte();
}
i=buf[1];
i<<=8;
i|=buf[0];
returni;
}
voiddelay_ms(unsignedinti)
{
intj;
for(;i;i--)
{
for(j=999;j;j--);
}
}
#pragmainterrupt_handlertimer0_comp_isr:
iv_TIMER0_COMP//中断函数
voidtimer0_comp_isr(void)8
{
display();
}
display()//显示函数
{
PORTD=position[poist];
PORTB=led_7[led_buf[poist]];
if(m>=15)
PORTD|=0x30;
else
PORTD|=0x40;
if(poist==1)PORTB=led_7[led_buf[poist]]|0x80;
delay_ms
(2);
if(++poist>=3)
poist=0;
}
voidmain(void)
{
unsignedinti;
DDRA=0x0F;/*方向输入*/
PORTA=0xFF;
DDRC=0xFF;
PORTC=0x00;/*打开上拉*/
DDRB=0xFF;/*方向输出*/
PORTB=0xFF;/*电平设置*/
DDRD=0xFF;
PORTD=0x00;
SEI();//中断
TCCR0=0x0B;
TCNT0=0x00;
OCR0=0x8B;
TIMSK=0x02;
delay_ms(200);
ds1820_reset();/*D18B20复位*/
while
(1)
{
ds1820_start();/*启动一次转换*/
delay_ms(15);/*等待转换结束*/
i=ds1820_read_temp();/*读取温度数值*/
i=(i*10)/16;/*温度数值处理*/
led_buf[3]=i/1000;/*将显示信息加载到显示缓存区*/
i=i%1000;
led_buf[2]=i/100;
i=i%100;
led_buf[1]=i/10;
led_buf[0]=i%10;
m=led_buf[2]*10+led_buf[1];
}
}
八程序运行图
图一
图2
九实物图及现象
开始时为设定温度0度,绿灯亮,风扇不转,制冷片不工作
显示室内温度30.0度,红灯亮,制冷片风扇工作
显示室内温度30.0度,红灯亮,制冷片风扇工作
十项目花费
材料
花费(元)
总计(元)
电路板
51
DS18B20温度探测芯片
5
4段七段数码管
半导体制冷片
40
散热风扇
3
继电器
3
电阻及电线
发光二极管
三极管
十一参考文献
(1)网站资料
(2)电子资料
DS18B20数据手册
(5)书籍资料
(1)《AVR单片机嵌入式系统原理与应用实践》马潮编
北京航空航天大学出版社
(2)《C语言程序设计》谭浩强编清华大学出版社
(3)单片机原理与技术接口李茂奎等编著山东大学出版社
十二总结与心得体会
相比电工实验来说这个要难很多,虽说原理之类的东西之前学到了,但由于是自己设计,需添加什么功能,或者是怎么实现都觉得很困难。
第一天看了看老师给的例子,又查了查网上别人做的东西,虽说感觉到有困难但是看到别人做出的好多好多好玩的东西还是蛮期待的,想象自己做出来的会是什么样的。
最后我们把范围缩小到两个课题上:
“音乐喷泉”,“迷你恒温冰箱”。
由于音乐喷泉需要小电机和能喷水的东西,我们决定用汽车风窗洗涤器来代替,我们在一家修摩托的地方找到了,由于价格比较贵,决定放弃。
于是我们开始寻找另一个的器材,器材方面也费了很大精力,第一是中发只有一家卖半导体制冷片的,而两次去老板都去进货啦,还好我们在知春电子城买到了。
由于之前对这些器材不是很了解,不知道继电器的原理,还好找到了一个卖继电器的叔叔,他很了解,解决了我们的难题。
由于我们的实验是在温度传感器上的拓展,在网上查了些资料,因而电路连接方面问题不是很大,只是在软件方面我们学的是C++,虽说与C是通的,但是还是有些约定缩成的东西不是很了解,有C方面书籍的帮助,最后还是完成啦。
虽说时间很短但是收获很大,最重要的是小组之间的合作沟通和解决问题的能力。
硬件方面比如数码管共阴共阳问题及继电器的连接还有制冷片的用法等等,虽说在连得过程中走了很多弯路,但是正因为如此才会理解的更加深刻。
小组合作过程中虽说有时会有些分歧,但是最后两人都明白后问题就解决了。
同时实验中锲而不舍的精神还是很重要的,有时遇到一些困难可能两三天都没法解决,这时就需要不断探索,直到找到解决的方法或者判断出这么做是行不通的。
感谢这次小学期,收获了许多知识,收获了许多快乐。