Professional Documents
Culture Documents
Control de Temperatura
Profesor:
Jurez, Jos
Alumno:
LIO, Guillermo Gustavo
Legajo: 7620
Introduccin
El proyecto consiste en un control de temperatura con modulacin
de fase. Se realiz una modulacin de fase con la salida PWM
detectando el cruce por cero con el Input Capture. Con ello se
movi un opto acoplador que actu sobre un triac que ser quien
alimente finalmente a la resistencia calefactora.
Se uso un sensor de temperatura y se acondicion la seal para
poder usar el conversor A/D del micro en todo su rango para
obtener un valor proporcional a la temperatura.
Se implement un control del tipo ventanas. Segn en que
ventana se encuentre, ser el porcentaje de potencia que se le
entregar a la resistencia.
Tiene pulsadores que me permiten cambiar de manual a
automtico, otros para subir y bajar la potencia de salida cuando
el equipo se encuentra en manual y si esta en automtico con
estos pulsadores podr variar el Set Point.
Los datos son enviados por el puerto serie y levantados por una
interfas que me muestra el valor del Set Point, la variable de
proceso y la potencia entregada a la resistencia calefactora.
Descripcin General
Integrados utilizados:
*Se utiliz un micro de la familia HC08 (MC68HC908GP32CP).
*Integrado de comunicacin MAX 232.
*Sensor de temperatura LM35.
*Amplificador para la seal de temperatura LM308.
*Opto acoplador MOC 3041.
*Triac de salida BTA16.
*Regulador LM 7805 y LM78L09.
2
Entradas-Salidas:
*1 entradas analgica conectada al conversor A/D del micro
(sensor de temperatura).
*4 entradas digitales (pulsadores).
*1 salida PWM
*1 entrada del Input Capture.
*Salidas digitales para indicaciones de estado.
*Salida y entrada de TX-RX para el manejo de la comunicacin
serie RS-232.
220V
DIAGRAMA EN BLOQUES
FUENTE
INTERFAZ
USUARIO
MICRO
PLACA DE
POTENCIA
ACONDICIONAMIENTO
DE SEAL
SENSOR DE
TEMPERATURA
RESISTENCIA CALEFACTORA
Hard
Cruce por cero:
Para detectar el cruce por cero, se coloc un diodo 1N4007 con
una resistencia en la entrada de 9VAC, obteniendo una
rectificacin de media onda. Con un diodo zener de 5V se trunco
este semi ciclo para obtener una onda casi cuadrada y poder entrar
al Input Capture del micro. Realizando una deteccin por flanco
de subida y bajada obtenemos los cruces por cero de nuestra seal
de alterna.
Amplificacin seal del sensor LM35:
El sensor de temperatura LM35 nos entrega 10mV/C y como
mximo soporta 150C. O sea que a lo sumo nos entregar 1.5V a
fondo de escala. Para utilizar todo el rango el conversor A/D del
micro, se tuvo que amplificar la seal 3.3 veces. Se utiliz un
LM308 que es fuente nica y se lo aliment con 9V. Se tuvo
problemas de inestabilidad con la amplificacin de la seal y se
logr solucionarlo perfectamente con filtros en la realimentacin
y en la salida.
Salida de potencia:
Se utiliz un triac BTA16 para manejar la resistencia calefactora
y se aisl la parte de alta potencia con la de baja mediante un opto
acoplador MOC3041. Este se lo conect a la salida PWM del
micro para poder lograr la modulacin de fase.
Comunicacin serie:
Se utiliz un MAX 232 para la comunicacin serie a travs de la
PC y se colocaron leds de indicacin de envi y recepcin de
datos.
Fuente:
Se utiliz un trafo de 220/9 VAC para bajar la tensin. Luego se
coloc un LM 7805 para alimentar al micro y dems integrados y
tambin se coloc un LM78L09 para alimentar el operacional.
Placa programadora:
Se utiliz una placa programadora casera que permite trabajar
sobre la placa que esta en construccin. Esta permite mediante
una llave cambiar a modo RUN o PROG agilizando mucho la
tarea de pruebas del programa en mi placa.
Circuito
10
FLUJO DEL
PROGRAMA
INICIALIZACION
GENERAL
MEDICION
TEMPERATURA
BARRER
TECLADO
CAMBIO
TECLAS?
NO
SI
ESTA EN MANUAL
O AUTOMATICO?
SUBIR O BAJAR SP
TECLAS = $01 => SUBIR SP
TECLAS = $02 => BAJAR SP
(FIJARSE QUE ESTE ENTRE 00-FF)
TECLAS = $03 => CAMBIAR A MANUAL
11
ESTA EN MANUAL
O AUTOMATICO?
DIF = SP - VAR
SI
C = 1?
% POT = 0
NO
NO
% POT = DIF * 12
% POTENCIA
=> RESITENCIA
MUESTRO
% POTENCIA
MUESTRO
TEMPERATURA
MUESTRO
SET POINT
12
SI
% POT = 100%
13
14
16
17
18
Conclusiones
Este proyecto nos permiti utilizar casi todo lo que este micro nos
brinda, como el conversor A/D, las interrupciones (captura y
comparacin), PWM, perifrico SCI para comunicarnos, puertos
de salida, entrada. Adems se trabajo con electrnica para poder
amplificar la seal de la temperatura, mover la salida de potencia,
comunicarse a travs del puerto serie, fuente, etc.
Se lograron casi todas las metas que hacan a este proyecto un
controlador de temperatura, menos obtener una buena seal de
19
20
Anexo:
Cdigo del programa:
***************************************
*******CONTROL DE TEMPERATURA****
*******POR MODULACION DE FASE*****
***************************************
*********REALIZADO: 01/12/07***********
***************************************
;Definicion de ctes de pre-copilacion
$SEtNOT EMULADOR
$SETnot WATCH_DOG
$SET CLOCK_8M
$SETnot CLOCK_4M9
****************************************
****************************************
;Definicion de ctes simbolicas
RAM_Start
EQU $0040
ROM_Start
EQU $8100
Vector_Start EQU $FFDC
****************************************
****************************************
;Comienzo de la memoria RAM
org
RAM_Start
****************************************
;Archivos incluidos de variables y ctes
21
$include 'gpgtregs.inc'
$include 'SCI_Var.asm'
$include 'Variables.asm'
$include 'TIM_var.asm'
****************************************
****************************************
;Definicion de variables y ctes
****************************************
End_RAM:
****************************************
;Comienzo de la memoria ROM
org
ROM_Start
****************************************
;Archivos incluidos de funciones
$include 'SCI_Fun.asm'
$include 'Funciones.asm'
$include 'ADC_Fun.asm'
$include 'TIM.asm'
****************************************
****************************************
;Inicializacion del main
Main_Init:
mov #$FF,DDRD
mov #$F8,DDRC
mov #$FE,ALTO
mov #$FE,BAJO
22
mov
mov
mov
mov
mov
#$01,Var_Tmp
#$C8,Var_SP
#$80,Var_Pot
#$01,Var_SCI
#$01,Rot_SCI
mov #$FF,Ret_Tec_Val
mov #$40,Ret1_Val
mov Ret1_Val,Ret1
mov #$40,Ret2_Val
mov Ret2_Val,Ret2
mov ALTO,Bandera
mov BAJO,Bandera+1
mov #$20,Dif_Valor
mov #$08,Dif_Factor
mov #$FF,Ret3
clr
clr
clr
clr
PORTD
PORTC
Fase
Dif
RTS
*****************************************
*****************************************
;Configuracion del Micro
Main_Prog:
RSP
$IF WATCH_DOG
MOV #$00,config1 ; Enable COP
$ELSEIF
MOV #$01,config1 ; disable COP
$ENDIF
mov
$IF CLOCK_8M
;------------------------ Valores para el Clock Generator
Module
;
fBUS=8Mhz
;
--------------------------------------bclr 5,PCTL
; PLLON=0
mov #$02,PCTL
; P=0 ; E=2
mov #$D1,PMSL
; N=3D1
mov #$03,PMSH
;
mov #$D0,PMRS
; L=D0
bset 7,PBWC
; Auto = 1
bset 5,PCTL
; PLLON=1
bset 4,PCTL
; BCS=1
$ENDIF
$IF CLOCK_4M9
;------------------------ Valores para el Clock Generator
Module
;
fBUS=4.9152Mhz
--------------------------------------bclr 5,PCTL
; PLLON=0
mov #$02,PCTL
; P=0 ; E=2
mov #$58,PMSL
; N=258
mov #$02,PMSH
;
mov #$80,PMRS
; L=80
bset 7,PBWC
; Auto = 1
24
bset 5,PCTL
bset 4,PCTL
; PLLON=1
; BCS=1
$ENDIF
jsr Main_Init
jsr Init_SCI
jsr ADC_Init
jsr Init_TIM
cli
*******************************************
*******************************************
;Lazo Principal del programa
Main_loop:
jsr Varrido
jsr Vida
Case_Principal:
lda Teclas_Nuevo
cmp #$01
beq Man_Auto
cmp #$02
beq Incrementa
cmp #$04
beq Decrementa
bra Case_Principal_01
;Cambia de Manual a Auto o viceversa
Man_Auto:
lda Fase
cmp #Man
bne Man_Auto_01
mov #Auto,Fase
25
bra Man_Auto_02
Man_Auto_01:
mov #Man,Fase
Man_Auto_02:
bra Case_Principal_01
;Incrementa el SP o %Pot
Incrementa:
lda Fase
cmp #Man
bne Incrementa_01
jsr Incre_Pot
bra Incrementa_02
Incrementa_01:
jsr Incre_SP
Incrementa_02:
bra Case_Principal_01
;Decrementa el SP o %Pot
Decrementa:
lda
eor
sta
PortD
#$10
PortD
lda Fase
cmp #Man
26
bne Decrementa_01
jsr Decre_Pot
bra Decrementa_02
Decrementa_01:
jsr Decre_SP
Decrementa_02:
Case_Principal_01:
*********************************************
jsr
jsr
jsr
Control
Deshab
Pull_SCI ;Rota variables para SCI
*********************************************
;STA $FFFF ; Reset the COP
BRA Main_loop
dummy_isr:
rti
; return
**********************************************
;Vector Interrupciones
org
Vector_Start
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
*************************************
*************FUNCIONES*************
*************************************
*************************************
;Led de Vida
Vida:
lda
bne
lda
bne
mov
mov
dec
Bandera
Vida_00
Bandera+1
Vida_01
Alto,Bandera
Bajo,Bandera+1
Bandera+2
Vida_00:
dec
bne
Bandera
Vida_02
28
Vida_01:
dec
Bandera+1
Vida_02:
lda Bandera+2
bne Vida_03
lda PortC
eor #$10
sta PortC
jsr
jsr
ADC_PTB3
SCI_Enviar
Vida_03:
rts
*************************************
;************************************
;Varrido de teclas con filtro
Varrido:
Lda PortC
coma
and #Msk_PortC
ldx #Msk_PortC
cmpa PortC_Viejo
bne Varrido_10
dec Ret_Tec
Varrido_10:
Sta
Ldx
Bne
PortC_Viejo
Ret_Tec
Varrido_20
29
sta
ldx
stx
Teclas_Nuevo
Ret_Tec_Val
Ret_Tec
Varrido_20:
lda
Teclas_Viejo ;detecta flanco
coma
; subida
and
Teclas_Nuevo
Varrido_30:
lda
sta
Teclas_Nuevo
Teclas_Viejo
rts
*******************************************
;Incrementa Pot
Incre_Pot:
dec
bne
mov
dec
bne
mov
inc
bne
dec
Ret1
Incre_Pot_01
Ret1_Val,Ret1
Ret2
Incre_Pot_01
Ret2_Val,Ret2
Var_Pot
Incre_Pot_01
Var_Pot
Incre_Pot_01:
rts
********************************************
*******************************************
;Incrementa SP
30
Incre_SP:
dec
bne
mov
dec
bne
mov
inc
bne
dec
Ret1
Incre_SP_01
Ret1_Val,Ret1
Ret2
Incre_SP_01
Ret2_Val,Ret2
Var_SP
Incre_SP_01
Var_SP
Incre_SP_01:
rts
********************************************
*******************************************
;Decrementa Pot
Decre_Pot:
dec
bne
mov
dec
bne
mov
dec
bne
inc
Ret1
Decre_Pot_01
Ret1_Val,Ret1
Ret2
Decre_Pot_01
Ret2_Val,Ret2
Var_Pot
Decre_Pot_01
Var_Pot
Decre_Pot_01:
rts
********************************************
*******************************************
;Decrementa SP
31
Decre_SP:
dec
bne
mov
dec
bne
mov
dec
bne
inc
Ret1
Decre_SP_01
Ret1_Val,Ret1
Ret2
Decre_SP_01
Ret2_Val,Ret2
Var_SP
Decre_SP_01
Var_SP
Decre_SP_01:
rts
********************************************
********************************************
;Control
Control:
lda Fase
cmp #Man
beq Control_Fin
lda Var_SP
sub Var_Tmp
sta Dif
bcc Control_01
;quito Pot si me pase del SP
mov #$02,Var_Pot
bra Control_Fin
Control_01:
lda
sub
bhi
lda
Dif
Dif_Valor
Control_02
Dif
32
ldx Dif_Factor
mul
sta Var_Pot
bra Control_Fin
Control_02:
mov #$FE,Var_Pot
Control_Fin:
rts
*************************************
*************VARIABLES*************
*************************************
Bandera
DB $00,00,00
Msk_Bandera EQU $10
Alto
DB $00
Bajo
DB $00
Var_Tmp
DB $00
Var_SP
DB $00
Var_Pot
DB $00
Var_SCI
DB $00
Rot_SCI
DB $00
PortC_Viejo DB $00
Ret_Tec
DB $00
Teclas_Nuevo DB $00
Ret_Tec_Val DB $00
Teclas_Viejo DB $00
Msk_PortC EQU $07
Fase
DB $00
Auto
EQU $01
Man
EQU $00
Ret1
DB $00
Ret1_Val
DB $00
33
Ret2
DB $00
Ret2_Val
DB $00
Dif
DB $00
Dif_Valor DB $00
Dif_Factor DB $00
Ret3
DB $00
CTE
DB $00,00
*************************************
*************************************
********FUNCIONES DEL SCI**********
*************************************
*************************************
;Inicializacion del SCI
Init_SCI:
$IF CLOCK_4M9
MOV
#$21,SCBR
;COMO TENEMOS 4.9152 MHz
PARA QUE NOS DE 9600 BAUDIOS SE TUBO QUE PONER
$ENDIF
$IF CLOCK_8M
MOV
#$30,SCBR
;COMO TENEMOS 8 MHz PARA
QUE NOS DE 9600 BAUDIOS SE TUBO QUE PONER
$ENDIF
BSET $06,SCC1
; Habilita el SCI
MOV
#$08,SCC2
LDA
SCS1
clr
SCDR
34
rts
*****************************************
*****************************************
;Enviar Datos por el SCI
SCI_Enviar:
brclr $06,SCS1,SCI_Enviar_02
lda Rot_SCI
cmp #$03
bne SCI_Enviar_01
mov #$00,Rot_SCI
SCI_Enviar_01:
inc
Rot_SCI
lda
lda
sta
bset
SCS1
Var_SCI
SCDR
$03,SCC2
;Habilita SCI
SCI_Enviar_02:
rts
******************************************
********************************************
;Deshabilita Envio de datos
Deshab:
brclr $07,SCS1,Deshab_01
clr SCDR
bclr $03,SCC2
;Deshabilita SCI
Deshab_01:
35
rts
*********************************************
*********************************************
;Pulling de variables a enviar por el SCI
Pull_SCI:
lda Rot_SCI
cmp #$01
beq Pull_SCI_01
cmp #$02
beq Pull_SCI_02
cmp #$03
beq Pull_SCI_03
bra Pull_SCI_04
Pull_SCI_01:
mov Var_Tmp,Var_SCI
bra Pull_SCI_04
Pull_SCI_02:
mov Var_SP,Var_SCI
bra Pull_SCI_04
Pull_SCI_03:
mov Var_pot,Var_SCI
Pull_SCI_04:
rts
*************************************
*************************************
********FUNCIONES DEL ADC********
36
*************************************
*************************************
;Inicio del ADC
ADC_Init:
mov
mov
#$00,ADCLK
#$03,ADSCR
rts
*************************************
;Convierte la entrada PTB3 a un valor digital
ADC_PTB3:
brclr $07,ADSCR,ADC_PTB3_01
mov
mov
mov
ADR,Var_Tmp
#$00,ADCLK
#$03,ADSCR
ADC_PTB3_01:
Rts
*************************************
****************TIM*****************
*************************************
*************************************
; Inicio del TIM
Init_TIM:
mov
#{TSTOP|TRST|PS1|PS0},T1SC
stop the counter an reset, asigna tiempo
37
; write el prescaler,
lda
#{CHxIE|ELSxA|ELSxB}
o falling edge
sta T1SC1
lda
sta
#{CHxIE|MSxA|ELSxA|ELSxB}
T1SC0
lda T1SC
and #$FF^TSTOP
sta T1SC
; Output Compare
; Timer 1 canal 0
; saca el STOP
rts
;----------------------------------------------------------------------Init_TIM ------; Interrupcin de input capture del timer 1 canal 1
ICap_T1C1:
lda T1SC0
and #$F3
sta T1SC0
; Output Compare
; Timer 1 canal 0
bclr $04,PortD
lda T1SC0
eor #$0C
sta T1SC0
lda Var_pot
psha
lda
sub
sta
bne
inc
#$FF
Var_pot
Var_pot
ICap_T1C1_01
Var_pot
ICap_T1C1_01:
38
ldhx #$26FF
lda
div
ldx
#$64
Var_pot
mul
sta CTE+1
stx CTE
lda T1CH1L
ADD CTE+1
STA T1CH0L
LDA T1CH1H
ADC CTE
STA T1CH0H
lda T1SC0
and #$F3
sta T1SC0
; Output Compare
; Timer 1 canal 0
bclr $04,PortD
lda T1SC0
eor #$0C
sta T1SC0
ICap_T1C1_02:
lda T1CH0L
sta T1CH0L
lda T1CH1L
LDA T1SC1
;LIMPIA EL FLAG DEL Input Capture
AND #$FF^CHxF
;
STA T1SC1
;
39
ICap_T1C1_04:
pula
sta Var_pot
rti
;-------------------------------------------------------------------------INT_IComp -------;----------------------------------------------------------------------------------; Interrupcin de output compare del timer 1 canal 0
OComp_T1C0:
LDA T1CH0L
STA T1CH0L
OComp_T1C0_00:
OComp_T1C0_02:
LDA T1SC0
;LIMPIA EL FLAG DEL Output
AND #$FF^CHxF ;
STA T1SC0
;
rti
*************************************
********VARIABLES DEL TIM*********
*************************************
*************************************
TSTOP
EQU $20
TRST
EQU $10
MSxB
EQU $20
MSxA
EQU $10
TOV0
EQU $02
40
TOIE
ELSxA
ELSxB
PS0
PS1
PS2
EQU $40
EQU $04
EQU $08
EQU
EQU
EQU
$01
$02
$04
CHxF
CHxIE
EQU
EQU
$80
$40
T1MOD
T2MOD
TCH0
TCH1
TCH1L
EQU $0023
EQU $002E
EQU $0026
EQU $0029
EQU $0034
****************************************
41