Tutorial #9 Raspberry Pi Pico: añadiendo más E/S analógicas

Anuncio
RaspberryPi

Las señales analógicas son un poco más interesantes de leer en un microcontrolador, en especial con la Raspberry Pi Pico que tiene tres entradas analógicas. Si quisieras leer varios sensores o tener una salida que adopte varios valores entre 0V y 3.3V, hay que añadir otros componentes. En esta entrada revisaremos como puedes lograrlo.

Más entradas analógicas

Hay dos formas de leer más señales, una es usar un multiplexor analógico y otra, usar un módulo serial, ya sea I2C o SPI. Por ahora veamos primero cómo usar un multiplexor analógico.

Usando un multiplexor

Un multiplexor es un componente que permite convertir múltiples entradas en una sola salida. Es muy común encontrarlos en electrónica digital, tomando varios canales de información y convirtiéndolos en uno solo de alta velocidad. En nuestro caso, sin embargo, usaremos un multiplexor de tipo analógico, en específico un CD74HC4051E.

El CD74HC4051E es un multiplexor analógico de 8 entradas y una salida. Tiene 4 pines para configurar la entrada deseada y habilitar o deshabilitar el chip. Imagina a este componente como un selector mecánico, en el que debes girar una perilla para conectar tu Raspberry Pi Pico con la señal que deseas leer. En nuestro caso, lo hacemos de forma digital con las entradas A, B y C.

Anuncio
RaspberryPi
COM es la salida común y ChX es cada una de las ocho entradas por donde puedes leer la señal. Vía: Texas Instruments

Entonces, para conectar este chip a nuestra Raspberry Pi Pico, necesitamos conectar el pin COM a una de las entradas ADC de nuestra tarjeta y A,B y C a unas salidas digitales. El resto de las conexiones Chx irán a los sensores analógicos que deseamos leer, que pueden ser, por ejemplo, 8 potenciómetros. Con este script podremos configurar la selección de las entradas y el tiempo que debe leer cada una

from machine import Pin, ADC
from time import sleep

MUXA0 = Pin(20,Pin.OUT)
MUXA1 = Pin(21,Pin.OUT)
MUXA2 = Pin(22,Pin.OUT)

x = 0
tmr = machine.Timer()

def MuxUpdate(tim):
    global x
    MUXA0.value( x & (1<<0))
    MUXA1.value( x & (1<<1))
    MUXA2.value( x & (1<<2))
    x += 1
    x &= 0x7
    
tmr.init(period=1,callback=MuxUpdate)

while True:
    pass

Usando un módulo serial

Si quieres usar una forma más sofisticada y veloz para leer señales analógicas, puedes usar un módulo I2C o SPI. Estos módulos pueden venir en diferentes presentaciones y tener una variedad de resoluciones, como pueden ser de 8, 10, 12 o hasta 16 bits. Un módulo muy común y que tiene librerías en Arduino y Raspberry Pi es el ADS1115. Un ADC de 4 canales con resolución de 16 bits, que usa I2C para comunicarse con el microcontrolador.

Para usar el módulo sólo necesitas conectarlo al puerto I2C y configurar la librería dentro de Thonny o el IDE de Arduino. Adafruit ha desarrollado una documentación abundante, y ha creado una librería tanto para Python como para CircuitPython. Puedes encontrar más información en Raspberry Pi Analog to Digital Converters y Adafruit 4-Channel ADC Breakouts.

Más salidas analógicas

Formalmente, la Raspberry Pi Pico puede producir una señal PWM para obtener una señal analógica. Sin embargo, para producir una señal analógica real desde un microcontrolador se necesita un convertidor digital-analógico (DAC). Cómo antes, hay dos formas de obtener este tipo de señal.

Usando un arreglo R-2R

Para convertir varias señales digitales en una analógica es posible usar un conjunto especial de resistencias en las que, después de dividir los voltajes a través de ellas, se consiga en la salida una señal analógica continua. El diseño de este tipo de convertidor analógico-digital es muy simple, y sólo requiere de dos valores de resistencias y tantas etapas como se desee.

Este arreglo puedes encontrarlo en el proyecto pico-composite8, en el que se genera una señal de video analógica para una pantalla. Vía: obtruse GitHub

Usando un módulo serial

Existen diversos módulos DAC de tipo SPI o I2C para convertir datos seriales en una salida analógica. Un ejemplo de éstos módulos es el DAC MCP4725, una tarjeta fácil de conseguir que tiene una resolución de 12 bits y se comunica por I2C. Puedes encontrar una librería de Arduino en este repositorio de Github: MCP4725.

El chip MCP4725 solo necesita de 4 pines para comunicarse, a diferencia de un arreglo R-2R y pueden lograrse resoluciones más altas. Vía: sparkfun.com

Conclusiones:

Agregar entradas analógicas con un multiplexor es sencillo y no requiere invertir mucho en el integrado adicional. Del mismo modo, obtener una salida analógica con el arreglo de resistores es fácil de implementar y no requiere de mucha inversión. Si quieres implementar un proyecto más complejo, que requiera de más periféricos, los módulos seriales son una mejor opción, ala vez que son más confiables y fáciles de implementar.

Referencias:

PI Pico – Says Hello to an Old Analog Multiplexer

How would you add more ADCs to the Raspberry Pi Pico?

pico-composite8- Github

MCP4725 Digital to Analog Converter Hookup Guide

Vía: OkDo.com