
直流稳压电源是常用的电子设备,它能保证在电网电压波动或负载发生变化时,输出稳定的电压。一个低纹波、高精度的稳压源在仪器仪表、工业控制及测量领域中有着重要的实际应用价值。本设计给出的稳压电源的输出电压范围为0~18 V,额定工作电流为05 A,并具有"+"、"-"步进电压调节功能,其最小步进为005 V,纹波不大于10 mV,此外,还可用LCD液晶显示器显示其输出电压值。
1系统硬件设计
本系统由电源模块、调压模块、D/A转换模块、显示与键盘模块组成,图1所示是该直流数控稳压电源的结构原理框图。
11系统电源模块
在图1中,220 V市电经220 V/175 V变压器降压后得到的双175 V交流电压,经过一个全桥整流后可得到±21 V两路电压,其中一路+21 V电压供给调整管,作为电源对外输出,另一路经三端稳压器7815得到+15 V,再经过7805得到+5 V的电压。-21 V的电压则经三端稳压器MC7915得到-15 V电压,以作为系统本身的工作电源。
12电压调整模块
该稳压电源中的电压调整模块电路如图2所示。其中调整管采用复合管形式(由Q1、Q3组成),以实现大电流输出,由于该设计要求Iomax=05 A,Iomin=0 A,Pm=(Vimax-Vomin)Iomax=(18-0)×05=9 W,因此,本电路中的调整管可选TIP41(其Icmax=6 A>Iomax=05 A;Pcw=65 W>9 W,VCEOmax=100 V>18 V),当然,也可以选用2N5832。
电路的比较放大采用运放NE5534来设计,该器件具有共模抑制比高,响应速度快和压摆率高的特点。设计时可由R10、R11A、R12组成分压取样电路,并要求R10/(R11A+R12)=1/4,即当输出电压存在△UO=005 V时,△Ua=004 V,这与DAC的输出(10/255=004V=1LSB)变化一致。事实上,经过DAC转换以将电流转换为电压并进行电压放大后,即可将得到的10 V电压送比较器NE54534的同相端作为比较的基准电压。由于DAC0832是8位的D/A转换器,故有255步进。由此,当CPU控制DAC变化1LSB时,其对应Va的变化为004 V,故Uout的可调变化量为005 V(步长)。NE5534和Q1、Q3及取样电路构成的负反馈电路可实现调节输出电压的目的(稳压)。
电路中的过流保护由R9与02完成。当Io>07A时,VR9=R9Io≥1×07=07 V,此时Q2导通,并对调整管Q3的基极分流,使TIP41的导通电阻增大,输出电压降低,从而达到过流保护的目的。必要时,也可接入一红色发光二极管作为过流指示。该系统的短路保护采用保险管来完成。
13 D/A转换模块
本系统中的数模转换电路如图3所示。它由DAC0832、两级低漂移的运放μA714及VREF电路组成。DAC0832和运放U3A将CPU发出的8位二进制数据转换成0~-5 V的电压,然后经运放U3B反向放大2倍,以得到0~10 V电压。因此,该DAC的转换分辨率为10/(28-1)=004 V,即CPU输出给DAC的数据变化为1 Bit,DAC输出电压的变化为004 V。VREF电路为DAC提供基准电压,调节R5A,可使基准电压保持为5 V。
14显示与键盘模块
本电源中的电压显示与键盘电路如图4所示。当输出电压经R13限流和R14取样后,即可送如TLC2453-1进行模数转换。图4中的TLC2453-1为11通道、12位串行A/D转换器,具有12位分辨率,转换时间为10μs,有11个模拟输入通道,3路内置自测试方式,采样率为66 kbps,线性误差±1LSBmax,同时带有转换结果输出EOC,并可单、双极性输出。通过其可编程的MSB或LSB前导可编程输出数据长度。TLC2453-1的时钟频率选用41 MHz,电源输出电压Uo的取样信号从IN0输入,芯片的I/O时钟端、数据输入端、转换数据输出端、片选端分别与AT89S51单片机的P23、P22、P21、P20相连,然后经单片机处理后从P0口输出,在经排阻9A472J驱动后送字符型液晶显示屏SMC1602A显示输出电压。电路中AT89S51单片机的晶振频率选用12 MHz,P10~P13接调压按钮。增加电压时,粗调用按键S1,步进为1 V,细调用S2,步长为005 V;减小电压时,粗调用S3,步长为1 V,细调用S4,步调为005 V。这样,经过它们的有机结合便可将输出电压调节到所需的电压。
2系统软件设计
本电路的主程序流程如图5所示。
3 结束语
本文给出的直流数控稳压电源采用硬件组成的闭环反馈模式来进行稳压。电路中采用共模抑制比高、响应速度快、压摆率高的NE5534作比较器,从而提高了稳压的可靠性和精度;而采用12位A/D转换模块完成电压的测量,并用LCD液晶显示,则提高了测量的准确性和直观显示能力。本电路的开机预置输出电压为5 V,并可采用步进方式调节输出电压,最小步进为005 V。经过测试,本电路的输出电压范围可达到0~18V,额定电流可达到05A,可应用于实验教学与工程实践中。
你给的要求也太高了分还怎么少具体参数你自己改吧
图你自己去下面看
参考资料:>
可以啊,可以根据按键时间的长短,和高低电平来实现。比如,长按1s为高电平是一个功能,长按2s是另一个功能。 步骤为:先读取某个io口的值,若为高电平(if 按键高电平有效),则延时1s,最后再读取一次该io口的值,若继续为高电平,则调用你要的功能即可。
给你个8段LED测试:简易时钟(AVR汇编) 由M128移植到M16上实现,通过。(AVR Studio V411)
该系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。
系统使用板上8个LED数码管显示 时、分、秒、1/100秒 4个时段的数字,每个时段占用2个LED。
显示方式采用动态扫描方式,M16的PA口输出显示数字的7段码,PC口用于控制8个LED的位选。
M16使用外部(或内部)4MHz晶振。
使用M16片内的计数/定时器T1,设计T1工作在定时溢出中断方式,定时间隔为2ms,即T1每2ms产生一次中断。5次中断得到10ms的时间间隔,此时时钟的1/100秒加1,并相应进行时、分、秒的调整。
LED动态扫描方式的设计如下:在每2ms的时间中,点亮8个LED中的一个,显示其相应的数字(PC口的输出只有一位为低电平,选通一个LED,保持2ms)。因此PC口的输出值为0b11111110,每隔2ms循环右移,到0b01111111时8个LED各点亮一次,时间为16ms。在1秒钟内,循环8个LED的次数为625(1000/16),是人眼的滞留时间(25次/秒)的25倍,保证了LED显示亮度均匀,无闪烁。在程序设计中,在各个LED转换和7段码输出时,关闭位选信号(PC输出0b11111111),消除了显示的拖尾现象(消影功能)。
T1的设计:T1为16位定时器,系统时钟为4M,采用其64分频后的时钟作为T1的计数信号(寄存器TCCR1B = 0x03),一个计数周期为16us,2ms需要计125个(0x007D)。由于T1溢出中断发生在0xFFFF后下一个T1计数脉冲的到来(参见第二章关于定时器原理部分),因此T1的计数初始值为0xFF83=0XFFFF-0X007C(65535-124)。
;
;AVR汇编程序实例
;简易带1/100秒的24小时制时钟
;Mega16 4MHz
;
include "m16definc" ;引用器件I/O配置文件
;定义程序中使用的变量名(在寄存器空间)
def count = r18 ;循环计数单元
def position = r19 ;LED显示位指针,取值为0-7
def p_temp = r20 ;LED显示位选,其值取反由PC口输出
def count_10ms = r21 ;10ms计数单元
def flag_2ms = r22 ;2ms到标志
def temp = r23 ;临时变量
def temp1 = r24 ;临时变量
def temp_int = r25 ;临时变量(在中断中使用)
;中断向量区定义,flash程序空间$000-$029
org $000
rjmp reset ;复位处理
nop
reti ;IRQ0 Handler
nop
reti ;IRQ1 Handler
nop
reti ;Timer2 Compare Handler
nop
reti ;Timer2 Overflow Handler
nop
reti ;Timer1 Capture Handler
nop
reti ;Timer1 Compare-A Handler
nop
reti ;Timer1 Compare-B Handler
nop
rjmp time1_ovf ;Timer1 Overflow Handler
nop
reti ;Timer0 Overflow Handler
nop
reti ;SPI Transfer Complete Handler
nop
reti ;USART RX Complete Handler
nop
reti ;USART UDR Empty Handler
nop
reti ;USART TX Complete Handler
nop
reti ;ADC Conversion Complete Handler
nop
reti ;E2PROM Ready Handler
nop
reti ;Analog Comparator Handler
nop
reti ;Two-wire Serial Interface Handler
nop
reti ;IRQ2 Handler
nop
reti ;Timer0 Compare Handler
nop
reti ;SPM Ready Handler
nop
;程序开始
org $02A
reset:
ldi r16,high(RAMEND) ;设置堆栈指针高位
out sph,r16
ldi r16,low(RAMEND) ;设置堆栈指针低位
out spl,r16
ser temp
out ddra,temp ;设置PORTA为输出,段码输出
out ddrc,temp ;设置PORTC为输出,位码控制
out portc,temp ;PORTC输出$FF, 无显示
ldi position,0x00 ;段位初始化为1/100秒低位
ldi p_temp,0x01 ;LED第1位亮
;初始化时钟时间为11:59:55:00
ldi xl,low(time_buff) ;
ldi xh,high(time_buff) ;X寄存器取得时钟单元首指针
ldi temp,0x00
st x+,temp ;1/100秒 = 00
ldi temp,0x55
st x+,temp ;秒 = 55
ldi temp,0x59
st x+,temp ;分 = 59
ldi temp,0x11
st x,temp ;时 = 11
ldi temp,0xff ;T1初始化,每隔2ms中断一次
out tcnt1h,temp
ldi temp,0x83
out tcnt1l,temp
clr temp
out tccr1a,temp
ldi temp,0x03 ;4M,64分频 2ms
out tccr1b,temp
ldi temp,0x04
out timsk,temp ;允许T1溢出中断
sei ;全局中断允许
;主程序
main:
cpi flag_2ms,0x01 ;判2ms到否
brne main ;No,转main循环
clr flag_2ms ;到,请2ms标志
rcall display ;调用LED显示时间(动态扫描显示一位)
d_10ms_ok:
cpi count_10ms,0x05 ;判10ms到否
brne main ;No,转main循环
clr count_10ms ;10ms到,清零10ms计数器
rcall time_add ;调用时间加10ms调整
rcall put_t2d ;将新时间值放入显示缓冲单元
rjmp main ;转main循环
;LED动态扫描显示子程序,2ms执行一次,一次点亮一位,8位循环
display:
clr r0
ser temp ;temp = 0x11111111
out portc,temp ;关显示,去消影和拖尾作用
ldi yl,low(display_buff)
ldi yh,high(display_buff) ;Y寄存器取得显示缓冲单元首指针
add yl,position ;加上要显示的位值
adc yh,r0 ;加上低位进位
ld temp,y ;temp中为要显示的数字
clr r0
ldi zl,low(led_7 2)
ldi zh,high(led_7 2) ;Z寄存器取得7段码组的首指针
add zl,temp ;加上要显示的数字
adc zh,r0 ;加上低位进位
lpm ;读对应七段码到R0中
out porta,r0 ;LED段码输出
mov r0,p_temp
com r0
out portc,r0 ;输出位控制字,完成LED一位的显示
inc position ;调整到下一次显示位
lsl p_temp
cpi position,0x08
brne display_ret
ldi position,0x00
ldi p_temp,0x01
display_ret:
ret
;时钟时间调整,加001秒
time_add:
ldi xl,low(time_buff) ;
ldi xh,high(time_buff) ;X寄存器为时钟单元首指针
rcall dhm3 ;ms单元加1调整
cpi temp,0x99 ;
brne time_add_ret ;未到99ms返回
rcall dhm ;秒单元加1调整
cpi temp,0x60
brne time_add_ret ;未到60秒返回
rcall dhm ;分单元加1调整
cpi temp,0x60
brne time_add_ret ;未到60分返回
rcall dhm ;时单元加1调整
cpi temp,0x24
brne time_add_ret ;未到24时返回
clr temp
st x,temp ;到24时,时单元清另
time_add_ret:
ret
;低段时间清零,高段时间加1,BCD调整
dhm: clr temp ;当前时段清零
dhm1: st x+,temp ;当前时段清零,X寄存器指针加一
dhm3: ld temp,x ;取出新时段数据
inc temp ;加一
cpi temp,0x0A ;若个位数码未到$0A(10)
brhs dhm2 ;例如$58+1=$59,不须调整;
subi temp,0xFA ;否则做减$FA调整:例如$49+1-$FA=$50
dhm2: st x,temp ;并将调整结果送回
ret
;将时钟单元数据送LED显示缓冲单元中
put_t2d:
ldi xl,low(time_buff) ;
ldi xh,high(time_buff) ;X寄存器时钟单元首指针
ldi yl,low(display_buff)
ldi yh,high(display_buff) ;Y寄存器显示缓冲单元首指针
ldi count,4 ;循环次数 = 4
loop:
ld temp,x+ ;读一个时间单元
mov temp1,temp
swap temp1
andi temp1,0x0f ;高位BCD码
andi temp,0x0f ;低位BCD码
st y+,temp ;写入2个显示单元
st y+,temp1 ;低位BCD码在前,高位在后
dec count
brne loop ;4个时间单元->8个显示单元
ret
;T1时钟溢出中断服务
time1_ovf:
in temp_int,sreg
push temp_int ;保护状态寄存器
ldi temp_int,0xff ;T1初始值设定,2ms中断一次
out tcnt1h,temp_int
ldi temp_int,0x83
out tcnt1l,temp_int
inc count_10ms ;10ms计数器加一
ldi flag_2ms,0x01 ;置2ms标志到
pop temp_int
out sreg, temp_int ;恢复状态寄存器
reti ;中断返回
CSEG ;LED七段码表,定义在Flash程序空间
led_7: ;7段码表
db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
db 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
;字 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 共阴极 共阳极
; h g f E d c b a
;0 0 0 1 1 1 1 1 1 3FH C0H
;1 0 0 0 0 0 1 1 0 06H F9H
;2 0 1 0 1 1 0 1 1 5BH A4H
;3 0 1 0 0 1 1 1 1 4FH B0H
;4 0 1 1 0 0 1 1 0 66H 99H
;5 0 1 1 0 1 1 0 1 6DH 92H
;6 0 1 1 1 1 1 0 1 7DH 82H
;7 0 0 0 0 0 1 1 1 07H F8H
;8 0 1 1 1 1 1 1 1 7FH 80H
;9 0 1 1 0 1 1 1 1 6FH 90H
;A 0 1 1 1 0 1 1 1 77H 88H
;b 0 1 1 1 1 1 0 0 7CH 83H
;C 0 0 1 1 1 0 0 1 39H C6H
;d 0 1 0 1 1 1 1 0 5EH A1H
;E 0 1 1 1 1 0 0 1 79H 86H
;F 0 1 1 1 0 0 0 1 71H 8EH
DSEG ;定义程序中使用的变量位置(在RAM空间)
ORG $0060
display_buff: ;LED显示缓冲区,8个字节
BYTE 0x00 ;LED 1 位显示内容
BYTE 0x00 ;LED 2 位显示内容
BYTE 0x00 ;LED 3 位显示内容
BYTE 0x00 ;LED 4 位显示内容
BYTE 0x00 ;LED 5 位显示内容
BYTE 0x00 ;LED 6 位显示内容
BYTE 0x00 ;LED 7 位显示内容
BYTE 0x00 ;LED 8 位显示内容
org $0068
time_buff: ;时钟数据缓冲区,4个字节
BYTE 0x00 ;1/100s单元
BYTE 0x00 ;秒单元
BYTE 0x00 ;分单元
BYTE 0x00 ;时单元
程序实例采用比较规范标准的设计理念和风格,程序中已给出比较详细的注解。关于程序如何具体完成和实现系统的功能请读者仔细阅读程序,用心体会。下面仅对编写M16汇编程序时,在结构和语句使用上一些需要注意的方面加以介绍。
1.将程序中 *** 作最频繁以及需要特殊位处理的变量定义在AVR的32个工作寄存器空间,因为MCU对R0-R31的 *** 作仅需要一个时钟周期,而且功能强大。由于R0-R31的功能有不同,而且也仅有32个,所以程序员应认真考虑和规划这32个工作寄存器的使用。如尽量不要将变量放置在R26-R31中,因为这6个寄存器构成3个16位的X、Y、Z地址指针寄存器,应保留用于各种寻址使用。
2.M16有21个中断源,Flash程序存储器的低段空间为这21个中断向量地址。注意:M16的一个中断向量地址空间为2个字长度(4字节)。在中断向量处可使用长转移指令jmp转移(2字)或rjmp转移(1字)到中断服务程序,而一般的AVR的一个向量地址空间为1个字长度,使用rjmp转移指令。
出于提高系统可靠性的设计,对于系统中不使用的中断向量,应填充2个中断返回指令reti(每个reti占一个字)。在本程序中,为了程序的理解和阅读方便,使用rjmp和nop,以及reti和nop指令填充一个2个字长度的向量地址空间。
3.程序中使用X、Y、Z三个16位的地址指针寄存器,基于他们的一些指令有自动加(减)一的功能,以及先加(减)、后使用,和先使用、后加(减)的区别,在使用中应注意正确和灵活的使用。
4.由于LED的七段码对照表是固定不变的,程序中将LED的七段码表放置在Flash存储器中。对于Flash存储器的间址取数只能使用Z寄存器。由于程序存储器的地址是以字(双字节)为单位的,因此,16位地址指针寄存器Z的高15位为程序存储器的字地址,最低位LSB为“0”时,指字的低字节;为“1”时,指字的高字节。程序中使用伪指令db定义的七段码为一个字节,他保存在一个字的低字节处。如果定义字,应使用伪指令dw。
本例使用指令lpm读取Flash中的一个字节,因此在取七段码表的首地址时乘2(ldi zl,low(led_7 2)),将地址左移一位,Z寄存器的LSB为“0”,表示取该字的低位字节。
5.中断服务程序中,必须对MCU的标志寄存器SREG进行保护。在T1的溢出中断服务程序中,还需要对TCNT1的初值进行设置,以保证下一次中断仍为2ms。中断服务程序应尽量短小,因此在中断服务中,只将2ms标志置位和10ms加一计数,其它处理应尽量放在主程序中。
6.程序中定义了8个字节的显示缓冲区和4个字节的时钟数据缓冲区,分别存放8个LED所对应的显示数字和4个时间段的时间值(BCD码),这12个单元定义放置在M16的RAM中。M16的RAM单元应从0x0060开始,前面的地址分别对应的是32个工作寄存器、I/O寄存器,因此不要把一般的数据单元定义在小于0x0060的空间。
7.与使用db或dw伪指令在Flash空间定义常量不同的是,在RAM空间予留变量空间的定义应使用byte伪指令。byte伪指令的功能是定义变量的位置(予留空间),不能定义(填充)变量的值,变量具体的值是需要由程序在运行中写入的。而伪指令db、dw具有数据位置和值定义(填充)的功能。
在M16板上的连接方式:
使用短路片短路M16边上的:
PB5、PB6、PB7、RST(以上为ISP口);
VCC、GND;
X2、X1(使用内部震荡可不短路);
PD0、PD1(不同PC通信时可不连);
AVCC、GND(在M16的右边);
如使用外部晶体时:JN(连AVR)、J1(连4M);
用16根连接线:
PA0-->a
PA1-->b
PA2-->c
PA3-->d
PA4-->e
PA5-->f
PA6-->g
PA7-->p
PC0-->Jc3_8
PC1-->Jc3_7
PC2-->Jc3_6
PC3-->Jc3_5
PC4-->Jc3_4
PC5-->Jc2_3
PC6-->Jc2_2
PC7-->Jc2_1
首先使用ISP下载线对M16的熔丝位配置(建议使用BASCOM-AVR中的下载软件,非常直观):
禁止JTAG口,PORTC全部作为I/O使用;
使用外部晶体或内部RC振荡(根据需要);
允许BOD检测,门限电压40v;
RESET向量为0x0000(确省值为0X0000,一般不用改)。
本设计的温度测量及加热控制系统以 AT89S52 单片机为核心部件,外加温度采集电
路、键盘及显示电路、加热控制电路和越限报警等电路。采用单总线型数字式的温度传
感器 DS18B20,及行列式键盘和动态显示的方式,以容易控制的固态继电器作加热控制
的开关器件。本作品既可以对当前温度进行实时显示又可以对温度进行控制,以使达到
用户需要的温度,并使其恒定在这一温度。人性化的行列式键盘设计使设置温度简单快
速,两位整数一位小数的显示方式具有更高的显示精度。建立在模糊控制理论上的控制
算法,使控制精度完全能满足一般社会生产的要求。通过对系统软件和硬件设计的合理
规划,发挥单片机自身集成众多系统级功能单元的优势,在不减少功能的前提下有效降
低了硬件成本,系统 *** 控简便。
实验证明该温控系统能达到 02℃的静态误差,045℃的控制精度,以及只有 083%
的超调量,因而本设计具有很高的可靠性和稳定性。
关键 词: 单片机 恒温控制 模糊控制
1
引 言
温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于
冶金、化工、机械、食品等领域。温度控制是工业生产过程中经常遇到的过程控制,有
些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度
控制系统是非常有价值的。
硬件 系统的设计
1、电路总体原理框图
温度测量及加热系统控制的总体结构如图 1 所示。系统主要包括现场温度采集、实
时温度显示、加热控制参数设置、加热电路控制输出、与报警装置和系统核心 AT89S52
单片机作为微处理器。
图 1:系统总体原理框图
温度采集电路以数字量形式将现场温度传至单片机。单片机结合现场温度与用户设
定的目标温度,按照已经编程固化的模糊控制算法计算出实时控制量。以此控制量控制
固态继电器开通和关断,决定加热电路的工作状态,使水温逐步稳定于用户设定的目标
值。在水温到达设定的目标温度后,由于自然冷却而使其温度下降时,单片机通过采样
回的温度与设置的目标温度比较,作出相应的控制,开启加热器。当用户需要比实时温
度低的温度时,此电路可以利用风扇降温。系统运行过程中的各种状态参量均可由数码
管实时显示。
2、温度采集电路的设计
温度采集电路模块如图 2 示。DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、
温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。其中 DQ 为数字信号输
入/输出端;GND 为电源地;VDD 为外接供电电源输入端。
2
图 2:温度采集电路
DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展
的二进制补码读数形式提供,以 00625℃/LSB 形式表达,其中 S 为符号位。
这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进
制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘
于 00625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1
再乘于 00625 即可得到实际温度。
3、键盘和显示的设计
键盘采用行列式和外部中断相结合的方法,图 3 中各按键的功能定义如下表 1。其
中设置键与单片机的 INT 0 脚相连,S 0 −−S 9 、YES、NO 用四行三列接单片机 P0 口,REST
键为硬件复位键,与 R、C 构成复位电路。模块电路如下图 3:
表 1:按键功能
按键 键名 功能
REST 复位键 使系统复位
RET 设置键 使系统产生中断,进入设置状态
S 0 −−S 9 数字键 设置用户需要的温度
YES 确认键 用户设定目标温度后进行确认
NO 清除键 用户设定温度错误或误按了 YES 键后使用
3
图 3 键盘接口电路
显示采用 3 位共阳 LED 动态显示方式,显示内容有温度值的十位、个位及小数点后
一位。用 P2 口作为段控码输出,并用 74HC244 作驱动。P10—P12 作为位控码输出,
用 PNP 型三极管做驱动。模块电路如下图 4:
4、加热控制电路的设计
图 4 显示接口电路
用于在闭环控制系统中对被控对象实施控制,被控对象为电热杯,采用对加在电热
杯两端的电压进行通断的方法进行控制,以实现对水加热功率的调整,从而达到对水温
控制的目的。对电炉丝通断的控制采用 SSR-40DA 固态继电器。它的使用非常简单,只
要在控制端 TTL 电平,即可实现对继电器的开关,使用时完全可以用 NPN 型三极管接
成电压跟随器的形式驱动。当单片机的 P13 为高点平时,三极管驱动固态继电器工作
接通加热器工作,当单片机的 P13 为低电平时固态继电器关断,加热器不工作。控制
电路图如下图 5:
4
图 5 加热控制电路
5、报警及指示灯电路的设计
当用户设定的目标温度达到时需用声音的形式提醒用户,此时蜂鸣器为三声断续的
滴答滴答的叫声。在本系统中我们为用户设计了越限报警,当温度低于用户设置的目标
温度 10 度或高于 10 度时蜂鸣器为连续不断的滴答滴答叫声。当单片机 P17 输出高电
平时,三极管导通,蜂鸣器工作发出报警声。P17 为低电平时三极管关断,蜂鸣器不
工作。
D1 为电热杯加热指示灯,P15 低电平有效;D0 为检测到 DS18B20 的指示,高电平
有效;D10 为降温指示灯,低电平有效。报警及指示灯电路如下图 6 示:
图 6 报警及指示灯电路
5
软 件系统的设计
系统的软件由三大模块组成:主程序模块、功能实现模块和运算控制模块。
1、主程序模块
主程序主要完成加热控制系统各部件的初始化和实现各功能子程序的调用,以及实
际测量中各个功能模块的协调在无外部中断申请时,单片机通过循环对外部温度进行实
时显示。把设置键作为外部中断 0,以便能对数字按键进行相应处理。主程序流程图如
下图 7:
6
图 7 主程序流程图
7
2、功能实现模块
以用来执行对固态继电器及电热杯的控制。功能实现模块主要由中断处理子程序、
温度比较处理子程序、键盘处理子程序、显示子程序、报警子程序等部分组成。键盘显
示及中断程序流程图如下图 8:
3、运算控制模块
图 8 键盘、显示、中断 子程序流程图
该模块由标度转换、模糊控制算法,及其中用到的乘法子程序。
31 标度转换
16
式中 A 为二进制的温度值, A0 为 DS18B20 的数字信号线送回来的温度数据。
8
单片机在处理标度转换时是通过把 DS18B20 的信号线送回的 16 位数据右移 4 位得
到二进制的温度值。其小数部分通过查小数表的形式获取。程序流程图如下图 9:
开始
将28H低4位与29H高4位组合成
一个字节
将合成的字节(整数部分)送29H
单元
将29H单元低4位送A
给DPTR赋常数表格2首地址
将查到的数值(即小数部分)送
30H单元
结束
32 模糊控制算法子程序
图 9 标度转换子程序流程图
该系统为一温度控制系统,由于无法确切确定电炉的物理模型,因而无法建立其数
学模型和传递函数。加热器为一惯性系统,我们采用模糊控制的方法,通过多次温度测
量模糊计算当用户设定目标温度时需提前关断加热器的温度,利用加热器自身的热惯性
使温度上升到其设定温度。每隔 5 摄氏度我们进行一次温度测量,并当达到其温度时关
断加热器记录下因加热器的热惯性而上升的温度值。从而可以建立热惯性的温度差值
表,在程序中利用查表法,查出相应设定温度对应的关断温度。通过实验数据我们可以
看出,当水温从 0℃加热到 50℃这段温度区域,其温度惯性曲线可近似成线性的直线,
水温从 50℃加热到 100℃这段温度惯性曲线可近似成另一条线性的直线段。通过对设置
的目标温度与温控系统监测温度进行差值处理就可近似的求出单片机的提前关断温度。
程序流程图如图 10:
9
4.源程序见附录[2]
图 10 模糊控制算法子程序流程图
设计 总结
我们的温度控制系统是基于 AT89S52 单片机的设计方案,她能实时显示当前温度,
并能根据用户的要求作出相应的控制。此系统为闭环系统,工作稳定稳定性高,控制精
度高,利用模糊控制算法使超调量大大降低。软件采用模块化结构,提高了通用性。本设
计的目的不仅仅是温度控制本身,主要提供了单片机外围电路及软件包括控制算法设计
的思想,应该说,这种思想比控制系统本身更为重要。
1、设计所达到的性能指标
11 温控系统的标度误差
我们将标准温度计和温控系统探头放人同一容器中,选定若干不同的温度点,记
录下标准温度计显示的温度和温控系统显示的温度进行比较。测量数据如下表 2 所示:
表 2 标准温度计测量的温度和温控系统显示的温度
标准温度计和温控系统显示的温度(℃)
标准温度计 169 477 578 630 728 851 909
温控系统 165 480 583 629 730 855 905
差值比较 -04 03 05 01 02 04 -04
标度误差 15%
10
12 温控系统的静态误差
通过测量在不同的温度点同标准温度的温度差来确定温控系统的静态误差。其测量
数据如下表 3:
表 3 标准温度和温控系统显示的温度
标准温度和温控系统显示的温度(℃)
标准温度 260 370 460 600 700 830
系统显示值 257 364 461 596 700 833
差值 -03 -06 -01 -04 0 03
静态误差 018℃
13 温控系统的控制精度
通过设定不同的温度值,使加热器加热,待温度稳定时记录各温度点的温度计数据
和温控系统的显示值。其记录数据如下表 4:
温度计读数和温控系统显示的温度(℃)
设定温度
值 200 280 350 450 550 750 870 910
系统显示
值 205 277 344 451 541 749 861 912
差值 05 -03 -06 01 -09 -01 -09 02
控制精度 045℃
超调量 083%
2、结果分析论述
我们的系统完全满足设计要求,静态误差方面可以达到 018℃的误差,在读数正确
方面与标准温度计的读数误差为 15%,对一般的工业生产完全可以采用我们的设计。
该系统具有较小的超调值,超调值大约为 083%左右。虽然超调为不利结果,但另
一方面却减小了系统的调节时间。从其数据表可以看出该系统为稳定系统。
3、设计方案评价
31 优点
在硬件方面:本设计方案采用了单总线型数字式的温度传感器,提高了温度的采集
精度,节约了单片机的口线资源。方案还使用仅一跟口线就可控制的美国生产的固态继
电器 SSR—40DA 作加热控制器件,使设计简单化,且可靠性强。在控制精度方面,本设
计在不能确定执行机构的数学模型的情况下,大胆的假设小心的求证,利用模糊控制的
算法来提高控制精度。
在软件方面:我们采用模块化编程,思路清晰,使程序简洁、可移植性强。
32 缺点
本设计方案虽然采用了当前市场最先进的电子器件,使电路设计简单,但设计方案
造价高。本系统虽然具有较小的超调量,但加大了调节时间。如果需要更高的控制精度,
则我们的模糊控制将不适应,需修改程序。
11
33 方案的改进
在不改变加热器容量的情况下,为减小调节时间,可以实行在加热快达到设定温度
时开启风扇来减小热惯性对温度的影响的措施。在控制精度上可采用先进的数字 PID
控制算法,对加热时间进行控制,提高控制精度。
可以改进控制系统使能同 PC 联机通信,以利用 PC 的图形处理功能打印显示温度曲
线。AT89S52 串行口为 TTL 电平,PC 串行口为 RS232 电平,使用一片 MAX232 作为电
平转换驱动。
参考 文献
[1] 李广弟 单片机基础 北京:北京航空航天大学出版社,2001
[2] 王福瑞 单片微机测控系统设计大全 北京:北京航空航天大学出版社,1997
[3] 赵茂泰 智能仪器原理及应用(第 2 版) 北京:电子工业出版社,2004
[4] 赖寿涛 微型计算机控制技术 北京:机械工业出版社,2000
[5] 沙占友 模拟与数字万用表检测及应用技术 北京:电子工业出版社 1999
12
附 录
附录[1]使用说明书
按 键功能说明
数字键:按 SET 键后,按相应的数字键(0~9)可对温度进行设置,所设置的温
度将实时显示在 LED 显示器上;
SET 键:按 SET 键可对温度的十位、个位以及小数部分进行设置;
YES 键:设置好温度后按 YES 键,系统将据你所设置的温度(须大于当前实际
温度)对水进行加热;
NO 键:若误按了 SET 键,或对输入有误,可按 NO 键进行取消;
RST 键:对系统进行复位。
指示 灯及报警器说明
红 灯:加热状态标志;
绿 灯:温度传感器正常工作标志;
蓝 灯:保温状态标志;
报警器:功能①当水温达到预设值时报警提醒;
功能②当水温达到或超越上、下限时报警提示。
13
附录[2]设计总电路
14
附录[3]程序清单
TEMPER_L EQU 29H ;用于 保存读出温度的低 8 位
TEMPER_H EQU 28H ;用于 保存读出温度的高 8 位
FLAG EQU 38H ;是否 检测到 DS 18B20 标志位
DAYU EQU 44H ;设温 >实温
XIYU EQU 45H ;设温 <实温
DEYU EQU 46H ;设温 =实温
GAOLE EQU 47H ;水温 高于最高温度
DILE EQU 48H ;水温 低于最低温度
A_bit EQU 79h ;数码 管个位数存放内存位置
B_bit EQU 7Ah ;数码 管十位数存放内存位置
C_BIT EQU 78H ;数码 管小数存放内存位置
ORG 0000H
AJMP START
ORG 0003H
AJMP PITO
ORG 0030H
START: CLR P17
CLR P13
CLR P15
SETB P16
MOV R4, #00H
MOV SP, #60H ;确立堆栈区
MOV PSW, #00H ;
MOV R0, #20H ;RAM 区首地址
MOV R7, #60H ;RAM 区单元个数
ML: MOV @R0, #00H
INC R0
DJNZ R7, ML
CLR IT0
MAIN:LCALL GET_TEMPER ;调用读温度子程序 进行温度显示,这里我们考
;虑用网站提供的两位数码管来显示温度
;显示范围 00 到 99 度,显示精度为 1 度
;因为 12 位转化时每一位的精度为 00625 度,
;我们不要求显示小数所以可以抛弃 29H 的低 4
;位将 28H 中的低 4 位移入 29H 中的高 4 位,这
;样获得一个新字节,这个字节就是实际测量获
;得的温度
LCALL DISPLAY ;调用数码管显示 子程序
JNB 00H, MAIN
CLR 00H
15
MOV A, 38H
CJNE A, #00H, SS
AJMP MAIN
SS: LCALL GET_TEMPER
LCALL DISPLAY;调用 数码管显示子程序
LCALL BIJIAO
LCALL XIAOYU
LCALL JIXIAN
JNB DEYU ,LOOP
CLR P13 ;关加热器
SETB P16 ;关 蓝灯
SETB P07 ;关风扇
CLR DEYU
LCALL GET_TEMPER
LCALL DISPLAY
AJMP TT2
LOOP:JNB DAYU ,TT
CLR DAYU
SETB P13
SETB P16
SETB P07
CLR P17
LCALL GET_TEMPER
LCALL DISPLAY
AJMP TT2
TT:JNB XIYU, TT2
CLR XIYU
CLR P07
CLR P16
CLR P13
CLR P17
LCALL GET_TEMPER
LCALL DISPLAY
TT2:MOV A, 29H
CLR C
CJNE A, 50H, JX
MOV A , 30H
CLR C
CJNE A, 51H, JIA1
AJMP YS2
JIA1:JC JX
MOV A, 51H
MOV 52H, A
ADD A, #2
16
MOV 52H, A
CLR C
MOV A, 30H
CJNE A, 52H, JIA2
JIA2:JNC JX
YS2:SETB P17
CLR P16
MOV R5, #20H
YS:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS
CLR P17
SETB P16
MOV R5, #20H
YS1:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS1
YS3:SETB P17
CLR P16
MOV R5, #20H
YS0:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS0
CLR P17
SETB P16
MOV R5, #20H
YS01:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS01
YS4:SETB P17
CLR P16
MOV R5, #20H
YS02:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS02
CLR P17
SETB P16
MOV R5, #20H
YS03:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS03
JX: MOV A, 29H
CJNE A, 31H, JX00
JX01:SETB P17
17
CLR C
AJMP LAST
JX00:JC JX01
CLR P17
CJNE A,
JX02:SETB P17
CLR C
AJMP LAST
JX03:JNC JX02
32H,
JX03
CLR P17
LAST:LCALL GET_TEMPER
LCALL DISPLAY
AJMP SS
;常数表格区
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8 H,80H ;0-8
DB 90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ,0CH ;9,A,B,C,D,E,F,灭,p
TAB1:DB40H,79H,24H,30H,19H,12H,02H,78H,00H ,10H, ;0--9
TAB2:DB 0, 0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, ;小数点
;1ms 延时程序
; 中断服务程序
; 完成按键识别,键值求取,按键实时显示 等功能;
;
PITO: PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
SET B 00H
MAIN1: MOV R7 , #03H ;显示位数为 2 位
MOV R0, #7AH
MOV 78H, #00H
MOV 79H, #00H
MOV 7AH, #00H
KK: LCALL DIR
LCALL KEY1
LOOP1:CJNE A, #11, LOOP2
AJMP LAST0
LOOP2:CJNE A, #12, LOOP3
LJMP LAST3
LOOP3: CJNE A, #10, L4
MOV A, #00H
L4: MOV @R0, A
LCALL DIR
DEC R0
DJNZ R7, KK
18
SETB 01H
LAST0:JNB 01H, KK
LOOP4:LCALL KEY1
CJNE A, #12, LOOP5
AJMP LAST3
LOOP5:CJNE A, #11, LOOP4
LAST1:LCALL DIR
LCALL MUN
LCALL JD
LCALL BIJIAO
LAST3:POP PSW
POP ACC
RETI
;精度控制 子程序
JD: PUSH ACC
PUSH PSW
CLR C
MOV A, 38H
MOV 50H, A
MOV A, 39H
MOV 51H, A
CJNE A, 29H, L001
L001:JC LAST02 ;设温<实温,则跳出
MOV A, 29H
MOV 41H, A
MOV A, 38H
CJNE A, #25, L002
L003:CLR C ;0 <T<25
SUBB A, 41H
CJNE A, #3, L004
L005:MOV A, 30H
ADD A, #5 ;0<T<25, 差值小于 3 度
DA A
JNB ACC4, L0051
ANL A, #0FH
SETB C
L0051:MOV 39H, A
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
LAST02: AJMP LAST2
L004:JC L005
MOV A, 39H
19
SUBB A, #0
DA A
MOV 39H, A
JNC L0041
DEC 38H
L0041:MOV A, 38H
SUBB A, #2 ;0<T<25, 差值大 于 3 度
MOV 38H, A
AJMP LAST2
L002:JC L003
CJNE A, #50, L006
L007:CLR C ;25<T<5 0
SUBB A, 41H
CJNE A, #3, L008
L009:MOV A, 30H
ADD A, #1
DA A
JNB ACC4, L0091
ANL A, #0FH
SETB C
L0091:MOV 39H, A
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
L008:JC L009
MOV A, 39H
SUBB A, #0
MOV 39H, A
MOV A, 38H
SUBB A, #2
MOV 38H, A
AJMP LAST2
L006:JC L007
CJNE A, #65, L010
L011:CLR C
SUBB A, 41H
CJNE A, #3, L012
L013:MOV A, 30H
ADD A, #2
JNB ACC4, L00131
ANL A, #0FH
SETB C
L00131:MOV 39H, A
20
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
L012:JC L013
MOV A, 39H
SUBB A, #0
MOV 39H, A
MOV A, 38H
SUBB A, #2
MOV 38H, A
AJMP LAST2
L010:JC L011
CJNE A, #90, L016
L017:CLR C
SUBB A, 41H
CJNE A, #2, L014
L015:MOV A, 30H
ADD A, #0
JNB ACC4, L00151
ANL A, #0FH
SETB C
L00151:MOV 39H, A
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
L014:JC L015
CLR C
MOV A, 38H
SUBB A, #1
MOV 38H, A
AJMP LAST2
L016:JC L017
LAST2:POP PSW
POP ACC
RET
;键扫描
KEY1:LCALL KS1 ;键 扫描
JNZ LK1
LCALL DIR
AJMP KEY1
LK1:LCALL DIR
LCALL DIR
21
LCALL KS1
JNZ LK2
LCALL DIR
AJMP KEY1
LK2:MOV R2, #0FEH ;确定键值
MOV R4, #01H
MOV A, R2
LK4:MOV P0, A
NOP
MOV A, P0
JB ACC3, LONE
MOV A, #00H
AJMP LKP
LONE:JB ACC4 , LTWO
MOV A, #03H
AJMP LKP
LTWO:JB ACC5, LTHR
MOV A, #06H
AJMP LKP
LTHR:JB ACC6, NEXT5
MOV A, #09H
AJMP LKP
NEXT5:INC R4
MOV A, R2
JNB ACC2 ,KND
RL A
MOV R2, A
AJMP LK4
KND:AJMP KEY1
LKP: ADD A, R4
PUSH ACC
LK3:LCALL DIR
LCALL KS1
JNZ LK3
POP ACC
RET
KS1: PUSH PSW
MOV P0, #78H
NOP
MOV A, P0 ;判断有无键按下
CPL A
ANL A, #78H
POP PSW
22
RET
;求设置温度的二 进制代码,值保存在 38H 单元
MUN: PUSH PSW
MOV R0, #7AH ;求键值
MOV A, @R0
SWAP A
DEC R0
ADD A, @R0
MOV R1, A
ANL A, #0F0 H
SWAP A
MOV B, #10
MUL AB
MOV R2, A
MOV A, R1
ANL A, #0FH
ADD A, R2
MOV 38H, A
MOV R0, #78H
MOV 39H, @R0
POP PSW
RET
;比较实际温度和设置温度的大小 并设置相应的标志位
BIJIAO:MOV A, 29 H ;实际温度
摘自百度知道
以上就是关于直流稳压电源 (画出完整的电路图并写出总结报告)全部的内容,包括:直流稳压电源 (画出完整的电路图并写出总结报告)、惠普b0lsb一0604一00打印机从新安装还需要安装驱动器吗、52单片机,矩阵按键怎么一个键控制一个灯(亮灭),主函数里要怎么加程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)