• No results found

64 out on the balance sheet date, the fluctuations

Las señales digitales que se van a monitorear son: 1. Frecuencia de la Planta de Fuerza

2. Transferencia de la Planta de Fuerza 3. Existencia de la alimentación de C.F.E.

Las señales de Transferencia y la de existencia de alimentación de C.F.E. sólo tienen dos posibles valores, un nivel bajo (aproximadamente 0 volts), y un nivel alto (aproximadamente 5 volts), por lo que su procesamiento es diferente al de las señales analógicas.

En este punto es conveniente recordar que para que la razón de adquisición de los datos sea constante (y por lo tanto la razón de la transmisión de los datos), se requiere de un reloj para definir el instante de tiempo en el cual se debe iniciar la adquisición. A este reloj se le llama “reloj de tiempo real”. Si no se contase con un reloj de tiempo real para controlar esto, entonces se tendría una razón de adquisición variable, ya que el µCu no se tarda la misma cantidad de tiempo en adquirir y transmitir un dato analógico, en comparación con uno digital (ver figura 4.1).

RELOJ DE TIEMPO REAL(Flag_Reloj) Se desea transmitir 11 datos por segundo = 90.90mseg por dato

← Se transmiten 11 datos 1 0 1 0 1 0 1 ∫ ∫ ∫ ∫ 0 1 Adquirir y Almacenar Dato Transmitir Dato Adquirir y Almacenar Dato Transmitir Dato Calcular CRC Transmitir Dato Adquirir y Almacenar Dato 45.45mseg 45.45mseg ← 90.90mseg →

Los tiempos de procesamiento de las señales analógicas y digitales no son iguales estas varían, de tal forma que: la adquisición y almacenamiento de las señales analógicas requiere de 226mseg, en cambio las señales digitales requieren 29µseg. El proceso de transmisión de una señal analógica requiere de 4mseg y una digital de 3mseg.

Después de adquirir y transmitir los datos de las 7 señales se calcula el CRC, el cual se lleva un tiempo de procesado de 6mseg (todos estos tiempos de procesado son sólo aproximaciones).

4.1 Medición de la frecuencia

Al dispositivo empleado para la medición de la frecuencia se le denomina frecuencímetro. Para la implementación de un frecuencímetro se requiere de:

• Una ventana de tiempo la cual en este caso será de 1 seg.

• Un contador que se incremente con cada pulso presente de la señal cuya frecuencia se va a medir, durante el tiempo determinado por la ventana de tiempo (1 seg).

Para obtener un intervalo de tiempo se emplean dispositivos denominados timers (temporizadores), y para contar pulsos se emplean dispositivos denominados contadores.

En general un timer es un contador el cual cuenta los pulsos generados por un reloj muy preciso (frecuentemente se usa el propio reloj del µCu).

Los contadores y los timers pueden implementarse por medio de hardware o por programa. La implementación por programa requiere tiempo del procesador. En este tiempo el procesador no realiza tarea útil alguna. Prácticamente todos los µCu modernos incluyen timers y contadores implementados con hardware, por lo que normalmente no es necesario implementarlos por programa. Como un timer es sólo un tipo especial de contador, los timers de los µCu están diseñados para usarse también como contadores.

El 16F874, cuenta con los siguientes timers/contadores: • TIMER0 (TMR0)

• TIMER1 (TMR1) • TIMER2 (TMR2)

Características de los timers

TMR0

• Contador(Síncrono/Asíncrono)/Temporizador de 8 bits • De lectura/escritura

• Reloj interno o externo

• Selección del flanco en el reloj externo • Predivisor de la frecuencia

• Generador de interrupción opcional en el desbordamiento La tabla 4.1 muestra los registros asociados al TIMER0:

DIRECCIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

01h TMRO REGISTRO DE TMR0

0Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF

81h OPTION RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

Tabla 4.1 Registros asociados a TMR0.

Donde:

Las celdas sombreadas no se utilizan en TMR0.

Funciones de los bits (ver tabla 4.1): • TMR0 = Registro del TMR0.

• Gie INTCON<7> = Bit habilitador de las interrupciones. 1 = Habilita todas las interrupciones

• Peie INTCON<6> = Bit habilitador de las interrupciones periféricas. 1 = Habilita todas las interrupciones

0 = Deshabilita todas las interrupciones

• Toie INTCON<5> = Bit habilitador de la interrupción de desborde de TMR0. 1 = Habilita la interrupción de TMR0

0 = Deshabilita la interrupción de TMR0

• Toif INTCON<2> = Bandera de desborde de TMR0. 1 = Se desbordó TMR0

0 = No se desbordó TMR0

• Tocs OPTION<5> = Bit habilitador del tipo de reloj para TMR0. 1 = Pulsos introducidos a través de TOCK1 (Contador)

0 = Pulsos de reloj interno Fosc/ 4 (Temporizador)

• Tose OPTION<4> = Bit de selección para el tipo de flanco para el TOCK1. 1 = Incrementa TMR0 cada flanco descendente

0 = Incrementa TMR0 cada flanco ascendente

• Psa OPTION<3> = Bit de asignación del divisor de frecuencias. 1 = El divisor de frecuencias se le asigna al WDT

0 = El divisor de frecuencia se le asigna al TMR0

• Ps2-Ps0 OPTION<2,1,0> = Bit del predivisor (ver tabla 4.2). 1 = Incrementa TMR0 cada flanco descendente

El predivisor se configura según la siguiente tabla: PS2 PS1 PS0 DIVISIÓN TMR0 DIVISIÓN WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1 0 1:8 1:4 0 1 1 1:16 1:8 1 0 0 1:32 1:16 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 1 1 1:256 1:128

Tabla 4.2 Configuración del predivisor de TMR0. TMR1

• Contador/Temporizador de 16 bits • De lectura/escritura

• Reloj interno o externo

• Interrupción opcional por desbordamiento de FFFFh a 0000h La tabla 4.3 muestra los registros asociados al TIMER1:

DIRECCIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

0Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

0Eh TMR1L Registro del TMR1 (Almacena los 8 bits menos significativos del TMR1)

0Fh TMR1H Registro del TMR1 (Almacena los 8 bits más significativos del TMR1)

10h T1CON ---- ---- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

Tabla 4.3 Registros asociados a TMR1.

Donde:

Las celdas sombreadas no se utilizan en TMR1.

Funciones de los bits (ver tabla 4.3):

• Tmr1if PIR1<0> = Bandera de desbordamiento de TMR1. 1 = TMR1 se desbordó

0 = TMR1 no se ha desbordado

• Tmr1IE PIE1<0> = Bit de habilitación de desbordamiento del TMR1. 1 = Habilita la interrupción por desbordamiento del TMR1

0 = Deshabilita la interrupción por desbordamiento

• TMR1H = Registro que contiene los 8 bits más significativos de TMR1. • T1ckps1- T1ckps0 T1CON<5,4> = Bits de selección del rango de división. • T1oscen T1CON<3> = Bit de selección del oscilador de TMR1.

1 = Habilita el oscilador 0 = Deshabilita el oscilador

T sync1 T1CON<2> = Bit de control de sincronía del reloj externo del TMR1. 1 = No sincroniza con el reloj externo (Si Tmr1cs=1)

0 = Sincroniza con el reloj externo (Si Tmr1cs=1) Este bit es ignorado,si Tmr1cs=0

• Tmr1cs T1CON<1> = Bit de selección de la fuente de los impulsos de contaje. 1 = Reloj externo que se aplica por las terminales de entrada RC0/T1OSO/T1CKI y RC1/T1OSI/CCP2

0 = Reloj interno

• Tmr1on T1CON<0> = Bit de encendido de timer1 1 = Habilita timer1

0 = Deshabilita timer1

En la tabla 4.4 se muestran las posibles configuraciones del divisor de TMR1:

T2CKPS1 T2CKPS0 RANGOS

0 0 1:1

0 1 1:2

1 0 1:4

1 1 1:8

Tabla 4.4 Configuración del divisor de TMR1.

TMR2

• Temporizador de 8 bits • De lectura/escritura

• Predivisor de frecuencia programable • Postdivisor de frecuencia programable

• Interrupción opcional al coincidir TMR2 y PR2 En la tabla 4.5 se muestran los registros asociados a TMR2:

DIRECCIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

0Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

0Eh TMR2 Registro del Timer2

10h T2CON ---- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR20N T2CKPS1 T2CKPS0

92h PR2 Registro de Timer2

Tabla 4.5 Registros asociados a TMR2.

Donde:

Las celdas sombreadas no se utilizan en TMR2.

En base a las características de cada uno de los timers, se implementará el reloj de tiempo real con el timer1, debido a que puede conseguir una mayor temporización, por ser de 16 bits. Y el frecuencímetro será implementado usando el reloj de tiempo real en conjunto con un registro de conteo auxiliar para generar la ventana de tiempo, y se empleará timer0 como contador de pulsos. Estos pulsos son externos, y el timer2 no puede configurarse para aceptar pulsos externos.

El reloj de tiempo real debe tener una frecuencia de 11Hz. El timer1 se configurará para que genere una interrupción por cada periodo de conteo. Con cada par de interrupciones se realizará la adquisición de un dato, y su posterior transmisión.

TMR1 cuenta con 2 registros (TMR1H y TMR1L de 8 bits cada uno), y un divisor (2 bits), a través de los cuales se configura la temporización deseada. Estos registros son contadores que se incrementan, con los pulsos producidos por un reloj. En este caso TMR1 se incrementa en forma ascendente con los pulsos producidos por un reloj interno del µCu.

Cuando el valor del conteo almacenado es estos registros llega a su máximo (FFFFh) se genera una interrupción y el conteo se reiniciará (0000h). Por lo cual la temporización obtenida depende del valor inicialmente almacenado en estos registros, de la frecuencia de reloj empleado, y de los bits del divisor asociado. La siguiente formula muestra lo anterior:

1 4( osc).( 1 : 1 ).( )

TMR = T TMR H TMR L DIVISOR (4.1)

Como se desean adquirir y transmitir 11 datos por segundo (11Hz), y considerando que la mitad del tiempo se adquiere y en la otra se transmite, entonces se requiere de un reloj con un periodo de 90.90mseg, en la mitad de ese periodo se adquiere y en la otra se transmite, por lo que, se requiere que se genere una interrupción cada 45.45mseg. Por lo tanto con una temporización deseada de 45.45mseg, con un divisor de 8, un reloj de 4MHz, los registros TMR1H y TMR1L, se deben precargar con un valor de:

10 1 45.4545455 4. .(65536 ).(8) 4 m N M   = −   10 45.4545455 65536 1 (8) m N µ = − 10 59854.1818 N =

De tal forma que timer1 debe cargarse con 59854 (1110 1001 1100 1110).

Flag_Reloj representa el bit de estado del reloj de tiempo real (Flag_Reloj es el reloj de tiempo real), y a través de su chequeo se controla en que momento se debe adquirir un dato (Flag_Reloj=1), y cuando transmitirlo (Flag_Reloj=0).

Por lo tanto durante 45.456mseg, Flag_Reloj=1, y durante los posteriores 45.456mseg se desactivará dicho bit, produciendo un reloj con el siguiente comportamiento (ver figura 4.2):

Flag_Reloj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

1segundo

90.90mseg

TMR0 cuenta el número de pulsos entrantes a TOCK1=Frecuencia

Como ya se mencionó anteriormente para la implementación del frecuencímetro se requiere de una ventana de tiempo de 1 segundo, y un contador que se incremente con cada pulso presente de la señal cuya frecuencia se desea medir.

La ventana de tiempo se implementó aprovechando el reloj de tiempo real, ya que este produce un reloj con una frecuencia de 11Hz. Si se cuentan los 11 pulsos por segundo generados por dicho reloj, se obtiene la ventana de tiempo de 1 segundo requerida, y contando los pulsos externos recibidos por timer0 durante dicho segundo se obtiene la frecuencia de la señal.

Inicialmente el timer0 estará establecido a cero. Al iniciar la adquisición del dato 11 se toma la lectura del timer0. Como 22 periodos del timer1 son igual a 1 segundo, la cuenta del timer0 es el número de pulsos externos que ha recibido en un segundo. Después de tomar la cuenta del timer0, su valor se reestablece a cero. La siguiente interrupción del timer1 corresponderá a la adquisición del primer dato, y se vuelve a repetir el procedimiento (ver figura 4.3).

Por lo tanto:

• La medición de la frecuencia se hace sólo una vez por segundo .

• Timer0 se encarga de contar el número de pulsos entrantes al sistema a través de la terminal RA4/TOCK1, durante 1 segundo completo, lo que equivale a 22 interrupciones de timer1, lo cual es igual a 11 pulsos del reloj de tiempo real.

El frecuencímetro resultante tendrá un error de ±1Hz, debido a que sólo se estarán manejando valores enteros de frecuencia. Como el tamaño del registro de TMR0 es 8 bits su cuenta puede alcanzar como máximo 255. Entonces la frecuencia máxima que se podrá medir será 255Hz. La frecuencia nominal de la planta es de 60Hz.

SE GENERA INTERRUPCIÓN

TOMAR FRECUENCIA LIMPIAR TMR0

INICIO TRANSCURRIERON 45.45mseg? SI NO DESACTIVAR: Flag_Reloj Flag_Tx Flag_CAD Flag_CRC_16 TRANSCURRIO 1seg? SI NO CONFIGURAR TIMER1 Flag_Reloj=0? SI NO ACTIVAR Flag_Reloj

Figura 4.3 Diagrama de flujo de la interrupción.

4.2 Monitoreo de las señales de CFE y de Transferencia del sistema

El monitoreo de estas señales se realiza consultando el estado de dos pines del microcontrolador configuradas previamente como entradas digitales. De tal forma que uno de ellos indique si existe o no alimentación de C.F.E. (PORTE<1>) y el otro indique si se llevó acabo la transferencia del sistema (PORTE<2>), dependiendo si su estado es un 1 lógico o un 0 lógico (ver tabla 4.6).

SEÑAL ESTADO DESCRIPCIÓN Alimentación C.F.E. 1 Existe alimentación de C.F.E.

0 No existe alimentación de C.F.E.

Transferencia

1 Se realizó Transferencia de C.F.E a Planta de Fuerza y Banco de Baterías 0 No se realizó Transferencia

Tabla 4.6 Tabla descriptiva de las señales de C.F.E y Transferencia del sistema.

4.3 Programa del µCu para la adquisición y la transmisión de los datos Características

• Se transmiten 11 bytes = 7 bytes de datos + 2 CRC + 2 caracteres delimitadores de paquete, controlados por Flag_Reloj.

• BaudRate= 2400 bps.

• Se transmiten de 11 datos por segundo (Frecuencia de Tx=11 Hz). • Se emplea el CRC-16 como método de detección de errores.

Funcionamiento

La primera etapa del programa inicializa registros, y realiza las configuraciones de los módulos pertinentes (USART, timers etc..), después de inicializar y configurar el programa realiza lo siguiente:

Toma el carácter de inicio de paquete cuando Flag_Reloj=1, y lo transmite una vez que Flag_Reloj=0. Posteriormente terminada la transmisión se activa la bandera Flag_Tx.

Una vez ya transmitido el carácter de inicio, procede a esperar a que Flag_Reloj=0, para tomar la lectura del primer canal analógico, una vez ocurrido esto se adquiere el dato y se realiza la conversión A/D, lo cual se indica activando la bandera Flag_CAD. Después se almacena el dato resultante de la conversión. Lo siguiente que hace el programa es esperar a que Flag_Reloj=0, para pasar a transmitir el dato, indicando su finalización a través de la activación de la bandera Flag_Tx, y si no se han transmitido los 4 canales analógicos, pasa a

seleccionar el siguiente canal, repitiéndose el procedimiento ya mencionado para el anterior canal analógico.

Una vez que termina de transmitir los 4 datos de los canales analógicos pasa a tomar el primer dato digital una vez que Flag_Reloj=1, después de tomar el dato lo almacena, y pasa a esperar a que Flag_Reloj=0, para transmitirlo, una vez terminada la transmisión activa la bandera Flag_Tx, lo cual finaliza la transmisión del primer dato digital. Estos pasos se repiten para cada una de las señales digitales.

Ya transmitidos los 3 canales digitales, procede a calcular el CRC_16, empleando para esto los valores de cada uno de los canales previamente almacenados. Una vez culminado el cálculo del CRC_16 se activa la bandera Flag_CRC_16,y se procede a esperar a que Flag_Reloj=1, para tomar el primer byte del CRC, y posteriormente se espera a que Flag_Reloj=0 para dar inicio a su transmisión, y se activa Flag_Tx una vez terminada dicha operación. Este mismo proceso se repite para el segundo byte del CRC.

Después pasa a esperar a que Flag_Reloj=1, para tomar el carácter de fin de paquete, y espera a que Flag_Reloj=0 para transmitirlo, lo cual activa Flag_Tx, dando por finalizado la transmisión del primer paquete de información (ver figura 4.4). Posteriormente se reinicializan los canales analógicos, y posteriormente se toma y se transmite el carácter de inicio de paquete repitiéndose todo el procedimiento ya mencionado (ver figura 4.5).

Con lo mencionado anteriormente, se puede observar que todo el control se realiza a través del reloj de tiempo real implementado, por medio de TMR1. Ya que a través de este y de la bandera Flag_Reloj, se controla cuando tomar un dato, cuando transmitirlo, y a además proporciona la base de tiempos para la medición de la frecuencia. Y es importante mencionar que todas las banderas indicadoras se desactiva cuando Flag_Reloj=0.

Carácter de inicio de paquete Voltaje Planta de Fuerza Corriente Planta de Fuerza Voltaje Banco de Baterías Corriente Banco de Baterías

C.F.E. Transferencia Frecuencia CRC CRC

Carácter de fin de paquete ORDEN DE TRANSMISIÓN DE CADA BYTE

1 2 3 4 5 6 7 8 9 10 11

INICIO DECLARAR REGISTROS

CONFIGURAR PUERTOS E/S INTERRUPCIÓN CONFIGURAR USART CONFIGURAR TIMERS Flag_Reloj=1? SI NO Flag_Reloj=0? SI NO TRANSMITIR DATO

CONFIGURAR PORTA COMO ENTRADA (DDAARAAA)

TOMAR CARÁCTER DE INICIO DE PAQUETE

TSR ESTA VACÍO? SI NO Flag_Reloj=1? SI NO SELECCIONAR CANAL

ADQUIRIR EL DATO (Analógico)

TERMINO CONVERSIÓN A/D?

SI NO ACTIVAR Flag_CAD ALMACENAR DATO Flag_Reloj=0? SI NO TSR ESTA VACÍO? SI NO TRANSMITIR DATO ACTIVAR Flag_Tx A 1

SIGUIENTE CANAL Flag_Reloj=1? SI NO Flag_Reloj=0? SI NO TRANSMITIR DATO TOMAR DATO (Digital)

TSR ESTA VACÍO? SI NO CALCULAR CRC-16 ACTIVAR Flag_CRC_16 TOMAR BYTE CRC Flag_Reloj=0? SI NO TSR ESTA VACÍO? SI NO TRANSMITIR DATO ACTIVAR Flag_Tx B

SE TRANSMITIERON LOS DATOS DE LOS 4 CANALES ANALÓGICOS? NO SI A 1 ALMACENA DATO

SE TRANSMITIERON LOS DATOS DE LOS 3 CANALES DIGITALES? NO SI SIGUIENTE CANAL Flag_Reloj=1? SI NO ACTIVAR Flag_Tx

SE TRANSMITIERON LOS 2 BYTES DEL CRC?

NO SI

Flag_Reloj=1? SI NO Flag_Reloj=0? SI NO TRANSMITIR DATO TOMAR CARÁCTER DE FIN DE PAQUETE

TSR ESTA VACÍO? SI NO 1 B ACTIVAR Flag_Tx Flag_Reloj=1? SI NO Flag_Reloj=0? SI NO TRANSMITIR DATO TOMAR CARÁCTER DE INICIO DE PAQUETE

TSR ESTA VACÍO?

SI NO

ACTIVAR Flag_Tx

SE GENERA INTERRUPCIÓN

TOMAR FRECUENCIA LIMPIAR TMR0

INICIO TRANSCURRIERON 45.45mseg? SI NO DESACTIVAR: Flag_Reloj Flag_Tx Flag_CAD Flag_CRC_16 TRANSCURRIO 1seg? SI NO CONFIGURAR TIMER1 Flag_Reloj=0? SI NO ACTIVAR Flag_Reloj

La figura 4.6 muestra el circuito del sistema de monitoreo: