tesis now modif.pdf
TRANSCRIPT
Facultad de Ingeniería Eléctrica
Especialidad de Ingeniería en Telecomunicaciones y Electrónica
Trabajo de Diploma
Diseño de una sonda de nivel con
compensación de la presión atmosférica
Autor:
Alimed Celecia Ramos
Tutor: Ing. Arturo Hernández González
Cotutores:
Dr.C Jorge Ramírez Beltrán Ing. Luis Ernesto Farah Fernández
2013
P á g i n a | i
Agradecimientos
En tan poco espacio es imposible mencionar a todas las personas que de
alguna forma u otra influyeron en mi formación como profesional y como
persona. Sean extensivos estos agradecimientos a quienes no se encuentren
en estas letras y sin embargo hayan sido importantes para mí.
A mi padre, ejemplo para mí en todos los aspectos.
A mi abuelo, por inculcarme las ansias de conocimiento desde pequeño.
A mi familia, comenzando por mi mamá, mis abuelas, mi hermano, tíos y
primos por su constante preocupación y esfuerzo para que yo llegara a donde
estoy hoy.
Al MsC. Daniel Vega, por su desinteresada ayuda y compartir sus
conocimientos que tan importantes fueron.
A Patricia, por estar al lado mío en los momentos buenos y en los no tan
buenos.
A mi amigo Dariel, que nadie lo olvida.
A mi amigo Amado, que me acompañó a través de incontables vicisitudes y
aportó su apoyo en todo momento.
A mis amigos Amores, Orrio, Tagle y Mandy, que aunque no hayan
terminado son triunfadores en la vida.
A todos mis compañeros de la casa de estudio: Sydney, Yasmany, Camilo,
Mejías. Nos reuniremos de nuevo pero no para quemarnos las pestañas.
A mis compañeros de estudio del 51: Waldo, Claudia, Chuco, Tony, Juan
Carlos, Karel, en fin, por tantos años juntos.
Al piquete del Vedado, por ayudarme a relajar todos los fines de semana.
A mi tutor Arturo y los cotutores Luis Ernesto y Jorge, por guiarme y por todo
el tiempo que les robé para mi provecho.
Al Ing Pedro I. Brugués, Ing Javier M. Valdés e Ing. Daniel Campillo, por su
colaboración en esta tesis.
P á g i n a | ii
A mi padre
P á g i n a | iii
Declaración de autoría
Declaro que soy el único autor de este trabajo, del cual entrego copia al
Departamento de Telecomunicaciones y Telemática de la Facultad de
Ingeniería Eléctrica del Instituto Superior Politécnico José Antonio Echeverría,
para que pueda ser utilizado en el desarrollo de otros trabajos.
Y para que haga constar se firma el presente documento:
__________________
Alimed Celecia Ramos
Soy estudiante de 5to año de Ingeniería en Telecomunicaciones y
Electrónica, y aspirante al título universitario.
P á g i n a | iv
Resumen
El Instituto Nacional de Recursos Hidráulicos (INRH) se encuentra
desarrollando varios proyectos en nuestro país que tienen como objetivo
automatizar las mediciones de las principales cuencas hidrográficas
nacionales. Para lograr este fin es necesario utilizar una gran variedad de
instrumentos de medición. Mediante las sondas de nivel se puede obtener el
nivel líquido de pozos, cisternas o cualquier contenedor en el cual se encuentre
almacenado algún líquido.
Las sondas de nivel que actualmente son utilizadas en el país son
importadas a muy altos precios ya que en nuestro país no se fabrican. Además,
cuando se daña alguna de éstas que se importa no es posible repararla porque
no están disponibles los detalles de su diseño. Debido a esto el Grupo de
Instrumentación Electrónica y Sensores Inteligentes (IESI) del Centro de
Investigaciones Hidráulicas (CIH) decidió desarrollar una sonda de nivel similar
a las existentes en el mercado.
Este trabajo trata acerca de las sondas de nivel que emplean el principio
hidrostático. Se analizan los aspectos teóricos relacionados con estos
dispositivos y se caracterizan algunas sondas de nivel comerciales.
Utilizando los conocimientos adquiridos durante el transcurso de la carrera,
se diseñó una sonda de nivel con compensación de la presión atmosférica. En
este trabajo se exponen las características y el funcionamiento de cada bloque
funcional del diseño y el procesamiento de las señales para realizar la
compensación. También se explica el funcionamiento del dispositivo en el
modo normal de operación y el diseño e implementación de los firmwares que
lo definen.
Utilizando varios software de simulación como IAR, PSPICE y Proteus se
realizaron las simulaciones de las partes esenciales del dispositivo,
comprobando el correcto funcionamiento tanto del hardware como el firmware
desarrollados. También se realizó con la ayuda del Instituto de Central de
Investigación Digital (ICID) una prueba para comprobar la validez de la
comunicación digital. En el capítulo final se exponen los resultados obtenidos.
P á g i n a | v
Abstract
The Instituto Nacional de Recursos Hidráulicos (INRH) is developing several
projects in our country that have as objective to automate the measurements of
major national watersheds. By level probes can get the fluid level of wells,
cisterns or any container in which is stored any liquid.
Level probes that are currently used in the country are imported at high prices
because in our country no longer manufactured. Furthermore, when some of
this imported ones are damaged is not possible fixit because the details of the
design are not available. Because of this the Grupo de Instrumentación
Electrónica y Sensores Inteligentes (IESI) of Centro de Investigaciones
Hidráulicas (CIH) decided to develop a level probe similar to those existing in
the market.
This work is about level probes that employs the hydrostatic principle. We
analyze the theoretical aspects of these devices and are characterized some
commercial level probes.
Using the knowledge acquired during the course of the degree, we designed
a level probe with atmospheric pressure compensation. In this paper we
describe the characteristics and operation of each functional block of the design
and signal processing for compensation. It also explains the operation of the
device in the normal mode of operation and the design and implementation of
the firmwares that define it.
Using various simulation softwares such as IAR, PSPICE and Proteus were
performed simulations of the essential parts of the device, checking the correct
operation of the hardware and the firmware developed. Also was performed
with the help of the Instituto Central de Investigación Digital (ICID) a test to
check the validity of the digital communication. In the final chapter the obtained
results are exposed.
P á g i n a | vi
Índice
INTRODUCCIÓN ................................................................................................................................. 1
CAPÍTULO 1 ESTUDIO TEÓRICO DE LAS SONDAS DE NIVEL ................................................................. 6
1.1 INTRODUCCIÓN .................................................................................................................................. 6 1.2 MEDICIÓN DE NIVEL ............................................................................................................................ 6
1.2.1 Principio capacitivo ................................................................................................................ 6 1.2.2 Principio resistivo ................................................................................................................... 7 1.2.3 Principio ultrasónico ............................................................................................................... 7 1.2.4 Principio de radar ................................................................................................................... 8 1.2.5 Principio de láser .................................................................................................................... 8 1.2.6 Principio de los flotadores ...................................................................................................... 8 1.2.7 Principio hidrostático .............................................................................................................. 8
1.3 SENSORES PIEZORRESISTIVOS ................................................................................................................. 9 1.3.1 Puente de Wheatstone ......................................................................................................... 10
1.4 CLASIFICACIÓN DE LOS SENSORES DE PRESIÓN PIEZORRESISTIVOS ................................................................ 11 1.5 CARACTERÍSTICAS NO DESEADAS DE LOS SENSORES DE PRESIÓN PIEZORRESISTIVOS Y SUS MÉTODOS DE
COMPENSACIÓN .......................................................................................................................................... 12 1.6 TECNOLOGÍA CHIP IN OIL.................................................................................................................... 13 1.7 CLASIFICACIÓN DE MEDIDORES DE NIVEL ................................................................................................ 13 1.8PROBLEMAS DE LAS SONDAS DE NIVEL SUMERGIBLES Y SU CORRECCIÓN ........................................................ 17 1.9 SALIDAS DE LAS SONDAS DE NIVEL ........................................................................................................ 18
1.9.1 Salidas analógicas ................................................................................................................ 18 1.9.2 Salidas digitales .................................................................................................................... 18
1.10 ANÁLISIS DE SONDAS DE NIVEL EXISTES EN EL MERCADO .......................................................................... 19 1.10.1 Medidor de nivel de radar VEGAPULS WL61 de VEGA ....................................................... 19 1.10.2 Medidor de nivel capacitivo Liquicap T FMI21 de Endress + Hauser .................................. 20 1.10.3 Sonda de nivel sumergible con sensor de presión PS3417 de IFM ..................................... 20 1.10.4 Sonda de nivel sumergible con salida digital SDI-12 OTT PLS de OTT ................................ 21 1.10.5 Sonda de nivel sumergible con sensor de presión DCX-22 AA de Keller ............................. 21
1.11 CARACTERÍSTICAS DE LA SONDA DE NIVEL A DISEÑAR .............................................................................. 22 1.12 CONCLUSIONES .............................................................................................................................. 23
CAPÍTULO 2 HARDWARE DE LA SONDA DE NIVEL ............................................................................ 24
2.1 INTRODUCCIÓN ................................................................................................................................ 24 2.2 DIAGRAMA EN BLOQUES DE LA SONDA DE NIVEL ...................................................................................... 24 2.3 SELECCIÓN DEL SENSOR DE PRESIÓN ...................................................................................................... 25 2.4 SELECCIÓN DEL PDS .......................................................................................................................... 26 2.5 DISEÑO DE LA FUENTE DE ALIMENTACIÓN .............................................................................................. 29 2.6 DISEÑO DEL LAZO DE SALIDA 4-20 MA .................................................................................................. 30
2.6.1 Selección del amplificador operacional ................................................................................ 31 2.6.2 Ecuaciones del lazo de corriente 4-20 mA ............................................................................ 32 2.6.3 Cálculo de las resistencias Rof y Rg ...................................................................................... 33 2.6.4 Selección del transistor ......................................................................................................... 34 2.6.5 Cálculo de las resistencias Rb y Rc ........................................................................................ 34
2.7 DISEÑO DE LA INTERFAZ DE SALIDA DIGITAL ............................................................................................ 35 2.7.1 Selección del driver RS232 .................................................................................................... 35 2.7.2 Selección del driver RS485 .................................................................................................... 36 2.7.3 Compatibilidad electromagnética de la interfaz digital ....................................................... 36
2.8 ESQUEMÁTICO DE LA SONDA DE NIVEL ................................................................................................... 36 2.9 CONCLUSIONES ................................................................................................................................ 40
CAPÍTULO 3 FIRMWARES DE LA SONDA DE NIVEL ........................................................................... 41
3.1 INTRODUCCIÓN ................................................................................................................................ 41 3.2 OPERACIÓN EN TIEMPO REAL DE LA SONDA DE NIVEL ................................................................................ 41 3.3 COMUNICACIÓN CON LOS SENSORES KELLER 9LD .................................................................................... 42
P á g i n a | vii
3.3.1 Protocolo de comunicación digital I2C .................................................................................. 42
3.3.2 Protocolo de comunicación de los sensores Keller 9LD ........................................................ 45 3.3.2.1 Detección del fin de adquisición y procesamiento ....................................................................... 46 3.3.2.2 Conversión de los datos digitales enviados por el sensor ............................................................. 46 3.3.2.3 Cambio de dirección de un esclavo .............................................................................................. 47
3.3.3 Desarrollo del firmware de comunicación con los sensores ................................................. 48 3.4 FIRMWARE QUE CONTROLA LA SALIDA ANALÓGICA DEL SISTEMA ................................................................. 49
3.4.1 Conversor digital-analógico perteneciente al MSP430F6638 .............................................. 49 3.4.2 Modo shutdown del amplificador operacional MAX9911 .................................................... 50 3.4.3 Desarrollo del firmware que maneja la salida analógica ..................................................... 51
3.5 FIRMWARE PARA LA COMUNICACIÓN ENTRE EL MSP Y UNA COMPUTADORA ................................................. 51 3.5.1 Protocolo de comunicación SDI-12 ....................................................................................... 51
3.5.1.1 Interfaz eléctrica ........................................................................................................................... 52 3.5.1.2 Protocolo de comunicación .......................................................................................................... 52 3.5.1.3 Chequeo de redundancia cíclica ................................................................................................... 55 3.5.1.4 Comandos extendidos .................................................................................................................. 55
3.5.2 Desarrollo del firmware para la comunicación digital del sistema ...................................... 55 3.5.2.1 Configuración de las salidas del dispositivo .................................................................................. 56 3.5.2.2 Configuración de la unidad de ingeniería ..................................................................................... 56 3.5.2.3 Obtención de los datos de los sensores y procesamiento ............................................................ 57 3.5.2.4 Envío de los datos al amo ............................................................................................................. 58 3.5.2.5 Respuestas con CRC ...................................................................................................................... 59
3.6 CONCLUSIONES ................................................................................................................................ 61
CAPÍTULO 4 RESULTADOS Y ANÁLISIS ECONÓMICO......................................................................... 62
4.1 INTRODUCCIÓN ................................................................................................................................ 62 4.2 RESULTADOS DE LAS SIMULACIONES ...................................................................................................... 62
4.2.1 Simulación de la comunicación con los sensores .................................................................. 62 4.2.2 Simulación de la comunicación digital mediante el protocolo SDI-12 .................................. 66 4.2.3 Simulación del lazo de corriente 4-20mA ............................................................................. 69
4.3 RESULTADOS PRÁCTICOS..................................................................................................................... 74 4.4 ANÁLISIS ECONÓMICO ........................................................................................................................ 78
4.4.1 Estimación de los costos ....................................................................................................... 78 4.4.2 Impacto económico .............................................................................................................. 80
4.5 CONCLUSIONES ................................................................................................................................ 81
CONCLUSIONES FINALES .................................................................................................................. 82
RECOMENDACIONES ....................................................................................................................... 83
REFERENCIAS BIBLIOGRÁFICAS ........................................................................................................ 84
BIBLIOGRAFÍA .................................................................................................................................. 86
ANEXOS ........................................................................................................................................... 89
ANEXO 1. PROGRAMA DESARROLLADO PARA EL FUNCIONAMIENTO DEL DISPOSITIVO EN BIBLIOTECAS .C Y .H. ............ 89 ANEXO 2. ANÁLISIS DESDE LA DEFENSA ..................................................................................................... 140
I n t r o d u c c i ó n P á g i n a | 1
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Introducción
El nivel es la altura que alcanza una sustancia líquida. En la actualidad las
industrias se encuentran en constante perfeccionamiento de los instrumentos
de control y herramientas con el objetivo de aumentar la calidad del proceso
productivo. La obtención de nivel de sustancias líquidas es necesaria en
numerosos procesos industriales y para la gestión de recursos hidráulicos.
Existen diversas maneras de medir el nivel basándose en diferentes principios
físicos, estas pueden enumerarse como: capacitivos, resistivos, hidrostáticos,
ultrasónicos, de radar, láser, seguimiento de la superficie, flotadores, entre
otros (1), (2). Una de las formas de medir nivel de manera continua es la
utilización de sondas de nivel sumergibles, permitiendo proporcionar los datos
de nivel de manera permanente mediante una señal eléctrica a su salida (1).
La mayoría de las sondas de nivel sumergibles se basan en el principio
hidrostático para la obtención del nivel (2). Dicho principio proporciona el nivel a
partir de la presión ejercida por un bloque líquido sobre una superficie. Esta
presión ejercida por la columna líquida está compuesta por la presión ejercida
por el bloque y la presión ejercida por encima del líquido (presión en la
superficie libre del líquido).
Los sensores de presión son dispositivos encargados de detectar los
cambios de esta magnitud y transformarlos en señales eléctricas. Uno de los
principios físicos mayormente empleados en la medición de la presión y el nivel
es el piezorresistivo (3). Éste se basa en la descripción de los cambios
ocurridos en la resistencia eléctrica de un material debido a la aplicación de
tensiones mecánicas. Estos sensores han logrado una gran popularidad en
diversas aplicaciones debido a las propiedades elásticas del silicio, su
utilización en la construcción de los circuitos integrados y los grandes avances
en la elaboración de los Sistemas Micro-Electro-Mecánicos (MEMS). Una de
las configuraciones más utilizada con piezorresistores para las mediciones es
la del puente de Wheatstone (4).
La señal de salida de estos sensores es altamente dependiente de la
temperatura (5), por lo cual se hace necesaria su compensación para obtener
un mínimo de precisión en la medición. La compensación puede realizarse
I n t r o d u c c i ó n P á g i n a | 2
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
mediante diversos métodos los cuales varían en complejidad y eficiencia (6).
Pueden mencionarse las técnicas analógicas, que se basan en componentes
analógicos como diodos, amplificadores, transistores, entre otros. Además, el
procesamiento digital de la señal en el dominio analógico utilizando
convertidores digital analógicos (DAC), memorias EEPROM, amplificadores de
ganancia programable. También la utilización más novedosa lo constituyen los
procesadores de señales digitales (DSSP, por sus siglas en inglés), los cuales
se encargan de digitalizar la señal mediante convertidores analógico digitales
(ADC), la acondicionan y después la llevan al dominio analógico mediante DAC
si fuese necesario, pudiéndose brindar también como señal digital.
Para facilitar el proceso de compensación en la obtención de nivel se utiliza
un cable ventilado o un barómetro (1). Debido a los inconvenientes que pueden
presentarse al utilizar estas técnicas surge una forma novedosa: son utilizados
dos sensores de presión. El primero mide la presión de la columna de líquido y
el segundo la presión atmosférica (barométrico). Mediante un procesamiento
posterior puede obtenerse el nivel al compensar el efecto de la presión
atmosférica.
La salida de la sonda de nivel puede ser tanto analógica como digital. La
salida analógica más empleada es la de 4-20mA. Para implementar la salida
digital se utiliza comúnmente algún protocolo de comunicación como HART,
SDI-12, Profibus o Foundation Fieldbus.
El INRH se encuentra desarrollando varios proyectos de gran importancia
con el objetivo de lograr la automatización de las principales cuencas
hidráulicas nacionales. En éstas se torna imprescindible la utilización de
instrumentación para conseguir el logro de este objetivo. Las sondas de nivel
son un instrumento de medición de mucha importancia para estos proyectos.
Permiten la obtención del nivel líquido de pozos, cisternas o cualquier
contenedor en el cual se encuentre almacenado algún líquido.
Las sondas de nivel que actualmente son utilizadas en el país son
importadas a muy altos precios ya que en nuestro país no se fabrican. Además,
estas sondas de nivel obtenidas en el mercado extranjero no se adaptan a las
condiciones de alta humedad que posee el clima tropical de nuestro país. Es
muy importante la superación de estos inconvenientes propios de nuestro
I n t r o d u c c i ó n P á g i n a | 3
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
ambiente y lograr la sustitución de parte de las importaciones que realiza el
INRH.
Problema a resolver:
¿Cómo reducir las importaciones de sondas de nivel y adaptarlas a las
condiciones del clima en nuestro país?
Objeto de estudio:
Instrumentación electrónica, procesamiento digital de señales de sensores y
algunos principios hidráulicos.
Campo de acción:
Sondas de nivel que utilizan sensores de presión piezorresistivos y
microcontroladores.
Objetivo:
Diseñar y simular una sonda de nivel con compensación de la presión
atmosférica para aplicaciones hidráulicas.
Tareas:
Buscar y estudiar información acerca de las sondas de nivel y su
diseño.
Escoger la solución adecuada para las condiciones de nuestro país y
requerimientos del diseño.
Estudiar y determinar los dispositivos que se utilizarán como
componentes en el hardware del dispositivo.
Desarrollar, simular y poner a punto los firmwares necesarios para el
funcionamiento del dispositivo utilizando herramientas de simulación
como: Proteus, MathCAD, IAR, Altium.
Validar el firmware que define el funcionamiento del dispositivo
mediante una prueba práctica.
Hipótesis:
A partir del diseño y la simulación de una sonda de nivel con compensación
de la presión atmosférica es posible obtener un primer prototipo de transmisor
de nivel con la finalidad de reducir las importaciones de sondas de nivel y
adaptarlas a las condiciones del clima en nuestro país.
Los métodos de investigación que fueron empleados son:
I n t r o d u c c i ó n P á g i n a | 4
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
1. Método sistémico con el objetivo de comprender y solucionar el
problema a partir del objeto de estudio y desarrollar la sonda de nivel a partir
del diseño de los bloques funcionales que lo componen.
2. Método histórico - lógico para analizar el estado del arte de las sondas
de presión, así como las principales características de los componentes a
utilizar en el diseño que hoy se encuentran en el mercado.
3. Método teórico - práctico en el estudio teórico de los sensores de
presión, los circuitos de acondicionamiento de señal, los protocolos de
comunicación y en la comprobación experimental de la sonda de nivel.
El contenido de esta tesis se encuentra estructurado en 4 capítulos. En el
primer capítulo, Estudio Teórico de las Sondas de Nivel, se abordarán los
principales temas relacionados con el cálculo de nivel y especialmente las
sondas de nivel sumergibles. También se describen los sensores de presión
piezorresistivos, los problemas asociados a estos sensores y los circuitos de
acondicionamiento que permiten minimizar estas deficiencias. Finaliza el
capítulo con una descripción de la sonda de nivel que será diseñada. Estos
aspectos servirán como base para los próximos capítulos.
En el segundo capítulo, Hardware de la sonda de nivel, se presentan los
bloques funcionales que conforman el dispositivo. A partir de este diagrama se
relacionan los componentes que se encargarán de cumplir las funciones
requeridas tomando en cuenta el consumo de corriente de cada componente.
Se describe el diseño del lazo de salida 4-20mA y el de la interfaz digital de la
sonda de nivel.
En el tercer capítulo, Firmwares de la sonda de nivel, se tratan los
aspectos asociados al desarrollo de los firmwares que controlan el
funcionamiento de la sonda de nivel. Se describe el firmware que se ejecuta en
el microcontrolador profundizando en los temas relacionados con la
comunicación con los sensores, el procesamiento de las muestras y la
comunicación digital. Se explican también las características, funciones e
implementación del protocolo de comunicación digital serie SDI-12.
En el cuarto capítulo, Resultados y Análisis Económico, se describen las
simulaciones y la prueba práctica realizada a los diferentes bloques funcionales
de la sonda de nivel. Son analizados los resultados y se valida el firmware
I n t r o d u c c i ó n P á g i n a | 5
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
diseñado. Por último se realiza un análisis de los costos del proyecto y el
impacto económico que generaría la sonda de nivel a nuestro país.
Para finalizar en las Conclusiones Finales se verifica el cumplimiento de los
objetivos propuestos y se resumen los resultados obtenidos. En las
Recomendaciones se plantean los aspectos en que se pudieran continuar
trabajando en un futuro para complementar el proyecto.
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 6
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Capítulo 1 Estudio Teórico de las Sondas de Nivel
1.1 Introducción
En este capítulo se tratarán los temas relacionados con el cálculo de nivel y
especialmente las sondas de nivel sumergibles. También se profundiza en los
sensores de presión piezorresistivos, los problemas asociados a estos
sensores y los circuitos de acondicionamiento que permiten minimizar estas
deficiencias. Además, se procede a realizar un estudio del estado del arte de
las sondas de nivel existentes en el mercado mundial y sus principales
características. Finaliza el capítulo con una descripción de la sonda de nivel
que será diseñada. Estos aspectos servirán como base para los próximos
capítulos.
1.2 Medición de nivel
La medición de nivel se basa principalmente en varios principios físicos
mediante los cuales se puede obtener dicha variable. Estos principios pueden
ofrecer el nivel de sustancias tan diversas como líquidos, compuestos acuosos,
materiales granulares, y en polvos. La sustancia a medir puede presentarse en
estado natural (ríos, lagos) o en algún contenedor. Entre los principios físicos
utilizados para aplicaciones hidráulicas se pueden citar el capacitivo, el
resistivo, el hidrostático, el ultrasónico, el de radar, el de láser, flotadores
(utilizando la gravedad) y el detector vibratorio (1), (2).
1.2.1 Principio capacitivo
El método capacitivo se basa en la medición del cambio de la capacitancia
de un capacitor con la variación de nivel. Para implementar este principio se
considera que la mayoría de los fluidos poseen constantes dieléctricas muy
distintas a la del aire (la cual se aproxima a 1). Este capacitor se compone por
dos electrodos ligeramente separados entre los cuales se encuentra un
material dieléctrico. Uno de los electrodos constituye el de medición y el otro es
utilizado como referencia (1).
Se considera importante aclarar que la capacitancia debe variar de forma
proporcional al nivel del líquido (2). Este principio puede utilizarse tanto en
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 7
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
sustancias sólidas como líquidas, siendo conductoras o no conductoras. Para
obtener la capacitancia total se utiliza la expresión 1.1.
(
) (1.1)
Donde
: Capacitancia en Farad
: Constante de proporcionalidad
: Constante dieléctrica
: Área efectiva de los conductores
: Distancia entre electrodos
1.2.2 Principio resistivo
El principio resistivo para la medición de nivel tiene como base la variación
en la resistencia entre dos electrodos que poseen un líquido conductor entre
ellos. Al cambiar el nivel de dicho líquido se origina una variación de la
resistencia. Cuando el nivel del líquido es alto el valor de la resistencia será
menor que cuando el nivel sea bajo (1). La resistencia entre los dos electrodos
depende del nivel de líquido, pero también de la resistividad de este.
1.2.3 Principio ultrasónico
Este método se basa en la medición de la distancia recorrida por un pulso
ultrasónico mediante el cálculo de tiempo. Un sensor transmite un pulso
ultrasónico hacia la superficie del líquido donde es reflejado y regresa
nuevamente al sensor. El tiempo que demora este proceso es proporcional a la
distancia entre el sensor y la superficie del líquido (2). Para obtener el nivel
utiliza las siguientes ecuaciones:
(1.2)
(1.3)
Donde:
: Distancia entre el sensor y la superficie del líquido
: Velocidad del sonido en el aire
: Tiempo de tránsito
: Nivel
: Altura del sensor al nivel mínimo
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 8
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Al utilizar estas ecuaciones debe tenerse en cuenta que la velocidad del
sonido depende de la composición del medio y de la temperatura (1).
1.2.4 Principio de radar
Este método es similar al anterior, cambiando el sensor de transmisión por
una antena. Ésta se encarga de transmitir un pulso de microondas, siendo
reflejado por el líquido de vuelta a la antena. Las ecuaciones para calcular la
distancia y el nivel son simulares a 1.2 y 1.3, pero se debe sustituir la velocidad
del sonido par la velocidad de la luz. Este método ofrece la ventaja de ser
independiente de la temperatura y la presión (1).
1.2.5 Principio de láser
Este principio se asemeja mucho a los dos anteriormente expuestos. Utiliza
un emisor que dispara un pulso corto de luz hacia el líquido, siendo éste
devuelto al emisor mediante la reflexión. Puede ser utilizado tanto en sólidos
como líquidos y se aplica a altos valores de temperatura y presión (2).
1.2.6 Principio de los flotadores
Este método es el más simple que se puede utilizar. Emplea algún objeto
flotante con una gravedad intermedia entre la del líquido y el vapor o aire
encima de este. Entonces mediante la utilización de algún instrumento
mecánico se determina su posición (2).
1.2.7 Principio hidrostático
La medición de nivel mediante el principio de presión hidrostático se
fundamenta en la obtención de la presión ejercida por una columna líquida
sobre una superficie que se encuentre sumergida debajo de ella. La presión
hidrostática ejercida por la columna líquida se calcula mediante la expresión
1.4.
(1.4)
Donde
: Presión hidrostática
: Altura de la columna de líquido
: Densidad
: Aceleración de la gravedad
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 9
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Al realizar un despeje puede obtenerse el nivel:
(1.5)
La presión que ejerce la columna de un líquido es la presión del líquido más
la presión en la superficie libre del líquido. Esta situación debe ser compensada
para el correcto cálculo del nivel mediante este principio (1).
1.3 Sensores piezorresistivos
Los sensores de presión piezorresistivos son de una amplia aplicación en los
sectores automovilístico, industrial y biomédico. Se pueden mencionar algunas
aplicaciones como dispositivos implantables para realizar la medición de la
presión sanguínea, ocular o sanguínea, sensores de presión en líneas de
combustible, múltiples de los motores, o monitorización de procesos
industriales (3).
Los sensores de presión piezorresistivos están compuestos por dos
componentes fundamentales: la lámina (membrana) de un área determinada y
un detector que responda a alguna fuerza aplicada. Los componentes que
conforman los sensores piezorresistivos son: un soporte estructural, un chip de
silicio sensible a la presión, un encapsulado de acero inoxidable, aceite de
silicona y un delgado diafragma de acero inoxidable. Se puede observar el
esquema de estos componentes estructurales en la figura 1.1 (5).
Figura 1.1 Estructura de un sensor piezorresistivo
Resulta muy ventajoso utilizar el silicio como material estructural en los
sensores piezorresistivos. El silicio posee un coeficiente piezorresistivo grande,
características elásticas superiores, entre otras características aprovechables.
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 10
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
El aceite de silicona se encuentra dentro de una cámara formada por el
diafragma de acero inoxidable, el encapsulado del mismo material y el soporte
estructural. A este se encuentra unido el chip de silicio, el cual está conectado
a los terminales de conexión mediante hilos de oro.
Cuando el sensor se encuentra en funcionamiento la presión que se ejerce
sobre el diafragma es transferida a través del aceite de silicona al chip de
silicio. Esta presión produce un cambio en el valor óhmico de los resistores,
debido a los coeficientes piezorresistivos rompe el equilibrio del puente de
Wheatstone, como se explicará en el próximo epígrafe dando como resultado
señales de tensión proporcionales a las presiones aplicadas.
1.3.1 Puente de Wheatstone
Los sensores resistivos pueden encontrarse típicamente conectados en
configuración de puente de Wheatstone. Éstos brindan una gran sensibilidad y
reproducen de manera confiable la señal a medir (4), (7). Esta configuración se
utiliza para realizar mediciones de temperatura, presión o estrés utilizando
elementos resistivos mediante la detección de pequeños cambios dichos
elementos (8). La configuración típica del puente de Wheatstone puede
observarse en la figura 1.2.
Figura 1.2 Configuración típica en puente de Wheatstone
La tensión a su salida es obtenida de manera diferencial entre las salidas
de los dos divisores de tensión en las dos ramas opuestas. La desviación de
las resistencias de un valor nominal preestablecido es interpretada como algún
cambio en la variable física que se mide, siendo la tensión de salida del puente
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 11
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
el que indique dicho cambio. Esta tensión se puede determinar mediante la
siguiente ecuación:
[
] (1.6)
Se puede considerar el puente como balanceado si es 0, es decir,
⁄⁄ . De esta condición se infiere que la tensión de salida será nulo
independientemente de la manera de excitación.
Los puentes pueden tener uno, dos o cuatro piezorresistores y pueden
alimentarse tanto con corriente como con tensión, aunque esta última es la
forma más popular. En la configuración de puente de Wheatstone se manifiesta
una marcada relación entre la resolución de la señal de salida y el consumo de
potencia. A mayor resistencia equivalente aumenta el umbral de ruido, mientras
que a un menor valor de resistencia existe un mayor valor en la corriente que
circula por el puente. Igualmente la señal de salida es proporcional a la tensión
de alimentación, trayendo como consecuencia un elevado consumo de
potencia para una gran resolución (9).
1.4 Clasificación de los sensores de presión piezorresistivos
Los sensores piezorresistivos tienen diferentes clasificaciones según sus
usos y aplicaciones. De maneara general, todos los sensores de presión
pizorresistivos pueden considerarse diferenciales por su principio básico de
funcionamiento. Esto puede definirse debido a que la salida está relacionada
con la diferencia de presión entre los dos lados de la membrana. La diferencia
entre un sensor relativo y uno diferencial es que el relativo sólo posee una
membrana mecánica conectada al proceso, mientras que el diferencial posee
dos membranas. La forma de conexión de dichos lados de la membrana
constituye una de las principales maneras de clasificar estos sensores.
Utilizando este principio, los sensores de presión pueden clasificarse en
manométricos ventilados, manométricos sellados, absolutos, diferenciales,
barométricos y vacuómetros.
Los manométricos ventilados son aquellos que poseen un lado de la
membrana conectado al proceso, estando el otro lado conectado a la presión
atmosférica del lugar mediante un conducto. La diferencia de los manométricos
sellados con este último es que el lado no conectado al proceso se encuentra
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 12
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
sellado, manteniendo la presión atmosférica a la cual fue fabricado. De modo
similar los sensores absolutos mantienen en un lado una presión lo más
aproximada posible al cero absoluto, necesitando compensación ya que
alcanzar el cero absoluto es imposible. Los vacuómetros son similares a los
manométicos, siendo empleados para medir presiones inferiores que la presión
atmosférica. Por último los sensores barométricos son un tipo de sensores
absolutos, los cuales se utilizan para la medición de las variaciones de la
presión atmosférica con respecto al cero absoluto.
1.5 Características no deseadas de los sensores de presión
piezorresistivos y sus métodos de compensación
Los principales problemas que se asocian a los sensores de presión
piezorresistivos están relacionados a la no linealidad, la dependencia de la
temperatura y los errores de histéresis. La dependencia de mayor efecto
negativo causa es la sensibilidad con la temperatura (5). Como consecuencia
es evidente un decrecimiento en la precisión del sensor, siendo necesaria la
compensación de estos problemas en aras de obtener sensores de una alta
precisión. Es importante también el control sobre el proceso de fabricación ya
que cualquier alteración produce importantes cambios en la dependencia
térmica del sensor (6).
Para realizar la calibración y compensación de la señal proveniente del
sensor son utilizados circuitos de acondicionamiento con el objetivo de
minimizar los problemas mencionados anteriormente. Entre las diversas formas
de realizar dicho acondicionamiento podemos citar los métodos analógicos, la
utilización de un microcontrolador de señales en el dominio analógico (ASSP,
por sus siglas en inglés) o la utilización de un microcontrolador de señales
digitales (DSSP, por sus siglas en inglés).
Las soluciones puramente analógicas como su nombre lo indica son basadas
en elementos analógicos (dígase amplificadores operacionales, diodos,
transistores, entre otros). Existen innumerables métodos para aplicar esta
técnica, pudiéndose citar particularmente la utilización de resistores externos
(10) y la utilización de características de componentes como capacitores (11).
La utilización de ASSP se basa en la compensación y calibración de la señal
desde el dominio digital pero manteniendo esta señal en el formato analógico.
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 13
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Para su funcionamiento se utilizan memorias EEPROM, convertidores digital
analógicos (D/A), y amplificadores de ganancia programable. Éstos realizan
una compensación de las no linealidades del sensor y la componente
cuadrática del coeficiente térmico de la sensibilidad. Los factores de corrección
son obtenidos según el proceso automatizado de calibración, siendo
almacenados en las memorias EEPROM (6).
Entre las formas más novedosas de realizar la compensación y calibración
de la señal proveniente de un sensor se encuentra la utilización de un DSSP.
Este sistema primeramente digitaliza la señal mediante un convertidor
analógico-digital (A/D) para posteriormente realizar su procesamiento en un
microcontrolador, devolviéndola posteriormente a formato analógico mediante
un convertidor digital-analógico (D/A) para su salida o pudiéndola ofrecer
también en formato digital. Entre las ventajas que pueden citarse al utilizar este
método están la posibilidad de ajustar el rango de trabajo del transmisor,
además de las muchas opciones que brinda la compensación digital. También
se puede argumentar la posibilidad de brindar una salida con comunicación
digital utilizando buses de campo y protocolos de comunicación (6).
1.6 Tecnología Chip in Oil
La tecnología Chip in Oil constituye una moderna forma de fabricación de los
dispositivos creada por Keller para la fabricación de sensores de presión. En su
aplicación incluye dentro del propio sensor de presión un Circuito Integrado
para Aplicaciones Específicas (ASIC), el cual se encarga de la compensación y
calibración de la señal del sensor, permitiendo un diseño estructural bastante
compacto (12).
Utiliza cables sinterizados de cristal resistentes a la presión para la salida y
cables cortos y ligeros en su interior excluyendo totalmente la presencia de aire
en el aceite. Éstos en conjunto con la configuración de encapsulado de acero
de alto grado logran simular una jaula de Faraday, brindando una gran
resistencia a la interferencia de campos eléctricos externos.
1.7 Clasificación de medidores de nivel
Los medidores de nivel se pueden clasificar primeramente basándose en el
tipo de medición que realizan: continua o discreta. Los medidores continuos
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 14
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
brindan una salida continua, mientras que los detectores ofrecen una salida
que indica la presencia o no de fluido en algún punto. Estos últimos no generan
información exacta del lugar en el cual se encuentra el líquido. Además pueden
ser clasificadas por el principio físico que utilizan para monitorear la variable.
Los medidores de nivel capacitivos pueden emplearse en tanques con
paredes conductoras que pueden ser utilizadas como electrodos de referencia
o tanques con paredes no conductoras que necesitan un electrodo de
referencia adicional. Cuando el líquido es conductor, la sonda que se inserta en
el mismo debe ser recubierta con un material aislante (2). Debido al valor de la
constante dieléctrica de los líquidos, el valor de la capacitancia del sistema va a
ser mayor cuando la sonda está completamente cubierta que cuando está
parcialmente o completamente descubierta. Los cambios de capacidad con el
nivel son convertidos en variaciones de la señal de salida mediante circuitos de
procesamiento (1). Estos medidores de nivel capacitivos pueden observarse en
la figura 1.3
Figura 1.3 Sensores de nivel capacitivo
Los medidores de nivel resistivos utilizan también las paredes del tanque
como electrodo, pero en este caso las paredes del tanque deben ser
conductoras. Comúnmente se utiliza una sonda de dos electrodos, eliminando
la necesidad de utilizar tanques metálicos aterrados. Para compensar los
efectos de la variación de la resistividad del líquido o fluido se utilizan
electrodos de compensación. Normalmente se fabrican de acero inoxidable,
aunque también pueden fabricarse de tantalio y hastelloy. Se instalan en
posición vertical para evitar la generación de corrientes parásitas causadas por
la formación de películas de líquido.
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 15
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Los medidores de nivel ultrasónicos utilizan un circuito de procesamiento el
cual se basa en microcontroladores para transformar el tiempo de tránsito de
una señal ultrasónica emitida en la salida de nivel. El sensor es una membrana
conectada a uno o varios cristales piezoeléctricos para transmitir y recibir la
señal de sonido. Entre los métodos de compensación pueden mencionarse: la
utilización de un obstáculo a una distancia constante o la medición de la
temperatura del medio. El primero origina una trayectoria de compensación,
brindándole al circuito de procesamiento la posibilidad de eliminar la influencia
de la variación de la velocidad del sonido en el medio. Estos medidores de nivel
poseen una distancia mínima de utilización (2) y pueden observarse en la figura
1.4.
Figura 1.4 Sonda de nivel ultrasónica
Los medidores de nivel por radar son muy parecidos a los anteriores, el
circuito de procesamiento utiliza la misma operación para obtener el nivel. Esta
sonda trabaja con energía electromagnética, la cual se refleja por la
impedancia (constante dieléctrica del medio). Esta constante dieléctrica del
fluido tiene un valor mínimo para el correcto funcionamiento del dispositivo.
El sensor de nivel láser está diseñado para su utilización en tanques con
numerosas obstrucciones y a largas distancias. Su funcionamiento es similar a
los anteriores, aunque resulta costoso para aplicaciones simples como la
medición de agua (1).
El medidor de nivel basado en flotadores acopla al flotador la generación de
una señal eléctrica la cual puede ser producida por la utilización de
codificadores ópticos asociados a un sistema flotador – cinta – contrapeso o
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 16
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
mediante el uso de micro – interruptores magnéticos. El primer caso consiste
en cintas con perforaciones equidistantes, las cuales al pasar por un par óptico
equidistante se cuenta las veces que la luz es interrumpida al paso de dichas
perforaciones. El circuito de procesamiento se encarga de determinar la
variación del nivel a partir del movimiento de la cinta. En el segundo caso el
flotante se desplaza a lo largo de una varilla en la cual se sitúan los micro –
interruptores magnéticos, estando asociado al flotante un imán que genera la
apertura de los interruptores. El circuito de procesamiento determina la posición
del flotante(1).
Las sondas de nivel hidrostáticas pueden clasificarse en tres grupos, las que
utilizan el método de burbujeo, las que utilizan el principio de Arquímedes y las
que utilizan sensores de presión para medir directamente la presión ejercida
por el bloque líquido. El método de burbujeo o desplazadores son aplicados
cuando el sensor no puede estar en contacto directo con el fluido.
Para la implementación del principio de medición por burbujeo se introduce
un tubo o manguera en el líquido por la cual se hace circular un gas
(típicamente aire, o algún gas inerte) originando un burbujeo. Al determinase
que este se mantiene de forma continua, la presión en la manguera alcanzó el
mismo valor que la presión hidrostática ejercida por la columna líquida. Esta
presión es monitorizada por un transductor de presión conectado al tubo (2). La
implementación de este principio puede observarse en la figura 1.5.
Figura 1.5 Sensor de nivel hidrostático mediante burbujeo
El otro método mencionado como alternativa al de burbujeo son los
desplazadores, los cuales se basan en el principio de Arquímedes. Éste es la
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 17
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
suspensión de un objeto en el recipiente que contiene el líquido que posea un
peso mayor que el de este. Además el objeto debe poseer área constante y al
tener el peso del mismo se relaciona con el nivel. Cuando el nivel del líquido
disminuye provoca una disminución en el volumen del cuerpo por lo que la
fuerza de empuje disminuye.
La utilización de sensores de presión directamente es la forma más común
de aplicar el principio hidrostático para aplicaciones que puedan establecer
contacto directo entre el líquido y el sensor. Para eliminar el efecto de la
presión sobre el líquido se utiliza un sensor de presión diferencial con la
segunda toma conectada a la presión de la superficie. En el caso de un tanque
puede situarse en la parte inferior y por fuera o en la parte superior con una
sonda sumergible (1).
Las sondas sumergibles tienen una gran aplicación en lugares donde no se
puedan conectar el sensor por fuera como los pozos embalses. Las sondas de
nivel están constituidas por un sensor de presión encapsulado especialmente
para que el líquido no penetre y dañe el equipamiento. Para obtener la
referencia de la presión en la superficie del líquido se hace necesario encontrar
alguna solución que puede definirse en la utilización de un cable ventilado o un
barómetro en dicha superficie.
Un cable ventilado es una pequeña manguera situada en el cable por el cual
se comunica el sensor. Esta manguera brinda la referencia de la presión en la
superficie del líquido necesaria para el transductor. La otra forma de
compensar el efecto de la presión atmosférica es utilizar un sensor barométrico
en la superficie del líquido. Este sensor se encarga de obtener la presión
atmosférica. Después de obtener el valor de presión brindado por el sensor
encapsulado y obteniendo el valor de la presión atmosférica se puede realizar
un proceso de compensación que permita la obtención del valor real de nivel.
1.8Problemas de las sondas de nivel sumergibles y su corrección
El método del cable ventilado constituye una gran ventaja pero al estar el
cable expuesto a la interacción con el ambiente puede llegarse a conformar
una columna líquida en el interior de cable ventilado. Esta situación se produce
como efecto de la humedad y de los cambios de temperatura producto de la
condensación. Esta condición trae como consecuencia la inexactitud en las
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 18
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
mediciones. Para eliminar esta situación debe descartarse el cable ventilado,
pero sin embargo se debe mantener una referencia de la presión en la
superficie del líquido para la correcta medición. Una forma novedosa es la
utilización de otro sensor de presión que se encargue de medir la presión en la
superficie, para posteriormente utilizando un circuito de procesamiento realizar
la compensación.
1.9 Salidas de las sondas de nivel
Las sondas de nivel poseen una gran variedad de formatos de salida. La
selección de cada una de ellas depende de las exigencias del lugar en que se
van a emplear y del circuito de acondicionamiento que se utilice. Las salidas
pueden clasificarse en dos grupos: las salidas analógicas y las salidas digitales.
1.9.1 Salidas analógicas
La salida analógica 4-20mA a dos hilos es una de las más utilizadas
industrialmente por las ventajas que proporciona. Ésta puede utilizarse a
grandes distancias, ya que la información útil se representa por el consumo del
transmisor. Esta salida puede implementarse sobre dos hilos de función doble:
alimentador del transmisor y transmisión del resultado.
Otra formato de salida analógico utilizado es el de 0-10V. La salida en
tensión es dependiente de la longitud del cable ya que la resistencia de este
afecta la señal, trayendo consigo una afectación en la calidad de la medición.
Otro tipo de salida es la nombrada Pulse Width Modulation (PWM). En ésta la
información de la señal de control es representada en el ciclo útil de los pulsos
de salida. La información es susceptible a interferencias generadas por
radiofrecuencia.
1.9.2 Salidas digitales
Las salidas digitales utilizan drivers para estandarizar los niveles de tensión a
sus salidas. Sobre estas interfaces pueden implementarse diferentes tipos de
protocolos de comunicación. Algunos de los protocolos más utilizados en
aplicaciones industriales son: MODBUS, Profibus, HART, SDI-12, entre otros.
Mediante esta comunicación se pueden obtener los datos de la medición y
configurar algunos parámetros del dispositivo. La comunicación digital es más
confiable y económica, posibilitan una mayor cantidad de opciones de
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 19
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
configuración y funcionamiento, además de permitir en muchos casos la
utilización de buses de campo.
1.10 Análisis de sondas de nivel existes en el mercado
El mercado internacional de sondas de nivel se encuentra saturado de
fabricantes que ofrecen soluciones actuales y eficientes. Como ejemplos de
fabricantes podemos citar Keller, Endress + Hauser, VEGA, ABS, IFM, Druck,
TecFluid, entre otros. Las sondas existentes en el mercado utilizan diferentes
principios para realizar el cálculo y diferentes salidas para obtener la variable. A
continuación se exponen las características de algunas de las sondas de nivel
estudiadas.
1.10.1 Medidor de nivel de radar VEGAPULS WL61 de VEGA
Estos sensores de nivel poseen salida analógica 4-20mA, HART (las
comunicaciones digitales y analógicas se realizan sobre los mismos hilos) o
digital mediante PROFIBUS o Foundation Fieldbus. Brindan además un rango
de medición de hasta 15m, y una precisión a la salida de 2mm. Trabaja para
una presión de proceso de -1…+2 bar (-100…+200kPa)(13).
Es un sensor ideal para las aplicaciones en el sector de la hidráulica y las
aguas residuales. Ofrece resultados exactos de medición independientemente
de las condiciones del proceso y ambientales. Este sensor se puede observar
en la figura 1.6.
Figura 1.6 Medidor de nivel VEGAPULS WL61
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 20
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
1.10.2 Medidor de nivel capacitivo Liquicap T FMI21 de Endress +
Hauser
Este sensor de nivel es utilizado en líquidos conductivos (mayor de 30μS/cm)
para medición continua y no requieren de calibración (14). El rango de
medición se encuentra entre 150 y 2500mm en dependencia del rango que se
solicite. Puede ajustarse a una capacidad inicial desde 0 a 2000pF, permitiendo
una variación de 25 a 2000pF.
Posee salida analógica de 4 – 20mA brindando un máximo de error en la
medición ≤ 1% del valor de escala completa. Trabaja en procesos que se
encuentren a presiones entre -1 y 10 bar. Además se caracteriza por una
repetibilidad de un 0.25% del valor de escala total. Puede observarse en la
figura 1.7.
Figura 1.7 Medidor de nivel Liquicap T FMI21
1.10.3 Sonda de nivel sumergible con sensor de presión PS3417 de
IFM
Esta sonda de nivel de medición continua utiliza un sensor de presión para
obtener la presión que ejerce la columna líquida y un cable ventilado para
determinar la presión de la superficie del líquido para la compensación. Utiliza
una salida analógica de 4-20mA y protección contra cortocircuitos y como
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 21
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
rango de alimentación de 10 a 30V en corriente directa. Posee una cubierta de
acero inoxidable para su protección(15).
El rango de medición es de 0 a 1bar con una exactitud en la señal analógica
de 0.5% incluyendo errores de linealidad, del punto cero y del margen
(configuración del valor límite). El error de repetibilidad es menor que un 1% y
la estabilidad a largo plazo de 0.2% del margen por año. Trabaja en fluidos
líquidos que se encuentren a una temperatura entre -10 y 50ºC. Puede
observarse en la figura 1.8.
Figura 1.8 Sonda de nivel sumergible PS3417
1.10.4 Sonda de nivel sumergible con salida digital SDI-12 OTT PLS
de OTT
Esta sonda de nivel está formada por una célula de medición de presión
capacitiva de cerámica y un controlador integrado que se encarga de calcular el
nivel del agua. Emplea un cable ventilado para determinar la presión de la
superficie del líquido. Puede suministrarse con salida analógica de 4-20mA o
las salidas digitales SDI-12 o RS485. El rango de alimentación es de 9.6 a 28V
(16).
Brinda un rango de medición desde de 0 a 4m hasta de 0 a 40m con un error
del 0.05% del valor final del margen de medición. Puede trabajar en
temperaturas desde -25 hasta 70 ºC. La desviación anual máxima es de solo
0.1% del valor final del margen de medición.
1.10.5 Sonda de nivel sumergible con sensor de presión DCX-22 AA
de Keller
Las sondas de nivel DCX-22 AA son diseñadas para ambientes de alta
humedad ya que no utilizan el cable ventilado. Para medir la presión
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 22
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
barométrica utiliza un sensor de presión de aire a prueba de agua que está
situado en el encapsulamiento de acero inoxidable que protege la electrónica.
Los valores medidos son compensados matemáticamente para los errores
originados por la no linealidad y los coeficientes de temperatura.
Mide desde 800 hasta 2300 mbar absolutos para sistemas de 10m de largo.
Como alimentación utiliza una batería de 3.6V que tiene un tiempo de vida
estimado de 10 años si se realiza una medición por hora (17). Posee una salida
digital RS485 y una opción inalámbrica utilizando un módulo de transmisión de
datos GSM-1 (Global System for Mobile) que puede enviar los datos medidos a
un móvil como SMS (Short Message System).
Su linealidad es de 0.02% a escala máxima, brinda una banda de error típica
de 0.05% de escala máxima para el sensor de presión y 0.1% de escala
máxima para el sensor barométrico. Trabaja en fluidos a temperaturas de -10 a
40ºC y con una resolución máxima de 0,0025% de escala máxima. Puede
observarse en la figura 1.9.
Figura 1.9 Sonda de nivel sumergible DCX-22 AA
1.11 Características de la sonda de nivel a diseñar
Después de realizar un análisis, se establecieron las condiciones de
funcionamiento en nuestro país y se deciden las especificaciones de la sonda
C a p í t u l o 1 E s t u d i o T e ó r i c o d e l a s S o n d a s d e N i v e l P á g i n a | 23
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
de nivel a diseñar. Primeramente se decidió utilizar sensores piezorresistivos
con puente de Wheatstone debido a que han sido utilizados en el grupo con
excelentes resultados. También se decidió sustituir el cable ventilado por el
sensor de presión barométrico.
Con el objetivo de diversificar las aplicaciones de la sonda de nivel se
utilizarán dos salidas, una analógica con un lazo de corriente de 4-20mA y una
digital que ofrece la posibilidad de controlar aspectos del funcionamiento del
dispositivo y brinda la salida de presión mediante el protocolo de comunicación
SDI-12.
1.12 Conclusiones
1. El empleo las sondas de nivel sumergibles que emplean el principio
hidrostático para realizar el cálculo de nivel brinda grandes ventajas
que diversifican su campo de aplicación.
2. Las sondas de nivel sumergibles necesitan realizar la compensación
de la presión atmosférica y para ello puede utilizase otro sensor en la
superficie del líquido.
3. Debido a las características no deseadas de los sensores
piezorresistivos deben emplearse circuitos de acondicionamiento de la
señal para lograr obtener un valor preciso en la medición.
4. La salida analógica de 4-20mA a dos hilos es ampliamente utilizada en
aplicaciones hidráulicas e industriales.
5. Las sondas de nivel con salida digital ofrecen grandes ventajas como
la medición de más de una variable y la configuración de parámetros
del dispositivo.
6. Existen diversidad de protocolos estándar para la comunicación
utilizables en la comunicación digital, ofreciendo confiabilidad y
simplificando la labor del usuario.
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 24
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Capítulo 2 Hardware de la sonda de nivel
2.1 Introducción
En este capítulo se describen las temáticas relacionadas al diseño del
hardware de la sonda de nivel y las consideraciones que fueron tomadas en
cuenta en dicho diseño. Primeramente se presenta un diagrama en bloques
general del dispositivo. A partir de este diagrama serán seleccionadas las
componentes electrónicas que se encargarán de cumplir las funciones
asociadas a cada bloque. Esta selección estará condicionada principalmente
por el consumo de corriente de cada elemento. Esto se debe a que para lograr
la implementación de una salida analógica 4-20mA a dos hilos es necesario
que el consumo general del dispositivo no supere los 4mA. Para finalizar se
describe y presenta el esquemático final de la sonda de nivel resultante del
diseño del hardware.
2.2 Diagrama en bloques de la sonda de nivel
En la figura 2.1 se puede observar el diagrama en bloques funcional de la
sonda de nivel que será diseñada.
Figura 2.1 Diagrama en bloques de la sonda de nivel
Se comenzará a explicar la función de cada bloque de izquierda a derecha.
El sensor de presión es el encargado de proporcionar la presión ejercida por el
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 25
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
bloque líquido. El sensor barométrico se encarga de brindar la presión a la cual
se encontrará la superficie del líquido. Seguidamente se representa el bloque
formado por el procesador digital de señales (PDS), elemento inteligente
central del sistema ya que se encargará de obtener los valores de los sensores
anteriormente descritos y a partir de esa información realizará la compensación
necesaria.
El diseño prosigue con un conversor voltaje corriente mediante el cual se
implementará una salida analógica 4-20mA a dos hilos a partir de una señal de
tensión obtenida del PDS. El PDS también será el encargado de interpretar y
ejecutar los comandos digitales que reciba a través de una interfaz serie. No
puede olvidarse también la fuente de alimentación que se encargará de
alimentar a todos los componentes del circuito diseñado. Se debe emplear un
bloque de compatibilidad electromagnética que garantice la protección de todo
el diseño. Todos los bloques anteriormente descritos son la base del diseño
realizado. Se profundizará en las particularidades de cada uno de ellos con
especial detenimiento y responsabilidad al tener en cuenta todos los aspectos
necesarios para su correcto funcionamiento.
2.3 Selección del sensor de presión
Para realizar la selección del sensor de presión piezorresistivo que será
utilizado en el diseño primeramente se debe analizar el consumo de corriente
del mismo y lograr que este sea lo menor posible. Además debe tenerse en
cuenta la exactitud que garantice el sensor. Fueron seleccionados los sensores
Keller de la serie LD. Estos sensores basan su funcionamiento en la tecnología
Chip in Oil, integrando dentro del propio sensor el circuito de
acondicionamiento que garantiza una medición eficiente. La comunicación con
este sensor es digital mediante el estándar I2C (Inter- Integrated Circuit) y la
alimentación es mediante tensión entre 1.8 y 3.6V. Presentan un consumo
típico de 1,5mA cuando realizan la conversión y 100nA en estado pasivo,
presentando óptimas características para su utilización en sistemas
alimentados por batería (18). Garantizan un TEB (Total Error Band) de un 0,5%
del intervalo de medida dentro de un rango de temperatura de 0 a 50ºC. El
rango de medición que se puede llegar a obtener es de 1 a 200 bar de manera
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 26
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
absoluta o 1 a 30 bar de manera relativa. Este sensor puede observarse en la
figura 2.2 junto a su estructura interna.
Figura 2.2 Sensor de presión Keller de la serie 9LD
2.4 Selección del PDS
La tarea que será descrita a continuación puede definirse como de primordial
importancia debido al impacto que posee el PDS en el diseño. Se debe tomar
especial cuidado en el consumo de corriente del PDS. También debe integrar la
mayor cantidad de componentes utilizadas en el diseño en aras de disminuir el
espacio ocupado por la placa y la utilización de componentes externas.
Después de realizar un amplio análisis y un profundo estudio de diversas
familias de dispositivos fueron seleccionados como más adecuados para la
aplicación el ZSC31050 de la ZMDi (19), (20), el CY8C38 de la familia de los
PSOC de la Cypress Semiconductor (21), y los dsPIC33FJ64XXXXX y
dsPICFJ128XXXXX de la Microchip (22), (23) y el MSP430F6638 de la Texas
Instrument (24), (25). Los dsPIC fueron descartados debido a que el consumo
típico es de 19mA, no presenta amplificadores operacionales integrados que
puedan ser utilizados en el diseño del lazo de salida 4-20mA y el DAC está
especialmente diseñado para aplicaciones de audio, brindando dos canales de
salida (Izquierdo y Derecho).
El CY8C38 presenta un DAC de sólo 8 bits, siendo posible mediante diversos
métodos ampliar la resolución hasta 12 bits, pero con un considerable aumento
de los problemas de linealidad (26). El consumo típico de corriente que
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 27
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
presenta es de 2,3mA trabajando a una frecuencia de 6MHz, pero este
consumo puede aumentar en dependencia de los periféricos que se encuentren
en funcionamiento, lo cual descarta a esta familia.
El ZSC31050 necesita de la inclusión de amplificadores externos y un
microcontrolador para manejar la interfaz digital con salida RS232 o RS485.
También se encuentra limitado en cuanto cantidad de registros e instrucciones
a utilizar con él, presentando sólo 7 palabras de configuración. El DAC que
ofrece es de 11 bits y el consumo típico trabajando a 2,25MHz es de 2,5mA.
El MSP430F6638 presenta un consumo típico de 270μA/MHz hasta 8MHz, lo
cual resulta realmente bajo considerando que en nuestro diseño trabajaremos a
1MHz. Brinda un DAC de 12 bits, necesitando sólo la utilización de un
amplificador operacional externo para implementar el lazo de salida analógico,
lo cual no representa una gran dificultad. Por estas razones fue elegido para
ser utilizado en el diseño. En la figura 2.3 se observa el MSP430F6638 y sus
componentes internos.
La familia MSP430 de microcontroladores de baja potencia está compuesta
por diferentes módulos integrados. Esto ofrece la posibilidad de utilizar
diferentes periféricos que proporcionan gran variedad de aplicaciones. Las
aplicaciones típicas incluyen sistemas de sensores tanto analógicos como
digitales, control digital de motores, control remoto, termostatos,
temporizadores digitales, entre otras.
Para realizar el trabajo requerido el dispositivo posee una CPU RISC de 16
bits, una memoria FLASH de 256 KB para almacenar el programa de
funcionamiento y 16 KB de SRAM. También brinda dos bloques de interfaces
de comunicación serie universal las cuales son compatibles con UART
(Universal Asynchronous Receiver-Transmitter), SPI (Serial Peripheral
Interface) , I2C, entre otros, los cuales serán utilizados para la comunicación
con los sensores y para la interfaz de salida digital RS232 y RS485.
Adicionalmente posee 5 modos de trabajo a bajo consumo lo cual logra
extender la vida de la batería en aplicaciones portables. Cuenta con dos
osciladores internos brindando la posibilidad de no utilizar un cristal externo.
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 28
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 2.3 Diagrama en bloques funcionales del MSP430F6638
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 29
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
2.5 Diseño de la fuente de alimentación
La fuente de alimentación del sistema se encargará de proporcionar la
tensión de alimentación necesaria a cada componente. Para el diseño de este
bloque se decidió utilizar una referencia de tensión. En la selección de dicho
dispositivo se debe tener en cuenta como imprescindibles características o
parámetros propios de especial observación que la tensión proporcionada debe
ser de 3V, valor que optimiza la aplicación para ser alimentada por batería.
También el consumo de corriente de la misma. El rango de tensión de entrada
que es permitido, el cual debe encontrarse entre 0 y 30V, rango de tensión que
cubre la mayoría de las opciones que se brindan en los diferentes dispositivos
comerciales. Se debe tener en cuenta también la corriente que ésta puede
proporcionar a su salida ya que además de brindar la tensión de alimentación
ésta ofrece la corriente necesaria para el funcionamiento de todo el sistema
incluyendo la situación más exigente. Esta última se describe como la
programación de la memoria FLASH interna del MSP430F6638 donde el
consumo aumenta hasta los 3mA típicamente, pudiendo llegar como valor
máximo hasta los 5mA. En el proceso de selección puede tenerse en cuenta
que existe una configuración utilizando un JFET a la entrada de la fuente de
referencia que disminuye la tensión que entra en la fuente, no siendo de
estricta importancia que ésta soporte la tensión máxima definida como la
máxima de alimentación.
El estudio realizado de las referencias existentes en el mercado que podrían
cumplir los requisitos determinados anteriormente incluyó la MAX6029 (27), la
MAX6035 (28), la MAX6037 (29), y la MAX6139 (30). Las MAX6029 y
MAX6129 permiten a su entrada un rango de tensiones desde 3.2 a 12.6V. No
cumplen la condición ideal pero ésta puede ser manejada mediante la
configuración del JFET. La MAX6037 sólo permite un rango de 3.2 a 5.5V,
valor que la elimina del análisis ya que el mínimo de tensión que se puede
mantener con la configuración antes mencionada es de 10V. La única que
realmente cumple con el rango de tensión especificado es la MAX6035, la cual
permite una variación de tensión de alimentación entre 4.9 y 33V.
Los consumos de corriente de esas fuentes se mantienen en niveles
bastante bajos, necesitando la MAX6035 73μA y las MAX6029 y MAX6129
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 30
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
6,75μA. El aspecto más determinante en la selección pasa a ser entonces la
corriente que estas pueden ofrecer a su salida, quedándose estas últimas por
debajo del límite recomendable al proporcionar sólo 4mA a su salida. La
MAX6035 brinda 10mA, y al cumplir con las condiciones necesarias en el
diseño es escogida como la fuente de referencia a utilizar. En la tabla 2.1
pueden observarse los parámetros antes expuestos para facilitar una
comparación.
Tabla 2.1 Referencias de tensión
Vout (V) Vin (V) Iin (μA) Shutdown
Source
Current
(mA)
Min Typ Max Min Max Typ Max
MAX6029_30 2,9955 3 3,0045 3,2 12,6 6,75 No 4
MAX6035_AUR30 2,994 3 3,006 4,9 33 73 95 No 10
MAX6037_30 2,994 3 3,006 3,2 5,5 210 275 Sí 5
MAX6129_30 2,988 3 3,012 3,2 12,6 6,75 No 4
2.6 Diseño del lazo de salida 4-20 mA
Para diseñar el lazo de corriente de 4-20mA fue tomada como referencia una
configuración encontrada en la documentación estudiada. Ésta mediante
componentes analógicos activos y pasivos permite una implementación
eficiente del convertidor de voltaje a corriente (31). Esta configuración puede
ser observada en la figura 2.4.
Figura 2.4 Lazo de corriente 4-20 mA a dos hilos
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 31
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
El circuito que se representa en la figura anterior es un convertidor de voltaje
a corriente. El capacitor Cd tiene como objetivo filtrar la señal de salida de la
referencia de tensión para minimizar las afectaciones que puedan generarse en
el sistema por algún tipo de ruido. La salida que se obtiene del MSP430F6638
mediante su DAC de 12 bits es el valor exacto de la variable ya compensada
obtenida de la señal de los sensores que son utilizados por el sistema. La
resistencia Rof se encarga de fijar la corriente mínima que generará el lazo
cuando la salida de tensión se sitúe en su límite inferior. La resistencia Rg es
responsable de la ganancia que poseerá el lazo de corriente.
El amplificador operacional, conjuntamente al transistor y a las resistencias
serán los encargados de generar el lazo de corriente. El operacional
proporciona la realimentación para al ajuste de la corriente del lazo. El
transistor constituye una especie de driver para poder manejar la corriente del
lazo y siendo imprescindible para la linealidad del convertidor V-I. El capacitor
Cc se acopla al operacional para garantizar la compensación de este y la
disminución de la ganancia de corriente alterna. En el caso de la resistencia Rb
esta limita la corriente de base del transistor, principalmente durante la puesta
en marcha y largos transitorios. También permite ajustar la tensión de salida
del amplificador operacional para que se mantenga trabajando en el rango
lineal de salida y no introduzca alinealidades en la salida. La resistencia Rc
contribuye a la protección del transistor en caso de trabajo a altas
temperaturas. Ésta lo protege de largos transitorios de corriente durante el
encendido y durante transitorios de tensión, manteniendo en una región segura
la temperatura de cruce del transistor.
2.6.1 Selección del amplificador operacional
Debido a que el MSP430F6638 no presenta amplificadores operacionales
internos debe seleccionarse un amplificador operacional para lograr
implementar el diseño anteriormente explicado. Para realizar la selección de
dicho componente se debe tomar en cuenta el consumo de corriente del mismo
y la ganancia de tensión que puedan proporcionar.
Fueron estudiados varios amplificadores entre los que se destacan MAX4076
(32), el MAX9617 (33), el MAX9911 (34) y el MAX44264 (35). De estos fue
seleccionado el MAX9911 debido a que presenta excepcionales valores de
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 32
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
consumo de corriente (4μA) y correctos valores de ganancia de tensión para
nuestra aplicación. Posee un modo de autoapagado en el cual se mantiene
consumiendo 0,1nA. En la tabla 2.2 pueden observarse los valores utilizados
en la comparación. Los espacios en blanco en la tabla se deben a que el
fabricante no proporcionaba la información.
Tabla 2.2 Principales amplificadores operacionales analizados
Icc
(μA)
Input Offset Voltage
Drift (μV/°C)
Avol
(dB)
GBW
(kHz)
Shutdown
Typ Max Typ Max Min Typ Typ
MAX4076 40 55 1.5 80 117 230
MAX9617 59 78 0.005 0.120 120 160 1500
MAX9911 4 5 ±5 95 120 200 0.1nA - 0.5μA max
MAX44264 0.75 1.2 8 90 120 9
2.6.2 Ecuaciones del lazo de corriente 4-20 mA
Con el objetivo de proporcionar las herramientas necesarias para una mejor
comprensión del origen de las ecuaciones del lazo de corriente puede decirse
que la corriente de salida está relacionada principalmente por tres flujos de
corrientes: Icc, Ioffset, Isx que pueden observarse en la figura 2.4. Icc es el
valor de corriente que es consumido por todas las componentes del sistema y
que siempre debe ser menor que 4mA. Ioffset es la corriente que debe
adicionarse a Icc para garantizar que el valor de la corriente se mantenga en
4mA cuando el valor de la variable medida sea el mínimo. La Isx constituye la
corriente que representa la diferencia del valor real de la variable y el valor
mínimo medible, es decir, es el valor entre 4 y 20mA que representa el valor de
la variable monitoreada.
Para realizar el análisis se debe tener en cuenta que la corriente a la salida
del sistema es el resultado de la suma de las corrientes que fluyen por las
resistencias Rf y Rs. La relación entre estas resistencias debe ser tal que la
mayor parte de la corriente de salida circule por Rs. Al escoger el valor de Rf
mucho mayor que Rs se simplifican las ecuaciones y permite discriminar la
pequeña corriente que pueda pasar por Rf. La corriente que fluye por Rd puede
despreciarse, siendo entonces la corriente que fluye por Rf el resultado de la
adición de las corrientes que pasan por Rg y Rof. Estas resistencias son de
gran importancia ya que Rg se encarga de manejar el valor de la corriente Isx y
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 33
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Rof realiza el ajuste de Ioffset. Aplicando el principio de superposición se
obtienen las ecuaciones 2.1 y 2.2.
(2.1)
(2.2)
2.6.3 Cálculo de las resistencias Rof y Rg
Para realizar el cálculo de las resistencias Rof y Rg se debe definir
primeramente que la variación de tensión en la salida del DAC del
MSP430F6638 es de 0,3 a 2,7V. La variación de la salida de dicho DAC dentro
del anterior rango debe representarse mediante Isx sobre un rango de corriente
de 4 a 20mA. Como resultado el circuito que representa el lazo de corriente
debe lograr una variación de 16mA a la salida con esta variación de 2,4V. Para
obtener las expresiones que permiten calcular las resistencias Rof y Rg se
realiza un despeje de las ecuaciones 2.1 y 2.2 respectivamente, resultando:
(2.3)
(2.4)
Conociendo ya estas relaciones es necesario establecer valores
predeterminados para las resistencias Rs y Rf. Debe tenerse en cuenta que se
había definido como criterio que el valor de Rf debe ser mucho mayor que el de
Rs. Tomando Rs de 50Ω garantizamos que la caída de tensión en el resistor
sea de 1V para la corriente máxima que serían 20mA. Si se toma entonces Rf
igual a 100KΩ se puede afirmar que el error al no tener en cuenta el efecto de
Rf sería de 0,05%, sin embargo este error es puramente teórico ya que la
ganancia y la corriente de offset son ajustadas por el propio MSP430F6638.
Mediante las ecuaciones 2.3 y 2.4 pueden calcularse los valores de Rof y Rg
al introducirse los valores de Vdd, Rs y Rf. Para realizar el cálculo de Rof se
determinó que el consumo teórico total que podría alcanzar el circuito sería de
3,27mA, debido a esto Ioffset debe ser de 0,73mA. Al aplicar las ecuaciones, el
valor obtenido de Rof es de 8,2MΩ y el de Rg de 300KΩ. Estos valores no son
definitivos ya que pueden cambiar en dependencia del proceso de puesta a
punto del sistema y variaciones en el consumo real del sistema.
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 34
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
2.6.4 Selección del transistor
Como parte del diseño del lazo de corriente debe seleccionarse el transistor.
Debe tenerse en cuenta que el transistor debe ser NPN y su comportamiento
debe ser lo más lineal posible. También se debe analizar la disminución de la
disipación de potencia con el aumento de la temperatura, ya que se trabajará
en el rango de 0 a 80ºC. Como datos específicos del componente se debe
garantizar que la potencia máxima disipada del transistor sea de 600mW a la
temperatura ambiente. Esto puede explicarse a partir del máximo valor del
rango de tensión que debe soportar el transistor. Este valor será de 30V y la
corriente máxima que circulará por él será de 20mA, aunque en la práctica será
menor ya que Ia corriente Icc no circulará por este.
Tomando como requisitos estas particularidades fue seleccionado el
transistor 2DD2679 (36). Este presenta un encapsulado SMD, el cual se
adecua perfectamente a la aplicación. Este dispositivo disipa 900mW a
temperatura ambiente (25ºC), brindando una variación de 7.2mW/ºC al trabajar
por encima de los 25ºC. En el caso límite de diseño (a una temperatura de
80ºC) la potencia máxima que podrá disipar será de 504mW, a pesar de no ser
este el valor ideal para el diseño puede ser disminuido el efecto de la
temperatura mediante la utilización de la resistencia Rc.
2.6.5 Cálculo de las resistencias Rb y Rc
Para realizar el cálculo del valor necesario para la resistencia Rc se toma el
valor para la corriente que circula por ella de 20mA. Realmente esta corriente
será un poco menor debido a que parte de los 20mA circula solamente por Rs.
En Rc se debe disipar la diferencia entre la potencia máxima en el diseño
teórico y la que logrará disipar el transistor. Mediante la ecuación siguiente
puede calcularse el valor mínimo de Rc:
(2.5)
El valor calculado es de 240Ω, por lo cual cualquier valor que se seleccione
debe ser mayor que este valor teórico calculado. Mientras mayor sea el valor
escogido mayor será el valor mínimo de alimentación de tensión que se
necesitará para el transmisor. Esto no es conveniente. Por tanto se debe
seleccionar el valor final de Rc teniendo en cuenta esta relación.
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 35
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Es recomendable tomar el valor de la resistencia Rb como 5KΩ o 10KΩ, esto
tiene como objetivo que ésta pueda realizar su función de limitar la corriente de
base del transistor y ajustar la tensión de salida del amplificador operacional
para que se mantenga trabajando en el rango lineal de salida y no introduzca
alinealidades en la salida. El valor será de 10KΩ.
2.7 Diseño de la interfaz de salida digital
El diseño de la interfaz digital es de gran importancia ya que permitirá la
configuración remota de la sonda de nivel. Mediante esta interfaz se podrán
realizar diversas funciones como la configuración de la sonda de nivel, el
formato de su salida, entre otras.
El MSP430F6638 presenta dos módulos para comunicaciones digitales
llamados USCI_A (Universal Series Communication Interfaces A) y USCI_B los
cuales se utilizan para comunicación serie (20). Cada uno se puede encargar
de manejar comunicaciones mediante SPI utilizando 3 o 4 hilos. USCI_A puede
manejar protocolos sobre las interfaces SPI, UART, IrDA (Infrared Data
Association). USCI_B se concentra en protocolos sobre la interfaz I2C. Para la
interfaz digital con los dos modos de comunicación RS232 y RS485 serán
utilizados los módulos USCI_A1 y USCI_A2 que manejarán los drivers
necesarios para la comunicación digital serie mediante la interfaz UART.
En la comunicación serie sólo son utilizados dos pines, uno para transmisión
y el otro para recepción. Simplemente el módulo transmite o recibe caracteres
a una razón de bits asincrónica. La frecuencia de baudio para la transmisión de
cada caracter es seleccionado en el USCI, siendo la misma para transmitir o
recibir.
2.7.1 Selección del driver RS232
Para realizar la selección del driver RS232 se tomó en cuenta principalmente
el bajo consumo que este debía presentar. Fueron estudiados una gama de
dispositivos dentro de los que se destacan el MAX3222E (37), el MAX3322E
(38), el MAX3230E (39), y el MAX13234 (40). En este caso se seleccionó el
MAX3230 debido a su bajo consumo, presentando un modo de autoshutdown y
uno de shutdown por hardware. En la tabla 2.3 se muestran las características
de los principales dispositivos estudiados.
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 36
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Tabla 2.3 Drivers RS232
Supply Current (mA)
Shutdown Supply
Current (μA)
Maximum
Data Rate
(kbps)
Typ Max Typ Max Min
MAX3222E 0.3 1 1 10 250
MAX3322E 1 - 1 10 250
MAX3230E 0.3 1 1 10 250
MAX13234E 0.3 1 1 10 250
2.7.2 Selección del driver RS485
Con el objetivo de seleccionar el driver RS485 se tomaron en cuenta los
mismos parámetros que fueron observados para el RS232. Después de un
exhaustivo análisis entre algunas de las familias existentes fue seleccionado el
MAX3471(41). Este dispositivo está diseñado para aplicaciones alimentadas
por batería, siendo su consumo típico de 1,6μA para una alimentación de 3,6V
con el driver deshabilitado. El consumo del dispositivo será menor en el diseño
final ya que todo el sistema se alimentará con 3V. El consumo habitual del
dispositivo en completo funcionamiento es típicamente de 50μA.
2.7.3 Compatibilidad electromagnética de la interfaz digital
Para garantizar la protección necesaria contra los picos de tensión que
podrían surgir y tener efectos indeseados en los componentes relacionados
con la comunicación digital es utilizado un supresor bidireccional de transitorios
de tensión. Fueron escogidos los SMBJ5.0CA, los cuales poseen una tensión
de stand off de 5V (42). Estos dispositivos son colocados entre tierra y cada
una de las líneas de comunicación del transmisor con el dispositivo a
comunicar.
2.8 Esquemático de la sonda de nivel
Al concluir la selección de los principales componentes del hardware se
elaboró el circuito esquemático de la sonda de nivel diseñada. En la figura 2.5
puede observarse la parte del circuito que está relacionada con el
microcontrolador y el lazo de corriente de la salida 4-20mA.
Los conectores JP1 y JP2 se encargan de garantizar la comunicación
mediante el protocolo I2C entre el MSP430F6638 y los dos sensores que serán
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 37
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
empleados en el diseño (el sensor introducido en el líquido y el sensor
barométrico respectivamente). También puede observarse la conexión
característica de un cristal de 4MHz que se utilizará en el dispositivo como
fuente de reloj y la utilización del diodo D1 para la protección del circuito contra
la inversión de polaridad de alimentación.
En la figura 2.6 pueden observarse la conexión de los dos drivers de
comunicación digital utilizados. La utilización de los capacitores CP1-CP8 entre
Vcc y Tierra permite proteger de ruidos externos al MSP430. También son una
protección de los efectos parásitos no deseados y lazos aterrados que puedan
ocasionar inexactitud en las conversiones o tensiones de offset no deseados.
Además, en dicha figura puede observarse el conector JTAG que permite la
programación del microprocesador y realizar la puesta a punto del programa
durante el funcionamiento del dispositivo.
El hardware diseñado permite que la sonda diseñada tenga salida digital
sobre la interfaz RS232 o RS485 no de forma simultánea. En el momento de
realizar el montaje de los componentes en la placa se debe seleccionar solo
uno de los driver que será utilizado para la comunicación digital. Si se decide
emplear la interfaz RS232 el dispositivo brinda la posibilidad de ser alimentado
desde el mismo puerto serie de la PC sin necesidad de otra alimentación
adicional si solo se quiere salida digital. En este caso el transmisor toma la
alimentación de los pines DTR y RTS del puerto serie, para ellos se utiliza el
conector JPO1 y BAT54C.
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 38
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 2.5 Esquemático del MSP430F6638 con salida analógica
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 39
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 2.6 Esquemático de la interfaz digital de comunicación serie y componentes del diseño
C a p í t u l o 2 H a r d w a r e d e l a s o n d a d e n i v e l P á g i n a | 40
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
2.9 Conclusiones
1. La alimentación se realiza a 3V para lograr que el consumo de toda la
sonda sea lo menor posible.
2. La utilización del MSP430F6638 en el diseño ofrece grandes ventajas,
ya que disminuye la cantidad de componentes externos que se
necesitan y posee un muy bajo consumo de corriente.
3. Se diseñó el hardware de la sonda de nivel a partir de un diagrama en
bloques general y tomando en consideración los requisitos a cumplir
que fueron expresados en el capítulo anterior.
4. Se diseñó un conversor de voltaje-corriente para garantizar el lazo de
corriente 4-20mA.
5. Se garantizó un consumo general del dispositivo menor que 4mA
mediante los dispositivos seleccionados.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 41
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Capítulo 3 Firmwares de la sonda de nivel
3.1 Introducción
En este capítulo se describen los aspectos asociados al desarrollo de los
firmwares que controlan el funcionamiento del dispositivo. Como primer tema
se profundiza en la operación característica que debe realizar la sonda de nivel.
También se especifican las características de la comunicación I2C con los
sensores de presión Keller de la familia LD. Además se describen las
particularidades del firmware que maneja la salida analógica incluyendo el
conversor digital-analógico. Por último, se explican las características,
funciones e implementación del protocolo de comunicación digital SDI-12, así
como el firmware que describe el procesamiento de las muestras.
3.2 Operación en tiempo real de la sonda de nivel
Mediante el dispositivo diseñado es posible obtener la presión ejercida por
una columna líquida para con este dato obtener el nivel. Mediante comandos
de configuración debe escogerse la salida del dispositivo que se desee activar,
siendo obligatorio escoger uno de los drivers para la salida digital (RS232 o
RS485) y opcionalmente activar la salida analógica de 4 a 20mA.
En la figura 3.1 puede observarse el diagrama en bloques que sigue el
funcionamiento de la sonda para brindar el valor de la muestra. El MSP se
mantiene en un estado de bajo consumo de potencia en espera de un comando
que es enviado por una computadora que actúa como amo. Este comando
recibido por el MSP pasa por una primera etapa de identificación mediante un
proceso de comparación. Posteriormente el MSP obtiene las muestras de los
sensores y las resta siguiendo el principio de compensación atmosférica
descrito en el epígrafe 1.8. Por último envía los datos adquiridos de manera
digital y/o analógica.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 42
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 3. 1 Diagrama en bloques sobre el procesamiento y envío de las muestras
Debido a este análisis sobre la operación de la sonda de nivel se puede
constatar la necesidad de desarrollar diversos firmwares para garantizar las
funcionalidades del dispositivo. Pueden definirse tres funcionalidades
fundamentales: la comunicación del MSP con los sensores, el control de la
salida analógica y la comunicación de una PC y el MSP. Estos aspectos serán
presentados en los epígrafes que siguen.
3.3 Comunicación con los sensores Keller 9LD
Con el objetivo de lograr el correcto funcionamiento de los sensores de
presión empleados en el diseño debe ser garantizada la comunicación
mediante el protocolo digital I2C utilizado por los mismos. La correcta
implementación del protocolo de comunicación puede clasificarse como de vital
importancia ya que garantiza el funcionamiento efectivo de nuestro sistema.
3.3.1 Protocolo de comunicación digital I2C
El protocolo I2C fue definido originalmente por el fabricante Philips y
proporciona una manera muy simple de comunicación entre circuitos
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 43
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
integrados mediante la utilización de una mínima cantidad de pines. Ha llegado
a convertirse en un estándar industrial adoptado por una gran cantidad de
fabricantes de circuitos integrados. Dicho protocolo presenta varias
características ventajosas que lo distinguen (43):
Sólo se requiere un bus compuesto de dos líneas: una línea de datos
serie (SDA) y una línea de reloj serie (SCL).
Cada dispositivo que se encuentre conectado al bus puede ser
direccionado mediante una única dirección y una relación simple
definida como amo/esclavo, siendo el dispositivo amo capaz de ser
amo transmisor o amo receptor.
Constituye un bus con la capacidad de ser multi-amo, incluyendo
detección de colisiones y mediación con el objetivo de prevenir errores
en los datos si dos o más amos comienzan a transmitir
simultáneamente.
Es posible realizar transferencias de 8 bits mediante puerto serie a
velocidades de 100kbit/s en el modo estándar, 400kbit/s en el modo
rápido o hasta 3,4Mbit/s en el modo de alta velocidad.
El tiempo de subida es determinado entre el 30% y el 70% de la
tensión de alimentación.
La cantidad de circuitos integrados que pueden ser conectados al
mismo segmento de bus se encuentra limitado sólo por la máxima
carga capacitiva del bus que es de 400pF.
Dentro del proceso de comunicación que se establece por el I2C se deben
definir dos condiciones particulares que poseen una gran importancia para
dicha comunicación: la condición de START y de STOP (44). La condición de
START constituye una transición de nivel alto a nivel bajo en la línea SDA
mientras que la línea SCL se encuentre en nivel alto como se observa en la
figura 3.2. La condición de STOP se encuentra definida por una transición de
nivel bajo a nivel alto en la línea SDA mientras que SCL se encuentra en nivel
alto, también puede observarse en la figura 3.2. Estas condiciones siempre son
generadas por el amo para ocupar o liberar el bus. Existe otra condición la cual
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 44
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
se define como START repetido, la cual, si es generada, continúa ocupando el
bus para el amo, el funcionamiento es similar al de la condición de START.
Figura 3.2 Condiciones de START y STOP
El proceso de comunicación se puede dividir para su mejor entendimiento en
varios pasos consecutivos que realizará el amo:
1. Espera hasta que observa que el bus está libre, estando SDA y SCL
en nivel alto.
2. Genera la condición de START indicando que el bus se encuentra
ocupado, comenzando los otros dispositivos conectados al bus a
“escuchar” para identificar cuál de ellos va a ser el direccionado.
3. Provee en la línea SCL una señal de reloj que será utilizada por todos
los dispositivos conectados al bus como referencia para reconocer la
validez de cada bit transmitido en la línea SDA. Los datos en SDA
deben ser válidos al momento en que SCL cambia de nivel bajo a nivel
alto.
4. Envía en forma serie la dirección binaria única del dispositivo con el
cual desea comunicarse.
5. Pone un mensaje en el bus que indica si se desea enviar o recibir
información del otro dispositivo mediante un bit.
6. Pregunta al otro dispositivo si reconoció su dirección y está listo para
la comunicación mediante un bit de ACKNOWLEDGE.
7. Después de que el otro dispositivo reconozca que todo se encuentra
listo los datos pueden ser transferidos.
8. Envía o recibe tantas palabras de 8 bits de datos como requiere.
Después de cada palabra el transmisor espera que el receptor
reconozca que la transmisión se realizó de manera correcta.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 45
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
9. Cuando todos los datos terminan libera el bus mediante la condición
de STOP.
Al establecer la comunicación se intercambian bytes, siendo cada uno
reconocidos por un noveno bit generado por el receptor, hasta que la
transferencia es completa. El direccionado puede realizarse mediante 7 o 10
bits. En el caso en que dos amos intenten establecer comunicación al mismo
tiempo, se realiza un proceso de mediación, en el cual se determina que amo
se apropia del control del bus.
3.3.2 Protocolo de comunicación de los sensores Keller 9LD
El protocolo de comunicación que utilizan los sensores Keller de la serie LD
se basa en la transmisión serie mediante I2C. La velocidad permisible por la
comunicación de los sensores de la serie 9LD varía entre los 100kbit/s del
modo estándar hasta los 3,4Mbit/s del modo de alta velocidad, siendo incluidos
los 400kbit/s del modo rápido y 1Mbit/s del modo rápido plus (18).
El direccionamiento se realiza mediante 7 bits, lo cual permite 112 nodos en
el bus, debido a que 16 direcciones se encuentran reservadas. La dirección por
defecto del sensor 0x40h (45). Los sensores sólo responderán a la dirección
que se encuentra almacenada en su memoria.
El esclavo debe confirmar siempre los bytes mediante un ACK
(Acknowledge). En el caso de que no responda con un nivel bajo después del
octavo bit el amo detecta una excepción. Ésta puede estar causada por estar
solicitando el dato a la dirección de esclavo incorrecta. En la figura 3.3 se
muestra la composición de los datos enviados y recibidos utilizando I2C para
comunicarse con los sensores, el comando enviado para lograrlo debe ser
0xACh.
Figura 3.3 Estructura de la trama enviada y recibida por los sensores Keller
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 46
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
En la figura anterior se puede observar que el sensor responde primeramente
con un byte de STATUS (puede observarse su composición en la figura 3.4), el
cual posee varios campos como Busy? Este campo en correspondencia de si
se encuentra en ‘1’ o ‘0’ indica si el sensor está ocupado en la adquisición y
procesamiento de la señal o si se encuentra listo para enviar datos. También se
puede observar el campo Mode, el cual puede encontrarse en modo normal
(“00”) o en modo comando (“01”). En el caso del modo Memory error? este
declara si su valor es ‘0’ que no existe error en la suma de chequeo
(checksum), y si su valor es ‘1’ es que hubo un error al comprobar los datos.
Figura 3.4 Byte de STATUS
Los registros de datos de los sensores tienen siempre 16 bits de extensión.
Existen tres posibilidades de obtener datos útiles: leer 1, 3 o 5 bytes(18). En un
byte se obtendría la información del registro STATUS, en 3 bytes se podría
obtener la información de presión o un registro de 16 bits desde la memoria,
además del STATUS, y en el caso de 5 bytes se obtendrían tanto la
información de STATUS, la de presión y la de temperatura.
3.3.2.1 Detección del fin de adquisición y procesamiento
Cuando finaliza el proceso de adquisición y procesamiento de la muestra el
sensor debe indicarle al amo que está listo para transmitirla. Para reconocer el
final de una conversión existen tres maneras. La primera forma de realizar esta
operación es esperar 4ms después de enviar el comando 0xACh a que finalice
la conversión y el acondicionamiento de los valores de presión y temperatura.
La segunda manera es la solución de “handshake”, la cual se basa en la
utilización de una interrupción externa que despierte al amo cuando suba el
nivel del pin EOC (End of Convertion). La última opción es encuestar
continuamente la bandera Busy? del registro STATUS, la cual será nula
cuando se termine la conversión como fue explicado en el epígrafe anterior.
3.3.2.2 Conversión de los datos digitales enviados por el sensor
Para obtener un valor digital de presión igual a la presión a la que se
encuentra sometido el sensor debe realizarse un proceso de conversión de los
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 47
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
valores enviados por el mismo. Este proceso se realizará dentro del CPU
(unidad procesadora central) del MSP. Este escalamiento o conversión se logra
mediante la utilización de una función lineal determinada por dos puntos, los
cuales van a ser los valores máximo y mínimo que serán sensados por el
sensor en particular. Estos valores son almacenados en memoria por el sensor
y equivalen a 16384 y 49152. La expresión que permite obtener la presión real
se describe como:
[ ] [ ]
(3.1)
Donde:
[ ]: Dato de presión en bar
[ ]: Dato obtenido del sensor
: Límite superior del rango de presión que brinda el sensor
: Límite inferior del rango de presión que brinda el sensor
También se debe realizar un proceso de conversión si se desea obtener el
valor digital de la temperatura. Similarmente a la presión se utiliza una función
lineal, pero en este caso los límites en el rango de medición están dados por el
fabricante del sensor. La expresión correspondiente puede observarse en la
ecuación 3.2. Nótese que el dato obtenido del sensor de traslada 4 bits a la
derecha antes de realizar cualquier operación.
[ ] ( [ ] ) (3.2)
Donde:
[ ]: Dato de temperatura en
[ ]: Dato obtenido del sensor
3.3.2.3 Cambio de dirección de un esclavo
En el caso que se decida combinar varios sensores de presión en un mismo
bus debe garantizarse una dirección de esclavo única para cada uno. Para
lograrlo el contenido de memoria de cada sensor debe ser sobrescrito. Al ser
esta memoria basada en tecnología de una sola programación sólo es posible
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 48
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
añadir algunos ‘1’ quemando células de bits adicionales. Después de añadir
seis ‘1’al registro de dirección del esclavo la oportunidad de cambiar es
mediante una limpieza del contenido de memoria por incremento del contador
de páginas. Esto indica que no puede cambiarse la dirección del esclavo
infinitas veces, por lo que se recomienda un planeamiento meticuloso en todo
el sistema para cambiar dicha dirección una o dos veces como máximo.
3.3.3 Desarrollo del firmware de comunicación con los sensores
El proceso de comunicación con los sensores se realiza en el dispositivo
mediante la utilización del módulo de I2C presente en la interfaz de
comunicación serie universal (USCI) del MSP430F6638. Para realizar una
efectiva configuración de dicho módulo primeramente se debe proceder a la
correcta configuración de los puertos de los cuales hace uso este componente.
Con este objetivo se utiliza la función que maneja los puertos mapeables,
dando a los puertos P2.1 y P2.2 (pines 18 y 19 respectivamente) la
funcionalidad de salidas de SDA y SCL del microcontrolador a los sensores
respectivamente. Posteriormente se configuran ambos puertos mediante el
registro P2SEL a las anteriores salidas.
Para realizar el proceso de configuración que garantiza el funcionamiento
esperado de la comunicación I2C se debe en primer lugar resetear el USCI
mediante la activación del bit UCSWRST del registro UCB0CTL1.
Manteniéndolo en este estado se define el funcionamiento del USCI como I2C
amo y comunicación sincrónica.
La configuración de la fuente de reloj que será empleada también debe
tenerse en cuenta. El MSP430F6638 define tres señales de reloj disponibles: el
reloj auxiliar, el reloj amo y el reloj del subsistema del amo. Todas cuentan con
sus respectivos divisores que pueden fraccionar la señal en los valores de 1, 2,
4, 8, 16 o 32. La señal de reloj escogida es la del subsistema del amo.
En el sistema la velocidad de comunicación se decidió fuera de 400kHz. Para
lograr que se genere ésta se calculó el valor necesario en el prescaler del
módulo (obteniéndose el valor de 10 para la configuración), siendo el cristal
utilizado de 4MHz. En este punto se considera inicializado el módulo I2C y se
limpia el bit UCSWRST.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 49
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Para realizar la comunicación del amo son empleadas las interrupciones de
transmisión y de recepción que posee el componente utilizado. En el caso de la
transmisión se debe generar un solo byte con el valor 0xACh, de lo cual se
encarga una función nombrada TX_BYTE. En la recepción se deben recibir tres
bytes (status, MSB de presión y LSB de presión), haciéndolo mediante un
arreglo definido que es manejado por la función RX_BYTE. Estas funciones
pueden ser observadas en el Anexo 1.
3.4 Firmware que controla la salida analógica del sistema
El diseño presentado posee tres salidas: dos digitales y una analógica. El
control de la salida analógica mediante el firmware se concentra en habilitar la
conversión de los datos mediante el conversor D/A de 12 bits que se encuentra
embebido en el MSP430F6638 y la habilitación del amplificador operacional
MAX9911 para manejar el consumo de esta parte del circuito integrado.
3.4.1 Conversor digital-analógico perteneciente al MSP430F6638
El conversor digital-analógico que se encuentra embebido en el
MSP430F6638 puede configurarse en dos modos: de 8 o de 12 bits de
resolución, proporcionando una salida lineal. También es posible utilizarlo en
conjunto con el controlador de DMA (Direct Memory Access). La salida de
máxima escala es programable para multiplicar por 1, 2, o 3 la referencia de
tensión escogida, la cual puede ser seleccionada entre una fuente interna de
1.5V, 2.0V o 2.5V y la fuente externa que garantice el diseñador de todo el
sistema (25).
El registro de datos del DAC puede enviarse directamente a la conversión o
puede ser doblemente buffereado. El DAC soporta dos formatos de datos:
complemento a dos y binario en orden. La tensión de offset del amplificador de
salida del DAC puede ser tanto positiva como negativa. Cuando es negativo el
amplificador de salida intenta manejar la tensión negativa, pero al ser esto
imposible la tensión de salida se mantiene en cero hasta que en la entrada
digital del DAC produzca una tensión lo suficientemente positivo para
sobrepasar el offset negativo de tensión. La situación puede observarse en la
figura 3.5. En el caso en que el offset es positivo una entrada de cero digital no
resulta en una salida de tensión nula, se infiere entonces que la tensión de
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 50
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
salida del DAC alcanza el valor máximo de tensión antes de que la palabra
digital de entrada sea la máxima posible como se observa en la figura 3.6.
El módulo de DAC tiene la capacidad de calibrar la tensión de offset del
amplificador de salida. Cuando esta opción se encuentra activa se inicia el
proceso de calibración, el cual debe finalizar antes de que sea utilizado el DAC.
Figura 3.5 Offset Negativo en la salida del DAC
Figura 3.6 Offset positivo en la salida del DAC
La bandera de interrupción del DAC se activa cuando un dato es enlazado
desde registro de datos al “data latch”. El significado de la activación de esta
bandera es que el DAC está listo para recibir nuevos datos.
3.4.2 Modo shutdown del amplificador operacional MAX9911
En el diseño del lazo de salida de 4-20 mA se utiliza como uno de los
componentes el amplificador operacional MAX9911. Un objetivo de nuestro
diseño es generar el menor consumo de potencia posible, por lo cual se hace
imprescindible manejar mediante el firmware el shutdown que posee este
amplificador. El modo shutdown se activa cuando su entrada posee un nivel
bajo. Típicamente posee una demora al entrar en el modo shutdown de 2μs y al
salir de 30μs. Mientras el amplificador se encuentre en este modo sus salidas
estarán en alta impedancia.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 51
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
3.4.3 Desarrollo del firmware que maneja la salida analógica
Con el objetivo de controlar la salida analógica del dispositivo mediante
software se controla la habilitación y el funcionamiento del módulo DAC
embebido en el MSP430F6638. Para esto se configura el módulo teniendo
como referencia de tensión de alimentación del MSP. También se activa la
calibración automática y se mantiene la salida de escala máxima (del orden de
la referencia de tensión).
Para controlar la habilitación del módulo se utiliza la función desarrollada en
este trabajo DAC_CONV que activa el módulo y permite la conversión del dato,
habilitando también al amplificador operacional. Cuando se finaliza la
conversión se activa la interrupción del canal 0 del DAC y se desactiva el
módulo para contribuir al bajo consumo del dispositivo. También se desactiva la
salida del puerto P1.3 (pin 37) empleada para habilitar o deshabilitar el
shutdown del amplificador. Estas funciones pueden ser observadas en el
Anexo 1.
3.5 Firmware para la comunicación entre el MSP y una computadora
Para la comunicación con la computadora se escogió el protocolo de
comunicación SDI-12. Mediante las interfaces digitales que se ofrecen, el
usuario puede manejar todo el funcionamiento del sensor inteligente desde una
computadora u otro dispositivo de adquisición de datos que funcione como amo
y que sea compatible con protocolo antes mencionado (46). En el caso de
utilizarse un PC como amo se puede emplear como interfaz una aplicación de
LabView llamada LabVIEW SDI-12 API que permite crear un sistema de
comunicación SDI-12 manejado por software (47).
3.5.1 Protocolo de comunicación SDI-12
Este protocolo de comunicación fue diseñado para la adquisición de datos
ambientales a mitad de los años 80 debido a las inquietudes de un grupo de
expertos sobre la poca confianza que brindaban los sensores analógicos de
baja potencia y la complejidad de la interfaz entre estos y los registradores (48).
La utilización de este protocolo presenta como ventajas la posibilidad
complejos algoritmos de auto-calibración en el sensor, el intercambio de
sensores sin necesidad de reprogramar el amo, pueden utilizarse varios
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 52
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
sensores o registradores en el bus, el diseño de los registradores puede
realizarse independientemente de los sensores a utilizar, entre otras.
3.5.1.1 Interfaz eléctrica
El bus SDI-12 se encuentra compuesto por tres conductores: tierra, datos
serie y línea de 12V (49). Este bus permite tener conectados 10 esclavos a él,
brindando un tamaño de cable de 60 metros para cada uno. Si se reduce la
cantidad de sensores puede aumentarse esta distancia. La línea de datos es
bidireccional y utiliza lógica negativa para la transmisión. Los niveles de tensión
lógicos utilizados en la comunicación se definen como: marcado, que simboliza
el estado binario ‘1’ y se encuentra en el rango de tensión de -0.5V a 1.0V,
espaciado, el cual corresponde al estado binario ‘0’ y oscila entre los 3.5V y
5.5V, y la transición que se define entre 1V y 3.5V.
La línea de tierra se debe conectar a la tierra del circuito y al plano tierra del
amo. El conductor empleado debe ser de gran tamaño para mantener la caída
de tensión entre el amo y todos los esclavos menor que 0.5V durante el mayor
consumo de corriente combinado de estos últimos. La línea de 12V se alimenta
del amo o de la fuente de alimentación externa, el cual ofrece entre 9.6V o 16V
con respecto a tierra.
3.5.1.2 Protocolo de comunicación
La comunicación mediante el protocolo SDI-12 se realiza a través del
intercambio de comandos en formato ASCII. La velocidad es de 1200 baudios y
la trama de un byte se encuentra conformada por un bit de start, 7 bits de datos
(comenzando por el menos significativo), un bit de paridad, siendo esta par y
un bit de stop (49).
El intercambio debe comenzar con un espaciamiento continuo en la línea de
datos que indica a los esclavos en el bus que están siendo despertados. El
amo entonces debe enviar un comando el cual comienza con una dirección
(entre 0 y 9 en código ASCII) que indica al esclavo que se dirige. Este devuelve
automáticamente la respuesta correspondiente (comenzando también con su
dirección) mientras que los otros esclavos presentes en el bus vuelven al
estado de bajo consumo. Todos los caracteres que son transmitidos deben ser
caracteres ASCII imprimibles. En la tabla 3.1 se observan los comandos
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 53
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
propios del protocolo. Es importante resaltar que para que un esclavo o amo
sea considerado compatible con la versión 1.3 del protocolo deben soportar
cada comando presente en dicha tabla.
El último componente de cada comando es el caracter “!”. Este caracter sólo
puede ser enviado como el final del comando. Los últimos dos bytes de cada
respuesta son un retorno de transmisión y de una alimentación de línea
(<CR><LF>).
El comando “aI!” se encarga solicitar información al esclavo (49). Entre las
informaciones con las cuales se debe responder se encuentra el nivel de
compatibilidad, el número del modelo y un número de versión del firmware,
entre otros. El comando “?!” solicita al esclavo que responda con su dirección.
Se debe tener en cuenta que si se encuentran conectados varios esclavos al
bus estos responderán al mismo tiempo a la solicitud, causando colisión en el
bus.
El comando “aM!” le indica al esclavo que comience la medición. Sin
embargo la respuesta a este comando no es el dato medido, sino el tiempo y el
número de muestras que obtendrá en dicho tiempo conformados en el
siguiente formato “atttn<CR><LF>”. Si el esclavo retorna “000” como tiempo de
demora es que la muestra se encuentra lista inmediatamente para ser enviada
y el amo debe enviar el comando “aD0!” para obtener la muestra. En caso
contrario el amo espera a que transcurra el tiempo especificado, seguidamente
transmite un espaciamiento continuo en la línea de datos durante 12ms y
solicita la muestra con “aD0!”, en el caso en que los datos se encuentren listos
en el esclavo antes del tiempo indicado le envía al amo una solicitud de
servicio, la cual sugiere al amo detener el conteo del tiempo y solicitar dichos
datos. La respuesta de tiempo dada por el esclavo debe ser mayor que el que
realmente le tomará realizar la medición para permitir tolerancias en los
tiempos de transferencia. La nombrada solicitud de servicio es una respuesta
con el formato “a<CR><LF>”.
El comando “aC!” le ordena al esclavo tomar una medición concurrente. Esto
significa que la medición se realizará mientras otros esclavos están midiendo
también. La respuesta es similar a la proporcionada a “aM!”, la diferencia en
este caso es que el esclavo no envía una solicitud de servicio al amo, sino que
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 54
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Tabla 3. 1 Comandos del protocolo SDI-12 y sus respectivas respuestas
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 55
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
este debe esperar a que se termine el tiempo indicado y mediante “aD0!”
solicitar los datos.
La respuesta al comando “aD0!” se define de la siguiente forma:
“apd.d<CR><LF>”. La p indica la polaridad (+ o -), y la d son los dígitos
numéricos de la muestra, indicando “.” el punto decimal. La mayor cantidad de
dígitos que puede tener un dato es 7, sin incluir el punto decimal.
3.5.1.3 Chequeo de redundancia cíclica
El protocolo SDI-12 posee una forma de aumentar la capacidad de detectar
errores mediante una variación de los comandos anteriormente expuestos que
obligan al esclavo a añadirle al dato un chequeo de redundancia cíclica (CRC)
de 16 bits. El comportamiento del esclavo debe ser el mismo al comando con
solicitud de redundancia cíclica que sin esta solicitud, dando como respuesta la
misma cantidad de muestras.
3.5.1.4 Comandos extendidos
Los comandos extendidos son la manera de ofrecer al usuario opción de
control sobre el funcionamiento del esclavo. Estos comandos ofrecen la
posibilidad de indicar al esclavo la realización de una operación no precisada
por los comandos tradicionales. Estos comandos extendidos son definidos y
documentados por cada fabricante. Los comandos extendidos comienzan por
la dirección del esclavo, seguida por una “X” y tres caracteres definidos por el
usuario, sin ser obligatorio definir los tres, terminando en “!”.
3.5.2 Desarrollo del firmware para la comunicación digital del
sistema
El funcionamiento del sistema se encuentra regido por las órdenes recibidas
en forma de comandos mediante el protocolo SDI-12. A partir de la recepción
de los diferentes comandos se ejecutan las acciones necesarias para generar
las respuestas adecuadas. El protocolo de comunicación le facilita al usuario en
su labor de amo controlar mediante comandos las salidas que funcionarán en
el dispositivo, las unidades de ingeniería de la variable, la obtención de
mediciones, es decir, todo el funcionamiento del sistema.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 56
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
3.5.2.1 Configuración de las salidas del dispositivo
El primer paso que debe realizar el usuario es configurar el funcionamiento
del dispositivo. Para esto se definieron varios comandos extendidos que se
muestran en la tabla 3.2. El objetivo de estos comandos es definir el tipo de
salidas que se utilizarán, aspecto de vital importancia en el consumo del
dispositivo. La salida analógica activa llama a la función Analog_out que
deshabilita el modo shutdown del amplificador y activa la bandera Flag_analog
que indica en el proceso de envío del dato al amo que se debe utilizar la salida
analógica.
Tabla 3.2 Comandos extendidos para controlar las salidas del sistema
Comando Descripción
aXL! Salida analógica activa
aX0! Salida analógica inactiva
aX2! Salida digital RS232 activa
aX4! Salida digital RS485 activa
El comando salida digital RS232 activa se encarga de utilizar a la función
RS232_out para habilitar el driver RS232 y deshabilitar el RS485. El comando
salida digital RS485 activa realiza lo contrario: deshabilita el driver RS232 y
habilita el RS485. Estos dos últimos comandos se definieron con esas
funciones debido a que estas salidas digitales son mutuamente exclusivas.
3.5.2.2 Configuración de la unidad de ingeniería
El dato enviado mediante la salida digital es obtenido de la compensación de
las muestras proporcionadas por los sensores de presión. La unidad definida
por defecto para esta muestra es el bar. Sin embargo, el usuario posee la
capacidad de mediante los comandos extendidos mostrados en la tabla 3.3
modificar la unidad de ingeniería con la que se muestra la variable. Estos
comandos modifican la variable Unit_out para que en el proceso de transmisión
se tenga en cuenta la conversión necesaria. La unidad de ingeniería puede ser
modificada en cualquier momento.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 57
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Tabla 3.3 Comandos extendidos para cambiar las unidades de ingeniería
Comando Unidad de ingeniería Unit_out
aXB! bar 0
aXmB! mbar 1
aXC! mH2O 2
aXmC! mmH2O 3
aXkP! kPa 4
aXMP! MPa 5
aXK! Kg/cm2 6
3.5.2.3 Obtención de los datos de los sensores y procesamiento
Cuando el MSP430F6638 recibe por parte del usuario el comando “aM!” se
pasa a adquirir y procesar las muestras que brindan los sensores de presión
mediante la función Start_med. Ésta genera la respuesta correcta a dicho
comando y utiliza otra función llamada Measure_Start para el proceso de
comunicación con los sensores y procesamiento de los datos. Debido a la
ausencia de pruebas físicas para determinar el tiempo de demora del sistema
en la respuesta dada a este comando se declara un tiempo estimado para una
sola muestra en cada caso.
Lo primero que se realiza es establecer los parámetros para comunicarse
correctamente con el primer sensor. Se utilizan las funciones del módulo I2C
para obtener las muestras de los sensores de manera que la del sensor de
presión sumergido se almacena en la variable Sensor1 y la del sensor
barométrico en la variable Sensor2. Después de obtener las muestras se
prosigue a procesarlas como se describe en el epígrafe 3.3.2.2 para obtener el
valor real en bar.
Como forma más rápida para el procesamiento se obtuvo mediante
sustitución y simplificación la expresión 3.3. Esta expresión permite sustituir los
valores de cada sensor, realizar la resta y obtener el valor compensado de
presión. Este valor real se almacena en la variable Pressure para su posterior
empleo.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 58
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
3.3
3.5.2.4 Envío de los datos al amo
Como se explica en el epígrafe 3.5.1.3 al recibir el comando “aD0!” se debe
enviar el dato al amo. Pero se debe tener en cuenta el formato impuesto: el
valor de la muestra debe comenzar primeramente con el signo y proseguir con
como máximo 7 dígitos que representan el valor de la muestra. Esta cantidad
no incluye el punto decimal que es opcional.
La recepción del comando emplea la función Send_Data para conformar el
mensaje. A su vez ésta llama a la función Data_Out la cual es la real
organizadora del procesamiento de la muestra (almacenada en la variable
Pressure) y el ordenamiento para su correcta transmisión. La explicación de
dicha función podría ser engorrosa, por lo que se expondrán sólo elementos
claves para la confección del algoritmo y su entendimiento, presentándose un
diagrama en bloques de dicho algoritmo (para cuando se envía la presión en
unidades de bar) en la figura 3.7 para una mejor comprensión. Estas funciones
y variables se pueden observar en el Anexo 1.
Fueron tomados en cuenta inicialmente el valor de la variable Unit_out, para
confeccionar diferentes procesos de conversión de los datos en cada caso.
También fue importante decidir en función de los 7 dígitos que componen la
muestra a enviar la cantidad de cifras significativas que serían posibles incluir.
Debido a esto se decidió mantener los 7 dígitos de resolución, siendo afectada
la posición del punto decimal en cada caso por la conversión de cada unidad
de ingeniería diferente. Por último no se debe dejar a un lado el signo de la
muestra, ya que este es uno de los factores presentes en la transmisión del
resultado final.
En general se compara Unit_out con cada valor, para así en cada caso
establecer una transmisión similar pero con sus propios valores de conversión
y orden del punto decimal. En el proceso antes expuesto también se tiene en
cuenta si la salida analógica se encuentra activa para ofrecer el dato al DAC.
En la tabla 3.4 pueden observarse los factores de conversión entre las
unidades de ingeniería definidas para el sistema. Estos se utilizan en el
comienzo de cada subrutina para cambiar el valor de la muestra obtenida.
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 59
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Tabla 3.4 Factor de conversión en unidades ingenieriles
Unidad Factor de conversión con
respecto a 1bar
mbar 1000
mH2O 10.2
mmH2O 10200
kPa 100
MPa 0.1
Kg/cm2 102
3.5.2.5 Respuestas con CRC
En el caso de que solicite en algún comando que a la respuesta se le añada
CRC a su llegada se activará la bandera CRC_ask. Esta bandera indica que en
el proceso de envío de la muestra se debe calcular y enviar el CRC de 16 bits.
Para realizar el cálculo se utilizó un algoritmo brindado por la Texas Instrument.
Este algoritmo se encuentra en la nota de aplicación “Implementación de
CRC con los MSP430” (50). También se le añade un código para su
implementación. Para el envío de los valores calculados se hace uso del
algoritmo facilitado en el protocolo SDI-12 (49).
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 60
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 3.7 Diagrama en bloques de la transmisión de la muestra en bar (Unit_out = 0)
C a p í t u l o 3 F i r m w a r e s d e l a s o n d a d e n i v e l P á g i n a | 61
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
3.6 Conclusiones
1. En el modo de operación en tiempo real el firmware utiliza las
muestras obtenidas de los sensores para calcular el nivel
compensando el efecto de la presión atmosférica.
2. Se desarrolló el firmware que controla la comunicación con los
sensores y la obtención de las muestras.
3. Se logró desarrollar un firmware para configurar y habilitar la salida
analógica de corriente del sistema.
4. Se realizó un algoritmo para procesar las muestras, garantizar el
proceso de compensación y brindarlas al usuario de la manera
requerida.
5. Se implementó una salida digital para sonda de nivel utilizando el
protocolo de comunicación SDI-12 para lograr la comunicación digital
entre el dispositivo y el usuario.
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 62
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Capítulo 4 Resultados y Análisis Económico
4.1 Introducción
En este capítulo se muestran los resultados de las simulaciones de cada
bloque funcional del dispositivo en los programas PSPICE y Proteus. También
se describen las pruebas realizadas para validar el firmware desarrollado para
el MSP430F6638, principalmente el procesamiento de los datos leídos de los
sensores y la obtención del nivel. Además se comprobó la correcta
implementación del protocolo SDI-12 para la comunicación digital. Para finalizar
se realiza un análisis económico compuesto por el análisis de costo y el
impacto económico que presenta la sonda de nivel.
4.2 Resultados de las simulaciones
Para validar el funcionamiento del dispositivo fueron utilizados dos software
de simulación de diseños electrónicos. Uno de ellos es el Proteus 7
Professional de Labcenter Electronics y el otro es el OrCAD 16.0 de Cadence
Design Systems. Estos programas facilitaron la simulación de las componentes
principales de nuestro diseño por separado: el lazo de corriente de 4 a 20mA,
la comunicación mediante el protocolo digital SDI-12 y la comunicación con los
sensores mediante I2C.
4.2.1 Simulación de la comunicación con los sensores
Para simular la comunicación mediante I2C con los sensores Keller se utilizó
el Proteus 7 Professional. En las bibliotecas de dicho software no se encuentra
el MSP430F6638 que fue utilizado en el diseño. Por este motivo se decidió
utilizar otro microcontrolador de la familia de los MSP con características
similares en cuanto a los módulos que brinda el MSP430F6638. Fue
seleccionado el MSP430F2272 (51), (52).
Los sensores Keller de la familia LD tampoco se encuentran en las
bibliotecas de Proteus. Con el objetivo de realizar una simulación sobre la
comunicación lo más fiel posible al comportamiento real del sensor se decidió
simular su funcionamiento mediante otro microcontrolador, el MSP430F2272.
Este se encargará de ser el esclavo en la comunicación, esperando que el amo
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 63
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
le envíe el comando correcto para brindarle el dato de presión de la misma
forma que lo brindaría el sensor, exceptuando el fin de adquisición y
procesamiento.
En la figura 4.1 puede observarse el esquema utilizado para la simulación. A
la izquierda se encuentran los dos sensores representados por dos
MSP430F2272. Para monitorear la transmisión en el bus I2C se utilizó el I2C
Debugger. Los LEDs que pueden observarse se utilizaron en el proceso de
puesta a punto del programa, ya que en Proteus no es posible realizar la
ejecución del firmware paso a paso utilizando los microcontroladores de la
familia MSP.
Para el proceso de simulación primeramente se procede a realizar la
inicialización de los tres microcontroladores. Las direcciones dadas a cada uno
(necesarias para la comunicación mediante I2C) fueron 0x00h al amo, 0x40h al
primer esclavo (Sensor 1) y 0x42h al segundo esclavo (Sensor 2). Las
direcciones de los esclavos están definidas por la especificación sobre la
comunicación con los sensores tratada en el epígrafe 3.3.2. La comunicación
se configuró a 400kHz de frecuencia.
En la simulación se procede a enviar el comando “0xACh”. Cuando este
comando es enviado a los sensores estos responden con el valor de las
presiones que están siendo aplicadas sobre ellos. En este caso los valores de
presión enviados son datos almacenados en las memorias de los
microcontroladores utilizados para simular a los sensores.
En la figura 4.2 puede observarse la simulación. En la esquina superior
derecha se encuentra la ventana del I2C Debugger. Para una mejor
observación se incluyó la misma pantalla en la esquina inferior derecha en
posición horizontal donde se encuentran enmarcadas las respuestas de los
sensores. Ambas dan como respuesta el número máximo que brindan los
sensores: 49152 (0xC000h). Estos valores de presión son almacenados por el
amo en las variables Sensor1 y Sensor2.
Como resultado de esta simulación se demuestra que se puede obtener
satisfactoriamente los datos de los sensores de presión. También se puede
añadir que se pudo comprobar que estos datos obtenidos se recibieran de
manera correcta para su posterior procesamiento. Por último destacar que fue
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 64
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
validado el firmware diseñado para controlar la comunicación con los sensores
de presión.
Figura 4.1 Esquema de los sensores con el microcontrolador
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 65
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 4.2 Simulación de la comunicación con los sensores
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 66
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
4.2.2 Simulación de la comunicación digital mediante el protocolo
SDI-12
Con el objetivo de validar el funcionamiento del sistema y el protocolo de
comunicación digital SDI-12 se realizó la simulación de la comunicación digital
con el usuario. Esta simulación se realizó en el software Proteus 7
Professional. Fue empleado un microcontrolador MSP430F2272 para simular el
funcionamiento del MSP430F6638 utilizado en el diseño. También se utilizó
una terminal virtual que permite enviar comandos al microcontrolador como el
amo manejado por el usuario y visualizar las respuestas del microcontrolador a
cada comando.
En este caso se realizó la comunicación mediante el módulo USCI del MSP
configurado en UART. La comunicación serie debe realizarse a una velocidad
de 1200 baudios y con la conformación de la trama como define el protocolo
SDI-12. En la figura 4.3 puede observarse el esquemático empleado para la
simulación.
Figura 4.3 Esquema para la simulación de la comunicación digital
En la simulación el esclavo se encuentra en espera de comandos para a
partir de estos generar las respuestas adecuadas. Fue dispuesta una serie de
comandos para enviar y observar si el esclavo funcionaba correctamente. En la
tabla 4.1 se muestran el orden de envío de dichos comandos. En la figura 4.4
pueden observarse los resultados de la simulación.
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 67
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Tabla 4.1 Orden y significado de los comandos utilizados
Comando Significado
a! Reconocimiento activo
aI! Información
aM! Comenzar medición
aD2! Enviar muestra
aXC! Cambiar unidad a mH2O
aD2! Enviar muestra
aMC! Comenzar medición y añadir CRC
aD2! Enviar muestra
Figura 4.4 Simulación de la comunicación digital
En la prueba de simulación primeramente se envía el comando “a!”, siendo la
respuesta efectiva a éste la dirección del esclavo, en este caso 0x00h. La
respuesta que se debe brindar al segundo comando es la información. La
estructura en la que se brinda la información es: primeramente la dirección,
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 68
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
seguida por versión del protocolo que se emplea (1.3), el nombre del fabricante
(CIH) y la versión del dispositivo (1.0).
Al comando de comenzar medición le sigue el de enviar datos, a lo cual se
responde con un valor en pantalla. Este valor es el resultado del procesamiento
de dos valores escogidos como muestras para la simulación. Se puede
observar la estructura de la respuesta y comprobar que es similar a la expuesta
en el epígrafe 3.5.1.3. La simulación prosigue con un cambio de unidad
ingenieril y la posterior visualización de la misma muestra pero en la nueva
unidad configurada. Por último se realiza una petición del dato pero
añadiéndosele el CRC, que son 3 bits.
Para comprobar que todas las unidades ingenieriles funcionan correctamente
se simula el mismo procedimiento pero configurando diferentes unidades a la
salida. En cada caso se cambia en orden de unidad de ingeniería (en el orden
presentado en la tabla 3.3) y se envía la misma muestra pero convertida a la
unidad solicitada. Esto puede observarse en la figura 4.5.
Figura 4.5 Simulación de la conversión de unidades de ingeniería
Esta simulación fue muy importante en el proceso de depuración y puesta a
punto del firmware desarrollado para comprobar la comunicación digital y el
funcionamiento del dispositivo. Como resultado de esta simulación puede
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 69
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
plantearse que fue validado a nivel de simulación el firmware que controla la
comunicación digital y que define el funcionamiento del dispositivo. Es
importante aclarar que en firmware se incluye todo el procesamiento de los
datos obtenidos de los sensores, la recepción de los comandos enviados por el
amo y la conversión de la muestra a las unidades ingenieriles que puede
solicitar el usuario. También se incluye la implementación eficiente de las
respuestas a cada comando en el formato requerido.
4.2.3 Simulación del lazo de corriente 4-20mA
La simulación del lazo de corriente 4-20mA persigue dos objetivos. El
primero es demostrar que para variaciones de 0,3 a 2,7V en la tensión de
salida del DAC del MSP430F6638 realmente se obtiene una variación de 4 a
20mA en el lazo de corriente. El segundo objetivo es demostrar que
independientemente del consumo de todo el circuito la salida se mantiene
dentro de los límites esperados siempre que el consumo general de la sonda
sea menor que 4mA.
Para realizar la simulación fue utilizado el esquema mostrado en la figura 4.6.
Las componentes del lazo de corriente simulado no son exactamente las
definidas en el diseño del hardware. Esto se debe a que en la biblioteca del
ORCAD no se encontraban y fueron sustituidas por otras con un
funcionamiento equivalente.
Como se explica en el epígrafe 2.6, la resistencia Rg es la que se encarga de
ajustar la ganancia necesaria para lograr que para una variación de 2,4V (2,7 -
0,3) en la salida del DAC se obtenga una variación de 16mA (20 - 4) en el lazo
de corriente. La resistencia Rof realiza el ajuste de Ioffset que es la corriente
que debe adicionarse a la corriente consumida por el circuito para garantizar
que el valor de la corriente se mantenga en 4mA cuando el valor cuando la
tensión de salida del DAC sea el mínimo posible. Como los valores más
notables de salida del lazo son determinados por las resistencias antes
expuestas, entonces los cambios hechos en el esquema para la simulación no
son de gran importancia para los objetivos que se persiguen.
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 70
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 4.6 Lazo de 4-20mA utilizado en la simulación
En el esquema puede observarse primeramente la fuente de tensión Vloop
que constituye una sustitución de la tensión de alimentación del lazo. Como se
manifestó en el epígrafe 2.6 este es de 30V. La referencia de tensión de 3V
seleccionada en el diseño original fue sustituida por la REF198. Las otras
sustituciones realizadas fueron el amplificador operacional y el transistor debido
a las razones antes expuestas.
Primeramente se utilizaron los valores de las resistencias calculadas para el
diseño del hardware. La salida del DAC del MSP430F6638 se sustituye por una
fuente de tensión (VMAX) para variar su valor entre los valores 0.3 y 2.7V que
brindaría el DAC a su salida. El consumo del circuito es simulado por la fuente
de corriente I1, pudiéndose realizar variación en su valor. Estas dos
componentes son de vital importancia en la simulación.
En la primera simulación se plantea la variación de la fuente de tensión
VMAX entre 0.3 y 2.7V para observar la variación lineal en la salida del lazo.
También deben observarse los límites del valor de la corriente a la salida ya
que deben mantenerse entre 4 y 20mA. El resultado final de dicha simulación
puede observarse en la figura 4.7.
Las primeras simulaciones realizadas permitieron comprobar los errores
presentes en la salida. Estos significaban que se deberían realizar cambios a
los valores de las resistencias Rof y Rg para lograr una salida satisfactoria.
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 71
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Estos valores son: para Rof 4.9MΩ y para Rg 300KΩ. Se deben obtener de
alguna forma estos valores a partir de los valores de resistencias comerciales.
La figura 4.7 es el resultado de varias iteraciones realizadas para lograr el
correcto funcionamiento del conversor voltaje corriente.
Figura 4.7 Gráfica de la salida del lazo de corriente vs VMAX
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 72
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
La segunda simulación se realizó para comprobar que a pesar de las
variaciones en el consumo del circuito, la salida se mantiene en el rango
requerido. Para esto se realiza una variación en la corriente I1 entre 0.5mA y
4.0mA, para observar el comportamiento de la salida del lazo. La corriente I1
es equivalente al consumo de corriente de todos los componentes utilizados en
el diseño de la sonda. Son evaluados los valores límites de 0.3V y 2.7V en
VMAX. Los resultados de estas simulaciones se pueden observar en la figura
4.8 y 4.9.
Figura 4.8 Gráfica de salida mínima contra consumo de corriente
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 73
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Figura 4.9 Gráfica de salida máxima contra consumo de corriente
Como se puede apreciar en la figura 4.8 a partir de que el consumo aumenta
por encima de los 3.4mA comienza a variar la linealidad de la salida para el
valor mínimo de 0.3V. Esto indica que el consumo del circuito debe encontrarse
por debajo de este valor. La figura 4.9 demuestra que el consumo del circuito
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 74
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
no tiene gran influencia en la salida cuando esta se encuentra en su valor
máximo (2.7V).
Con estas simulaciones se logró observar el comportamiento de la salida del
lazo ante las variaciones de la salida del DAC y del consumo del circuito. Como
resultados se destaca que se logró poner a punto los valores de las
resistencias Rof y Rg para lograr la variación lineal adecuada en el lazo de
corriente. Éstos fueron modificados a los valores de 4.9M y 300K
respectivamente. Además, se debe resaltar que el consumo del circuito no
debe pasar de 3.4mA ya que el comportamiento de la salida cuando la
corriente es mínima se verá alterado.
4.3 Resultados prácticos
Después de realizarse las simulaciones antes descritas se procedió a diseñar
y realizar una prueba práctica con el objetivo de comprobar el correcto
funcionamiento de la comunicación digital y el procesamiento de datos. La
prueba consiste en comprobar la comunicación real entre el microcontrolador y
una computadora mediante la interfaz RS232.
Para realizar el experimento se disponía de la placa HiperMax Plus facilitada
por el ICID. El componente importante de esta placa utilizado fue un
MSP430F1611(53), (54). A pesar de no ser el microcontrolador empleado en el
diseño ni en las simulaciones este presenta los módulos necesarios para
realizar la comunicación serie con los parámetros requeridos.
Para lograr la comunicación se utilizó un driver RS485 específicamente el
MAX485 (55). El microcontrolador empleado debía ser alimentado por 3.3V,
mientras que el MAX485 necesita 5V. Debido a estas diferencias en las
tensiones de alimentación resultaba imposible conectar directamente esos
dispositivos. Para eliminar este inconveniente se implementó una solución
reportada en una nota de aplicación sobre la comunicación entre los MSP y
circuitos de diferente alimentación (56). La configuración utilizada puede
observarse en la figura 4.10. El voltaje Vi(sys) corresponde a una entrada
digital de tensión conectada al MSP. Esta configuración es un divisor de
tensión, y su implementación se basa en las expresiones 4.1, 4.2 y 4.3. Las dos
primeras aseguran que la entrada de tensión del MSP se encuentre por encima
(cuando Vi(sys) está en nivel alto) o por debajo (cuando Vi(sys) está en nivel
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 75
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
bajo) de las tensiones de entrada requeridos. La tercera expresión se encarga
de que las corrientes de escape de la entrada no influyan en la tensión de
entrada del MSP.
(4.1)
(4.2)
(4.3)
Donde:
: Nivel alto de tensión desde el sistema externo
: Nivel bajo de tensión desde el sistema externo
: Umbral del máximo nivel alto de tensión para un MSP430
: Umbral del mínimo nivel bajo de tensión para un MSP430
: tolerancia de los resistores
: Tensión de alimentación del MSP430
: Corriente de escape de una entrada de un MSP430
Los resultados obtenidos al aplicar dichas expresiones fueron:
, y .
Figura 4.10 Configuración para convertir de 5V a 3V
El microcontrolador fue programado a través del MSP-FETU430IF facilitado
por el ICID. Además de hacer función de programador éste también es un
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 76
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
instrumento que permite “observar” el comportamiento del programa mientras
trabaja el sistema. Este dispositivo puede observarse en la figura 4.11.
Figura 4.11 MSP-FETU430IF
Para culminar la fabricación de la interfaz de comunicación con la
computadora se utilizó un conversor de RS485 a RS232. Este componente
tiene como objetivo convertir los niveles lógicos del estándar RS485 a los del
RS232 que son compatibles con el puerto serie de la computadora. El resultado
del diseño puede observarse en la figura 4.12.
Figura 4.12 Hardware para la comunicación digital
Para comprobar la comunicación entre el usuario y el sistema se utilizó el
software Portutil. En este se pueden enviar comandos y visualizar los datos
recibidos del MSP430F1611. En la prueba se enviaron una sucesión de
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 77
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
comandos para determinar si las respuestas enviadas por el MSP eran
correctas. Además, se analizaron los datos recibidos para comprobar si el
procesamiento de las muestras se realizaba de manera satisfactoria. En la
figura 4.13 puede observarse parte de la interfaz del software con los
comandos recibidos como resultado de la comunicación realizada en parte de
la prueba.
Figura 4.13 Resultado de la comunicación digital mediante SDI-12
El primer comando es la respuesta a una solicitud de medición. Los
caracteres se observan en código ASCII, siendo este: “01201”. El segundo
constituye la respuesta a una solicitud de envío de la muestra. Este resultaría
representar “0-0.4437325”. Después se pasa a solicitar el envío de otra
muestra, siendo la respuesta “0+2.5”. Posteriormente se realiza una petición de
dirección, a lo que se responde con “0”. Le sigue una solicitud de verificación,
la respuesta definida para este caso fue “01201”. Para finalizar con esta parte
de la prueba se realizó un cambio de unidad de ingeniería y se solicitó la
muestra. La respuesta dada a esta solicitud es “0-04.52600”. Como se puede
distinguir se comprobaron varios comandos, recibiéndose en todo momento la
respuesta correcta. Además de los resultados presentados la prueba se
extendió a todos los diferentes comandos que componen el protocolo de
comunicación y que se emplean en nuestro diseño.
Con esta prueba se pudo verificar la validez tanto de la comunicación digital
mediante el protocolo SDI-12 como el procesamiento de las muestras
obtenidas de los sensores (en este casos valores almacenados en memoria).
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 78
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
También se comprobó que fueran reconocidos los comandos enviados por el
usuario al MSP y se pudo validar la conversión de unidades de ingeniería.
4.4 Análisis económico
4.4.1 Estimación de los costos
Realizar un análisis económico brinda la posibilidad de establecer un control
de los gastos en que se incurren. También constituye una pauta para comparar
en próximos proyectos. Analizarlos costos permite disminuir el derroche de
capital invertido en instrumentación o materia prima que no se consideran
necesarias en el proyecto.
El cálculo del costo total (CT) tiene como objetivo estimar el costo real que se
obtendrá una vez terminado el proyecto. En este cálculo intervienen el costo
directo (CD) y el costo indirecto (CI). En la expresión 4.4 se observa esta
relación.
(4.4)
Como costos indirectos se incluyen gastos de administración, gastos de
electricidad consumida, entre otros. Este costo se calcula la multiplicación del
salario básico devengando en la investigación por el coeficiente de costo
utilizado para un departamento docente (0.84), dando como resultado la
expresión 4.5.
(4.5)
Los gastos por salario básico se calculan a partir del estipendio apercibido
por los estudiantes y los salarios del tutor y cotutores según el tiempo de
laborable empleado en el proyecto. Esto se observa en la expresión 4.6
∑
(4.6)
Donde:
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 79
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
: horas dedicadas a la investigación por cada participante
: salario/hora de cada participante
: total de participantes
Para realizar los cálculos se toma el estipendio para estudiantes de 125
CUP, 24 días laborables en el mes y el empleo de cinco meses de trabajo,
dedicando como promedio ocho horas al trabajo de diploma cada día laborable.
En este caso participan el autor, el tutor y dos cotutores. Realizando el cálculo
mediante la expresión 4.6 el estudiante tiene un salario básico de 625 CUP, el
tutor 122.4 CUP y los cotutores uno 122.4 y otro 208.33. En total el salario
básico es de 1078.13 CUP. Aplicando entonces la expresión 4.5 resulta un
costo indirecto de 905.63 CUP
Para calcular el costo directo se emplea la expresión 4.7.
(4.7)
Donde:
: Salario básico
: Seguridad social
: Salario complementario
: Medios o materiales directos
: Dieta, pasajes
: Otros gastos
El salario complementario es el 9.09% del salario básico, este se utiliza para
pagar las vacaciones. En el caso del tutor la estimación representa 11.13 CUP,
lo mismo para uno de los cotutores y el del otro cotutor es 18.94 CUP.
El valor de la seguridad social equivale al 10% de la suma del salario básico
y el salario complementario. El tutor consume por seguridad social 13.35 CUP,
similar al de un cotutor. El otro genera un gasto de 22.73 CUP.
Los gastos en dieta y pasajes son nulos. Los medios directos son también
cero ya que en este caso no fue utilizado ningún componente para la
fabricación del dispositivo (no estaba dentro de los objetivos). En otros gastos
pueden incluirse los gastos por concepto de tiempo de máquina. Este se tarifica
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 80
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
como 10.00 CUP por hora. Si asumimos que se utilizaron cerca de 700 horas
de máquina entonces el resultado son 7000 CUP.
Empleando entonces la expresión 4.7 el costo directo es de 8168.76 CUP.
Mediante la expresión 4.4 se obtiene de costo total de 9074.39 CUP.
4.4.2 Impacto económico
Uno de los objetivos que se perseguían con este proyecto era la disminución
del nivel de importaciones del país con la realización de una sonda de nivel.
Aunque no se logró concretar la fabricación del dispositivo el análisis siguiente
genera una idea sobre el costo que supondría su fabricación. Este puede
compararse con el precio de una sonda de nivel en el mercado internacional, el
cual estaría sobre los 800 CUC. En la tabla 4.2 pueden observarse el precio de
cada uno de los componentes del hardware diseñado.
Tabla 4.2 Precios de los componentes del esquemático
Componente Precio (CUC) Cantidad
MSP430F6638 13.06 1
Keller 9LD 59.85 1
Keller 9FLD 63.45 1
XTAL ABLS-4.000MHZ-B2-T 0.74 1
MAX9911 1.40 1
2DD2679 0.43 1
MAX3471 4.78 1
MAX3230 5.07 1
MAX6035 2.30 1
Conector 5 vías 0.42 2
Conector 3 vías 0.35 2
Conector 2 vías 0.28 1
Diodo Schottky 0.23 1
Conector JTAG 1.95 1
Diodo Zener 0.32 2
Capacitor 0.1uF 0.10 13
Capacitor 22pF 0.10 2
C a p í t u l o 4 R e s u l t a d o s y A n á l i s i s E c o n ó m i c o P á g i n a | 81
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Capacitor 2.2uF 0.10 2
Capacitor 470nF 0.12 1
Capacitor 10uF 0.10 4
Capacitor 100uF 0.12 1
Resistencia 1KΩ 0.10 2
Resistencia 10KΩ 0.10 1
Resistencia 100KΩ 0.10 2
Resistencia 150KΩ 0.10 2
Total 158.66
4.5 Conclusiones
1. Se comprobó mediante la simulación en Proteus la validez de la
comunicación entre el microcontrolador y los sensores de presión.
2. Mediante la simulación en PSPICE se comprobó que la salida del lazo
de corriente es correcta y que no depende del consumo del circuito
siempre y cuando este se mantenga por debajo de 3.4mA.
3. Se comprobó mediante la simulación en Proteus y posteriormente de
forma práctica el correcto funcionamiento del protocolo de
comunicación SDI-12 entre un microcontrolador y una computadora.
4. Fue validado el algoritmo matemático para procesar las muestras,
compensarlas y tenerlas a punto para su envío.
C o n c l u s i o n e s F i n a l e s P á g i n a | 82
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Conclusiones Finales
En correspondencia con los objetivos de esta tesis se obtuvieron los
resultados enumerados a continuación:
1. Se realizó un profundo estudio del estado del arte de las sondas de
nivel y sus principales características.
2. Se diseñó una sonda de nivel con compensación de la presión
atmosférica cumpliendo los requerimientos planteados en el diseño.
3. Se diseñó un algoritmo para compensar las muestras obtenidas de los
sensores de presión y procesarlas para obtener el dato de nivel y
garantizar su envío de manera satisfactoria.
4. Se comprobó el funcionamiento del diseño realizado utilizando
programas de simulación que permitieron realizar la puesta a punto
del dispositivo.
5. Se realizó un experimento práctico que permitió validar el firmware
desarrollado para el microcontrolador y el protocolo de comunicación
SDI-12.
R e c o m e n d a c i o n e s P á g i n a | 83
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Recomendaciones
Es importante como trabajo futuro comprobar la exactitud de los sensores
Keller 9LD para determinar la necesidad de algún algoritmo de compensación.
Se debe continuar trabajando en el diseño de la placa impresa para lograr la
fabricación del dispositivo diseñado. Al final se debe realizar las pruebas
adecuadas con el dispositivo físico sobre los tiempos de comunicación y los
errores que pueden presentarse. También debe crearse un programa de
usuario con interfaz gráfica para visualizar las respuestas recibidas a los
comandos definidos por el protocolo de comunicación.
R e f e r e n c i a s B i b l i o g r á f i c a s P á g i n a | 84
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Referencias Bibliográficas
1. Ramírez J, Villar Y. Fundamentos de la medición de presión, nivel y caudal en los sistemas hidráulicos. 2011. p. 107. 2. Hambrice K, Hopper H. A Dozen Ways to Measure Fluid Level and How They Work2004. Disponible en: http://www.sensorsmag.com/list/sensors/leak-level-46. 3. Gad-el-Hak M. The MEMS handbook. 1ra ed. Kreith F, editor. Washington, D.C.: CRC Press LLC; 2002. 4. Kularatna N. Electronic circuit design: from concept to implementation. Boca Raton: CRC Press; 2008. 5. Chuan Y, Chen L. The Intelligent Pressure Sensor System Based on DSP. 2010 3rd International Conference on Advanced Computer Theory and Engineering (ICACTE)2010. 6. Hernández A. “Diseño de un transmisor de presión con salida digital RS232 y salida analógica 4-20mA”. Habana: CUJAE; 2011. 7. Philip C. J, Abhay J, Pramod S, Ajayakumar PD, Natarajan K. Signal Conditioner for MEMS based Piezoresistive sensor. 2010 5th International Conference on Industrial and Information Systems, ICIIS 2010,; Jul 29 - Aug 01, 2010,; India2010. 8. Thanachayanont A, Sangtong S. Low-Voltage Current-Sensing CMOS Interface Circuit for Piezo-Resistive Pressure Sensor. ETRI Journal. 2007;29(1):70-8. 9. Boujamaa EM, Alandry B, Hacine S, Latorre L, Mailly F, Nouet P. A Low Power Interface Circuit for Resistive Sensors with Digital Offset Compensation. 2010 IEEE International Symposium on Circuits and Systems (ISCAS); May 30 2010-June 2 2010 Paris2010. 10. Sifuentes E, Casas O, Reverter F, Pallàs-Areny R. Direct interface circuit to linearise resistive sensor bridges. Sensors and Actuators A: Physical. 2008;147(1):210-5. 11. Jordana J, Pallàs-Areny R. A simple, efficient interface circuit for piezoresistive pressure sensors. Sensors and Actuators A: Physical. 2006;127(1):69-73. 12. Hofer D, Vetterli B. OEM-TRANSMITTERS: ALL-INCLUSIVE2012. 13. Vega. Radar – VEGAPULS. 2011. 14. Endress+Hauser. Technical Information Liquicap T FMI21. 2007. 15. IFM. PS3417. SUBMERSIBLE 1BAR 15M CABLE. 2012. 16. OTT. OTT PLS Pressure Level Sensor. 2009. 17. Keller. DCX-22 AA. Data Collector for Water Levels 100% waterproof, air pressure compensated. 2006. 18. Keller. Piezoresistive OEM Pressure Transmitters Series 4 LD…9 LD. 2013. p. 2. 19. ZMDI. ZSC31050. Advanced Differential Sensor Signal Conditioner. 2010. p. 28. 20. ZMDI. ZSC31050. Advanced Differential Sensor Signal Conditioner Functional Description. 2010. p. 50. 21. Cypress. PSoC® 3: CY8C38 Family Data Sheet. 2012. p. 137. 22. Microchip. dsPIC33FJ32GP302/304, dsPIC33FJ64GPX02/X04, and dsPIC33FJ128GPX02/X04 Data Sheet. 2008. p. 378. 23. Microchip. dsPIC33FJ32MC302/304, dsPIC33FJ64MCX02/X04, and dsPIC33FJ128MCX02/X04 Data Sheet. 2008. p. 398. 24. Texas Instrument. MSP430F663x Mixed Signal Microcontroller. 2012. p. 116. 25. Texas Instrument. MSP430x5xx and MSP430x6xx Family User's Guide. 2013. p. 1148. 26. Cypress. PSoC 3 and PSoC 5 Getting More Resolution from 8-Bit DACs. 2012. p. 15. 27. Maxim. MAX6029. Ultra-Low-Power Precision Series Voltage Reference. 2006. p. 16. 28. Maxim. MAX6035. High-Supply-Voltage, Precision Voltage Reference in SOT23. 2006. p. 15. 29. Maxim. MAX6037. Low-Power, Fixed and Adjustable Reference with Shutdown in SOT23. 2007. p. 18.
R e f e r e n c i a s B i b l i o g r á f i c a s P á g i n a | 85
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
30. Maxim. MAX6129. Ultra-Low-Power Series Voltage Reference. 2005. p. 16. 31. Maxim. Application Note 1064. Designing a 4-20mA Current Loop Using the MAX1459 Sensor Signal Conditioner. 2002. 32. Maxim. MAX4074–MAX4078. Micropower, SOT23, Rail-to-Rail, Fixed-Gain, GainAmp/Open-Loop Op Amps. 1999. p. 20. 33. Maxim. MAX9617–MAX9620. Single/Dual SC70, Zero-Drift, High-Efficiency, 1.5MHz Op Amps with RRIO. 2012. p. 9. 34. Maxim. MAX9910–MAX9913. 200kHz, 4μA, Rail-to-Rail I/O Op Amps with Shutdown. 2010. p. 17. 35. Maxim. MAX44264. Ultra-Low Power Op Amp in a Tiny 6-Bump WLP. 2010. p. 10. 36. Diodes Incorporated. 2DD2679. LOW VCE(SAT) NPN SURFACE MOUNT TRANSISTOR. 2008. p. 4. 37. Maxim. MAX3222E/MAX3232E/MAX3237E/MAX3241E/MAX3246E. ±15kV ESD-Protected, Down to 10nA, 3.0V to 5.5V, Up to 1Mbps, True RS-232 Transceivers. 2010. p. 22. 38. Maxim. MAX3322E/MAX3323E. ±15kV ESD-Protected, RS-232 Transceivers for Multidrop Applications. 2003. p. 13. 39. Maxim. MAX3230E/MAX3230AE/MAX3231E/MAX3231AE. ±15kV ESD-Protected +2.5V to +5.5V RS-232 Transceivers in UCSP and WLP. 2008. p. 16. 40. Maxim. MAX13234E–MAX13237E. 3Mbps RS-232 Transceivers with Low-Voltage Interface. 2008. p. 16. 41. Maxim. MAX3471. 1.6μA, RS-485/RS-422, Half-Duplex, Differential Transceiver for Battery-Powered Systems. 1998. p. 8. 42. Multicomp. SMBJ / SMCJ Series Surface Mount Voltage Suppressors. 2005. 43. Philips Semiconductors. Application Note AN10216-01 I2C MANUAL. 2003. 44. Philips Semiconductors. THE I 2C-BUS SPECIFICATION. 2000. 45. Hofer D. Description of the Communication Protocol for Series 4 LD ... 9LD OEM pressure transmitter from KELLER2013. 46. SDI-12 Support Group. SDI-12. 2012; Available from: http://www.sdi-12.org. 47. National Instrument. Building an Environmental Monitoring System for SDI-12 Devices2012. Disponible en: http://sine.ni.com/nipdfgenerator/nipdfgenerator?pageURL=http://www.ni.com/white-paper/7706/en&clientAppName=dz&dotsPerPixel=&dotsPerPoint=. 48. Campbell Scientific. Serial Data Interface SDI-12 Information. 2006. 49. SDI-12 Support Group. SDI-12 A Serial-Digital Interface Standard for Microprocessor-Based Sensors. 2013. 50. Texas Instrument. Application Report SLAA221 CRC Implementation With MSP430. 2004. 51. Texas Instrument. MSP430x22x2, MSP430x22x4 Mixed Signal Microcontroller. 2007. 52. Texas Instrument. MSP430x2xx Family User's Guide. 2012. 53. Texas Instrument. MSP430x15x, MSP430x16x, MSP430x161x Mixed Signal Microcontoller. 2006. 54. Texas Instrument. MSP430x1xx Family User's Guide. 2003. 55. Maxim. MAX481/MAX483/MAX485/MAX487–MAX491/MAX1487. Low-Power, Slew-Rate-Limited RS-485/RS-422 Transceivers. 2009. 56. Texas Instrument. Application Report SLAA148 Interfacing the 3-V MSP430 to 5-V Circuits. 2002.
B i b l i o g r á f í a P á g i n a | 86
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Bibliografía
1. Altium Designer. Module 1: Getting Started With Altium Designer. 2009. 2. Altium Designer. Module 2: Help and DXP system menu. 2009. 3. Altium Designer. Module 3: Schematic Editor Basics. 2009. 4. Bierl L. MSP430 Family Mixed-Signal Microcontroller Application Reports. 2000. 5. Boujamaa EM, Alandry B, Hacine S, Latorre L, Mailly F, Nouet P. A Low Power Interface
Circuit for Resistive Sensors with Digital Offset Compensation. 2010 IEEE International Symposium on Circuits and Systems (ISCAS); May 30 2010-June 2 2010 Paris2010.
6. Campbell Scientific. Serial Data Interface SDI-12 Information. 2006. 7. Chuan Y, Chen L. The Intelligent Pressure Sensor System Based on DSP. 2010 3rd
International Conference on Advanced Computer Theory and Engineering (ICACTE)2010. 8. Cypress. PSoC® 3: CY8C38 Family Data Sheet. 2012. p. 137. 9. Cypress. PSoC 3 and PSoC 5 Getting More Resolution from 8-Bit DACs. 2012. p. 15. 10. Davies J. MSP430 Microcontroller Basics: Elsevier Ltd; 2008. 11. Diodes Incorporated. 2DD2679. LOW VCE(SAT) NPN SURFACE MOUNT TRANSISTOR.
2008. p. 4. 12. EduDevices DdId. Soluciones para aplicaciones de 3V2007. 13. Endress+Hauser. Technical Information Liquicap T FMI21. 2007. 14. Gad-el-Hak M. The MEMS handbook. 1ra ed. Kreith F, editor. Washington, D.C.: CRC
Press LLC; 2002. 15. García J, Rodríguez JI, Goñi R, Brázalez A, Funes P, Rodríguez R. Aprenda lenguaje ANSI
C como si estuviera en primero 1998. 16. Hambrice K, Hopper H. A Dozen Ways to Measure Fluid Level and How They
Work2004. 17. Hernández A. “Diseño de un transmisor de presión con salida digital RS232 y salida
analógica 4-20mA”. Habana: CUJAE; 2011. 18. Hofer D. Description of the Communication Protocol for Series 4 LD ... 9LD OEM
pressure transmitter from KELLER2013. 19. Hofer D, Vetterli B. OEM-TRANSMITTERS: ALL-INCLUSIVE2012. Available from:
www.keller.com. 20. IAR Systems. MSP430 IAR EMBEDDED WORKBENCH™ Tutorials. 2000. 21. IFM. PS3417. SUBMERSIBLE 1BAR 15M CABLE. 2012. 22. Jones BL, Aitken P. Sams Teach Yourself C in 21 Days. 6ta ed: Sams Publishing; 2003. 23. Jordana J, Pallàs-Areny R. A simple, efficient interface circuit for piezoresistive pressure
sensors. Sensors and Actuators A: Physical. 2006;127(1):69-73. 24. Keller. DCX-22 AA. Data Collector for Water Levels 100% waterproof, air pressure
compensated. 2006. 25. Keller. Piezoresistive OEM Pressure Transmitters Series 4 LD…9 LD. 2013. p. 2. 26. Kularatna N. Electronic circuit design: from concept to implementation. Boca Raton:
CRC Press; 2008. 27. Maxim. MAX3471. 1.6μA, RS-485/RS-422, Half-Duplex, Differential Transceiver for
Battery-Powered Systems. 1998. p. 8. 28. Maxim. MAX4074–MAX4078. Micropower, SOT23, Rail-to-Rail, Fixed-Gain,
GainAmp/Open-Loop Op Amps. 1999. p. 20. 29. Maxim. Application Note 1064. Designing a 4-20mA Current Loop Using the MAX1459
Sensor Signal Conditioner. 2002. 30. Maxim. MAX3322E/MAX3323E. ±15kV ESD-Protected, RS-232 Transceivers for
Multidrop Applications. 2003. p. 13. 31. Maxim. MAX6129. Ultra-Low-Power Series Voltage Reference. 2005. p. 16.
B i b l i o g r á f í a P á g i n a | 87
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
32. Maxim. MAX6029. Ultra-Low-Power Precision Series Voltage Reference. 2006. p. 16. 33. Maxim. MAX6035. High-Supply-Voltage, Precision Voltage Reference in SOT23. 2006.
p. 15. 34. Maxim. MAX6037. Low-Power, Fixed and Adjustable Reference with Shutdown in
SOT23. 2007. p. 18. 35. Maxim. MAX3230E/MAX3230AE/MAX3231E/MAX3231AE. ±15kV ESD-Protected +2.5V
to +5.5V RS-232 Transceivers in UCSP and WLP. 2008. p. 16. 36. Maxim. MAX13234E–MAX13237E. 3Mbps RS-232 Transceivers with Low-Voltage
Interface. 2008. p. 16. 37. Maxim. MAX481/MAX483/MAX485/MAX487–MAX491/MAX1487. Low-Power, Slew-
Rate-Limited RS-485/RS-422 Transceivers. 2009. 38. Maxim. MAX9910–MAX9913. 200kHz, 4μA, Rail-to-Rail I/O Op Amps with Shutdown.
2010. p. 17. 39. Maxim. MAX44264. Ultra-Low Power Op Amp in a Tiny 6-Bump WLP. 2010. p. 10. 40. Maxim. MAX3222E/MAX3232E/MAX3237E/MAX3241E/MAX3246E. ±15kV ESD-
Protected, Down to 10nA, 3.0V to 5.5V, Up to 1Mbps, True RS-232 Transceivers. 2010. p. 22. 41. Maxim. MAX9617–MAX9620. Single/Dual SC70, Zero-Drift, High-Efficiency, 1.5MHz Op
Amps with RRIO. 2012. p. 9. 42. Microchip. dsPIC33FJ32GP302/304, dsPIC33FJ64GPX02/X04, and
dsPIC33FJ128GPX02/X04 Data Sheet. 2008. p. 378. 43. Microchip. dsPIC33FJ32MC302/304, dsPIC33FJ64MCX02/X04, and
dsPIC33FJ128MCX02/X04 Data Sheet. 2008. p. 398. 44. Multicomp. SMBJ / SMCJ Series Surface Mount Voltage Suppressors. 2005. 45. National Instrument. Building an Environmental Monitoring System for SDI-12
Devices2012. Available from: http://ni.com. 46. OTT. OTT PLS Pressure Level Sensor. 2009. 47. Philip C. J, Abhay J, Pramod S, Ajayakumar PD, Natarajan K. Signal Conditioner for
MEMS based Piezoresistive sensor. 2010 5th International Conference on Industrial and Information Systems, ICIIS 2010,; Jul 29 - Aug 01, 2010,; India2010.
48. Philips Semiconductors. THE I 2C-BUS SPECIFICATION. 2000. 49. Philips Semiconductors. Application Note AN10216-01 I2C MANUAL. 2003. 50. Ramírez J, Villar Y. Fundamentos de la medición de presión, nivel y caudal en los
sistemas hidráulicos. 2011. p. 107. 51. SDI-12 Support Group. SDI-12. 2012; Available from: http://www.sdi-12.org. 52. SDI-12 Support Group. SDI-12 A Serial-Digital Interface Standard for Microprocessor-
Based Sensors. 2013. 53. Sifuentes E, Casas O, Reverter F, Pallàs-Areny R. Direct interface circuit to linearise
resistive sensor bridges. Sensors and Actuators A: Physical. 2008;147(1):210-5. 54. Texas Instrument. Application Report SLAA148 Interfacing the 3-V MSP430 to 5-V
Circuits. 2002. 55. Texas Instrument. MSP430x1xx Family User's Guide. 2003. 56. Texas Instrument. Application Report SLAA221 CRC Implementation With MSP430.
2004. 57. Texas Instrument. Application Report SLAA207. Choosing An Ultralow-Power MCU
2004. 58. Texas Instrument. MSP430x15x, MSP430x16x, MSP430x161x Mixed Signal
Microcontoller. 2006. 59. Texas Instrument. MSP430x22x2, MSP430x22x4 Mixed Signal Microcontroller. 2007. 60. Texas Instrument. MSP430F663x Mixed Signal Microcontroller. 2012. p. 116. 61. Texas Instrument. MSP430x2xx Family User's Guide. 2012. 62. Texas Instrument. MSP430x5xx and MSP430x6xx Family User's Guide. 2013. p. 1148.
B i b l i o g r á f í a P á g i n a | 88
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
63. Thanachayanont A, Sangtong S. Low-Voltage Current-Sensing CMOS Interface Circuit for Piezo-Resistive Pressure Sensor. ETRI Journal. 2007;29(1):70-8.
64. Vega. Radar – VEGAPULS. 2011. 65. ZMDI. ZSC31050. Advanced Differential Sensor Signal Conditioner. 2010. p. 28. 66. ZMDI. ZSC31050. Advanced Differential Sensor Signal Conditioner Functional
Description. 2010. p. 50.
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Anexos
Anexo 1. Programa desarrollado para el funcionamiento del
dispositivo en bibliotecas .c y .h.
I2C.h
#include "intrinsics.h"
#include "msp430f6638.h"
void INIT_I2C(void);
void TX_BYTE(unsigned char buffer_TX);
void RX_BYTE(void);
extern unsigned char TXByteCtr;
extern unsigned char TXData;
extern unsigned char *PRxData;
extern unsigned char RXByteCtr;
extern volatile unsigned char RxBuffer[3];
I2C.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "I2C.h"
void INIT_I2C(void)
Port_Mapping();
P2SEL |= 0x36; // Asignar I2C a los pines del puerto
UCB0CTL1 |= UCSWRST; // Reset activado
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master sincrónico
UCB0CTL1 = UCSSEL_2 + UCSWRST; // SMCLK
UCB0BR0 = 10; // Prescaler a 10 fSCL ~400kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x20;
UCB0CTL1 &= ~UCSWRST;
UCB0IE |= UCTXIE; // Habilitar la interrupción del TX
UCB0IE |= UCRXIE; // Habilitar la interrupción del RX
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
void TX_BYTE(unsigned char buffer_TX)
TXByteCtr = 1;
TXData = buffer_TX;
while (1)
while (UCB0CTL1 & UCTXSTP); // Asegurar la condición de STOP
UCB0CTL1 |= UCTR + UCTXSTT; // Condición de START y habilitación
del modo TX
void RX_BYTE(void)
UCB0CTL1 &= ~UCTR; // Habilitación del modo RX
while (1)
PRxData = (unsigned char *)RxBuffer; // Inicio de RX buffer
RXByteCtr = 3; // Cargar contador de bytes
while (UCB0CTL1 & UCTXSTP); // Asegurar la condición de STOP
UCB0CTL1 |= UCTXSTT; // Condición de START
__no_operation();
#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
switch(__even_in_range(UCB0IV,12))
case 0: break; // Vector 0: No interrupts
case 2: break; // Vector 2: ALIFG
case 4: break; // Vector 4: NACKIFG
case 6: break; // Vector 6: STTIFG
case 8: break; // Vector 8: STPIFG
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
case 10: // Vector 10: RXIFG
RXByteCtr--; // Decrementar contador de bytes
if (RXByteCtr)
*PRxData++ = UCB0RXBUF; // Mover data a la dirección PRxData
if (RXByteCtr == 1) // Solo un byte?
UCB0CTL1 |= UCTXSTP; // Generar condición de STOP
else
*PRxData = UCB0RXBUF; // Mover final data a PRxData
break;
case 12: // Vector 12: TXIFG
if (TXByteCtr) // Check TX byte counter
UCB0TXBUF = TXData; // Load TX buffer
TXByteCtr--; // Decrement TX byte counter
else
UCB0CTL1 |= UCTXSTP; // I2C stop condition
UCB0IFG &= ~UCTXIFG; // Clear USCI_B0 TX int flag
break;
default: break;
DAC.h
#include "intrinsics.h"
#include "msp430f6638.h"
void INIT_DAC12(void);
void DAC_CONV(unsigned char Pressure_Data);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
extern unsigned char DAC12_DAT;
DAC.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "DAC.h"
void INIT_DAC12(void)
P6SEL |= 0x20; //Asignar la salida del DCO al pin P6.6
DAC12_0CTL0 = DAC12SREF_1 + DAC12LSEL_1 + DAC12CALON +
DAC12IR + DAC12AMP_5 + DAC12IE; //Config
void DAC_CONV(unsigned char Pressure_Data)
DAC12_DAT = Pressure_Data; //Paso el dato
DAC12_0CTL0 |= DAC12ENC; //Activo la conversion
P1OUT = 0x08; // Habilito el amplificador
#pragma vector = DAC12_VECTOR
__interrupt void DAC12_ISR(void)
switch(__even_in_range(DAC12_IV,14))
case 0: break;
case 2:
DAC12_0CTL0 &= ~DAC12ENC;
P1OUT = 0;
break;
case 4: break;
case 6: break;
case 8: break;
case 10: break;
case 12: break;
case 14: break;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
default: break;
UART.h
#include "intrinsics.h"
#include "msp430f6638.h"
void INIT_UART(void);
unsigned long ORG_COM(unsigned long total1, unsigned long total2,
unsigned long total3, unsigned long total4);
extern unsigned long RXUART;
extern unsigned char TXUART;
unsigned long total;
unsigned long command;
unsigned long command1;
unsigned long command2;
unsigned long command3;
char hasReceived; // Lets the program know when a byte is received
UART.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "UART.h"
#include "SDI-12.h"
void INIT_UART(void)
Port_Mapping();
UCA0CTL1 |= UCSWRST; // Reset activado
UCA0CTL0 = UCPEN + UCPAR + UC7BIT; // Activar Paridad par,
caracteres de 7 bits de datos
UCA0CTL1 = UCSSEL_2; // CLK = SMCLK
UCA0BR0 = 0x41; // 1MHz/1200=833.33
UCA0BR1 = 0x03;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3,
UCBRFx=0
UCA0CTL1 &= ~UCSWRST;
UCA0IE |= UCTXIE; // Habilitar la interrupción del TX
UCA0IE |= UCRXIE; // Habilitar la interrupción del RX
hasReceived = 0;
Unit_out = 0;
__no_operation();
unsigned long ORG_COM(unsigned long total1, unsigned long total2,
unsigned long total3, unsigned long total4)
total = total1;
total = total + (total2 << 8);
total = total + (total3 << 16);
total = total + (total4 << 24);
return total;
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
switch(__even_in_range(UCA0IV,4))
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCRXIFG)); // RX buffer listo?
RXUART = UCA0RXBUF;
hasReceived++;
if (hasReceived==1)
command = RXUART;
__delay_cycles (50);
else if(hasReceived==2)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
command1 = RXUART;
if (command1 == 0x21)
total = ORG_COM(command, command1, command2, command3);
REC_COM(total);
total = 0;
command = 0;
command1 = 0;
command2 = 0;
command3 = 0;
__delay_cycles (50);
else if(hasReceived==3)
command2 = RXUART;
if (command2 == 0x21)
total = ORG_COM(command, command1, command2, command3);
REC_COM(total);
total = 0;
command = 0;
command1 = 0;
command2 = 0;
command3 = 0;
__delay_cycles (50);
else if (hasReceived==4)
command3 = RXUART;
__delay_cycles (50);
total = ORG_COM(command, command1, command2, command3);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
REC_COM(total);
total = 0;
command = 0;
command1 = 0;
command2 = 0;
command3 = 0;
case 4: // Vector 4 - TXIFG
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
UCA0TXBUF = TXUART;
break;
default: break;
SDI-12.h
#include "intrinsics.h"
#include "msp430f6638.h"
#include "stdlib.h"
#define CRC_MSG_MAXSIZE 20
#define CRC_TEST_SEQ "123456789"
void REC_COM(unsigned long command_RX);
void Analog_out(void);
void Analog_off(void);
void RS485_out(void);
void RS232_out(void);
void Ack_active(void);
void Send_ID(void);
void Addr_query(void);
void Start_med(void);
void Med_CRC(void);
void Send_Data(void);
void Start_ver(void);
void Start_Cmed(void);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
void Start_Cmed_CRC(void);
void Cont_med(void);
void Cont_med_CRC(void);
void default_aswer(void);
double Measure_Start(void);
void Data_Out(void);
void Send(void);
void Send_2(void);
void Send_3(void);
unsigned short crc16MakeBitwise2(unsigned short crc, unsigned short poly,
unsigned char *pmsg, unsigned int
msg_size);
void CRC_out(void);
void DAC_CONV(unsigned char Pressure_Data);
double Pressure;
long Pressure2;
double Real_Pressure;
double Analog_pres;
int Pres_analog;
extern short Unit_out;
unsigned int CRC_ask;
unsigned int Flag_analog;
unsigned int buffer_TX;
unsigned int Sensor1_Status;
unsigned int Sensor2_Status;
long Sensor1;
long Sensor2;
long z;
unsigned int First_char;
unsigned int Sec_char;
unsigned int Third_char;
unsigned short crc16;
unsigned char msg[CRC_MSG_MAXSIZE] = CRC_TEST_SEQ "5555";
void CRC_out(void);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
unsigned int length;
SDI-12.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "stdlib.h"
#include "CRC.h"
#include "I2C.h"
#include "UART.h"
#include "SDI-12.h"
void REC_COM(unsigned long command_RX)
if(command_RX == 0x30584C21) // aXL!
Analog_out();
else if (command_RX == 0x30584F21) // aXO!
Analog_off();
else if (command_RX == 0x30583221) // aX2!
RS232_out();
else if (command_RX == 0x30583421) // aX4!
RS485_out();
else if (command_RX == 0x30584221) // aXB!
Unit_out = 0;
else if (command_RX == 0x30586D42) // aXmB
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Unit_out = 1;
else if (command_RX == 0x30584321) // aXC!
Unit_out = 2;
else if (command_RX == 0x30586D43) // aXmC
Unit_out = 3;
else if (command_RX == 0x30586B50) // aXkP
Unit_out = 4;
else if (command_RX == 0x30584D50) // aXMP
Unit_out = 5;
else if (command_RX == 0x30584B21) // aXK!
Unit_out = 6;
else if (command_RX == 0x00003021) // a!
Ack_active();
else if (command_RX == 0x00304921) // aI!
Send_ID();
else if (command_RX == 0x00003F21) // ?!
Addr_query();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
else if (command_RX == 0x00304D21) // aM!
Start_med();
else if (command_RX == 0x304D4321) // aMC!
Med_CRC();
else if (command_RX == 0x30443021) // aD0!
Send_Data();
else if (command_RX == 0x00305621) // aV!
CRC_ask = 1;
Send_Data();
else if (command_RX == 0x00304321) // aC!
Start_med();
else if (command_RX == 0x30434321) // aCC!
Med_CRC();
else if (command_RX == 0x30523021) // aR0!
Cont_med();
else if (command_RX == 0x30524330) // aRC0
Cont_med_CRC();
else
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
default_aswer();
void Analog_out(void)
P1OUT |= BIT3;
Flag_analog = 1;
void Analog_off(void)
P1OUT &= ~BIT3;
Flag_analog = 0;
void RS485_out(void)
P4OUT |= BIT0;
void RS232_out(void)
P4OUT &= ~BIT0;
void Ack_active(void)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
void Send_ID(void)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '1'; // 1
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '3'; // 3
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
void Addr_query(void)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
void Start_med(void)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '1'; // 1
__no_operation();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '2'; // 2
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '0'; // 0
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '1'; // 1 muestra
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
Pressure = Measure_Start();
void Med_CRC(void)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '1'; // 1
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '2'; // 2
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '0'; // 0
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = '1'; // 1 muestra
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
Pressure = Measure_Start();
CRC_ask = 1;
void Send_Data(void)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
Data_Out();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
void Cont_med(void)
Pressure = Measure_Start();
Send_Data();
void Cont_med_CRC(void)
Pressure = Measure_Start();
CRC_ask = 1;
Send_Data();
void default_aswer(void)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x30; // address
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0D; // <CR>
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x0A; // <LF>
void CRC_out(void)
First_char = 0x40|(crc16 * 4096);
Sec_char = 0x40|((crc16 * 64)&0x3F);
Third_char = 0x40|(crc16&0x3F);
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = First_char;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Sec_char;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART = Third_char;
__no_operation();
double Measure_Start(void)
UCB0I2CSA = 0x20;
buffer_TX = 0xAC; // Solicitar data al sensor
TX_BYTE(buffer_TX); // Transmitir comando
while (!(P1IFG&0x00)); // EOC
RX_BYTE(); // Recibir data
PRxData = (unsigned char *)RxBuffer; // Inicio de RX buffer
Sensor1_Status = *PRxData; // Salvar valor de Status del sensor
Sensor1 = *PRxData++; // Salvar MSB de presión
Sensor1 = Sensor1 * 256;
Sensor1 = Sensor1 + *PRxData++; // Salvar LSB de presión
UCB0I2CSA = 0x22; // Apuntar al sensor barométrico
buffer_TX = 0xAC; // Solicitar data al sensor
TX_BYTE(buffer_TX); // Transmitir comando
while (!(P1IFG&0x01)); // EOC
RX_BYTE(); // Recibir data
PRxData = (unsigned char *)RxBuffer; // Inicio de RX buffer
Sensor2_Status = *PRxData; // Salvar valor de Status del sensor
Sensor2 = *PRxData++; // Salvar MSB de presión
Sensor2 = Sensor2 * 256;
Sensor2 = Sensor2 + *PRxData++; // Salvar LSB de presión
Real_Pressure = 3 * Sensor1;
Real_Pressure = Real_Pressure - Sensor2;
Real_Pressure = Real_Pressure - 16384;
Real_Pressure = Real_Pressure / 32768;
return Pressure;
void Data_Out(void)
switch(Unit_out)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
case 0:
if (Flag_analog)
Analog_pres = Pressure * 1000;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 1000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 1000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
break;
case 1:
Pressure = Pressure * 1000;
if (Flag_analog)
Pres_analog = (int) Pressure;
DAC_CONV(Pres_analog);
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 1000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 1000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
break;
case 2:
Pressure = Pressure * 10.2;
if (Flag_analog)
Analog_pres = Pressure * 100;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 100000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 100000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
break;
case 3:
Pressure = Pressure * 10200;
if (Flag_analog)
Analog_pres = Pressure / 100;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 100;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 100;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
break;
case 4:
Pressure = Pressure * 100;
if (Flag_analog)
Analog_pres = Pressure * 10;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 10000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 10000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
break;
case 5:
Pressure = Pressure / 10;
if (Flag_analog)
Analog_pres = Pressure * 10000;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 1000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 10000000;
Pressure2 = (long) Pressure;
z = Pressure2 / 10000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
break;
case 6:
Pressure = Pressure * 102;
if (Flag_analog)
Analog_pres = Pressure * 10;
Pres_analog = (int) Analog_pres;
DAC_CONV(Pres_analog);
if (Pressure < 0)
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2D;
__no_operation();
Pressure = Pressure * (-1);
Pressure = Pressure * 10000;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
else
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x2B;
__no_operation();
Pressure = Pressure * 10000;
Pressure2 = (long) Pressure;
z = Pressure2 / 1000000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100000);
Pressure2 = (long) Pressure;
z = Pressure2 / 10000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
TXUART = z + 0x30;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = 0x2E;
__no_operation();
Pressure = Pressure - (z * 10000);
Pressure2 = (long) Pressure;
z = Pressure2 / 1000;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 1000);
Pressure2 = (long) Pressure;
z = Pressure2 / 100;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 100);
Pressure2 = (long) Pressure;
z = Pressure2 / 10;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = z + 0x30;
__no_operation();
Pressure = Pressure - (z * 10);
Pressure2 = (long) Pressure;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART = Pressure2 + 0x30;
__no_operation();
break;
default: break;
if (CRC_ask)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
length = sizeof(CRC_TEST_SEQ)-1;
crc16 = crc16MakeBitwise2(CRC16_INIT_REM, CRC16_POLY, msg,
length);
CRC_out();
CRC_ask = 0;
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x0D;
__no_operation();
while (!(UCA0IFG&UCTXIFG)); // TX buffer listo?
TXUART=0x0A;
__no_operation();
CRC.h
#include "intrinsics.h"
#include "msp430f6638.h"
/**********************************************************************************
FUNCTION: CRC definitions
AUTHOR: Emil Lenchak
DATE: March, 2004
COPYRIGHT: Texas Instruments, 2004
TOOLS: Built with IAR Kickstart V2/MS Visual C++ 6.0
***********************************************************************************/
#ifndef _MSP430_CRC
#define _MSP430_CRC
/************************
CONSTANTS
************************/
#ifdef __ICC430__
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
#define TBL_MEM const
#else
#define TBL_MEM
#endif
//#define CRC_DAT_PATH ".//..//..//dat//"
//#define CRC_DAT_PATH "C:\\Program Files\\IAR Systems\\Embedded
Workbench 3.2\\myProjects\\CRC\\dat\\"
#define CRC_MSG_MAXSIZE 20
#define CRC_TABLE_SIZE 256
#define CRC_TEST_SEQ "123456789"
#define CRC16_CHECK 0xFEE8
#define CRC16R_CHECK 0xBB3D
#define CRC32_CHECK 0xFC891918
#define CRC32R_CHECK 0xCBF43926
// CRC-16: x16 + x15 + x2 + 1
#define CRC16_POLY 0x8005
#define CRC16_INIT_REM 0x0
#define CRC16_FINAL_XOR 0x0
#define CRC16R_POLY 0xA001
#define CRC16R_INIT_REM 0x0
#define CRC16R_FINAL_XOR 0x0
// CRC-CCITT: x16 + x12 + x5 + 1
//#define CRC16_POLY 0x1021
//#define CRC16_POLY_REF
//#define CRC16_INIT_REM 0x0
//#define CRC16_FINAL_XOR 0x0
// CRC-32: x32 + ... + 1
#define CRC32_POLY 0x04C11DB7
#define CRC32_INIT_REM 0xFFFFFFFF
#define CRC32_FINAL_XOR 0xFFFFFFFF
#define CRC32R_POLY 0xEDB88320
#define CRC32R_INIT_REM 0xFFFFFFFF
#define CRC32R_FINAL_XOR 0xFFFFFFFF
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
#endif // _MSP430_CRC
unsigned short crc16MakeBitwise(unsigned short, unsigned short, unsigned
char*, unsigned int);
CRC.c
#include "intrinsics.h"
#include "msp430f6638.h"
#include "CRC.h"
/**********************************************************************************
FUNCTIONS: 16/32-bit CRC Algorithms, bitwsie and table methods
ARGUMENTS: "bitwise algorithm function signature"
return: CRC
arg1: CRC init value
arg2: CRC generator polynomial
arg3: pointer to the message
arg4: size of message in bytes
"table-based algorithm function signature"
return: CRC
arg1: CRC init value
arg2: pointer to CRC table (specific to generator
polynomial)
arg3: pointer to the message
arg4: size of message in bytes
***********************************************************************************/
/**************************************
CRC MEMBERS (FUNCTIONS)
**************************************/
// this is an equivalent C implementation to the assembly implementation
unsigned short crc16MakeBitwise(unsigned short crc, unsigned short poly,
unsigned char *pmsg, unsigned int
msg_size)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
unsigned int i, j, carry;
unsigned char msg;
unsigned short temp;
temp = *pmsg++ << 8;
temp |= *pmsg++;
crc ^= temp;
for(i = 0 ; i < msg_size-2 ; i ++)
msg = *pmsg++;
for(j = 0 ; j < 8 ; j++)
carry = crc & 0x8000;
crc = (crc << 1) | (msg >> 7);
if(carry) crc ^= poly;
msg <<= 1;
for(i = 0 ; i < 2 ; i ++)
for(j = 0 ; j < 8 ; j++)
carry = crc & 0x8000;
crc <<= 1;
if(carry) crc ^= poly;
return(crc ^ CRC16_FINAL_XOR);
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
// this is a C-optimized implementation
unsigned short crc16MakeBitwise2(unsigned short crc, unsigned short poly,
unsigned char *pmsg, unsigned int
msg_size)
unsigned int i, j;
unsigned short msg;
for(i = 0 ; i < msg_size ; i ++)
msg = (*pmsg++ << 8);
for(j = 0 ; j < 8 ; j++)
if((msg ^ crc) >> 15) crc = (crc << 1) ^ poly;
else crc <<= 1;
msg <<= 1;
return(crc ^ CRC16_FINAL_XOR);
// this is an equivalent C implementation to the assembly implementation
unsigned long crc32MakeBitwise(unsigned long crc, unsigned long poly,
unsigned char *pmsg, unsigned int
msg_size)
unsigned int i, j, carry;
unsigned char msg;
unsigned long temp;
temp = (unsigned long)(*pmsg++) << 24;
temp |= (unsigned long)(*pmsg++) << 16;
temp |= (unsigned long)(*pmsg++) << 8;
temp |= (unsigned long)(*pmsg++);
crc ^= temp;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
for(i = 0 ; i < msg_size-4 ; i ++)
msg = *pmsg++;
for(j = 0 ; j < 8 ; j++)
carry = crc >> 31;
crc = (crc << 1) | (msg >> 7);
if(carry) crc ^= poly;
msg <<= 1;
for(i = 0 ; i < 4 ; i ++)
for(j = 0 ; j < 8 ; j++)
carry = crc >> 31;
crc <<= 1;
if(carry) crc ^= poly;
return(crc ^ CRC32_FINAL_XOR);
// this is a C-optimized implementation
unsigned long crc32MakeBitwise2(unsigned long crc, unsigned long poly,
unsigned char *pmsg,
unsigned int msg_size)
unsigned int i, j;
unsigned long msg;
for(i = 0 ; i < msg_size ; i++)
msg = *pmsg++;
msg <<= 24;
for(j = 0 ; j < 8 ; j++)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
if((msg ^ crc) >> 31) crc = (crc << 1) ^ poly;
else crc <<= 1;
msg <<= 1;
return(crc ^ CRC32_FINAL_XOR);
unsigned short crc16MakeTableMethod(unsigned short crc, TBL_MEM
unsigned short *table,
unsigned char
*pbuffer, unsigned int length)
while(length--)
crc = table[((crc >> 8) ^ *pbuffer++)] ^ (crc << 8); // normal
return(crc ^ CRC16_FINAL_XOR);
unsigned short crc16rMakeTableMethod(unsigned short crc, TBL_MEM
unsigned short *table,
unsigned char
*pbuffer, unsigned int length)
while(length--)
crc = table[(crc & 0xFF) ^ *pbuffer++] ^ (crc >> 8); // reflected
return(crc ^ CRC16R_FINAL_XOR);
unsigned long crc32MakeTableMethod(unsigned long crc, TBL_MEM
unsigned long *table,
unsigned char *pbuffer,
unsigned int length)
while(length--)
crc = table[((crc >> 24) ^ *pbuffer++)] ^ (crc << 8); // normal
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
return(crc ^ CRC32_FINAL_XOR);
unsigned long crc32rMakeTableMethod(unsigned long crc, TBL_MEM
unsigned long *table,
unsigned char *pbuffer,
unsigned int length)
while(length--)
crc = table[(crc ^ *pbuffer++) & 0xFFL] ^ (crc >> 8); // reflected
return(crc ^ CRC32R_FINAL_XOR);
/************************************
CRC UTILITIES
************************************/
void crc16BuildTable(unsigned short *ptable, unsigned short poly)
unsigned int i, j;
for(i = 0; i <= 255; i++)
ptable[i] = i << 8;
for(j = 0; j < 8; j++)
ptable[i] = (ptable[i] << 1) ^ (ptable[i] & 0x8000 ? poly : 0);
void crc32BuildTable(unsigned long *ptable, unsigned long poly)
unsigned int i, j;
for(i = 0; i <= 255; i++)
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
ptable[i] = (long)i << 24;
for(j = 0; j < 8; j++)
ptable[i] = (ptable[i] << 1) ^ (ptable[i] & 0x80000000 ? poly : 0);
unsigned long bitReflect(unsigned long data, unsigned int width)
unsigned long result = 0;
unsigned int i;
for (i = 1; i < (width + 1); i++)
if(data & 1) result |= 0x1L << (width - i);
data >>= 1;
return result;
A n e x o s
Alimed Celecia Ramos | “Diseño de una sonda de nivel con compensación de la presión atmosférica”
Anexo 2. Análisis desde la defensa
El proyecto objeto de estudio es el rediseño de una sonda de nivel con
compensación de la presión atmosférica. Para desarrollar este proyecto se
utilizan los conocimientos adquiridos en las asignaturas de Microcontroladores,
Electrónica Analógica, Electrónica Digital y Procesamiento Digital de Señales,
pueden incluirse también conocimientos básicos sobre otras materias
relacionadas con el tema que no se estudien en la carrera.
Este dispositivo puede emplearse en cuencas hidraúlicas para determinar el
nivel que estas poseen. Esta variable que se mide es importante ya que es
necesario conocer el nivel de los embalses, presas, ríos, pozos, entre otras en
la vida diaria y durante la ocurrencia de desastres naturales. Con esta
información puede decidirse la necesidad de evacuación, evitarse las pérdidas
económicas, determinar estrategias económicas y de racionamiento en la
distribución de los recursos hidráulicos.
Debido a la amenaza constante del gobierno de los Estados Unidos de
América y su política para nuestro país son adquiridos a muy altos precios las
sondas de nivel en el mercado internacional. Además, se desconocen las
bases de su funcionamiento, lo que imposibilita su reparación en caso de
presentar desperfectos.
El inconveniente principal de este dispositivo es la presencia de un cble
ventilado que permite la acumulación de humedad por encontrarse en contacto
directo con el aire. Debido a esta situación se decide utilizar un sensor de
presión para medir la presión atmosférica, la cual se necesita para realizar el
proceso de calibración.
Entre las acciones enemigas puedan incidir en el funcionamiento del sistema
o en la realización del diseño se puede destacar la prohibición a los
proveedores de componentes necesarios de proveer información o su venta.
En cuanto a acciones directas puede decirse que el enemigo puede atacar
físicamente alguna parte del dispositivo para afectar su funcionamiento.
Para el ejército precisamente puede utilizarse en la contabilización de las
existencias de cualquier líquido en tanques o pozos. Desde el punto de vista
organizativo, este dispositivo puede emplearse variedad de regiones con
diferentes condiciones climatológicas ya que no posee impedimentos
fundamentales para su empleo.