太阳能热水器控制电路设计
一、系统设计
1.设计原理
太阳能热水器自动控制电路采用AT89S52单片机作为控制核心,外围加蜂鸣器控制电路、数码显示电路、水位检测电路、电机控制电路、按键电路、温度检测电路等。数码管实时切换显示当前温度与当前液位,当液位过高时,蜂鸣器报警,并且电机反转模拟排水过程;当液位过低时,蜂鸣器报警,并且电机正转模拟进水过程。本系统设计简单,成本低,性能优良,具有一定的稳定性和实用性。
三、硬件电路设计
1.基本原理框图
图一:原理框图
(1)太阳能热水器控制装置主要组成
由CPU、显示电路、按键电路、蜂鸣器电路、电机电路、液位检测电路、温度检测电路、电源电路组成,如图一。
(2)太阳能热水器控制装置的工作原理
接通电源后,显示当前水位,水位被分为16个点。并且显示当前温度。液位显示与温度的显示切换进行。当水位显示低于或等于1时,蜂鸣器报警,并且电机正转,表示进水;当水位显示高于或等于15时,蜂鸣器报警,并且电机反转,表示排水。液位检测利用CD4051
2.各部分电路原理
(1)最小系统
最小系统电路如图二所示。
图二:最小系统
(2)显示电路
采用LED数码管显示,该方案具有实现容易、发光亮度大、驱动电路简单等优点,其可靠性也优于LCD的显示。。
由6个数码管和6个74LS164组成,采用串行静态显示的方法。将数码管的8个输入端与74LS164的输出端Q0~Q7相连。P1.0和74LS164的CLK连接,作为时钟;P1.4接74LS164的A端,作为显示数据的输入端。显示电路如图三所示。
图三:显示电路
但是使用74LS164串显会出现消隐的问题。为了消除消隐,那么就必须在硬件上与软件上结合来消除消隐的问题。消隐电路如图四所示。软件上,在传数据时,先传一个高电平,直到数据传完再传送一个低电平即可。
图四:消隐电路
(3)按键电路
键按下后,进行温度及液位检测的切换,也可不使用。按键电路如图五所示。
图五:按键电路
(4)蜂鸣器电路
以Q51的基极作为蜂鸣器控制信号的输入端与单片机I/O口相连,主要由蜂鸣器、9013与9014两个三极管及5.1K偏置电阻组成。当输入端为高电平时,Q51导通,Q52截止,蜂鸣器回路开路,蜂鸣器不响;当输入端为低电平时,Q51截止,Q52导通,蜂鸣器回路闭合,蜂鸣器发出响声。蜂鸣器电路如图六所示。
图六:蜂鸣器电路
(5)电机电路
控制信号从IN端输入并经前级缓冲后送入片内控制器,然后由控制部分处理并驱动晶体管,最后由OUT端输出方波信号以控制电机的运行。触发使能端口(CE)的作用是分别对两个通道的输出进行控制,当CE端为低电平时,无论有无输入控制信号,输出端OUT始终呈高阻抗状态。因此,要使FAN8200控制器输出工作正常,器件的触发使能端必须为高电平。当CE为高电平时,IN1为1时,电机正转;IN1为0时电机反转。电机电路如图七所示。
图七:电机电路
(6)液位检测电路
液位检测控制电路,由两片CD4051与CD4066构成,但是由于考虑到成本,并且所设计的电路I/O口使用并不是太多,所以,可以将CD4066省略,仅仅用两片CD4051即可实现功能。它是一种单片、COMS、8通道开关。该芯片由DTL/TTL-COMS电平转换器,带有禁止端的8选1译码器输入,分别加上控制的8个COMS模拟开关TG组成。
例如当检测到液位在端点4位置时,0、1、2、3、4点被没过,与公共端之间形成水电阻,由于水电阻阻值非常的笑,所以这几点的电平被拉低。此时就可以确定在ABC点读到的数为“100”此时就可以通过单片机计算得出液位的高度。液位检测电路如图八所示。
图八:液位检测电路
(7)温度检测电路
采用DS18B20数字温度传感器。它是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。
根据设计要求,DS18B20硬件电路的链接非常简单,仅一根电源线,一根地线和一根数据线即可。温度检测电路如图九所示。
图九:温度检测电路
(8)电源电路
由于电源电压为5V,所以电路中省去了稳压电源部分的电路,直接使用电源电压即可。在电源与地之间加滤波电容,稳定输入到芯片上的电源电压。电源电路如图十所示。
图十:电源电路
四、软件设计
2.I/O口分配
I/O口
P3.0
P3.1
P3.3
P3.5
P1.1
分配
74LS164数据端
74LS164时钟
电机转向控制端
蜂鸣器控制端
4051-A
I/O口
P1.2
P1.3
P1.4
P1.6
P1.7
分配
4051-B
4051-C
4051-INH
K1
K2
3.软件流程图
EMBED Visio.Drawing.11
五、实现功能
1.液位检测
将水尺放进水中,通电之后,显示当前的水位。最低点水位为1,最高点水位为16。当水位低于点2时,显示H 02的同时蜂鸣器响,电机正转,模拟进水过程;直到水位高于点2后,蜂鸣器停止发声,电机不转。当高于水位点15时,显示H 15的同时蜂鸣器响,电机反转,模拟排水过程;直到水位低于点15后,蜂鸣器停止发生,电机不转。
2.温度检测
实时监测当前温度,与水位切换显示。例如显示为C 27.6。
七、参考文献
[1] 阎石 《数字电子技术》
[2] 胡汉才.《单片机原理及接口技术》.清华大学出版社,1996
[3] 童诗白.《模拟电子技术基础》。高等教育出版社,2001
附录一 程序
;标志
;32H水位标志
;BAOZHI BIT 33H;显示标志;33H=0显水位,33H=1显温度
;DINGS BIT 34H;34H=0定时,34H=1计数
;alarmflag BIT 24H;蜂鸣器报警标志
;74164A BIT P3.0;164数据端
;CLK BIT P3.1;164时钟
;CE BIT P1.5;电机控制端为1
;M1 BIT P3.3;P3.3=1电机正转,反之反转。
;SPK BIT P3.5;蜂鸣器控制
;LA BIT P1.1;4051点A
;LB BIT P1.2;4051点B
;LC BIT P1.3;4051点C
;4051INH BIT P1.4;4051的INH端
;K1 BIT P1.6;按键1(水位检测状态)
;K2 BIT P1.7;按键2(温度检测状态)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#60H
CLR P1.5;电机不转
MM3: MOV 50H,#20H;水位显示时长
MM33: LCALL SWEI;水位检测
DJNZ 50H,MM33
LCALL XIANC;显C
SJMP MM1
MM1: MOV 50H,#10H;温度显示时长
MM2 : LCALL WDCJ;温度检测
DJNZ 50H,MM2
LCALL XIANH;显H
SJMP MAIN
WDCJ: LCALL GET_TEMP;采集温度值以16进制数,低位放R7,高位放R6
CHENGFA: MOV R3,#0AH;0AH乘以温度值R7R6,结果在R2R3R4R5中,R2最高字节
MOV R2,#00H
LCALL MULD
CHUFA: MOV R6,#00H;被除数在R2R3R4R5中,R2最高字节,除数在R6R7,R6高字节,结果在R2R3。
MOV R7,#10H
MOV R2,#00H
MOV R3,#00H
LCALL DIVD
MOV 20H,R3;R3低字节
MOV 21H,R2
ACALL YASO;压缩16进制数变成压缩10进制数
ACALL L11; 压缩--非压缩
ACALL DAIM; 代码--段码
ACALL XIAN; 显示
LCALL XIANC
LCALL XIAOSH
LCALL DEL2
RET
GET_TEMP:CLR PSW.4
CLR PSW.3;设置工作寄存器当前所在的区域
CLR EA;使用DS1820一定要禁止任何中断产生
LCALL INT ;调用初始化子程序
MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令
MOV A,#44H
LCALL WRITE ;送入温度转换命令
LCALL INT ;温度转换完全,再次初始化DS1820
MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令
MOV A,#0BEH
LCALL WRITE ;送入读温度暂存器命令
LCALL READ
MOV R7,A ;读出温度值低字节存入R7
LCALL READ
MOV R6,A ;读出温度值高字节存入R7
SETB EA
RET
INT: CLR EA ;初始化DS1820
L0: CLR P3.4 ;DS1820总线为低复位电平
MOV R2,#200
L1: CLR P3.4
DJNZ R2,L1 ;总线复位电平保持400US
SETB P3.4 ;释放DS1820总线
MOV R2,#30H
L4: DJNZ R2,L4 ;释放DS1820总线保持60US
CLR C;清存在信号
ORL C,P3.4
JC L0;存在吗?不存在则重新来。
MOV R6,#80H
L5: ORL C,P3.4
JC L3
DJNZ R6,L5
SJMP L0
L3: MOV R2,#240
L2: DJNZ R2,L2
RET
WRITE:CLR EA
MOV R3,#8
WR1: SETB P3.4
MOV R4,#8
RRC A
CLR P3.4
WR2: DJNZ R4,WR2
MOV P3.4 ,C
MOV R4,#20
WR3: DJNZ R4,WR3
DJNZ R3,WR1
SETB P3.4
RET
READ: CLR EA
MOV R6,#8;连续读8个BIT
RE1: CLR P3.4 ;读前总线保持为低
MOV R4,#4
NOP
SETB P3.4 ;开始读,总线释放
RE2: DJNZ R4,RE2;持续8US
MOV C,P3.4 ;从臘S1820总线读得一个BIT
RRC A;
MOV R5,#30
RE3: DJNZ R5,RE3;持续60US
DJNZ R6,RE1;读下一个BIT
SETB P3.4 ;重新释放DS1820总线
RET
YASO: MOV R0, #20H;压缩16进制数变成压缩10进制数
MOV R7, #02H
MOV R1, #28H
LCALL LY1
RET
LY1: MOV A, R0
MOV R5, A
MOV A, R1
MOV R6, A
MOV A, R7
INC A
MOV R3, A
CLR A
LY2: MOV @R1, A
INC R1
DJNZ R3, LY2
MOV A, R7
MOV B, #08H
MUL AB
MOV R3, A
LY3: MOV A, R5
MOV R0, A
MOV A, R7
MOV R2, A
CLR C
LY5: MOV A, @R0
RLC A
MOV @R0, A
INC R0
DJNZ R2, LY5
MOV A, R6
MOV R1, A
MOV A, R7
MOV R2, A
INC R2
LY4: MOV A, @R1
ADDC A, @R1
DA A
MOV @R1, A
INC R1
DJNZ R2, LY4
DJNZ R3, LY3
RET
L11: MOV R1,#10H;压缩10进制数变成非压缩十进制数
MOV R2,#03H
MOV R0,#28H
L12: MOV A, @R0
ANL A, #0FH
MOV @R1, A
INC R1
MOV A, @R0
SWAP A
ANL A, #0FH
MOV @R1, A
INC R0
INC R1
DJNZ R2, L12
RET
DAIM: MOV R2, #05H;代码变段码码
MOV R0, #10H
MOV R1, #20H
L12F: MOV A, @R0
ADD A, #06H
MOVC A, @A+PC
MOV @R1, A
INC R0
INC R1
DJNZ R2, L12F
RET
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB 00H,40H,73H,03H,18H,23H,1CH,3DH,76H,0FH,1EH,38H
XIAN: CLR