Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
9. Tarjeta de entradas analógicas
9.1. Características
Esta tarjeta añade 8 entradas analógicas de 16 bits compatibles con el estándar ANSI/ISA-
S50.1-1982(R1992) (Compatibility of Analog Signals for Electronic Industrial Process
Instruments):
• Entrada de tensión:
◦ Rango 0/5 V
◦ Rango -5/+5 V
◦ Rango 0/10 V
◦ Rango -10/+10V
• Entrada de corriente compatible a 2 hilos, 3 hilos y 4 hilos:
◦ Rango 0/20mA
◦ Rango 4/20mA
El tipo y rango de las señales de entrada se configura mediante 2 módulos independientes
especializados para cada familia de señales (tensiones e intensidades), que al ser
colocados en la tarjeta añaden 4 entradas de tensión o 4 entradas de corriente. La tarjeta
tiene capacidad para 2 de estos módulos, lo que supone un total de 8 entradas.
El módulo de entradas de corriente permite configurar el tipo de lazo de corriente de forma
independiente mediante jumpers. La entrada de corriente supone una carga equivalente
de 250 Ω.
El módulo de entradas de tensión permite configurar el rango máximo de las señales en 5
o 10 V, dependiendo de un único jumper.
También presenta una salida de tensión de 15V para alimentar sensores o actuadores
externos, siempre tomando precauciones de no exceder la potencia máxima capaz de
proporcionar la tarjeta de alimentación.
José María Fernández Olmo Página 101 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 112: Perspectiva general
Figura 113: Esquema general
El funcionamiento de esta tarjeta se basa en un convertidor analógico-digital (ADC).
También emplearemos un microcontrolador esclavo, que hace de intermediario entre el
José María Fernández Olmo Página 102 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
convertidor y el micro de la tarjeta principal. De esta forma, se alivia de trabajo al micro
principal, realizando funciones como la lectura de una secuencia de canales, realizar la
media de una serie de medidas o realizar una lectura continua programada según un cierto
tiempo.
Realizar la media es equivalente a aplicar un filtro a la señal que queremos digitalizar, pero
el microcontrolador esclavo también puede realizar un filtro de primer orden de las
medidas adquiridas, con limitaciones respecto la frecuencia de muestreo y el número de
canales debido a los límites de calculo del microcontrolador. De esta forma evitamos
problemas de aliasing. Todas estas funciones serán descritas con mayor detalle más
adelante.
Toda la transmisión de datos se realiza a través del bus SPI.
9.2. Convertidor analógico-digital
De los numerosos convertidores que existen en el mercado, buscaremos el que más se
adapte a nuestras necesidades. El principal criterio es que el convertidor se fabrique en
encapsulado DIP, necesario para poder construir un prototipo y realizar las pruebas
pertinentes. Hoy en día el uso de este tipo de encapsulados ha disminuido
considerablemente, y ya poco fabricantes siguen desarrollando productos en este formato.
Otros requisitos es buscar que la resolución mínima del convertidor sea 16 bits y así como
que la transferencia de datos sea por protocolo I 2C o SPI, lo que limita en gran medida los
convertidores disponibles.
Que la transferencia de datos sea en paralelo, tampoco supondría un grave problema, ya
que podríamos usar un registro de desplazamiento para hacer la conversión paralelo-serie,
pero complica la lógica y supone un espacio extra en la tarjeta.
Tras realizar una búsqueda en los principales fabricantes obtenemos 23 dispositivos que
cumplen nuestros requisitos, muchos más que en el caso de los convertidores digitales-
analógicos.
Hay convertidores que presentan algunas características interesantes para nuestro
proyecto, como una entrada de corriente 4/20 mA. Sin embargo, dificulta la digitalización
de entradas de tensión. También hay convertidores que presentan amplificadores con
ganancia programable, que para nosotros no tiene mucha utilidad porque las señales de
entrada siempre se encuentra dentro de unos mismos rangos, para los que adaptamos
convenientemente la señal mediante un circuito externo. Muchos convertidores son
descartados porque presentan una entrada diferencial con un rango de entrada en tensión
muy pequeño, pensado para adquirir señales procedentes de puentes de Wheatstone e
equivalentes.
José María Fernández Olmo Página 103 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
De entre ellos, escogemos el convertidor MAX195. Su elección se debe a sus buenas
características estáticas y dinámicas, además de presentar una entrada bipolar, lo que
facilita en gran medida el circuito de adaptación de señales de entrada. Se trata de un
convertidor de arquitectura SAR, por lo que es muy rápido, generando tasas de adquisión
de hasta 85 KSPS.
A diferencia de otros convertidores, no dispone de una referencia interna de tensión, por lo
que deberemos recurrir a una externa.
Presenta el inconveniente de que no dispone de reloj de conversión, por lo que deberemos
generar una señal de reloj de 1 Mhz mediante un circuito externo, ocupando espacio en la
tarjeta y aumentando el ruido electromagnético. También sólo dispone de un único canal,
por lo que añadiremos un multiplexor externo.
Otro motivo muy importante para su elección es la posibilidad de conseguir muestras
gratuitas del fabricante.
9.3. Convertidor MAX195
El conversor presenta una serie de pines que facilitan su uso:
• CONV: Generando un flanco de bajada en este pin, iniciamos una conversión.
• EOC: Avisa de que ha terminado la conversión mediante un flanco de bajada.
• BP/UP/SDHN: Configura el convertidor en modo unipolar o bipolar.
• RESET: Permite recalibrar el convertidor, muy útil debido a las derivas y a los
cambio de temperatura.
• CLK: Reloj de conversión.
José María Fernández Olmo Página 104 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 114: MAX195
También dispone de los pines DOUT, CS y SCLK para la transmisión de datos por SPI.
A parte, presenta numerosos pines de alimentación, que diferencian la alimentación digital
de la alimentación analógica para mejorar la inmunidad ante el ruido, así como pines para
masa diferenciados.
9.3.1. Referencia de tensión
La referencia de tensión limita el rango máximo de de las señales de entrada del
convertidor. La referencia de tensión no puede superar la alimentación del sistema,
pues en tal caso suturan unos diodos de protección internos, produciendo errores en la
conversión.
En nuestro caso, tomaremos una referencia de 5 V. De esta forma, las señales de
entrada en el rango de 5V no requieren ningún tipo de adaptación (salvo un buffer
para la adaptación de impedancias como se verá más adelante), y las señales en el
rango de 10V solo deberán atenuarse un factor de 2.
Por otro lado, la alimentación del convertidor es también 5V. Para asegurarnos que no
haya problemas, usaremos la propia referencia de tensión para alimentar la parte
analógica del convertidor, de forma que la referencia es virtualmente idéntica a la
alimentación y no saturan los diodos de protección internos. Para ello, usaremos dos
buffers independientes, para garantizar el suministro de corriente necesario, una baja
impedancia de salida y aislar el ruido entre la alimentación y la referencia:
José María Fernández Olmo Página 105 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 115: Referencia de tensión
Es también muy importante añadir condensadores de filtrado, colocando un
condensador de gran capacidad (1uF a 47 uF) en paralelo con uno de cerámico de
0,1uF, de forma que actuemos frente a diferentes rangos de frecuencia.
En esta sección no vamos a entrar en detalle en los integrados que generan la
referencia de tensión. En el Anexo IV de esta memoria describimos los diversos tipos
de referencias de tensión, así como sus parámetros más importantes para realizar la
selección de los mismos. Para segurar una correcta precisión en la conversión de datos
se requiere una referencia de tensión de gran precisión y estabilidad frente
temperatura, tiempo, carga y tensión de alimentación.
En nuestro prototipo hemos empleado el LT1019 por tener muy buenas características
y poder obtener muestras gratuitas del fabricante. Sin embargo, como presentan
encapsulados compatibles pin a pin, siempre se puede realizar el cambio por una
referencia de mejores características.
José María Fernández Olmo Página 106 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Para los buffers también es necesario amplificadores operacionales de buenas
características (con bajo offset y gran precisión) que no alteren la referencia generada.
En el Anexo V se describe en más detalle estos integrados así como los criterios para
su selección, usando siempre para nuestro proyecto los operacionales OP07, OP27 y
OP270, por sus buena relación características-precio así como la posibilidad de ser
adquiridos en el mercado local. Al igual que las referencias, los encapsulados son
compatibles pin a pin, y se pueden intercambiar por otros circuitos de mejores
características.
9.3.2. Reloj de conversión
Ya hemos adelantado que este convertidor presenta el inconveniente de que no
dispone de reloj de conversión interno, por lo que deberemos generar una señal de
reloj mediante un circuito externo, ocupando espacio en la tarjeta y aumentando el
ruido electromagnético.
El fabricante exige que la señal de reloj tenga un ciclo de trabajo entre el 25 y el 75 %,
y cuya frecuencia se encuentre entre 100 Hz y 1.7 Mhz. La señal de reloj nunca puede
interrumpirse, pues se perderían los datos de calibración almacenados en el
convertidor.
En nuestro caso tomaremos una frecuencia de 1 Mhz, que está prácticamente en el
límite que acepta el convertidor y como se verá posteriormente, permite tiempos de
conversión de 20 us. Se han estudiado diversas formas de generar esta señal. Por
ejemplo, usar el propio reloj del microcontrolador. Esta opción se ha descartado por no
tener suficientes pines libres. También existen numerosos integrados destinados a la
generación de señales de reloj de alta frecuencia (usando por ejemplo osciladores
digitales o controlados por tensión), pero no se encuentran en el mercado local. Es por
ello que hemos procedido a generar la señal de reloj usando un cristal de cuarzo y un
oscilador.
Figura 116: Circuito oscilador
José María Fernández Olmo Página 107 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Usar un cristal de cuarzo permite obtener una señal muy estable ante envejecimiento
y derivas de la temperatura. Además son muy económicos y se encuentran calibrados
para un amplio abanico de frecuencias. Muy buena opción frente usar un oscilador con
una red RC. Los condensadores son necesarios para estabilizar el cristal.
En nuestro caso, emplearemos el integrado 4060, (en concreto el 74HC4060,
compatible con los niveles lógicos TTL de nuestro convertidor) que presenta un
oscilador interno y un divisor de frecuencia de 14 etapas, cada salida incluyendo un
buffer. Al estar todo integrado en un mismo encapsulado, conseguimos mejores
prestaciones y ahorramos espacio. Además tener un buffer garantiza una baja
impedancia de salida y minimizar los efectos de las capacidades e inductancias
parásitas de las propias pistas del circuito impreso y componentes.
Figura 118: Esquema interno 74HC4060
Figura 117:74HC4060
Del divisor de frecuencias, no son accesibles las salidas de todas las etapas. La
primera salida disponible corresponde a la cuarta etapa, lo que divide la frecuencia
original del cristal en un factor 2^4=16.
Por tanto, tomaremos un cristal de 16 Mhz, con lo que generaremos una señal de reloj
de 1 Mhz.
9.3.3. Calibración
Este convertidor presenta una arquitectura SAR. Para su funcionamiento requiere un
convertidor digital-analógico que funciona mediante condensadores ponderados. En el
encendido, se produce una calibración inicial de dichos condensadores, pero mediante
el pin RESET podemos realizar calibraciones adicionales. Es una característica muy útil,
ya que la precisión del convertidor se ve seriamente afectada por derivas, cambios de
temperatura y fluctuaciones en la alimentación. Sin embargo, la calibración es un
proceso muy lento que requiere 14000 ciclos de reloj, lo que supone unos 10 ms
aproximadamente. La calibración termina con un flanco de bajada de la señal EOC.
José María Fernández Olmo Página 108 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 119: Calibración
9.3.4. Inicio de una conversión
Una conversión comienza con un flanco de bajada de la señal CONV. A partir de este
instante, señales adicionales de CONV son ignorados hasta que termina la conversión.
La señal a digitalizar es retenida durante 4 ciclos de reloj y se requieren otros 16 ciclos
para realizar la conversión. Una vez terminada la conversión, se produce un flanco de
bajada de la señal EOC.
Una conversión completa supone un total de 20 ciclos, lo que equivale a 20 us.
La señal CONV debe estar sincronizada con el reloj de conversión. Por ello, debemos
recurrir a emplear una puerta OR como se observa en la siguiente figura:
Figura 120: Sincronización señal CONV
José María Fernández Olmo Página 109 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
9.3.5. Transmisión de datos
La transmisión de datos se realiza mediante SPI, usando los siguientes pines SCLOCK,
DOUT y CS.
Para poder transmitir el dato adquirido por el convertidor, en primer lugar la señal CS
debe estar a nivel bajo. A partir de entonces en cada flanco de subida del reloj se
carga un dato en la línea de salida, comenzando por el bit más significativo.
Figura 121: SPI
Se observa como equivale al modo 0 del bus SPI.
La frecuencia máxima de la señal de reloj del bus es 5 Mhz. Sin embargo, se ha
comprado experimentalmente que el microcontrolador (cuyo reloj de funcionamiento
es 16 Mhz) no es capaz de gestionar las interrupciones del bus a tanta frecuencia,
limitando la tasa de transferencia a 2 Mhz.
9.3.6. Conversión completa de datos
Para realizar una conversión completa se debe actuar según la figura 122.
José María Fernández Olmo Página 110 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 122: Conversión completa
9.4. Multiplexor
Uno de los inconvenientes que presenta el convertidor es que sólo tiene un canal de
entrada. Es por ello que para dotar de mayor funcionalidad a la tarjeta, debemos añadir un
multiplexor externo.
Un multiplexor analógico está constituido por una serie de entradas analógicas conectadas
a una salida común. Mediante unos pines digitales de selección escogemos que señal
obtenemos a la salida.
Figura 123: Multiplexor
José María Fernández Olmo Página 111 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Desde el punto de vista interno, el multiplexor está formado por un conjunto de
interruptores anlógicos, de manera que para instante, sólo uno de ellos permanece
cerrado. Las entradas de selección actúan sobre un decodificador digital, que abre o cierra
los interruptores analógicos.
Figura 124: Multiplexor
Los interruptores analógicos no son más que transistores CMOS o JFET. Cuando el
interruptor se encuentra abierto, el transistor se encuentra cortado, de forma que tenemos
una impedancia muy grande (~MΩ) entre los terminales de entrada y salida. Aunque esta
impedancia sea muy elevada, aparecen corrientes parásitas I OFF, del orden de nA (debido
también al efecto de las capacidades parásitas). Dependiendo de los circuitos que
tengamos a la entrada y salida, estas corrientes parásitas pueden provocar errores, por
ejemplo si tenemos impedancias muy grandes.
Cuando el interruptor se cierra, el transistor se encuentra en saturación, presentando una
impedancia muy pequeña. Esta impendancia se conoce como resistencia de conducción
RON y está en torno los 100-200 Ω, dependiendo del conmutador. También es una fuente de
error, como en el siguiente circuito:
Figura 125:Multiplexor y amplificador de señal
José María Fernández Olmo Página 112 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
La resistencia RON produce errores de linealidad y variaciones en la ganancia del
amplificador. Tomar resistencias mayores disminuyen estos efectos, pero ahora las
corrientes parásitas afectan en mayor medida y el ancho de banda disminuye. En la
literatura se pueden encontrar diversas formas de disminuir estos efectos, de los cuales
destaca la siguiente solución, colocar un buffer a la salida:
Figura 126: Multiplexor y buffer
El inconveniente es que requiere el uso de amplificadores operacionales extras y mayor
espacio.
Otro parámetro importante es la diafonía, que mide la influencia de las entradas no
conectadas sobre la salida. Este efecto se produce debido a las capacidades parásitas
entre los terminales de entrada.
Desde el punto de vista dinámico, debemos considerar los siguientes parámetros:
• Tiempo de transición: Define el tiempo que transcurre desde que se produce un
cambio en la entrada y se refleja en la salida. Estos tiempos suelen ser muy
rápidos, del orden de ns.
• Tiempo de conmutación: Es el tiempo que transcurre en conmutar la señal de salida
entre dos canales de entrada diferentes.
Ya hemos comentado que nuestra tarjeta presenta 8 entradas analógicas, 4 procedentes
de un primer módulo de adaptación de señales, y 4 de un segundo módulo. Es por ello que
el esquema general corresponde a la figura 127.
Con un multiplexor seleccionamos de que modulo procede la señal. La señal procedente de
cada módulo se encuentra en el rango 0/+5V o -5/+5V, por lo que solo debemos añadir un
buffer para evitar los efectos de la resistencia de conducción y las corrientes parásitas, así
como garantizar una baja impedancia de salida.
José María Fernández Olmo Página 113 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 127: Esquema entrada de señal
Para la elección del multiplexor también existen cientos de integrados en el mercado, con
diversas características. El principal problema es encontrar multiplexores que se sigan
fabricando en encapsulado DIP y que podamos adquirir fácilmente. En la práctica, los
únicos multiplexores disponibles en el mercado local son los correspondientes a la serie
DG500 y a la serie 4051. Como conmutadores, presentan características muy similares:
El principal problema es el rango de señales que es capaz de manejar el multiplexor. En el
caso de los integrados 4051, como pertenecen a la familia lógica CMOS 4000, la tensión de
alimentación puede llegar hasta los 15V, suficiente para manejar señales de +/-10V. El
problema es la compatibilidad de las señales digitales para manejar el multiplexor, que son
incompatibles con el resto de circuitos de la tarjeta.
Es por ello que recurrimos al conmutador DG507, ya que se puede alimentar a 15V, pero
las señales digitales son compatibles TTL. Solo emplearemos dos entradas de dicho
multiplexor, como se observa en la figura 128,
José María Fernández Olmo Página 114 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 128: Esquema multiplexor
A la salida del multiplexor colocamos un buffer, para evitar el efecto de las corrientes
parásitas y la resistencia de conducción. También añadimos una resistencia de 10 Ohmios
con dos diodos para recortar la señal y proteger el convertidor.
9.5. Adaptación de señales
9.5.1. Módulo de entradas de tensión
Este módulo presenta 4 entradas analógicas de tensión que convergen a un primer
multiplexor. La señal de salida pasa a continuación por una etapa de adaptación, que
depende del rango de las señales de entrada, configurable mediante el jumper JP1. De
esta forma, si el rango máximo de las señales es 5V, la señal pasa por un buffer, y en
caso de que que el rango máximo sean 10 V, la señal es atenuada un factor de 2.
Para realizar la atenuación, sólo es posible emplear un amplificador inversor (es el
único montaje que permite tener ganancias menores a la unidad). Es por ello que
emplearemos un doble amplificador inversor en serie, a fin de no invertir la señal de
salida respecto la entrada. Además, el amplificador inversor presenta la ventaja de
tener una impedancia de salida que se puede considerar infinita, y una impedancia de
entrada bastante elevada (~100KΩ)
La señal resultante sale del módulo y es la que llega al multiplexor principal que se
encuentra a la entrada del convertidor analógico-digital.
José María Fernández Olmo Página 115 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 129:Módulo de entrada de tensión
Figura 130: Módulo entradas de tensión
Debido al poco espacio disponible en la tarjeta, este módulo ha debido diseñarse
usando componentes SMD y usando placas de doble cara, lo que dificulta
enormemente la construcción del prototipo.
9.5.2. Módulo de entradas de corriente
Este módulo presenta 4 entradas analógicas de corriente. Ya hemos comentado lo
importante que resulta para el bucle de corriente la resistencia de carga y la
resistencia de los cables de conducción, de forma que un sistema alimentado a 15 V
no puede atacar cargas de más de 300 Ohmios. Es por ello que las señales en
corriente no pueden pasar por un multiplexor, que en conducción presenta como
mínimo una resistencia de 100 Ohmios.
La solución pasa por realizar en primer lugar una conversión intensidad-tensión,
usando el conversor corriente-tensión correspondiente a la figura 131. En función del
jumper, el conversor es equivalente a una carga flotante (modo 2 y 4 hilos) o como
una carga referenciada a tierra (modo 3 hilos). Presenta el inconveniente de tener que
usar muchos amplificadores operacionales y muchos componentes. La señal resultante
José María Fernández Olmo Página 116 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
en tensión llega a un multiplexor, para pasar a continuación por un buffer y salir del
módulo hacia el multiplexor principal que se encuentra a la entrada del convertidor.
Figura 131: Conversor corriente-tensión
Figura 132: Módulo entradas de corriente
Debido al poco espacio disponible en la tarjeta, este módulo ha debido diseñarse
usando componentes SMD y usando placas de doble cara, lo que dificulta
enormemente la construcción del prototipo.
José María Fernández Olmo Página 117 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 133: Módulo entradas de corriente
9.6. Diseño
Ya hemos adelantado que la tarjeta dispone de un microcontrolador esclavo, que hace de
intermediario entre el convertidor y el micro de la tarjeta principal. De esta forma, se alivia
de trabajo al micro principal, realizando funciones como la lectura de una secuencia de
canales, realizar la media de una serie de medidas o realizar una lectura continua
programada según un cierto tiempo.
Aprovechamos los dos periféricos de comunicaciones SPI que dispone el microcontrolador
MSP430G2553, el periférico USCIA conectado al bus común de comunicación entre la
tarjeta y el microcontrolador principal, y el periférico USCIB, conectado al convertidor
MAX195.
Figura 134: Esquema conexión microcontrolador
José María Fernández Olmo Página 118 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Esta tarjeta ha sido desarrollada para funcionar a través del bus SPI, pero podría ser
adaptada fácilmente al protocolo I2C gracias a la versatilidad que otorga el
microcontrolador esclavo.
Toda la lógica empleada para el direccionamiento de la tarjeta, el bus SPI y el aislamiento
galvánico es común a todas las tarjetas esclavo y se encuentra descrito en la sección 2.
Figura 135: Conexión MSP430
Se observa que usamos todos los pines del microcontrolador disponibles en un
encapsulado DIP. Ya comentamos la posibilidad de usar el propio reloj del micro como reloj
para el convertidor, pero no disponemos de pines libres, por lo que se ha preferido recurrir
a generar la señal con un integrado externo. Además de las líneas de alimentación y de las
señales de transmisión del bus, es necesario la líneas Reset y Test que permiten
programar el microcontrolador. Estas líneas son accesibles mediante un conector de 4
pines compatible con el JTAG propietario del MSP430. Además de prograrmar el micro,
también sirve para las tareas de pruebas y ensayos. El jumper JP1 se emplea para
desconectar la alimentación de la tarjeta respecto el conector JTAG.
Hay que tomar precauciones con la conexión de las señales entre el micro y el convertidor,
ya que el primero opera con lógica CMOS 3V y el convertidor con lógica TTL. Es por ello
que las señales del microcontrolador que atacan al convertidor son compatibles, pero no
en el sentido contrario. En el anexo correspondiente se discute como realizar la conversión
de niveles lógicos, ya que no es una tarea fácil cuando se manejan señales de alta
frecuencia como los datos del bus SPI. Para la solución final, recurriremos a emplear un
buffer de colector abierto (74LS07), con una resistencia decolector conectada a al
alimentación de 3V. Tomaremos resistencias de 1K, ya que garantizan la velocidad de
conmutación necesaria para el correcto fu ncionamiento del sistema y no ofrecen un
consumo elevado.
José María Fernández Olmo Página 119 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 136: Adaptación de niveles lógicos
También es especial el manejo del pin BP/UP/SDHN. Permite configurar el modo de
funcionamiento del convertidor:
• 0V = apagado
• 5V = unipolar
• flotante = bipolar
Apagar el convertidor no es una función muy importante para nuestro sistema, ya que su
consumo es muy pequeño. Esta característica está pensada para aplicaciones portátiles
donde la duración de la batería es crítica.
La mayor dificultad surge conseguir una puerta que permita colocar su salida en alta
impedancia o a 5V.
Se han evaluado distintas posibilidades, como operar las resistencias de pull-up internas
que dispone el microcontrolador en sus pines de salida. Sin embargo no es recomendable
su conexión a 5V porque pueden destruir el dispositivo. También se ha estudiado usar un
buffer triestado (como el 74125), de forma que el micro solo actúe sobre la señal que
habilita la salida, colocándola a 5V o en alta impedancia. El inconveniente que presenta
esta última opción es que requiere usar un integrado adicional para emplear una única
puerta, lo que supone un importante uso de espacio. Sin embargo, ya hemos comentado
que empleamos varios buffers de colector abierto para la adaptación de niveles lógicos.
Del integrado 74LS07 disponemos de varias puertas, que modificaremos empleando el
siguiente esquema:
Figura 137: Salida señal BP/UP
José María Fernández Olmo Página 120 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Con un “1” lógico saturamos el transistor, de forma que tenemos aproximadamente 5V a la
salida, y con un “0” el transistor se encuentra cortado, con lo que obtenemos una
impedancia muy grande. De esta forma añadiendo un único transistor y dos resistencias
solucionamos el problema.
Un aspecto importante que se ha analizado de esta solución es la velocidad de
conmutación del circuito. Cualquier puerta lógica supera los 25 Mhz, pero en nuestro caso
depende del transistor. Con transistores normales obtenemos frecuencias de conmutación
de 100Khz, que puede llegar hasta 300 Khz buscando transistores de conmutación rápida.
Se ha comprabado experimentalmente que tanto empleado nuestro circuito como una
puerta triestado (74125) la frecuencia de conmutación máxima es 20KHz, debido
seguramente a que la entrada de la puerta presentan una impedancia muy baja. Por tanto,
la elección del transistor no es un aspecto crítico.
El microcontrolador requiere 3V para su alimentación. Ya comentamos en la sección 3 de
este documento que para obtener ese nivel tensión recurriríamos a añadir un regulador en
la propia tarjeta. También necesitamos -5V para el funcionamiento del convertidor. Dado el
poco consumo que requieren dichas alimentaciones, podemos emplear un reguladores de
reducidas dimensiones, en formato T0-92.
Esta tarjeta es la más compleja a nivel de hardware debido a los númerosos componentes
que requiere. Es por ello que hemos recurrido a una tarjeta de doble cara, y en el caso de
los módulos de adaptación de señales usar componentes en SMD, a pesar de la enorme
dificultad que conlleva.
9.7. Protocolo de comunicación
9.7.1. Requisitos
• Sincronismo: Ya hemos comentado en la sección 2 de esta memoria los
problemas que presenta el bus SPI para entrar en desincronización los
dispositivos esclavos y maestro. En particular, la desincronización se produce
en el encendido del sistema, ya que durante un breve espacio corto de tiempo
los pines del microcontrolador maestro no se encuentran configurados ni como
entradas ni como salidas, introduciendo ruido en las señales de reloj y datos del
bus.
Es por ello que empleamos la señal LD implementada en el bus, que permite
reiniciar a voluntad a lo largo del tiempo el periférico de comunicaciones SPI del
microcontrolador esclavo, garantizándose así el sincronismo.
• Configuración de los canales: Debido a que la tarjeta dispone de 8 canales
de entrada, es necesario definir que canal o canales entran en el muestreo.
Además, cada uno de los 2 conjuntos de cuatro canales (correspondiente a
cada módulo de adaptación de señales) debe configurarse para señales
unipolares o bipolares, dependiendo del tipo y de las señales de entrada.
José María Fernández Olmo Página 121 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
• Modos de adquisición de medidas: La tarjeta permite adquirir de forma
automática las medidas de un conjunto de canales ante una petición de inicio
de conversión, lo que se traduce en la adquisición de uno o varios bloques de
medidas que puede contener cada uno de ellos de 1 a 8 de las mismas.
Además y para todos los caso, se debe indicar el número de lecturas a realizar
a cada canal para generar una medida (media).
De modo generalizado, se puede definir un número n de bloques similares a
adquirir automáticamente con cada comando de inicio de conversión, o realizar
una adquisición periódica automática de bloques de medidas en función de un
intervalo de tiempo, lo que se ha denominado modo continuo.
Por último, también debemos permitir la opción de realizar un filtro de primer
orden a las medidas adquiridas en un bloque.
• Recalibración: Ya hemos descrito el proceso de recalibración del convertidor,
el cual es necesario para garantizar la precisión de las lecturas antes cambios
de temperatura, derivas... Mediante un comando realizaremos la recalibración
del convertidor.
• Orden de lectura: También debemos añadir un comando que indique a la
tarjeta que deseamos recibir las medidas ya obtenidas por la misma sgún el
modo de adquisición programado.
9.7.2. Tramas de mensajes
Se ha desarrollado un protocolo de comunicación en el que se busca en todo momento
disminuir el número de bytes a transmitir o recibir a través del bus. De esta forma se
eliminan los tiempos muertos y se aumenta la velocidad de transferencia. Existen
mensajes entre 1 y 7 bytes de longitud.
Este protocolo es una propuesta básica que satisface la mayoría de las necesidades de
uso, no obstante y dada la flexibilidad del diseño, es modificable para otros usos con
necesidades más particulares o estrictas.
La tarjeta se gestiona completamente a través del bus SPI. Cada vez que queramos
actuar sobre ella, debemos mandar un primer byte, que indica el comando a realizar
en función de los bits B5, B4 y B3.
José María Fernández Olmo Página 122 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Nueva configuración
Este comando debe realizarse al menos una vez, antes de realizar la primera
adquisición de datos. Con este comando, los bits M(0:1) y N(0:2) tienen el siguiente
significado:
Bits M(0:1) configuran el modo de funcionamiento del convertidor:
• 1 – Las señales procedentes del módulo “0:1” son bipolares.
• 0 – Las señales procedentes del módulo “0:1” son unipolares.
Los bits N(0:2) indican el número de lecturas a realizar para conformar una medida:
A continuación deben mandarse otros 4 bytes de configuración:
• El byte CHB marca los canales que van a ser convertidos en cada bloque de
medidas:
◦ 1 – El canal CH(0:7) va a ser adquirido.
◦ 0 – El canal CH(0:7) va a ser ignorado
José María Fernández Olmo Página 123 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
La secuencia de conversión siempre comienza por el canal más bajo marcado. En el
caso de que todos los bits estén a cero, no se realizará ninguna conversión.
• A continuación se debe mandar el byte CFGB1. El bit MC indica si el convertidor
funciona en modo continuo o en modo discontinuo:
◦ 1 – El convertidor funciona en modo continuo, tomando un bloque de medidas
de forma automática y periódica en función del intervalo de tiempo programado
en los bytes TMB.
◦ 0 – El convertidor funciona en modo discontinuo, tomando un único bloque de
medidas.
El resto de bits configuran el número de bloques de medidas que se desea
componer automáticamente con cada inicio de adquisición de medidas. El tiempo
transcurrido entre cada bloque de medidas corresponde al tiempo programado en
el registro TMB. Permite configurar como máximo entre 8 bloques de 16 medidas y
128 bloques de una medida ya que como mencionamos posteriormente, las
limitaciones de memoria del microcontrolador esclavo sólo permiten almacenar
hasta 128 medidas, por lo que el usuario debe prestar atención al número de
medidas que corresponde a cada bloque, en función del número de canales
marcados.
• Por último se mandan dos bytes, correspondientes al TMB. El bit más significativo
TM configura:
◦ 1 – Tiempo en us. Permite configurar intervalos de tiempo entre 1 y 32768 us.
◦ 0 – Tiempo en ms. Permite configurar intervalos de tiempo entre 1 y 32768 ms.
Figura 138: Trama de mensajes configuración tarjeta
Filtro de primer orden
La función de transferencia correspondiente a un filtro paso bajo de primer orden es:
José María Fernández Olmo Página 124 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
1
F (S )=
S
1+
f c⋅2⋅π
Se empleará la transformada bilineal, ya que mediante ella cualquier filtro estable en
continuo será también estable en el plano complejo.
1
F ( Z )= Z −1+1
F ( Z )=
1+
1 2 Z−1
⋅ ⋅
f c⋅2⋅π T Z+1 ( ) →
a 0+a 1⋅Z −1
1 1
Donde a o =1+ y a 1=1−
f c⋅π⋅T f c⋅π⋅T
A partir de la función de transferencia obtenemos la función de transferencia pulsada:
1 1 a
y ( k )= ⋅u(k )+ ⋅u(k −1)− 1⋅y ( k −1)
ao ao ao
Debido a que el microcontrolador esclavo es muy lento realizando cálculos en punto
flotante, se ha decidido trabajar con enteros. Para ello multiplicamos cada uno de los
términos por 2^15=32768 y realizamos las operaciones pertinentes. El valor final se
divide/ por 32768, de forma que obtenemos la magnitud real. La ventaja de estas
operaciones, es que esas multiplicaciones y divisiones son realizadas como
desplazamientos de bits hacia la izquierda o hacia la derecha, lo cual mejora
enormemente el rendimiento.
1 1 a
y f ( k )=32767⋅ ⋅u( k )+32767⋅ ⋅u ( k −1)−32767⋅ 1⋅y ( k −1)
ao ao ao
y f (k )
y real (k )=
32767
Para implementar el filtro, debemos transmitir a la tarjeta los siguientes términos:
32767 32767⋅a 1
A= B=
a0 a0
En caso de configurar la tarjeta para que implemente el filtro, a continuación de los 5
bytes de configuración CFGB0, CHB, CFGB1, TMB0 y TMB1, debemos mandar otros 4
bytes adicionales:
José María Fernández Olmo Página 125 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Calibración
Mediante este comando, se realiza un recalibrado del convertidor según detallamos en
la sección 9.3.3. Hay que tener en cuenta de que esta tarea emplea aproximádamente
10 ms. Una vez concluida, la tarjeta pone a nivel alto la línea INT, para informar a la
tarjeta de control.
Ilustración 139
Lectura de datos
Cuando queramos leer las medidas realizadas por el convertidor y que se encuentran
almacenadas en el microcontrolador esclavo, debemos mandar este comando. A partir
de entonces, el micro esclavo coloca en la línea de datos los bits de las medidas
realizadas a cada flanco de reloj, siguiendo el modo de funcionamiento 2 del SPI.
Inicio conversión
Con este comando iniciamos la adquisición de un bloque de medidas. Cada vez que
concluya, lo indicará a la tarjeta principal con un flanco de subida de la señal INT. En
caso de que se haya configurado la tarjeta en modo continuo, producirá un flanco de
José María Fernández Olmo Página 126 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
subida de la señal INT automáticamente con cada bloque adquirido. En caso de no
haber mandado ningún comando de configuración, este comando será ignorado.
Figura 140: Adquisición de una medida
9.8. Programa de gestión
El funcionamiento de la tarjeta se basa en un programa principal, encargado de iniciar el
convertidor, adquirir las medidas, manejar el multiplexor.... La gestión de la interfaz de
comunicación con la tarjeta de control se realiza mediante una máquina de estados
asociada al periférico de comunicaciones USCIA, que actúa en función de los comandos
recibidos por la tarjeta de control y de forma independiente respecto el programa principal.
9.8.1. Inicialización del programa y periféricos
En el arranque de la tarjeta, se realiza la configuración inicial de todos los periféricos,
variables de estado y tablas de configuración básica:
• Reloj del sistema
Configuramos el reloj usar el oscilador interno que dispone el mirocontrolador,
a su frecuencia máxima (16 Mhz)
• WatchDog Timer
Usamos el WatchDog Timer para generar una interrupción cada 2 ms que
reinicia la máquina de estados asociada al periférico de comunicaciones, de
esta forma prevenimos que se produzcan posibles fallos en la comunicación.
• Puertos de entrada y salida
Configuramos todos los pines del microcontrolador según el siguiente esquema:
También habilitamos la interrupción de los pines LD y EOC.
José María Fernández Olmo Página 127 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Figura 141: Puertos entrada y salida
• Periféricos de comunicaciones USCIA y USCIB
Configuramos ambos periféricos para funcionar en modo SPI. El periférico
USCIA es el encargado de la comunicación con la tarjeta de control, y trabaja
como esclavo, usando el modo SPI 2. El periférico USCIB se encarga de la
comunicación con el convertidor ADC y funciona en modo MAESTRO y modo SPI
1. En ambos periféricos una velocidad de transferencia de datos de 1 Mhz.
• Contador TimerA
Configuramos el contador en modo subida y la frecuencia del reloj de entrada
en 1 Mhz.
El microcontrolador pasa a un modo de bajo consumo, “despertando” solo para
atender a las diversas interrupciones generadas por diversos eventos del sistema. De
esta forma, minimizamos el flujo de programa, aumentando la velocidad de ejecución.
9.8.2. Programa principal
Mientras el microcontrolador se encuentra “dormido” en modo de bajo consumo,
pueden ocurrir los siguientes eventos:
• El contador TimerA desborda (modo continuo) y lo indica con una interrupción.
También puede ocurrir que la máquina de estados asociada al periférico de
comunicaciones indique que ha llegado un mensaje de inicio de conversión,
aprovechando la interrupciones de dicho periférico para “despertar” al
microcontrolador.
Ante estos casos, si en un comando anterior se ha recibido una configuración
de funcionamiento válida, el programa pasa a realizar todas las acciones
pertinentes para producir un bloque de medidas.
José María Fernández Olmo Página 128 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
• La máquina de comunicaciones indica que ha llegado un mensaje de
recalibración, aprovechando la interrupciones del periférico de comunicaciones
para “despertar” al microcontrolador.
Ante este evento, se procede a realizar el proceso de recalibración del ADC, y
finalizado este (~10 ms) vuelve el microcontrolador a su estado inicial.
• La máquina de comunicaciones indica que ha llegado un mensaje de
configuración , aprovechando la interrupciones del periférico de
comunicaciones para “despertar” al microcontrolador. Se actualizan las tablas
de configuración en función del mensaje recibido.
9.8.3. Máquina de estados asociada al periférico de
comunicaciones USCIA.
A continuación procederemos a describir la máquina de estados asociada al periférico
de comunicaciones USCIA, encargada de establecer la comunicación SPI con la tarjeta
de control. Cada vez que se activa el flag UCARXIFG (se ha recibido un nuevo byte) se
produce una interrupción por recepción de un nuevo mensaje. Presenta dos estados
principales:
• Estado 0: La máquina de estados se encontrara nomalmente en este estado,
esperando recibir un byte de cabecera del tipo CFGB0, que contiene el
comando a realizar en función de los bits (5:3):
◦ Calibración: Se indica al programa principal la petición de de una
recalibración.
◦ Nueva configuración: Ante esta cabecera, necesitamos recibir 4 bytes más
correspondientes al resto de bytes de configuración. Colocamos la variable
MSGSIZE=4 y el estado de la máquina a 1.
◦ Filtro de primer orden: Ante esta cabecera, necesitamos recibir 8 bytes más
correspondientes a los 4 bytes de configuración general y a los 4 bytes con
los valores necesarios para ajustar el filtro. Colocamos la variable
MSGSIZE=8 y el estado de la máquina a 1.
◦ Inicio de conversión. Se indica al programa principal la petición de de una
recalibración.
• Estado 1: Esperando resto de mensaje. Almacenamos el byte recibido en un
buffer de recepción y decrementamos la variable MSGSIZE. En caso de que la
variable valga 0, indica que hemos recibido el mensaje completo, despertando
al programa principal para que actualice las tablas de configuración, y
volvemos al estado 0.
José María Fernández Olmo Página 129 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
9.8.4. Mapa de memoria
Se ha creado un buffer de memoria de 11 bytes donde almacenar los datos que se
reciben para una nueva configuración, y a partir de ellos actualizar las tablas de
configuración donde se indica el número de lecturas, de bloques, el intervalo de
tiempo entre bloque de medidas, los modos de conversión.
También se emplea un buffer circular donde se van almacenando las lecturas
realizadas. El tamaño del buffer se ha tomado la mitad de la RAM disponible (256
bytes) a fin de dejar espacio suficiente para el resto de variables y para el stack del
sistema. Con este tamaño tenemos capacidad de 128 medidas. Empleamos el puntero
PFILL para llenar la memoria con cada medida realizada. A la hora de transmitir los
datos a la tarjeta de control, empleamos el puntero PVAC.
Figura 142: Buffer de medidas
Debido a que las medidas son variables de 16 bits, pero toda la transmisión se realiza
en paquetes de 8 bits, recurrimos a emplear uniones, de forma que manipulamos cada
medida como un entero o como un conjunto de dos bytes.
9.8.5. Adquisición de medidas
Cada vez que se deba adquirir un bloque de medidas, es ejecutará siguiente rutina:
• Se reinicia a 0 el número de bloques adquiridos.
• Se comprueba si se ha configurado la tarjeta en modo continuo. En tal casi
activamos el contador TimerA y lo configuramos según el intervalo de tiempo
establecido.
José María Fernández Olmo Página 130 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
• Se entra en el bucle principal de adquisión. A través de la variable CH
comprobamos que canales debemos adquirir, empezando por el 0 hasta el 7:
En caso que debamos adquirir un canal. seleccionamos dicho canal del
multiplexor, actuando sobre las salidas digitales encargadas de manejar dicho
dispositivo. Para evitar problemas durante la conmutación, en primer lugar
deshabilitamos la salida del multiplexor mediante el pin de habilitación. A
continuación seleccionamos el modo de funcionamiento del convertidor
(unipolar o bipolar) según la configuración recibida. Esperamos 50 us,
necesarios para que sea efectivo tanto el nuevo modo de funcionamiento del
convertidor como la conmutación del canal, y habilitamos la salida. Se realizan
tanto lecturas como se haya configurado con los bits N(0:2).
Para cada lectura, se realiza un flanco de subida de la señal START, y a
continuación se debe esperar a que termine la conversión, mediante un flanco
de subida de la señal EOC. Las lecturas tomadas se almacenan en un buffer
temporal para a continuación realizar la media y obtener la medida final. Dicha
medida es almacenada en el buffer circular.
Por último, se incrementa la variable CH y se vuelve a repetir todas las
acciones.
Una vez comprobado todos los canales, se analiza si debemos adquirir nuevos
bloques, repetiendo todo el proceso anterior. En caso contrario, salimos del
bucle, y realizamos un flanco de subida de la señal INT para indicar que la
adquisición de todas las medidas ha concluido.
9.8.6. Rutina de interrupción USCI
Empleamos la rutina de interrupción generada cada vez que el buffer de transmisión
del periférico USCIA se encuentra vació. Si quedan bytes por transmitir, se carga el
próximo byte en el buffer y volvemos al estado de bajo consumo. En caso de que haya
concluido la transmisión, no se realiza ninguna acción .
José María Fernández Olmo Página 131 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012
Interfaz para el uso de microcontroladores de bajo
coste con instrumentación de control estándar
Memoria de Cálculo
Ilustración 143: Diagramas de flujo
José María Fernández Olmo Página 132 de 245
Versión: 2.00 Fecha de Actualización: 27/12/2012