CONTROL PILA DE COMBUSTIBLE

Anuncio
C:\Users\Administrador\Desktop\PROYECTO\CONTROL PILA DE COMBUSTIBLE.asm
;* Programa de Interfaz Electronica MICROCONTROLADOR*
LIST P=PIC16F877
#INCLUDE "P16F877.INC"
;* Variables *
TENSION_PILA
ERROR1
TENSION_CONVERTIDOR
ERROR_CONVERTIDOR
CONSIGNA_PILA
CONSIGNA_CONVERTIDOR
DC_PWM
TIEMPO
VALVULA
CAUDAL_MAXIMO
CONSIGNA_DC
CONSIGNA_VALVULA
CAUDAL_MINIMO
VAR
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0X70
0X71
0X72
0X73
0X74
0X75
0X76
0X77
0X78
0X79
0X7A
0X7D
0X7E
0X7F
;* Inicio *
ORG
GOTO
ORG
0X00
INICIO
0X05
INICIO
CLRF
CLRF
CLRF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
PORTD;
PORTC;
VALVULA;
.31
CONSIGNA_PILA
.180
CAUDAL_MAXIMO
.60
CAUDAL_MINIMO
.140
CONSIGNA_VALVULA
.48
CONSIGNA_CONVERTIDOR
.35
CONSIGNA_DC
BSF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF
CLRF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
CLRF
CLRF
MOVLW
MOVWF
MOVF
MOVWF
BSF
STATUS,RP0
STATUS,RP1
H'00'
ADCON1
H'FF'
TRISA
TRISD
TRISC
B'11000111'
OPTION_REG
.50
PR2
STATUS,RP0
TMR2
T2CON
H'0F'
CCP1CON
CONSIGNA_DC,W
CCPR1L
ADCON0,ADON
;31 V (315)
;48 V (201)
;35 DC=0.71 (31 V => 48 V)
;BANCO 1
;PORTA entradas analogicas y resultados
;justificados a la izquierda
;PORTA entradas
;PORTD salidas
;PORTC salidas (PWM)
;Se configura el TMR0 (Predivisor=256)
;Periodo del PWM (50 KHz)
;20us = 4x0,1us x 1 x PR2 => PR2=49
;BANCO 0
;Preescaler TMR2=1, T2=OFF
;Modulo CCP1 en modo PWM
;DC del PWM
;Se enciende el módulo A/D
;* Temporizador 3 segundos
MOVLW
MOVWF
ESP1
MOVLW
MOVWF
BCF
ESP2
.60
TIEMPO
;60 X 25ms = 1,5seg
.11
TMR0
INTCON,T0IF
;11=255-244 (T=4xTOSCxTMR0xN)
;TMR0 = 25ms
;Se repone el flag del TMR0
1
C:\Users\Administrador\Desktop\PROYECTO\CONTROL PILA DE COMBUSTIBLE.asm
BTFSS
GOTO
DECFSZ
GOTO
INTCON,T0IF
ESP2
TIEMPO,1
ESP1
;Se espera el paso de los 25ms
;¿Se ha hecho el bucle 120 veces?
;(120 x 25ms = 3seg)
;***************************************************************************
BSF
MOVLW
MOVWF
BCF
BSF
MOVLW
MOVWF
ESP3
MOVLW
STATUS,RP0
B'11000011'
OPTION_REG
STATUS,RP0
T2CON,TMR2ON
.10
TIEMPO
;BANCO 1
.233
MOVWF
BCF
ESP4
BTFSS
GOTO
TMR0
INTCON,T0IF
;223=255-32
;(T=4xTOSCxTMR0xN=4x0.1usx16x32=200us)
;TMR0 = 200 us
;Se repone el flag del TMR0
INTCON,T0IF
ESP4
;Se configura el TMR0 (Predivisor=16)
;BANCO 0
;Se enciende el TMR2 (PWM ON)
;Temporizador control valvula
;200us x 10 = 2ms
;Se espera al paso de los 200us
;* Control Convertidor DC/DC*
;GOTO VALV
MOVLW
B'10100001'
MOVWF
VAR
CALL
CAPTURA
MOVF
ADRESH,W
MOVWF
TENSION_CONVERTIDOR
MOVF
CONSIGNA_CONVERTIDOR,W
SUBWF
TENSION_CONVERTIDOR,W
BTFSC
STATUS,C
GOTO
NEG4
XORLW
H'FF'
ADDLW
.1
ADDWF
CONSIGNA_DC,W
MOVWF
DC_PWM
MOVLW
.36
SUBWF
DC_PWM,W
BTFSC
STATUS,C
GOTO
NEG5
MOVF
DC_PWM,W
MOVWF
CCPR1L
GOTO
VALV
NEG5
MOVLW
.36
MOVWF
CCPR1L
GOTO
VALV
NEG4
SUBWF
CONSIGNA_DC,W
BTFSS
STATUS,C
GOTO
NEG6
MOVWF
DC_PWM
MOVLW
.28
SUBWF
DC_PWM,W
BTFSS
STATUS,C
GOTO
NEG6
MOVF
DC_PWM,W
MOVWF
CCPR1L
GOTO
VALV
NEG6
MOVLW
.28
MOVWF
CCPR1L
;Captura de la tension del convertidor
;Se guarda el resultado
;Se compara la salida con consigna
;(W = TENSION - CONSIGNA)
;Salta si CONSIGNA < TENSION
;Se normaliza el resultado negativo
;Se suma el error a la consigna
;Se comprueba si se ha pasado el rango de DC
;W = DC_PWM - CONSIGNA (40)
;Si DC > CONSIGNA -> DC = CONSIGNA
;Se escribe nuevo ciclo de trabajo en memoria
;Se escribe nuevo ciclo de trabajo en memoria
;Se resta el error al ciclo de trabajo
;(W = CONSIGNA_DC - ERROR)
;Se mira si se ha sobrepasado el DC minimo
;Si lo sobrepasa salta a NEG6
;Si no lo sobrepasa escribe el valor
;calculado
;Escribe el valor minimo DC
;* Control Valvula*
VALV
DECFSZ
GOTO
MOVLW
MOVWF
CALL
MOVF
MOVWF
TIEMPO,F
ESP3
B'10000001'
VAR
CAPTURA
ADRESH,W
TENSION_PILA
;¿Tiempo=0?
;(10 x 200us = 2ms)
;Captura tension pila combustible
;Se guarda el resultado de conversion
2
C:\Users\Administrador\Desktop\PROYECTO\CONTROL PILA DE COMBUSTIBLE.asm
MOVF
CONSIGNA_PILA,W
SUBWF
TENSION_PILA,W
BTFSC
STATUS,C
GOTO
NEG1
XORLW
H'FF'
ADDLW
.1
MOVWF
ERROR1
BCF
STATUS,C
RLF
ERROR1,W
ADDWF
CONSIGNA_VALVULA,W
MOVWF
VALVULA
MOVF
CAUDAL_MAXIMO,W
SUBWF
VALVULA,W
BTFSS
STATUS,C
GOTO
NEG2
MOVF
VALVULA,W
MOVWF
PORTD
GOTO
CONTROL
NEG2
MOVF
CAUDAL_MAXIMO,W
MOVWF
PORTD
GOTO
CONTROL
NEG1
MOVWF
ERROR1
BCF STATUS,C
RLF ERROR1,W
SUBWF
CONSIGNA_VALVULA,W
BTFSS
STATUS,C
GOTO
NEG3
MOVWF
VALVULA
MOVF
CAUDAL_MINIMO,W
SUBWF
VALVULA,W
BTFSS
STATUS,C
GOTO
NEG3
MOVF
VALVULA,W
MOVWF
PORTD
GOTO
CONTROL
NEG3
MOVF
CAUDAL_MINIMO,W
MOVWF
PORTD
CONTROL
MOVLW
.250
MOVWF
TIEMPO
MOVLW
.231
GOTO
ESP3
;Se compara la salida con consigna
;W=TENSION - CONSIGNA
;Salta a NEG1 si TENSION > CONSIGNA
;Se normaliza el resultado negativo
;Se
;Se
;Se
;Se
guarda el error en memoria
limpie el carry para hacer RLF
le da la ganancia al error
suma el error a la consigna
;Se comprueba si se ha pasado el rango
;de apertura de la valvula
;Si no se ha pasado se escribe el valor
;Si se ha pasado el rango salta a NEG2
;Se escribe le valor maximo de
;abertura de la valvula
;Se guarda el error en memoria
;Se limpia el carry
;Se le da ganacia al error
;Se resta el error a la consigna
;Salta si ERROR < CONSIGNA
;Se mira si se ha sobrepasado la
;minima abertura de la valvula
;Si se ha sobrepasado salta a NEG3
;Abre la valvula al caudal calculado
;Abre la valvula al minimo
;Temporizador valvula
;1ms x 250 = 250ms
;231=255-24
;(T=4xTOSCxTMR0xN=4x0.1usx16x24=150us)
;* Fuciones*
CAPTURA
MOVF
MOVWF
CALL
BSF
ESP20
BTFSS
GOTO
CALL
RETFIE
TIEMPO20U
MOVLW
MOVWF
BCF
ESP21
BTFSS
GOTO
RETFIE
VAR,W
ADCON0
TIEMPO20U
ADCON0,GO
PIR1,ADIF
ESP20
TIEMPO20U
.250
TMR0
INTCON,T0IF
INTCON,T0IF
ESP21
;Funcion para hacer una conversion A/D
;Se configura el convertidor A/D con el puerto
;que se encuentra en la variable VAR.
;Se espera el tiempo de adquisicion
;Inicio de la conversion
;Espera final de la conversion
;Antes de poder realizar otra adquisicion
;hay que poner otro tiempo de espera.
;Temporizador de 20us
;252=255-3 (T=4xTOSCxTMR0xN=4x0.1usx16x24=20us)
;TMR0 = 20us
;Se repone el flag del TMR0
;Se espera el paso de los 20us
END
3
Descargar