Use las BOB de Arduino para evaluar rápidamente sensores y periféricos

Por Clive "Max" Maxfield

Colaboración de Editores de DigiKey de América del Norte

El surgimiento de la Internet de las cosas (IoT, Internet of Things) ha inspirado a muchas nuevas empresas innovadoras que buscan conectar el próximo gran éxito. Sin embargo, muchas de estas nuevas empresas tienen equipos de diseño más pequeños y más delgados, pero aún enfrentan limitaciones de tiempo cada vez más estrictas para el mercado. Como resultado, los diseñadores individuales se están extendiendo a través de múltiples dominios y tareas de ingeniería, que incluyen redes analógicas, digitales, de radiofrecuencia (RF) y redes inalámbricas/cableadas. Naturalmente, están constantemente buscando formas de acelerar y reducir el costo de evaluar circuitos integrados, sensores y periféricos.

Una opción es utilizar los kits de evaluación y desarrollo proporcionados por los proveedores de circuitos integrados para soportar sus soluciones. Suponiendo que haya un buen grado de soporte, este es un enfoque perfectamente bueno. Sin embargo, otra opción es mirar el Entorno Arduino. Esto ha evolucionado desde un patio de juegos para aficionados hasta un entorno de diseño y soporte completo.

Este artículo mostrará cómo los diseñadores pueden usar Arduino para comenzar a evaluar los circuitos integrados, los periféricos y los sensores al inicio del ciclo de diseño utilizando hardware de código abierto en forma de sensores y placas breakout (BOB, breakout boards), junto con el software de código abierto en forma de bibliotecas y programas de ejemplo. Como ejemplo, utilizará relojes en tiempo real (RTC, real-time clocks) de Maxim Integrated y BOB de Adafruit Industries

El surgimiento de la IoT

Uno de los primeros ejemplos reales de la IoT data de principios de la década de 1980 cuando se conectó una máquina de Coca-Cola en la Universidad Carnegie Mellon para que los programadores pudieran usar Internet para verificar si había bebidas disponibles y si estaban frías, antes de ir a la máquina. La IoT como concepto no se nombró oficialmente hasta 1999.

El momento exacto en que realmente surgió la IoT está sujeto a debate. Quizás la mejor definición del nacimiento de la IoT tal como la conocemos es: "Ese momento en el que más 'cosas' u 'objetos' se conectaron a Internet que personas". Sobre esta base, se estima que la IoT nació en algún momento entre 2008 y 2009, con una proporción de cosas/personas que aumentó de 0.08 en 2003 a 1.84 en 2010.

El ascenso del Arduino

La gestación de la IoT coincidió con el surgimiento del movimiento de creadores a principios de la década de 2000. El primer despliegue mundial del Arduino tuvo lugar en 2005, que fue el mismo año en que se lanzó la revista Make , y solo un año antes de que se llevara a cabo el primer Maker Faire .

Desde su inicio, el Arduino ha desarrollado sofisticados ecosistemas de software y hardware de código abierto. Lo que se requería era una forma de llevar los ecosistemas bien soportados de Arduino al ámbito de los diseñadores profesionales para simplificar sus trabajos y acelerar el tiempo de comercialización.

De hecho, la solución surgió orgánicamente. El ecosistema enorme que creció alrededor del Arduino generó un efecto secundario inesperado: ingenieros profesionales usan el Arduino para evaluar sensores y periféricos antes de implementarlos en sus propios diseños. Ahora hay muchos ejemplos de esto, como un RTC.

Ejemplo de evaluación periférica usando un RTC

Casi todos los microcontroladores modernos de 32 bits vienen con un RTC integrado, al igual que muchos microcontroladores de 16 bits e incluso de 8 bits. Aunque esto reduce el espacio de la junta, reduce la lista de materiales (BOM, bill of materials) y disminuye el costo del producto final, el uso de un RTC interno tiene desventajas.

Una desventaja es que el microcontrolador tiene que habilitar y deshabilitar su RTC interno bajo control de software, por lo que si algo ocurre, como una falla de energía, y el microcontrolador se bloquea o su código se confunde, el RTC podría desactivarse inadvertidamente. En comparación, un RTC externo se considera más robusto, ya que tiene un riel de alimentación y un cristal separados, y es menos probable que se apague accidentalmente por el código que se ejecuta en el microcontrolador. Además, el RTC externo generalmente se implementa utilizando un nodo de proceso de fabricación de chips más grande que el microcontrolador, y su mayor huella de silicio lo hace menos susceptible a cambios de bits, es decir, alteraciones de eventos únicos (SEU, single event upsets) causadas por la radiación, como los rayos cósmicos.

Ejemplo de circuitos integrados de RTC: Maxim Integrated DS1307 y DS3231

Dos circuitos integrados RTC muy populares son los DS1307 y DS3231 de Maxim Integrated. Ambos dispositivos realizan un seguimiento de la información de segundos, minutos, horas, día, fecha, mes y año; se ajustan automáticamente por meses con menos de 31 días; tienen en cuenta los años bisiestos; y soportan modos de 24 o 12 horas. Además, ambos dispositivos se comunican con el microcontrolador anfitrión por medio de un bus serie I2C, e incluyen un circuito de detección que detecta fallas de energía y cambia automáticamente al suministro de respaldo (generalmente, una batería), en cuyo caso las operaciones de cronometraje pueden mantenerse (Figura 1).

Diagrama de Maxim DS1307 RTC externoFigura 1: El DS1307 es un buen ejemplo de un RTC externo. Estos tienen la ventaja de tener su propio cristal local y riel de energía, además de no estar sujetos a fallas en el código. Se comunica con el microcontrolador anfitrión a través de una interfaz I2C. (Fuente de la imagen: Maxim Integrated)

Por supuesto, es importante verificar las hojas de datos para determinar las diferencias entre estos dispositivos. Por ejemplo, el DS1307 requiere un suministro de 5 voltios junto con un cristal externo. En comparación, el DS3231 más preciso puede funcionar con un suministro de 2.3 a 5.5 voltios y viene equipado con un oscilador de cristal compensado por temperatura (TCXO, temperature-compensated crystal oscillator) y cristal.

A veces, las diferencias entre estos componentes no son obvias de inmediato. Por ejemplo, ambos dispositivos proporcionan una salida SQW (onda cuadrada) que, si se activa bajo el control del software, requiere una resistencia pull-up externa. Sin embargo, en el caso del DS1307, la salida SQW se puede programar para generar una señal de 1 Hertz (Hz), 4.096 kilohercios(kHz), 8.192 kHz o 32.768 kHz. En comparación, en el caso del DS3231, esta salida se puede programar para generar una señal de 1 Hz, 1,024 kHz, 4.096 kHz u 8.192 kHz.

En el caso del DS1307, la precisión del reloj depende de la precisión del cristal y la precisión de la coincidencia entre la carga capacitiva del circuito oscilador y la carga capacitiva para la cual se recortó el cristal. En comparación, el DS3231 con compensación de temperatura tiene una cifra de precisión más específica de ± 2 minutos por año de -40 °C a + 85 °C (Figura 2).

Diagrama del oscilador de cristal con compensación de temperatura Maxim DS3231Figura 2: El DS3231 es un oscilador de cristal compensado por temperatura con una precisión de ± 2 minutos por año en un rango de temperatura de -40 °C a + 85 °C. (Fuente de la imagen: Maxim Integrated)

Entonces, suponiendo que no haya "motivos de ruptura" entre estos dos dispositivos en cuanto a la hoja de datos, ¿cómo harían los diseñadores para evaluarlos en el mundo real? Una solución sería diseñar y construir placas breakout personalizadas (BOB) y también desarrollar el código para impulsarlos desde cero. Una solución más rápida y más rentable sería utilizar BOB y códigos listos para usar desarrollados como parte de los ecosistemas de hardware y software de Arduino.

Ejemplo de BOB de RTC: Adafruit DS1307 y ChronoDot

Dos BOB populares para los circuitos integrados DS1307 y DS3231 son la Adafruit 3296 DS1307 BOB Reloj en tiempo real (Figura 3) y la 255 ChronoDot BOB Reloj en tiempo real de ultraprecisión V2.1 (Figura 4).

Imagen de Adafruit DS1307 BOB Reloj en tiempo realFigura 3: Adafruit DS1307 BOB Reloj en tiempo real. (Fuente de la imagen: Adafruit Industries)

Imagen de ChronoDot BOB Reloj en tiempo real de ultraprecisión v2.1Figura 4: ChronoDot BOB Reloj en tiempo real de ultraprecisión v2.1. (Fuente de la imagen: Adafruit Industries)

Cuando se combina con una placa de desarrollo de microcontrolador adecuada, como un Arduino Uno R3, por ejemplo, junto con bibliotecas de código abierto y código de ejemplo que se puede descargar de Internet, los diseñadores profesionales de sistemas incorporados y dispositivos IoT están preparados para comenzar a arrancar a toda velocidad de inmediato.

Una vez que se completan las evaluaciones de los diseñadores, pueden tomar porciones apropiadas de los diseños de hardware de código abierto para las BOB e incorporar estas porciones directamente en sus propios diseños. Del mismo modo, pueden tomar las bibliotecas de código abierto y el código que desarrollaron en función de los ejemplos de código abierto y usarlos como parte de sus productos.

Consejos y trucos de hardware para desarrolladores de software

Como se señaló anteriormente, los RTC DS1307 y DS3231 se comunican con el microcontrolador anfitrión a través de un bus serie I2C. Una de las "trampas" que a menudo afecta a los desarrolladores de software es que ambas señales que forman este bus (llamadas SCL y SDA) requieren resistencias pull-up.

Ni la BOB DS1307 ni la DS3231 (ChronoDot) de Adafruit incluyen estas resistencias, aunque el ChronoDot sí incluye almohadillas con anotaciones R1 y R2 donde se pueden agregar.

La razón para no incluir resistencias pull-up es que un bus I2C puede tener múltiples dispositivos (circuitos integrados o BOB) conectados. El bus I2C utiliza una dirección de 7 bits, donde 27 = 128. Sin embargo, la dirección 0000000 es una dirección de llamada general que se usa para direccionar todos los dispositivos en el bus, lo que deja al bus teóricamente capaz de soportar 127 dispositivos discretos. En la práctica, el número real de dispositivos que pueden soportarse está dictado por la capacitancia del bus, incluida la capacitancia de las trazas y las cargas, que se limita a un total de 400 picofaradios (pF).

Hay una fórmula que los diseñadores de hardware usan para calcular el valor equivalente de múltiples resistencias conectadas en paralelo. Para los propósitos de estas discusiones, podemos considerar un ejemplo simple de la siguiente manera. Si dos dispositivos tienen resistencias pull-up del mismo valor, la resistencia resultante es la mitad del valor; si cuatro dispositivos tienen resistencias pull-up del mismo valor, la resistencia resultante es una cuarta parte del valor.

Si ya hay un dispositivo I2C con resistencias pull-up en el bus, entonces no es necesario tomar ninguna otra medida. Si no hay resistencias pull-up y el diseñador está 100 % seguro de que no agregarán una BOB con resistencias pull-up en el futuro, entonces es mejor usar un par de resistencias de 4.7 kiloohm (kΩ) para las pull-up. Sin embargo, si existe la posibilidad de que se agregue una BOB con resistencias pull-up en el futuro, entonces se debe agregar un par de resistencias de 10 kΩ en este punto porque funcionarán antes y después de que la otra BOB se agregue al bus .

Consejos y trucos de software para diseñadores de hardware

La "biblioteca de cables" es una biblioteca de comunicaciones que facilita las comunicaciones de clase de dos cables con dispositivos I2C. En el caso del Arduino, esto se entrega como parte del entorno de desarrollo integrado (IDE, integrated development environment), por lo que todo lo que un diseñador tiene que hacer es agregar la declaración #include <Wire.h> al comienzo del programa.

El verdadero truco es localizar una biblioteca adecuada de Reloj en tiempo real. Una buena es la RTClibde Adafruit, que se puede descargar desde Github. A continuación, agregue la declaración #include "RTClib.h" al comienzo del programa.

Más tarde, generalmente después de que se hayan definido los valores constantes, es hora de instanciar (crear una instancia de) el Reloj en tiempo real utilizando la declaración RTC_ DS1307 RTC; o RTC_DS3231 RTC; dependiendo de la BOB que se use.

Aun más tarde, al configurar todo en su programa (como parte de la función setup () en el caso de un boceto Arduino), los diseñadores deben agregar las declaraciones Wire.begin (); y RTC.begin (); para inicializar las comunicaciones I2C y el subsistema de Reloj en tiempo real.

Los ejemplos proporcionados en la página de Github antes mencionada pondrán rápidamente a un diseñador en funcionamiento con respecto al acceso y el ajuste de la fecha y hora actuales. Lo que es menos obvio es cómo acceder a la salida SQW (onda cuadrada). Por defecto, esta salida está inactiva para ahorrar energía. Una forma en que se puede usar este pin es activarlo y configurarlo para que funcione a 1 Hz, por ejemplo, y luego usar esta señal para activar una interrupción en el microcontrolador anfitrión.

Un desarrollador de software no tendrá dificultades para rastrear todo esto en el código de la biblioteca; sin embargo, leer este código puede ser más problemático para un ingeniero de diseño de hardware, por lo que un breve resumen es el siguiente:

En el caso del DS1307, todo lo que debe agregarse es una o más declaraciones de tipo Reloj en tiempo real.Ds1307SqwPinMode(<option>); donde los valores de las opciones admitidas son ON, OFF, SquareWave1HZ, SquareWave4kHz, SquareWave8kHzy SquareWave32kHz.

Del mismo modo, en el caso del DS3231, agregue una o más declaraciones de tipo Reloj en tiempo real.Ds3231SqwPinMode ( <option> ); donde los valores de las opciones admitidas son ON, OFF, DS3231_SquareWave1Hz, DS3231_SquareWave1kHz, DS3231_SquareWave4kHzy DS3231_SquareWave8kHz.

Conclusión

Con equipos más pequeños y limitaciones de tiempo de comercialización más estrictas, los diseñadores deben adoptar múltiples dominios y tareas de ingeniería, y buscar constantemente formas de acelerar y reducir el costo de la evaluación de circuitos integrados, sensores y periféricos. Como se muestra, una forma es utilizar el Arduino junto con el hardware de código abierto en forma de sensores y placas breakout (BOB), junto con el software de código abierto en forma de bibliotecas y programas de ejemplo.

 
DigiKey logo

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.

Información sobre el autor

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield received his BSc in Control Engineering in 1980 from Sheffield Hallam University, England and began his career as a designer of central processing units (CPUs) for mainframe computers. Over the years, Max has designed everything from silicon chips to circuit boards and from brainwave amplifiers to steampunk Prognostication Engines (don't ask). He has also been at the forefront of Electronic Design Automation (EDA) for more than 30 years.

Max is the author and/or co-author of a number of books, including Designus Maximus Unleashed (banned in Alabama), Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: Instant Access, and How Computers Do Math. Check out his “Max’s Cool Beans” blog.

Información sobre la editorial

Editores de DigiKey de América del Norte