Software de control: Para controlar todos los parámetros de

Anuncio
Software de control:
Diagrama de bloques del sistema
Para controlar todos los parámetros de funcionamiento de la pila de combustible, se
ha creado un software específico, este funciona como se muestra en el diagrama
siguiente.
En un primer lugar se configura el chip del MCC03 (PIC 16F874A), para que funcione
como se muestra en el esquema, de tal manera que se dispone de 5 sensores de
presión, 3 termómetros, 3 interruptores de control y salidas de control útiles para la
activación de las electro válvulas. Además dispone de una medida de tensión de salida,
un led de control de funcionamiento y un puerto de comunicaciones RS232.
Nota: El esquema de la placa va interconectado con la placa de interface de potencia y
la placa interface PC.
Tras configurar el chip y definir las variables del sistema, se muestra en pantalla, (la
pantalla de la consola del PC), el menú del gráfico.
Menú principal software de control
Desde este momento se puede pulsar P1 para arrancar el software y por tanto la pila,
P2 si en caso de que esté funcionando se quiere parar el sistema y P3 si se desea enviar
la lectura de todos los sensores a pantalla.
Circuito MCC03 procesador del sistema
Una vez puesto en marcha el sistema, éste se puede parar por 4 motivos, por que se
pulse el botón de paro, por que el software tras analizar los datos considere que tiene
que parar, por que se active cualquier elemento de la cadena de seguridad o por que
se haga una parada manual desde la cadena de seguridad.
El software mostrado a continuación no incluye los parámetros de lógica de control del
sistema ya que para ello se ha de experimentar con un sistema de pila de combustible
real, los sensores se han de calibrar a tal efecto.
Una vez montado el sistema, es posible incluir los parámetros de control dentro de la
subrutina "analisislecturas:", en el software presentado se han incluido algunos
parámetros de control a modo de ejemplo.
Nota: El software de control incluye líneas de programa inhabilitadas útiles para la
experimentación y el control del sistema.
'****************************************************************
' Name : Menu.BAS
' Author : Ignacio Lucas Alos
' Notice :
'
' Date : 31/08/2011
' Version : 1.0
' Notes :
'
'****************************************************************
inicio:
clear
Define
ONINT_USED 1
include "modedefs.bas"
'Configuración inicial de puertos
trisa=%00000000
'Puerto A configurado como salida
trisb = %11111111
'Puerto B configurado como entrada
trisc=%00000000
'Puerto C configurado como salida
portb=0
'Puerto B todos los pines a 0
trisd=%00000000
'Puerto D configurado como salida
portd=0
'Puserto D todos los pines a 0
option_reg.7=0
'Habilita resistencias PullUp del puerto B
'======================================================================
'Definicion de variables globales:
Define ONINT_USED 1
'======================================================================
' Definicion de los parametros del registro ADCIN
Define ADC_BITS
8
' Configura el numero de bits en el resultado
'(Para 10 bits ha de ser un 10 en lugar de un 8)
Define ADC_CLOCK 3
' Seleccion de fuente de reoj (3=rc interno)
Define ADC_SAMPLEUS
50
' Configuracion del tiempo de lectura 50 uS
'Definicion de variables lectura analogica
'adval0 var
word
' Guarda el resultado de la medida en una variable
'(para 10 bits)
puertoanalogico var byte
adval0 var
byte
' Guarda el resultado de la medida en una variable
'(para 8 bits)
anal0 var word 'Definicion de variable para la lectura del puerto analogico 0
anal1 var word 'Definicion de variable para la lectura del puerto analogico 1
anal2 var word 'Definicion de variable para la lectura del puerto analogico 2
anal3 var word
anal4 var word
anal5 var word
anal6 var word
anal7 var word
'Definicion de variable para la lectura del puerto analogico 3
'Definicion de variable para la lectura del puerto analogico 4
'Definicion de variable para la lectura del puerto analogico 5
'Definicion de variable para la lectura del puerto analogico 6
'Definicion de variable para la lectura del puerto analogico 7
RST var PORTC.0
' pin de reset
DQ var PORTC.1
' pin de datos
CLK var PORTC.5
' pin de reloj
temp var word
' Variable donde se guarda la temperatura
temp1 var word
' Variable lectrua de temperatura final entera
tempt var word
' Variable lectura temeratura final decimal
temperaturatermometro1 var word
temperaturatermometro2 var word
temperaturatermometro3 var word
alarmageneral var bit 'Variable alarma general
alarmah2_1 var bit
'Variable sensor de hidrogeno1
alarmah2_2 var bit
'Variable sensor de hidrogeno2
'CONFIGURACION INICIAL DE VARIABLES:
'Espacio reservado para insertar los limites de presion y temperatura
'======================================================================
Menu:
serout PORTC.6,2,[13,"
",13]
serout PORTC.6,2,[13,"www.coopservi.es",13]
serout PORTC.6,2,[13,"Control de pila de combustible V1.0",13]
serout PORTC.6,2,[13,"P1 Arranca",13]
serout PORTC.6,2,[13,"P2 Paro",13]
serout PORTC.6,2,[13,"P3 Lectura",13]
trisc.6=1
portc.6=0
PORTA.4=1
pause 300
Botones:
If PORTB.0=0 THEN gosub arranca
If PORTB.1=0 THEN Gosub paro
If PORTB.2=0 THEN GOTO lectura
'Apaga led TEST
'P1
'P2
'P3
GOTO BOTONES
'=====================================================================
arranca:
PORTA.4=0
'Enciende led TEST
serout PORTC.6,2,[13,"Arranca",13]
portd=0
Gosub funcionamiento
'======================================================================
paro:
serout PORTC.6,2,[13,"Paro",13]
goto menu
'======================================================================
analisislecturas:
'analiza las lecturas, pero esto hay que pulirlo, ha de haber subrutinas
'para cada accion.
'serout PORTC.6,2,[13,"Analisis",13]
if temp1>90 and temp1< 100 then serout PORTC.6,2,[13,"Temperatura superior a 90
grados",13]
if temp1>90 and temp1<100 then portd.0=1
if temp1>100 then serout PORTC.6,2,[13,"Temperatura superior a 100 grados",13]
if temp1>100 then portd.1=1
if temp1>115 then serout PORTC.6,2,[13,"Temperatura superior a 115 grados",13]
if temp1>115 then serout PORTC.6,2,[13,"Apagando el sistema",13]
if temp1>115 then portd.2=1
if temp1>115 then goto menu
return
'======================================================================
funcionamiento:
'Control de cada una de las lecturas, esto se tiene que hacer asi porque
'dependiendo de cual va a ser la lectura, se ha de aplicar una operacion
'u otra.
PORTA.4=0
'Enciende led TEST
lecturaanalogica0:
puertoanalogico=0
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal0
'Intercambio de datos entre variables
anal0=(((anal0*10)-130)/23)+15 'Conversion de datos
lecturaanalogica1:
puertoanalogico=1
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal1
'Intercambio de datos entre variables
anal1=(((anal1*10)-130)/23)+15 'Conversion de datos
lecturaanalogica2:
puertoanalogico=2
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal2
'Intercambio de datos entre variables
anal2=(((anal2*10)-130)/23)+15 'Conversion de datos
lecturaanalogica3:
puertoanalogico=3
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal3
'Intercambio de datos entre variables
anal3=(((anal3*10)-130)/23)+15 'Conversion de datos
lecturaanalogica4:
puertoanalogico=4
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal4
'Intercambio de datos entre variables
anal4=(((anal4*100)-1500)/94)+2 'Conversion de datos
lecturaanalogica5:
puertoanalogico=5
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal5
'Intercambio de datos entre variables
anal5=(anal5*60)/253
'Conversion de datos
lecturaanalogica6:
puertoanalogico=6
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal6
'Intercambio de datos entre variables
lecturaanalogica7:
puertoanalogico=7
'Configuracion delectura de puerto
gosub leopuertoanalogico
'Salto a rutina de lectura
swap adval0, anal7
'Intercambio de datos entre variables
'gosub temperatura
goto temperatura
'Fin de control de cada una de las lecturas.
leopuertoanalogico:
porta=0
TRISA = %11101111 ' Configura el puerto A como entrada
' ADCON1 = %10000000 ' Configura la lectura de Byte con justificacion a
'la derecha (para 10 bits)
ADCON1 = %00000000 ' Configura la lectura de Byte con justificacion a
'la izquierda
'Pause 500
' Espera 0.5 Segundos a que se realice la lectura
ADCIN puertoanalogico, adval0
' Lectura del canal de entrada segun toque
' serout PORTC.6,2,[13,"Lectura puerto ",#puertoanalogico," ",#adval0," , Escalado 0=0
5=255",13]
' if puertoanalogico=7 then goto lecturatermometros 'Permite continuar a la rutina
de temperatura
'Pause 100
' Espera 0.1 Segundos
return
'======================================================================
temperatura:
lecturatermometros:
PORTA.4=0
'Enciende led TEST
termometro1:
' lectura sensor de temperatura
Low RST
' Reinicio del chip
RST = 1
' Habilita chip
Shiftout DQ, CLK, LSBFIRST, [$ee]
' Comienza la conversion
RST = 0
Pause 50 ' Espera 50ms hasta que se ha hecho la conversion
RST = 1
Shiftout portc.1, CLK, LSBFIRST, [$aa] ' Envioo de comando de lectura
Shiftin portc.1, CLK, LSBPRE, [temp\9] ' Lectura de los 9 bit de temperatura
RST = 0
'Muestra la temperatura en formato decimal
temp1=temp >>1
tempt=temp1.0*5
swap temp1, temperaturatermometro1
'serout PORTC.6,2,[13,"Temperatura1: ",#temperaturatermometro1," grados C",13]
termometro2:
' lectura sensor de temperatura
Low RST
' Reinicio del chip
RST = 1
' Habilita chip
Shiftout DQ, CLK, LSBFIRST, [$ee]
' Comienza la conversion
RST = 0
Pause 50 ' Espera 50ms hasta que se ha hecho la conversion
RST = 1
Shiftout portc.2, CLK, LSBFIRST, [$aa] ' Envioo de comando de lectura
Shiftin portc.2, CLK, LSBPRE, [temp\9] ' Lectura de los 9 bit de temperatura
RST = 0
'Muestra la temperatura en formato decimal
temp1=temp >>1
tempt=temp1.0*5
swap temp1, temperaturatermometro2
'serout PORTC.6,2,[13,"Temperatura2: ",#temperaturatermometro2," grados C",13]
termometro3:
' lectura sensor de temperatura
Low RST
' Reinicio del chip
RST = 1
' Habilita chip
Shiftout DQ, CLK, LSBFIRST, [$ee]
' Comienza la conversion
RST = 0
Pause 50 ' Espera 50ms hasta que se ha hecho la conversion
RST = 1
Shiftout portc.3, CLK, LSBFIRST, [$aa] ' Envioo de comando de lectura
Shiftin portc.3, CLK, LSBPRE, [temp\9] ' Lectura de los 9 bit de temperatura
RST = 0
'Muestra la temperatura en formato decimal
temp1=temp >>1
tempt=temp1.0*5
swap temp1, temperaturatermometro3
'serout PORTC.6,2,[13,"Temperatura3: ",#temperaturatermometro3," grados C",13]
pause 50
PORTA.4=1
'Apaga led TEST
'pause 50
gosub analisislecturas
'======================================================================
'Puertos digitales 1/0
alarmageneral = portb.3
alarmah2_1 = portb.4
alarmah2_2 = portb.5
'======================================================================
'Lectura de menus
If PORTB.0=0 THEN gosub arranca
If PORTB.1=0 THEN Gosub paro
If PORTB.2=0 THEN GOTO lectura
'P1
'P2
'P3
'======================================================================
lectura:
' serout PORTC.6,2,[13,"Lectura",13]
'Espacio reservado para introducir rutinas de lectura de datos.
'serout PORTC.6,2,[12,"Lectura",13]
'serout PORTC.6,2,[13,"Temperatura1: ",#temperaturatermometro1," grados C",13]
'serout PORTC.6,2,[13,"Temperatura2: ",#temperaturatermometro2," grados C",13]
'serout PORTC.6,2,[13,"Temperatura3: ",#temperaturatermometro3," grados C",13]
'serout PORTC.6,2,[13,"Lectura0 ",#anal0,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura1 ",#anal1,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura2 ",#anal2,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura3 ",#anal3,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura4 ",#anal4,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura5 ",#anal5,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura6 ",#anal6,13] 'Muestra datos
'serout PORTC.6,2,[13,"Lectura7 ",#anal7,13] 'Muestra datos
'serout PORTC.6,2,[13,"P1 Alarma general: ",#alarmageneral,13] 'Muestra datos digital
'serout PORTC.6,2,[13,"P1 Sensor H2-1: ",#alarmah2_1,13] 'Muestra datos digital
'serout PORTC.6,2,[13,"P1 Sensor H2-2: ",#alarmah2_2,13] 'Muestra datos digital
'Informacion de envio de datos para conformar grafica
serout PORTC.6,2,
["*",#TEMPERATURATERMOMETRO1,",",#TEMPERATURATERMOMETRO2,","_
,#TEMPERATURATERMOMETRO3,",",#anal0,",",#anal1,",",#anal2,",",#anal3,","_
,#anal4,",",#anal5,",",#anal6,",",#anal7,",",#alarmageneral,","_
,#alarmah2_1,",",#alarmah2_2,"/",13]
'Fin de informacion para grafica
pause 250
goto funcionamiento
Descargar