白炽灯调光控制恒温箱.docx
- 文档编号:9131250
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:32
- 大小:428.35KB
白炽灯调光控制恒温箱.docx
《白炽灯调光控制恒温箱.docx》由会员分享,可在线阅读,更多相关《白炽灯调光控制恒温箱.docx(32页珍藏版)》请在冰豆网上搜索。
白炽灯调光控制恒温箱
恒温箱设计
1、设计要求:
(1)温度采集传感器采用热电阻或热电偶,或一体化数字温度传感器DS18B20。
(2)控制灯泡亮度或发热量,采用继电器开关控制或用可控硅平滑控制。
(3)采用单片机或PLC作为控制器。
(4)采用LED或LCD或PC机的液晶显示器作为显示器,同时显示给定温度和实际温度。
(5)采用自制按键或PC机的键盘作为温度给定值输入。
(6)恒温箱实际温度达到给定值时(误差±1℃)需声光提示,声音时延5秒后停止。
(7)恒温箱最高温度≤60℃。
(8)系统操作流程是:
1)确认系统各硬件连线就绪,无安全隐患;
2)系统上电;
3)设置温度给定值后,启动系统工作,系统进入温度自动控制工作状态。
4)系统工作完毕后,若不需系统工作,则可关闭系统电源,查看并确保系统无安全隐患后可离开。
2、系统设计方案
整个控制过程采用单回路负反馈控制,如图2.1,利用传感器测出恒温箱内温度,将测得的温度和给定值比较,若实际温度低于给定值,则通过控制器控制白炽灯调光,对恒温箱加热,直至达到给定温度。
图2.1系统单闭环框图
图2.2系统结构框图
整个系统结构组成如图2.2,使用单片机作为控制器,220V交流经变压器、整流电路和光耦,在每个电压过零时刻产生中断信号提供单片机控制相位的时间基准;单片机通过控制光耦控制晶闸管导通,以此控制白炽灯;传感器实时获取恒温箱温度,便于单片机调节和显示;当温度达到给定时,通过报警提示。
3、硬件设计
3.1控制器
本设计的控制器选用STC的51单片机,由于控制中主要用到外部中断和定时器,已足够满足控制要求。
51单片机最小系统如图3.1.
图3.151单片机最小系统
3.2温度传感变送
根据控制要求,恒温箱温度≦60℃,温度误差±1℃,故可以选择DS18B20作为本设计的温度传感器,其测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
DS18B20与单片机连接如图3.2。
图3.2DS18B20与单片机连接图
DS18B20初始化
总线拉低并保持480us~960us以发出(TX)一个复位脉冲,然后释放总线,进入接收状态(RX),单总线由4.7K上拉电阻拉到高电平。
当DS18B20探测到I/O引脚上的上升沿后,等待15-60us,然后发出一个由60-240us低电平信号构成的存在脉冲,控制器以此判断初始化成功。
DS18B20写时序
写周期最少为60微秒,最长不超过120微秒。
写周期一开始做为主机先把总线拉低至少1微秒表示写周期开始。
随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。
若主机想写1,在一开始拉低总线电平至少1微秒后就释放总线为高电平,一直到写周期结束。
而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为写1,若采样期内总线为低电平则为写0。
DS18B20读时序
读时隙是从主机把单总线拉低之后,在至少1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。
主机在一开始拉低总线至少1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0,采样期内总线为高电平则确认为1。
完成一个读时序过程,至少需要60us才能完成。
访问DS18B20的事件序列(流程如图3.3)如下:
图3.3DS18B20测温流程
第一步:
初始化
第二步:
ROM命令(紧跟任何数据交换请求)
第三步:
DS18B20功能命令(紧跟任何数据交换请求)
每次对DS18B20的访问都必须遵循这样的步骤来进行,如果这些步骤中的任何一个丢失或者没有执行,则DS18B20将不会响应。
除了ROM搜索命令[F0h]和报警搜索命令[ECh]之外。
需要用到的ROM命令
跳过ROM[CCh]:
主设备可以使用该命令来同时向总线上的所有从设备发送不要发送任何的ROM编码命令。
例如,主设备通过向总线上所有的DS18B20发送跳过ROM命令后再发送温度转换[44h]命令,则所有设备将会同时执行温度转。
需要用到的功能命令
温度转换[44h]:
该命令为初始化单次温度转换。
温度转换完后,温度转换的数据存储在暂存寄存器的2个字节长度的温度寄存器中,之后DS18B20恢复到低功耗的闲置状态。
读取暂存寄存器[BEh]:
该命令使得主设备可以读取暂存寄存器中存储的值。
数据从Byte 0的低位开始传送直到第9个字节(Byte 8 - CRC)读取完毕。
3.3白炽灯调光电路
白炽灯调光电路由两部分组成,一部分是控制白炽灯发光电路,另一部分是过零检测电路。
3.3.1白炽灯发光控制电路
白炽灯发光控制电路主要由晶闸管和光耦组成,晶闸管的通断控制白炽灯的亮灭,光耦将控制回路和主回路隔离开,控制器通过控制光耦的通断进而控制晶闸管的导通,当单片机输出一定宽度的高电平时,光耦导通一小段时间,使晶闸管门极有驱动电流,晶闸管导通。
电路图如图3.4,其中,晶闸管两端并联的RC电路可抑制浪涌电压,保护晶闸管。
图3.4moc3021控制晶闸管电路图
晶闸管
本设计所用的白炽灯为220V/60W,可以算出其工作电流为0.27A左右,考虑到开灯瞬间电流较大,取10倍工作电流,晶闸管额定电流3A足够。
又因为峰值电压为330V,取2~3倍峰值电压,晶闸管电压应在660V~990V。
综合考虑各种因素,本设计选择BCR5KM-14L型双向晶闸管,额度电压700V,额定电流5A。
如图3.4,晶闸管有3个端子,如图,K端为阴极,A端为阳极,G端为门极。
当晶闸管承受正向电压时,仅在门极有触发电流时导通,承受反向电压时不会导通。
晶闸管一旦导通,门极就是去控制作用,只有外加反向电压或电流接近零时才会关断。
光耦
本设计中,白炽灯发光电路中的光耦选择moc3021。
Moc3021为三端双向可控驱动输出,
图3.5晶闸管电气符号
适合用于直流控交流的隔离场合,输出电压最大400V、电流100mA。
驱动电流最大15mA,5mA即可使光耦正常工作。
moc3021原理图如图3.5。
图3.6moc3021原理图
3.3.2过零检测电路
过零检测电路用于检测交流电的过零点,从而可以控制导通相位,以此来控制白炽灯的亮度变化。
其主要由变压器、整流电路和光耦组成,220V交流经变压器降压送入整流电路,整流电路是由四个二极管组成的桥式整流,整流后送光耦控制端,每当电压过零时,在输出端就会有变化,以此得到交流电过零点,并将电压上升下降沿作为单片机外部中断输入。
其电路图如图3.7,其中变压器为DB电源变压器,220VAC变双9VAC输出。
图3.7过零检测原理图
光耦选用TP521,其发光二极管能承受最大电流为50mA,输出最大电流50mA,输出端最大电压55V。
TP521原理图如图3.8。
图3.8TP521原理图
3.4显示与报警
显示使用开发板上的8个八段数码管实现,报警电路也使用开发板上的LED实现,此处不做详述。
4、软件设计
软件设计主要包括DS18B20测温程序、INT0程序响应电压过零、T0程序做交流电相位控制、显示程序和报警程序。
测量温度与给定比较,再根据偏差结合交流电过零点,通过定时器控制相位,同时实时显示温度信息,当达到给定时给出提示。
程序总体流程图如图4.1.
图4.1程序总体流程图
主程序如下:
voidmain()
{
INT0_init();//INT0初始化
TimerInit();//T0初始化
P11=1;
EA=0;
display_index=0;
for(h=0;h<5;h++)//开机显示"8888"
{LED8[h]=8;}
for(h=0;h<1000;h++)
{DisplayScan();}
LED8[4]=0x0C;
Delay750ms();
DS18B20_reset();//DS18B20初始化,开机先转换一次
write_byte(0xcc);//SkipROM跳过ROM
write_byte(0x44);//发转换命令
while
(1)
{
work_temp(read_temp());//获取并处理温度
while(h<60000)
{
DisplayScan();//显示温度
h++;
}
h=0;
}
}
DS18B20初始化流程图如图4.2,程序如下:
voidDS18B20_reset(void)
{
bitflag;
DQ=0;//拉低DQ
Delay500us();//480us~960us
EA=0;
DQ=1;//拉高
Delay70us();//15-60us
flag=DQ;
EA=1;
while(flag)//DQ=0¸复位成功,否则DQ=1
{
flag=DQ;//再读DQ
}
Delay240us();
DQ=1;
}
DS18B20写字节流程图如图4.3,程序如下:
图4.2DS18B20初始化流程图
voidwrite_byte(u8val)
{
u8i;
for(i=8;i>0;i--)
{
EA=0;
DQ=0;_nop_();_nop_();_nop_();_nop_();//4us
if(val&0x01==1)DQ=1;//最低位移出,若为1,15us内拉高
Delay70us();//70us
DQ=1;//拉高
EA=1;
_nop_();_nop_();
val=val/2;//右移一位
}
DQ=1;
}
DS18B20读字节流程图如图4.4,程序如下:
图4.3DS18B20写字节流程图
u8read_byte(void)
{
u8i;
u8value=0;
for(i=8;i>0;i--)
{
value>>=1;
EA=0;
DQ=0;_nop_();_nop_();_nop_();_nop_();
DQ=1;_nop_();_nop_();_nop_();_nop_();//4us
if(DQ)value|=0x80;
Delay70us();//70us
EA=1;
}
DQ=1;
return(value);
}
图4.4DS18B20读字节流程图
温度数值计算与显示流程图如图4.5,程序如下:
voidwork_temp(u16tem)
{
u16t;
wendu=tem*0.0625;//实际温度
tem=wendu*10+0.5;//需要显示一位小数
LED8[0]=tem/1000;
t=tem%1000;
LED8[1]=t/100;
t=t%100;
LED8[2]=t/10+32;//带小数点
t=t%10;
LED8[3]=t;
LED8[6]=2;//给定温度十位
LED8[7]=5;//给定温度个位
t1=LED8[6]*10+LED8[7]-wendu;//温度偏差
}
图4.5温度数值计算与显示流程图
定时器相控调温流程图如图4.6,程序如下:
图4.6定时器相控调温流程图
voidE_INT0()interrupt0
{
if(t1>5)
{
TL0=0x24;//1500us,12MHz
TH0=0xFA;
TR0=1;
}
if((t1<=5)&&(t1>0.5))
{
TL0=0x48;//3000us,12MHz
TH0=0xF4;
TR0=1;
}
if(t1==0)
{
TL0=0xA8;//7500us,12MHz
TH0=0xE4;
TR0=1;
P17=0;
}
if(t1<0)P11=1;
}
voidE_T0()interrupt1
{
TR0=0;
if(P11)
{
P11=0;
TL0=0x0C;//500us,12MHz
TH0=0xFE;
TR0=1;
}
else
{
P11=1;
}
}
5、调试记录及结论
晶闸管电路在调试时,发现总是不能正常工作,发送触发信号后,灯始终不亮,用万用表测后,发现光耦输出无电流,想了很久也不知道是为何,后面仔细重头检查电路,才发现晶闸管电路有个地方没焊好。
重新焊接好后,可以正常控制白炽灯发光。
过零检测电路一开始也不能用,发现光耦TP521没能正常工作,输出端没有上升下降沿,反正我是没想通为何会这样,后面我将输出端接的5V直流和上拉电阻去掉后,竟然可以正常工作了!
程序上的问题主要出在DS18B20相关的上面,在编写DS18B20的程序时,一开始感觉比较复杂,就没有仔细去学习,直接复制了很多网上的程序,可是都不能使传感器正常工作。
经几番失败后,在认真分析DS18B20的工作方式之后,发现时序是最重要的,然后针对时序程序进行修改后,可以正常测温。
在加入控制交流电相位的程序后,我发现在工作一段时间后,温度会出现错误,上网了解后,发现可能是由于使用了中断,破坏了DS18B20时序,在DS18B20时序中加入适当的屏蔽中断使问题得到了解决。
按键程序中,一开始检测按键动作间隔太长,使按键程序无法工作,然后又修改太短了,导致按一下变化很大,经几次修改,使得按键能正常按一下程序动作一下。
6、心得体会
经过本次课程设计,还是学到了很多东西,温习巩固了学过的知识,同时锻炼了自身动手实践能力。
在编写DS18B20的程序时,一开始直接复制了很多网上的程序,可是都不能使传感器正常工作,在认真分析DS18B20的工作方式之后,发现时序是很最重要的,然后针对时序程序进行修改后,可以正常测温。
这个经历让我明白不能盲目照搬网上的东西,最重要的是掌握问题关键的地方,再结合别人的经验。
在电路调试过程中发现了许多问题,一是51单片机IO口驱动能力不同和驱动能力有限,在与外地啊光耦连接时需要选择IO口或加驱动电路;二是设计时考虑不周到,以致电路分布不合理,导致一些焊接和使用的不便,以后再进行电路设计时应考虑好布局。
还有就是一些细节问题,比如在使用定时器中断时会破坏DS18B20时序,刚开始程序运行一会就会出现温度错误,后来在DS18B20时序中加入适当的屏蔽中断使问题得到了解决。
又如需要进行各种器件选型,我们要考虑的因素就很多了,需要我们全面的考虑每一个关键指标,任何一点马虎可能导致器件不能用或损坏。
理想中很好地东西,实施起来总会出现各种意想不到的问题,解决这些问题正是实践带给我们提升的地方。
7、参考文献
[1]袁孟.基于DS18B20的温控系统设计[J].电子世界,2016(14):
148-148.
[2]李明哲.基于单片机AT89C51的数字温度计设计[J].科研,2016(3):
00034-00034.
[3]龚国俊.晶闸管的电路原理及其调压电路分析[J].硅谷,2014(10):
43-43.
[4]王兆安,刘进军.电力电子技术[M].5版.北京:
机械工业出版社,2009.5.
[5]佚名.单片微机原理与接口技术:
基于STC15W4K32S4系列单片机[M].电子工业出版社,2015.
8、附件
#include
#include
typedefunsignedcharu8;
typedefunsignedintu16;
u8LED8[8];//数码管缓存
u8display_index;//显示位索引
sbitDQ=P1^0;//温度输入口
u16h,temp;
floatwendu;//温度转化结果
floatt1=1;
u8codet_display[]={//8段数码管标准字库
//0123456789ABCDEF
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black-HJKLNoPUtGQrMy
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
//0.1.2.3.4.5.6.7.8.9.-1
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
u8codeT_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位码
u8datatemph,templ;//读取温度暂存
sbitINT0=0xB2;
/*************HC595IO口定义**************/
sbitP_HC595_SER=P4^0;//pin14SERdatainput
sbitP_HC595_RCLK=P5^4;//pin12RCLkstore(latch)clock
sbitP_HC595_SRCLK=P4^3;//pin11SRCLKShiftdataclock
/****************向HC595发送一个字节******************/
voidSend_595(u8dat)
{
u8i;
for(i=0;i<8;i++)
{
dat<<=1;
P_HC595_SER=CY;
P_HC595_SRCLK=1;
P_HC595_SRCLK=0;
}
}
/**********************显示扫描函数************************/
voidDisplayScan(void)
{
Send_595(~T_COM[display_index]);//输出位码
Send_595(t_display[LED8[display_index]]);//输出段码
P_HC595_RCLK=1;
P_HC595_RCLK=0;//锁存输出数据
if(++display_index>=8)display_index=0;
}
voidDelay500us()//@12.000MHz
{
unsignedchari,j;
i=6;
j=211;
do
{
while(--j);
}while(--i);
}
voidDelay70us()//@12.000MHz
{
unsignedchari,j;
i=1;
j=206;
do
{
while(--j);
}while(--i);
}
voidDelay240us()//@12.000MHz
{
unsignedchari,j;
i=3;
j=202;
do
{
while(--j);
}while(--i);
}
voidDelay750ms()//@12.000MHz
{
unsignedchari,j,k;
_nop_();
_nop_();
i=35;
j=51;
k=182;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
/****************DS18B20初始化************************/
voidDS18B20_reset(void)
{
bitflag;
DQ=0;//拉低DQ
Delay500us();//480us~960us
EA=0;
DQ=1;//拉高
Delay70us();//15-60us
flag=DQ;
EA=1;
while(flag)//DQ=0¸复位成功,否则DQ=1
{
flag=DQ;//再读DQ
}
Delay240us();
DQ=1;
}
/****************DS18B20写字节************************/
voidwrite_byte(u8val)
{
u8i;
for(i=8;i>0;i--)
{
EA=0;
DQ=0;_nop_();_nop_();_nop_();_nop_();//4us
if(val&0x01==1)DQ=1;//最低位移出,若为1,15us内拉高
Delay70us();//70us
DQ=1;//拉高
EA=1;
_nop_();_nop_();
val=val/2;//右移一位
}
DQ=1;
}
/****************DS18B20读字节************************/
u8read_byte(void)
{
u8i;
u8value=0;
for(i=8;i>0;i--)
{
value>>=1;
EA=0;
DQ=0;_nop_();_nop_();_nop_();_nop_();
DQ=1;_nop_();_nop_();_nop_();_nop_();//4us
if(DQ)value|=0x80;
Delay70us();//70us
EA=1;
}
DQ=1;
return(value);
}
/****************DS18B20测温************************/
u16read_temp()
{
DS18B20_reset();
write_byte(0xcc);
write_byte(0x44);//发转换命令
DS18B20_reset();
write_byte(0xcc);//
write_byte(0xbe);
temp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 白炽灯 调光 控制 恒温箱