Story Transcript
Taller de Firmware
Técnicas de Manejo de E/S Facultad de Ingeniería Instituto de Computación
Introducción
(1/1)
• Los distintos tipo de dispositivos de hardware con los que se debe interactuar tienen particularidades que debemos contemplar. • También los recursos de interfaz muchas veces son escasos por lo que hay que aprovecharlos al máximo y reutilizarlos de ser posible. • Todo esto lleva al desarrollo de técnicas de manejo de dispositivos que deberán estar implementadas adecuadamente en el software.
Contenido • Efecto Rebote • Optimización de Entradas • Optimización de Salidas • Modulación por Ancho de Pulso
Efecto Rebote • Aspectos Mecánicos • Efecto Rebote • Ataque por hardware • Ataque por software
Aspectos Mecánicos
(1/3)
• Las llaves y botones (incluyendo las “teclas”) son, normalmente, dispositivos mecánicos que cierran un circuito poniendo en contacto dos láminas metálicas. • En el caso de las teclas actualmente se utilizan también otros tipos de métodos (ej: el capacitivo) que no presentan el fenómeno estudiado.
Aspectos Mecánicos
Tomado del Catálogo de Cherry Corporation
(2/3)
Aspectos Mecánicos
Tomado del Catálogo de Cherry Corporation
(3/3)
Efecto Rebote
(1/3)
• Las láminas metálicas utilizadas en la construcción de las llaves/botones poseen, inherentemente, elasticidad. • Por ello al intentar ponerlas en contacto se genera un choque que produce un movimiento en sentido contrario que aleja las láminas. • Este proceso se repite hasta disipar la energía cinética adquirida por la lámina móvil.
Efecto Rebote
(2/3)
• Este fenómeno es conocido como efecto rebote. • El efecto se manifiesta en el hecho que el cierre (apertura) del circuito no es instantáneo. • Durante un cierto tiempo la llave (ó el botón) oscila entre cerrado y abierto. • El fenómeno se puede dar tanto al cerrar el circuito como al abrirlo.
Efecto Rebote
(3/3)
ON
OFF t
Ataque por Hardware
(1/4)
• La forma mas sencilla de minimizar el problema por hardware es mediante el uso de un circuito RC.
Tomado de www.embedded.com
Ataque por Hardware
(2/4)
• El circuito RC si bien no evita el rebote, logra que no haya una oscilación entre cerrado y abierto. • Esto se logra porque el condensador debe perder (ó ganar) su carga (a través de la resistencia) lo que demora un cierto tiempo. • Esto “suaviza” la evolución en el tiempo del nivel de la entrada de la compuerta y permite que su salida no siga los vaivenes de la apertura y cierre de la llave.
Ataque por Hardware
(3/4)
• Los valores de R1, R2 y C se eligen de forma que la constante de tiempo del circuito de carga ((R1+R2) * C) y descarga (R2 * C) sean similares al tiempo de establecimiento del contacto (el que demora la lámina móvil en detenerse).
Ataque por Hardware
(4/4)
1 0 ON
OFF
Vin t
Ataque por Software
(1/5)
• Una de las formas de resolver el problema por software es con una técnica de “cambio de estado demorado”. • Esta técnica consiste en cambiar el estado de la entrada conectada a la llave un cierto tiempo después que se haya detectado el primer cambio e ignorando todo cambio intermedio que haya. • Ese tiempo debe ser superior al de establecimiento de la llave.
Ataque por Software
(2/5)
• Ejemplo de código de implementación: if (in(LLAVE) != valor_llave) { delay(T_ESTABLECIMIENTO); valor_llave = !valor_llave; }
Ataque por Software
(3/5)
• Otra forma de resolver el tema es por la técnica de “cambio de estado confirmado”. • Consiste en cambiar de estado solamente luego que un cierto número de muestras periódicas y consecutivas de la entrada coincidan en un nuevo valor. • El número de muestras se debe elegir en función de la frecuencia de muestreo y del tiempo de establecimiento de la llave.
Ataque por Software
(4/5)
• Ejemplo de código de implementación (polling): if (in(LLAVE) != valor_llave){ cont = 0; while ((in(LLAVE) != valor_llave) && (cont < MAX_CONT_REBOTE)) { delay(T_MUESTRA); cont++; } if (cont >= MAX_CONT_REBOTE) valor_llave = !valor_llave; }
Ataque por Software
(5/5)
• Ejemplo de código de implementación (interrupción): void interrupt timer() { if ((in(LLAVE) != valor_llave)&& (cont != 0)) { cont++; if (cont >= MAX_CONT_REBOTE) { valor_llave = !valor_llave; cont = 0; } } else { if (in(LLAVE) != valor_llave) cont = 1; else cont = 0; }
Resumen
(1/1)
• El efecto rebote aparece en toda llave o botón (switch) implementado por medios mecánicos. • Puede ser resuelto por hardware (típicamente mediante un circuito RC). • Puede ser resuelto por software – por “cambio demorado” – por “cambio confirmado”
Optimización de Entradas • Escasez de Puertos de E/S • Codificación de Entradas • Multiplexado en el tiempo • Organización Matricial • Precauciones a considerar
Escasez de Puertos de E/S
(1/2)
• Los puertos de E/S son, normalmente, un recurso escaso en los microcontroladores. • Es poco común encontrar microcontroladores que tengan más de algunas decenas de puertos. – 8, 16, 32 son números habituales
• Son además compartidos entre entrada y salida. – muchos microntroladores permiten elegir la función de cada puerto por programación.
Escasez de Puertos de E/S
(2/2)
• El problema es cuando tengo más señales lógicas de entrada a considerar que los puertos disponibles. • Por ejemplo consideremos el caso de un teclado. – Aún si el teclado es solamente numérico se necesitarían 10 entradas (una para cada tecla asociada a un dígito) y un par más para “aceptar” y “borrar”, por ejemplo. – Un teclado de PC tiene más de 100 teclas.
Codificación de Entradas
(1/5)
• Una forma directa de resolver el problema sería la codificación de las entradas. • De esta forma si tenemos N señales de entrada precisaríamos: puertos = log2 (N+1) nota 1: α = parte entera superior de α nota 2: el 1 es para reservar un código (ej: el 0) para cuando no hay señal activa
PE2 PE1 PE0
c b a
Codificador
Microcontrolador
Codificación de Entradas D7 D6 D5 D4 D3 D2 D1
(2/5)
Señales
Codificación de Entradas
(3/5)
• El problema fundamental de esta técnica es que solamente puede identificar una señal de entrada por vez. • Si más de una señal de entrada se activa al mismo tiempo la codificación que aparecerá en los puertos de entrada dependerá de cómo se realice el codificador, pero probablemente sea errónea.
Codificación de Entradas
(4/5)
• El siguiente es un circuito codificador sencillo, pero que falla si hay dos señales activas a la vez:
Codificación de Entradas
(5/5)
• Este circuito codificador es más elaborado y resuelve el problema de la simultáneidad asignando jerarquía.
Multiplexado en el Tiempo
(1/3)
• Una forma habitual de resolver el problema de la escasez de puertos es reutilizando las mismas entradas para distintas señales en momentos de tiempo distinto. • Esto se logra multiplexando las señales en el tiempo. • De esta forma un puerto de entrada estará asociado a una señal diferente en cada instante.
Multiplexado en el Tiempo
(2/3)
• El ahorro se comprueba de la siguiente forma: – Supongamos que tengo 8 señales. – Si no las multiplexara precisaría 8 puertos (de entrada) para manejarlas. – Pero si las multiplexo me alcanza con 4 puertos • 3 de salida para seleccionar la señal a presentar • 1 de entrada para recibir el valor – Otra forma sería: • 2 de salida para seleccionar una pareja de señales • 2 de entrada para recibir los valores
PS2
c
PS1 PS0
b a
PE0
S
Multiplexor
Microcontrolador
Multiplexado en el Tiempo D7 D6 D5 D4 D3 D2 D1 D0
• En general para N señales se necesitan: puertos = log2 N + 1
(3/3)
Señales
Organización Matricial
(1/3)
• Para el caso particular de los teclados se suelen emplear estrategias intermedias, en función de la cantidad de puertos disponibles. • El objetivo es simplificar el circuito externo, evitando el uso de mutiplexores y/o codificadores. • Se utiliza el arreglo matricial de las teclas. puertos = m + n, con m.n ≥ N
Organización Matricial
(2/3)
• Veamos el ejemplo del teclado numérico: – 10 teclas de dígitos – 1 tecla de “Aceptar” y 1 tecla de “Borrar”
• Son 12 teclas en total. • Se precisarían: – 12 entradas (método directo) – 4 (codificado) – 5 (multiplexado en el tiempo estándar)
Organización Matricial
(3/3)
• En el caso de la organización matricial vamos a requerir 7 puertos en el ejemplo. Microcontrolador
PS3 1
2
3
4
5
6
7
8
9
B
0
A
PS2 PS1 PS0 PE2 PE1 PE0
Precauciones a Considerar
(1/1)
• En el caso de utilizar codificación hay que recordar que no se pueden detectar distintas señales en forma simultánea, por lo que está reservado a unos pocos casos particulares. • En el caso de multiplexado en el tiempo, el problema de simultaneidad no se da, pero la frecuencia de muestreo debe ser significativamente superior a la frecuencia más alta de las señales de entrada.
Resumen
(1/1)
• Los puertos de un microcontrolador son un recurso escaso a cuidar. • Para optimizar su uso se puede recurrir a técnicas de codificación, multiplexado en el tiempo ú organización matricial de las entradas. • Cada técnica tiene sus limitaciones y condiciones de aplicabilidad.
Optimización de Salidas • Escasez de Puertos de E/S • Codificación de Codificación • Multiplexado en el tiempo – Latch Externo – Ciclo de Trabajo
• Organización Matricial • Precauciones a considerar
Escasez de Puertos de E/S
(1/1)
• Al igual que en el caso de las entradas el problema de contar con un número limitado de puertos también se da con las salidas. • El tipo de soluciones pasa más o menos por los mismos lugares ya vistos, con algunas particularidades por tratarse, en este caso, de salidas.
Codificación de Salidas
(1/3)
• Al igual que en las entradas es posible la codificación de las salidas. • De esta forma si tenemos N señales de salida precisaríamos: puertos = log2 (N+1) nota 1: α = parte entera superior de α nota 2: el 1 es para reservar un código (ej: el 0) para cuando no hay ninguna salida activa
PS2 PS1 PS0
c b a
Decodificador
Microcontrolador
Codificación de Salidas D7 D6 D5 D4 D3 D2 D1
(2/3)
Señales
Codificación de Salidas
(3/3)
• El problema fundamental de esta técnica es que solamente puede identificar una señal de salida por vez. • Si bien en este caso no hay problema de error de codificación, la restricción de no simultaneidad es mucho más restrictiva: sólo puede haber una salida activa en cada instante del tiempo.
Multiplexado en el Tiempo
(1/3)
• En el caso de las salidas también es factible el multiplexado en el tiempo. • En este caso en cada instante un puerto de salida tendrá el valor de una determinada señal de salida. • El principal problema aquí es cuando las señales de salida deben ser persistentes en el tiempo, o sea deben tener un nivel constante.
PS2
c
PS1 PS0
b a
PS3
G
Demultiplexor
Microcontrolador
Multiplexado en el Tiempo D7 D6 D5 D4 D3 D2 D1
(2/3)
Señales
Multiplexado en el Tiempo
(3/3)
• Por esto es que normalmente la técnica de multiplexado se acompaña de mecanismos complementarios que viabilicen su uso: - Latch Externo - Ciclo de Trabajo
Multiplexado en el Tiempo Latch Externo (1/2)
• En este caso se procede a colocar Flip-Flops externos al microcontrolador para guardar los estados de las señales de salida. • Se puede usar el reloj del sistema para sinronizar o se puede generar un flanco de reloj mediante un puerto de salida del microcontrolador
Multiplexado en el Tiempo Latch Externo (2/2)
PS2
c b a
PS1 PS0
PS3
CLK
Decodificador
Microcontrolador
D D7 D6 D5 D4 D3 D2 D1 D0
Q
CE
D CE
Señales Q
Multiplexado en el Tiempo Ciclo de Trabajo (1/7)
• Otra forma muy habitual de multiplexar salidas en el tiempo es utilizar algunas características físicas de los fenómenos que se quieren manipular con las señales de salida. • Típicamente: – constantes de tiempo térmicas en fenómenos de transferencia de energía. – persistencia de las retinas de los seres humanos.
Multiplexado en el Tiempo Ciclo de Trabajo (2/7)
• Las mencionadas características están vinculadas al denominado “ciclo de trabajo”. • Este parámetro caracteriza una onda cuadrada (o mejor dicho rectangular) y establece la relación entre la duración del estado “alto” respecto a la del ciclo completo en un período. • Una onda cuadrada “perfecta” tiene un ciclo de trabajo del 50%.
Multiplexado en el Tiempo Ciclo de Trabajo (3/7)
• El multiplexado en el tiempo con ciclo de trabajo compensado, busca generar el mismo valor medio de la señal en el ciclo completo. • Si estoy multiplexando N señales, entonces el valor de salida deberá ser N veces más grande durante el “time-slot” que le corresponda a la iésima señal, para compensar su falta en el resto del ciclo.
Multiplexado en el Tiempo Ciclo de Trabajo (4/7)
• Como muchos fenómenos físicos responden al valor medio (o a la integral en el tiempo) de la señal, entonces no ven afectado su efecto por el uso del multiplexado. • Ejemplo: – supongamos que tengo que entregar 50 Joules a una resistencia para calentar un horno de precisión, usando una fuente de 5 Volts.
Multiplexado en el Tiempo Ciclo de Trabajo (5/7)
– La forma directa es entregarle 10 A en forma constante en el tiempo. • P = V.I = 5 V . 10 A = 50 Watts • E = ∫ P dt = 50 Joules (en cada segundo)
– Si multiplexo en el tiempo la señal de “activación” del horno con otras 4, entonces ahora la función potencia tiene un valor P durante 200 ms y 0 durante 800 ms. – Para que la integral siga valiendo lo mismo, entonces debe ser P = 250 W, lo que significa un valor 5 veces mas alto de corriente, I = 50 A.
Multiplexado en el Tiempo Ciclo de Trabajo (6/7)
• Esto es efectivamente equivalente y funciona, porque lo que importa es la integral en el tiempo y no el valor instantáneo de la señal de salida. • Y esto es así en los fenómenos físicos que impliquen capacidad de acumulación por parte de los elementos intervinientes.
Multiplexado en el Tiempo Ciclo de Trabajo (7/7)
• En el caso de lámparas y/o LEDs el fenómeno que se utiliza es similar, basado en la cracterística de persistencia del ojo humano. • El ojo humano no es capaz de seguir el parpadeo de una fuente de luz que destelle a más de 20 y tantas veces por segundo. • Esta característica es la que permite, entre otras cosas, la técnica del cine.
Organización Matricial
(1/4)
• En algunos casos se utiliza la organización matricial de las salidas, típicamente junto a la técnica de multiplexado en el tiempo. • Un ejemplo clásico es el de los displays de 7 segmentos, que se manejan con 7 salidas para los segmentos y M salidas de activación, una por cada display. – usa el hecho que los display son un conjunto de LEDs con cátodo común.
Organización Matricial
(2/4)
• En el caso de la organización matricial vamos a
Microcontrolador
requerir 10 puertos en el ejemplo. PS6 PS5 PS4 PS3 PS2 PS1 PS0 PS9 PS8 PS7
Organización Matricial
(3/4)
• Un ejemplo más “radical” de organización matricial y multiplexado en el tiempo es el que utilizan los letreros en base a LEDs (usados en aplicaciones de anuncios, por ej. en algunas líneas de transporte colectivo). • En este caso se codifican las columnas de LED (se activa una por vez). – Al igual que en el caso anterior no se muestran las resistencias limitadoras de corriente
PS7 PS6 PS5 PS4 PS3 PS2 PS1 PS0 PS15 PS14 PS13 PS12 PS11 PS10 PS9 PS8
Decodificador
Microcontrolador
Organización Matricial
(4/4)
Precauciones a Considerar
(1/2)
• En el caso de utilizar manejo del ciclo de trabajo se deben cuidar los valores máximos de corriente que acepten los dispositivos involucrados. • Si bien en materia de disipación de calor no hay cambio, el valor de pico de corriente es mucho más alto, lo que puede no ser soportado por los dispositivos.
Precauciones a Considerar
(2/2)
• En el caso particular de LEDs ó lámparas también hay que cuidar que la frecuencia de muestreo sea superior a 25 Hz, de forma de utilizar la persistencia del ojo. • En términos generales la frecuencia de muestreo debe ser coherente con las constantes de tiempo de los sistemas involucrados.
Resumen
(1/1)
• Lo mismo que se ha analizado para los puertos que actúan vale para los de salida. • Las técnicas para su optimización son similares, aunque su aplicación es más restrictiva. • El muestreo con compensación del ciclo de trabajo es una técnica muy utilizada que se basa en la existencia de “inercia” en la naturaleza, incluyendo el ojo humano.
Modulación Ancho de Pulso • Introducción a PWM • Implementación Hardware • Implementación Software • Aplicaciones PWM – transmisión de información – control de potencia
Introducción a PWM
(1/5)
• La Modulación por Ancho de Pulso (PWM = Pulse Width Modulation) es una técnica de modulación que utiliza la modificación del ciclo de trabajo de una onda rectangular. • Esa alteración del ciclo de trabajo resulta en la modificación del valor medio de la onda, en forma proporcional a ese cambio.
Introducción a PWM
(2/5)
V
0
0 αT
T
t
Introducción a PWM • El valor medio de la señal es: T
s=
1 T
∫ s(t )dt 0
dada la forma de la onda:
1 s = αTV = αV T
(3/5)
Introducción a PWM
(4/5)
• Es decir el valor medio de la señal es proporcional a la relación on-off de su ciclo de trabajo (el “ancho” del pulso). • Esta propiedad me permite, entre otras cosas, codificar información en ese ancho.
Introducción a PWM
(5/5)
• Existen tres tipos de PWM: – Centrada: el pulso está centrado en la ventana de tiempo correspondiente a un ciclo de la onda. – Flanco Inicial: el pulso comienza junto con la ventana de tiempo correspondiente al ciclo. – Flanco Final: el pulso termina junto con la ventana de tiempo correspondiente al ciclo.
Implementación Hardware
(1/2)
• Es muy común que los microcontroladores dispongan de circuitos “timer” programables. • Estos timers muchas veces permiten ser configurados como generadores de PWM. • Para ello se le configuran los parámetros: – período – relación on/off
Implementación Hardware
(2/2)
• Una forma de utilizarlos es programandolos para que generen una interrupción cada vez que lleguen al período. • En la rutina de atención se procede a escribirles un nuevo valor de relación on/off, generando así la variación en el ancho del pulso que se desee.
Implementación Software
(1/3)
• Cuando no se dispone de un timer con PWM se puede recurrir a técnicas de software, ya sea “puras” o con el soporte de un “timer” común (sin PWM). • Sin “timer” aux = in(SALIDA); out(SALIDA, aux | 1); ancho = (valor / VALOR_MAX) * T; delay (ancho); out(SALIDA, aux & 0xFE); delay (T - ancho);
Implementación Software
(2/3)
• Con “timer” en Programa Principal void interrupt timer() { tics++; } tics_ancho = (valor / VALOR_MAX) * (T / Ptimer); aux = in(SALIDA); out(SALIDA, aux | 1); tics = 0; while (tics < tics_ancho); out(SALIDA, aux & 0xFE); while (tics < (T / Ptimer);
Implementación Software
(3/3)
• Con “timer” en Rutina Interrupción void interrupt timer() { if (tics == 0) { aux = in(SALIDA); out(SALIDA, aux | 1); } tics++; if (tics == (valor / VALOR_MAX) * (T / Ptimer)){ aux = in(SALIDA); out(SALIDA, aux & 0xFE); } if (tics > (T / Ptimer)) tics = 0; }
Aplicaciones PWM
(1/1)
• La técnica de modulación por ancho de pulso se aplica en diversas áreas. • Si bien por ser una técnica de modulación se la puede utilizar para transmitir información, sus aplicaciones más habituales están en el campo de la electrónica de control, aplicada típicamente a motores y otro tipo de dispositivos que puedan ser controlados variando el valor medio de una magnitud (ej: la corriente o la diferencia de potencial).
Aplicaciones PWM Transmisión de Información
(1/3)
• Esta aplicación es la “directa” asociada al concepto de modulación. • La forma de onda transporta en sí misma información codificada en el ancho del pulso. • La forma de codificarla es la vista para generar el pulso del ancho requerido (en función del “valor” a codificar).
Aplicaciones PWM Transmisión de Información
(2/3)
• La decodificación requiere determinar el comienzo del pulso y calcular el ancho relativo del pulso respecto al período de la onda rectangular original. • Una forma sencilla de hacerlo es alimentar la señal a decodificar a un puerto de entrada que, además, genere una interrupción por flanco ascendente.
Aplicaciones PWM Transmisión de Información
(3/3)
void interrupt senial() { tics = 0; termino_pulso = FALSE; } void interrupt timer() { if (((in(ENTRADA) & 1) == 0) && (!termino_pulso)) { valor = VALOR_MAX * (tics / (T / Ptimer)); termino_pulso = TRUE; } }
Aplicaciones PWM Control de Potencia
(1/5)
• En este caso se utiliza la proporcionalidad del valor medio de la señal al ancho del pulso, para controlar la potencia que se le aplica a un dispositivo. • La forma mas sencilla de pensar esto es suponer que con la señal atacamos una “llave electrónica” (ej. un transistor) para permitir el pasaje de corriente solo durante el pulso.
Aplicaciones PWM Control de Potencia
(2/5)
• Esto generará que la reacción del dispositivo sea proporcional a la energía que está recibiendo y por tanto adapte su comportamiento a la misma. • Ejemplos: – un calentador generará más ó menos calor – un LED brillará más ó menos – un motor girará más ó menos rápido (aplica a determinados tipos de motores)
Aplicaciones PWM Control de Potencia
(3/5)
• Para que esto sea efectivamente así se debe cumplir que la frecuencia de trabajo del PWM sea convenientemente alta. • La mayoría de los sistemas físicos se comportan como un “pasabajos”, reaccionando al valor medio de la señal y no siguiendo los cambios instantáneos que se produzcan. • La frecuencia de trabajo debe ser superior a la “frecuencia de corte” equivalente.
Aplicaciones PWM Control de Potencia
(4/5)
• En aplicaciones de precisión se debe tener presente que las curvas de comportamiento de los dispositivos muchas veces no son lineales. • Ejemplo: – la iluminación de un LED no es siempre proporcional a la corriente que lo circula, ya que su curva de respuesta no es una recta perfecta.
• Por esto si se requiere precisión se deben implementar factores de corrección.
Aplicaciones PWM Control de Potencia
(5/5)
• Los factores de corrección muchas veces son formulas en función del ancho relativo del pulso (α), del estilo: f = cos(α . π/4) • Estas funciones se implementan como tablas estáticas numéricas para no despediciar preciosos recursos de CPU haciendo el cálculo cada vez.
Resumen
(1/1)
• La Modulación por Ancho de Pulso (PWM) es una técnica muy utilizada a nivel de microcontroladores. • Permite tanto transmitir información (en formato “digital”) como realizar el control de la potencia aplicada a dispositivos que acepten “filtrar” los cambios rápidos y reaccionen sólo siguiendo los valores medio (de potencia, corriente, voltaje, etc).
Preguntas