Está en la página 1de 16

INFORME

PRACTICA 1: TÉCNICAS DE ATENCIÓN DE EVENTOS Y MODOS DE BAJO CONSUMO

AUTORES
Luis Alfonso Villero Peña (luisvillero@javeriana.edu.co)
Andrés Mateo Aldana Parada (aldana_a@javeriana.edu.co)

Análisis del diseño, criterios. Esquemáticos y PCB listo para fabricar.


1. Esquemático
La parte analógica del sistema para esta aplicación es relativamente simple, esta consiste en;
Adquisición y tratamiento de la señal que se va a medir, un elemento/s que nos permita medir el
consumo de nuestro circuito en su totalidad, el microprocesador PIC16F1827 que se encarga de
realizar la conversión AC/DC y sus respectivas conexiones al módulo serial y el programador
Snap, y por último el circuito que enciende y apaga los LEDs siete segmentos.

• Consumo del circuito

Figura 1. Diagrama representando la resistencia de shunt para medición de corriente

Se planea medir el consumo del sistema conectando una resistencia con resistencia
extremadamente pequeña justo después de la alimentación VCC, por lo cual toda la corriente del
circuito debe transitar sobre esta resistencia, luego utilizando los headers P0 se puede obtener las
medidas de consumo deseadas

• Adquisición y tratamiento de la señal

Debido a que el ADC de nuestro PIC tiene una resolución de 5V es necesario disminuir el voltaje
a la mitad usando un divisor de voltaje de alta impedancia, luego del cual la señal pasa mediante
de un seguidor de voltaje con el fin de dejar la señal eléctricamente aislada a los demás elementos
del sistema.
2. Descripción de rutinas
Para lograr el funcionamiento del sistema podemos separar el código mediante rutinas de código; que
serán explicadas a continuación.
Para realizar la adquisición de datos inicialmente tenemos una rutina de adquisición de ADC, donde
configuramos nuestro ADC, seleccionando el canal de entrada del ADC, dado que en particular el
PIC16F1827 posee un solo canal de conversión análoga digital que alterna mediante un
multiplexor entre diferentes canales de entrada; entonces esta rutina gestiona la habilitación del
modulo de ADC, la selección del canal de entrada correspondiente (en nuestro caso el canal RA0
identificado como el canal 0 dentro del multiplexor), posteriormente determina el inicio de una
conversión mediante el bit ADCON0BITS.GO_nDONE, que al tomar valor de 1 inicia una
conversión; el final de la cual se identifica cuando este mismo bit toma valor de 0 nuevamente;
finalmente esta rutina realiza el almacenamiento del resultado, para esto necesitamos entender el
formato de resultado, nuestro procesador es de 8 bits mientras que el ADC es de 10, con lo que el
resultado del ADC se encuentra repartido entre 2 registros diferentes: ADRESH y ADRESL
donde dependiendo de la configuración del ADC, uno de los registros posee 8 bits y el otro tan
solo 2, en este caso está configurado justificado a la derecha, implicando que ADRESL tiene 8
bits de datos y ADRESH tiene 2 bits de datos, resultando en que ((ADRESH << 8) + ADRESL) es
la operación binaria necesaria para juntar los registros y generar la respuesta de ADC.
La siguiente rutina es la rutina de cálculos; dado que el resultado anterior obtenido del ADC es un
numero de 10 bits es tan solo un valor de entre 0 y 1024 que en si mismo no es el dato que nos
interesa a nivel de circuito, para realizar esta conversión realizamos una multiplicación del valor
obtenido por un factor de conversión igual a 10/1024 con un tipo de variable float; esto para
convertir al rango de valores de entrada de entre 0 y 9,99 voltios con dos decimales de precisión,
la siguiente operación sobre el resultado es la separación en dígitos, para la cual emplearemos el
operador modulo; el cual retorna el residuo de la división especificada, es decir, la operación 32 %
10 retorna un valor de 2, siendo este el residuo de 32 dividido entre 10. Con este operador en
mente, realizamos un typecast de float a integer, multiplicamos el valor convertido por 100 y
aplicamos modulo 10 para el digito centesimal; multiplicamos por 10 y aplicamos el modulo 10
para el digito decimal y solamente realizando el typecast tenemos el valor de unidades, esto es
debido a que en C al realizar el cambio de variable de float a integer el compilador trunca el valor,
eliminado los decimales.
Con el resultado separado en los 3 dígitos, realizamos la rutina de envío mediante el módulo
EUSART, empleando la función EUSART_Write () definida dentro del MCC de MPLAB como
una función que recibe un unsigned integer de 8 bits como entrada; este dato es enviado mediante
el modulo EUSART por esta función; empleamos esta misma 3 veces en el orden unidad, decimal,
centesimal para enviar los 3 dígitos mediante comunicación serial a un computador.
Con este mismo resultado de 3 dígitos tenemos la rutina de decodificación del 7 segmentos, esta se
encuentra definida mediante el subproceso sietedecoder (), que recibe como entrada un valor
numérico de entre 0 y 9, el cual, empleando un switch case, ubica con que segmentos debe
encender para generar ese numero en un display 7 segmentos, esto se realiza con las funciones
x_SetLow () y x_SetHigh (), definidas mediante el MCC de MPLAB en el Pin Manager,
x_SetLow () asigna el valor de 0 y x_SetHigh () asigna el valor de 1 al pin espeficicado en la x
respectivamente. Con esto y con 2 contadores, uno de tiempo 1 segundo y otro de 5 ms,
realizamos el display de 7 segmentos nuestro dato; al final el envio en la EUSART empezamos el
contador de 1 segundo que nos mantiene en un loop donde pasamos el valor de unidades a
sietedecoder () por 5 ms habilitamos solo el display de unidades, luego se hace lo mismo en
decimales y luego lo mismo en centésimas; del mismo modo hasta que el contador de 1 segundo
notifica que es momento de tomar una medida nueva en el ADC; regresando a la primera rutina.
3. Criterios de configuración
Buscar minimizar el consumo del sistema fue el mayor criterio de configuración para nuestras
variables dentro del circuito; para esto tomamos la frecuencia de reloj más lenta posible que
cumpliera con los siguientes criterios:
• Una velocidad de comunicación serial mayor a 1000 baudios por segundo con una tasa de
error de menos del 5%
• Una velocidad de conversión de ADC de entre 1 us como máximo y 6 us como máximo;
buscando siempre la más baja posible
Lo anterior lo expresamos en la siguiente tabla:
Velocidad de reloj Velocidad de ADC Tasa de baudios con error
31 kHz 64,5 us 300 bps a 0,641%
62,5 kHz 32 us 1200 bps a 0,160%
125 kHz 16 us 2400 a 0,160%
250 kHz 8 us 2400 a 0,160%
500 kHz 4 us 9600 a 0,160%
Así vemos que la primera frecuencia en cumplir nuestros estándares es 500 kHz, lo cual
inmediatamente introduce el criterio de tasa de baudios del ADC, en 9600, una tasa
relativamente rápida con bajo error.
La siguiente variable por discutir es la referencia del ADC; idealmente se busca no tomar VCC
y VSS como referencias de voltaje del conversor; pero en este caso nos vemos forzados a
tomarlas como la mejor opción disponible, debido a que no disponemos de los pines para
gestionar una referencia externa de voltaje ajena a VCC y VSS mientras que la referencia de
voltaje interna (modulo FVR) no es práctico para nuestra aplicación, al tener un valor máximo
posible 4,096 V, perderíamos 1 voltio entero de resolución de nuestro ADC, lo cual es
demasiado para considerar aceptable; emplear este valor reduce nuestro valor máximo de
entrada a 8,19 V en lugar de los 9,99 V que esperaríamos tener.
4. Medidas de consumo
Utilizando la resistencia R0 de un valor de 2 ohm a la entrada de la señal a medir conectada en
seria a la etiqueta “VCC” global, podemos encontrar la corriente que pasa por esa resistencia, que
equivale a la corriente que le entra al circuito, con este valor y la alimentación constante de 5
voltios podemos encontrar las gráficas de consumo.
Para cada uno de los modos se obtuvieron 2 graficas del consumo del circuito, ya que este varia
con respecto a la rutina que se esté ejecutando, se tomara los casos donde se está mostrando 0.88
V y 1.11 V en el led 7 segmentos, ya que nos da el caso de “mayor y menor” consumo, debido a la
cantidad de led individuales necesarios para imprimir el número deseado, se obtuvieron las
siguientes graficas:
• Modo por polling
Consumo: "Maximo"_poll
6,00E-01
5,00E-01
4,00E-01
Consumo (W)

3,00E-01
2,00E-01
1,00E-01
0,00E+00
-1,50E-08 -1,00E-08 -5,00E-09-1,00E-01
0,00E+00 5,00E-09 1,00E-08 1,50E-08
-2,00E-01
-3,00E-01

Tiempo (S)
Promedio = 135 mW

Consumo: "Minimo"_ poll


0,6
0,5
0,4
0,3
Consumo (W)

0,2
0,1
0
-1,50E-03 -1,00E-03 -5,00E-04 0,00E+00
-0,1 5,00E-04 1,00E-03 1,50E-03

-0,2
-0,3

Tiempo (S)

Promedio = 95.7 mW

• Modo por interrupciones


Consumo: "Maximo"_ int
6,00E-01

5,00E-01

4,00E-01
Consumo (W)

3,00E-01

2,00E-01

1,00E-01

0,00E+00
-1,50E-08 -1,00E-08 -5,00E-09 0,00E+00 5,00E-09 1,00E-08 1,50E-08
-1,00E-01

-2,00E-01

Tiempo (S)

Promedio = 148 mW

Consumo: "Minimo"_ int


5,00E-01

4,00E-01

3,00E-01
Consumo (W)

2,00E-01

1,00E-01

0,00E+00
-1,50E-08 -1,00E-08 -5,00E-09 0,00E+00 5,00E-09 1,00E-08 1,50E-08
-1,00E-01

-2,00E-01

Tiempo (S)

Promedio = 102 mW

• Modo de Bajo Consumo


Consumo: "Maximo"_ sleep
0,6
0,5
0,4
0,3
Consumo (W)

0,2
0,1
0
-3,00E+03 -2,00E+03 -1,00E+03 0,00E+00 1,00E+03 2,00E+03 3,00E+03
-0,1
-0,2
-0,3

Tiempo (S)

Promedio = 120.3 mW

Consumo: "Minimo"_ sleep


6,00E-01
5,00E-01
4,00E-01
3,00E-01
Consumo (W)

2,00E-01
1,00E-01
0,00E+00
-3,00E-01 -2,00E-01 -1,00E-01 -1,00E-01
0,00E+00 1,00E-01 2,00E-01 3,00E-01
-2,00E-01
-3,00E-01
-4,00E-01

Tiempo (S)

Promedio = 114 mW
En todos los 3 casos anteriores se pueden observar un número de aspectos comunes del
comportamiento del consumo:
1) en el caso “máximo” (donde imprime 0.88 en el display) se observa unos picos más altos y
un promedio de voltaje mayor a los presentes en el caso “mínimo” (donde se imprime 1.11)
2) En las gráficas se observa que hay puntos donde se obtiene un consumo negativo, lo cual no
debería ocurrir, por lo cual atribuimos este error a: a) errores en la medición causado sea
por el impreso PCB, puntas de medición y demás retos presentes en el mundo de la
electrónica practica y b) En momentos de consumo extremadamente bajo, parte de la
corriente recibida por la fuente se escapa mediante las conexiones seriales al computador
portátil y el programador SNAP usado para programar el microchip.
3) Y último y más importante, es la naturaleza variable del consumo en esta clase de sistema,
ya que la energía que necesita aumenta o disminuye dependiendo de la tarea o función que
este realizando. El más claro ejemplo de esta varianza es el aumento de consumo que causa
el uso de los diplays 7 segmentos, ya que cada uno de los leds individuales requieren una
cantidad decente de energía para encenderse, por esta razón escogimos los números “088” y
“111” ya que presentan una gran diferencia en el número de bombillos necesarios para
mostrar el número en el display.
5. Función de transferencia del ADC
Para la transferencia del ADC realizamos la medición manualmente de entre 0 y 9,99 V
comparando entre el valor expresado en la variable volt observada mediante el modo debug de
MPLAB y el valor obtenido de la misma señal de voltaje en un DVM de laboratorio. Este
proceso se realizó con 10 valores tomados entre 0 y 9 V con pasos de 1 V entre cada dato; esto
se hizo tanto para polling como para interrupciones, resultando en las siguientes gráficas:

Función de trasnferencia interrupciones


10
9 y = 0,8284x + 0,4789
8 R² = 0,9605
7
Voltaje PIC

6
5
4
3
2
1
0
0 2 4 6 8 10 12
Voltaje DVM

Función de transferencia polling


10
9 y = 0,8281x + 0,4599
8 R² = 0,9636
7
Voltaje PIC

6
5
4
3
2
1
0
0 2 4 6 8 10 12
Voltaje DVM

Aquí evidenciamos un problema con nuestro diseño, nuestro amplificador buffer a la entrada del
ADC no estuvo escogido correctamente, resultado en que se satura en torno a los 7,5 V de entrada,
mediante experimentación comprobamos que se trataba de saturación de la entrada, dado que
testeamos ingresando la señal después del buffer; señal que se reflejaba correctamente en el modo
debug dentro de MPLAB.
Si excluimos la parte saturada de la señal; asumiendo linealidad en adelante nos quedarían las
siguientes gráficas.

Función de transferencia polling


8
7 y = 0,9936x + 0,0033
R² = 1
6
Voltaje PIC

5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
Voltaje DVM

Función de transferencia interrupciones


8
7 y = 1,0019x + 0,0013
R² = 1
6
Voltaje PIC

5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
Voltaje DVM

Esas reflejan más correctamente lo que esperábamos de la función de transferencia del sistema,
linealidad y lo más similar posible a una forma de y = 1x.
6. Protocolos de medición
Ahora explicaremos como se realizaron las respectivas mediciones del informe:
• Función de transferencia del ADC: Para encontrar el valor de la función transferencia se le
alimentaron diferentes valores de voltaje para medir de manera incremental, luego se
anotaron los valores resultantes: a) el valor medido mediante el DVM directamente en la
fuente de voltaje de la señal. b) el valor resultante de la conversión ADC realizado por el
PIC16F1827 (0 a 1024 bits) mediante el puerto serial, y finalmente c) el valor de voltaje
obtenido luego de operar matemáticamente el resultado de la conversión
• Impresión puerto serial EUSART: Se realizaron las conexiones adecuadas con el PIC y se
configuro el software SerialPlot con los factores necesarios y se observa tanto la gráfica
como el valor en bits que nos proporciona el ADC del microprocesador
• Mediciones del tiempo de las rutinas: Al tener el programa en funcionamiento se midió con
la punta del osciloscopio el comportamiento de la señal de pulsos generada por uno de los
pines GPIO del microprocesador, específicamente el pin 18, T1, el que se encargaba de
controlar el transistor encargado de la multiplexación del display 7 segmentos
• Mediciones del consumo del circuito: En primer lugar, el circuito fue diseñado con una
resistencia la cual se conectada en serie con el pin de alimentación y la etiqueta de “VCC”
global, se usó una resistencia pequeña de 2 ohm.
Con esta resistencia se procede a poner al sistema a funcionar de manera normal, y usando
los dos canales del osciloscopio de adquieren el voltaje a cada lado de la resistencia. Luego de
obtener estas 2 señales, fueron exportadas a Excel, donde se restaron, para obtener el voltaje
cae sobre la resistencia, y a su vez, su corriente. Ya que la resistencia se encuentra en seria con
el resto de la alimentación VCC tomamos esta corriente como la corriente que entra a nuestro
sistema, y finalmente se opera con el voltaje constante de 5 voltios para encontrar el consumo
del sistema.
7. Mediciones de tiempo
Se observo la duración de las rutinas midiendo con el osciloscopio los pulso que ocurrían en el pin
del microcontrolador PIC encargado de activar el transistor multiplexado a los pines 3 y 8 de los 7
segmentos, se obtuvieron los siguientes resultados:
• Modo por polling

Tiempo: modo_polling
4,50E+00
4,00E+00
3,50E+00
3,00E+00
Voltaje (V)

2,50E+00
2,00E+00
1,50E+00
1,00E+00
5,00E-01
0,00E+00
-6,00E-02 -4,00E-02 -2,00E-02 -5,00E-01
0,00E+00 2,00E-02 4,00E-02 6,00E-02

Tiempo (S)
Se puede observar que en el caso de polling la señal se mantiene en alto por menos tiempo de la
que esta en bajo, 5 ms en alto y 10 ms en bajo respectivamente. Esto permite el correcto
funcionamiento del ciclo de los demás 7 segmentos

7 segment - collector (poll)


4,00E+00
3,50E+00
3,00E+00
2,50E+00
2,00E+00
Voltaje (V)

1,50E+00
1,00E+00
5,00E-01
0,00E+00
-6,00E-05 -4,00E-05 -2,00E-05 0,00E+00 2,00E-05 4,00E-05 6,00E-05
-5,00E-01

Tiempo (S)
Para esta grafica se midió el valor de voltaje en el colector del transistor 1 (encargado del 7
segmentos número 1), y podemos ver que la multiplexación del display se mantiene en bajo por 50
mS en un periodo de tiempo que se repite
• Modo por interrupciones

Tiempo: modo_interrupcion
4,50E+00
4,00E+00
3,50E+00
3,00E+00
2,50E+00
Voltaje (V)

2,00E+00
1,50E+00
1,00E+00
5,00E-01
0,00E+00
-3,00E-01 -2,00E-01 -1,00E-01 0,00E+00 1,00E-01 2,00E-01 3,00E-01
-5,00E-01

Tiempo (S)
• Modo de bajo consumo

Tiempo: Bajo_consumo
4,50E+00
4,00E+00
3,50E+00
3,00E+00
2,50E+00
Voltaje (V)

2,00E+00
1,50E+00
1,00E+00
5,00E-01
0,00E+00
-3,00E-01 -2,00E-01 -1,00E-01-5,00E-01
0,00E+00 1,00E-01 2,00E-01 3,00E-01

Tiempo (S)

También podría gustarte