Construya un codificador lineal absoluto de 8 bits personalizado con SPI

Por Don Johanneck

Los codificadores lineales resultan indispensables para detectar la posición o el movimiento a lo largo de una trayectoria recta y son muy eficaces en robótica, automatización o incluso en aplicaciones experimentales de CNC. Un codificador absoluto, en combinación con una banda codificada, proporciona datos sobre la posición física. No es necesario realizar operaciones de referencia ni sobrecargar un controlador con tareas adicionales, como el recuento de marcas de graduación o la indexación de impulsos, ya que cada posición cuenta con un valor de ubicación único.

En este tutorial se explica paso a paso cómo construir un codificador lineal absoluto personalizado de 8 bits utilizando una matriz de sensores reflectantes de infrarrojos, comparadores, un registro de desplazamiento para la recopilación de datos y la transmisión a través del protocolo SPI.

Principio de funcionamiento

  1. Detección de la luz reflejada
    Una columna móvil de sensores reflectantes escanea una tira de código lineal compuesta por 9 filas de segmentos blancos y negros. La señal de salida de cada sensor varía en función de la cantidad de luz reflejada que recibe de los segmentos de la banda de códigos.
  2. Acondicionamiento de señales mediante comparadores
    Dado que los sensores generan señales analógicas, los comparadores, que cuentan con umbrales de nivel de entrada e histéresis, procesan dichas señales analógicas para generar una señal digital clara, ALTA o BAJA, compatible con la lógica de 3.3 V o 5 V.
  3. Serialización mediante un registro de desplazamiento
    Las salidas digitales de ocho de los comparadores se envían directamente a las entradas paralelas de un registro de desplazamiento común. Cuando los sensores se alinean correctamente con los segmentos de la banda de código, un noveno sensor envía un pulso a la entrada de reloj, lo que hace que los bits paralelos pasen al registro de datos del registro de desplazamiento.
  4. Comunicación SPI
    Un microcontrolador (MCU) extrae los datos del registro de desplazamiento mediante el protocolo SPI cuando recibe una interrupción activada por el borde descendente del noveno sensor. Al recibir los impulsos de reloj del MCU, el registro envía 8 bits de datos, uno a uno, a través de una línea serie de vuelta al MCU.

Montaje del circuito y diseño del esquema en KiCad

Los componentes descritos en este tutorial ocupan poco espacio en el montaje superficial. Se utilizaron placas de expansión para adaptarlas a conectores DIP compatibles con placas de pruebas. También es posible sustituirlos por componentes de montaje superficial. El esquema completo, tal y como se muestra en la figura 1, se diseñó en KiCad, tras lo cual se llevó a cabo el diseño de la placa de circuito impreso (placa CI) y su fabricación a través del servicio DK Red PCB de DigiKey.

Imagen del esquema completo en KiCad (haga clic para ampliar)Figura 1: Esquema completo en KiCad. (Fuente de todas las imágenes: Don Johanneck)

Detección de luz reflejada con el VCNT2020

El primer paso consiste en configurar el emisor de infrarrojos del sensor reflectante VCNT2020. Al igual que la mayoría de los LED, necesita una resistencia limitadora de corriente. El nivel de luminosidad de funcionamiento del emisor es fundamental. Si el valor actual es demasiado bajo, es posible que no se produzca suficiente luz reflejada por un segmento de la tira de código blanca como para activar el transistor. Un exceso de corriente inunda la zona de luz y puede provocar que el sensor se active incluso cuando detecta un segmento negro.

La ficha técnica del VCNT2020 indica que 82 ohmios es el valor mínimo recomendado para la resistencia que permite obtener el máximo brillo. Tras realizar algunas pruebas y ajustar el brillo del emisor, una resistencia limitadora de corriente de 1.5 kohm permitió detectar de forma constante y a corta distancia el segmento blanco más pequeño de la tira de código (Figura 2).

Esquema del VCNT2020 de Vishay con resistencia de caída de tensiónFigura 2: VCNT2020 con resistencia de caída de tensión.

A continuación, es el momento de abordar la parte del sensor correspondiente al fototransistor de colector abierto. Cuando la luz reflejada es suficiente para activar el transistor, la corriente aumenta a medida que se refuerza la conexión entre el colector y la masa, lo que da lugar a una disminución proporcional de la tensión suministrada a través de la resistencia de pull-up. La intensidad de tierra a través del transistor aumenta hasta que este se activa por completo y la tensión de salida desciende hasta casi cero voltios. Se puede necesitar mucha luz para contrarrestar un fuerte efecto pull-up (baja resistencia o alta tensión de alimentación), lo que reduce la sensibilidad general.

Al aumentar el valor de la resistencia de elevación y agregar resistencia entre el emisor (pin 1) y masa, se reduce el rango de tensión de salida y se sitúa cerca del umbral óptimo de activación/desactivación del fototransistor, por lo que es muy sensible a los cambios en la luz reflejada. La figura 3 muestra que la resistencia entre el emisor y masa está compuesta por dos resistencias, R3 y R4, que forman un divisor de tensión cuya salida se encuentra entre ambas. R3 también limita la corriente de salida y R4 reduce el nivel de salida.

Esquema del VCNT2020 de Vishay con salida de divisor de tensiónFigura 3: VCNT2020 con salida de divisor de tensión.

En el caso del codificador utilizado en este circuito, se recurre a la experimentación para determinar la caída de tensión entre la salida y masa en los segmentos blancos y negros. Se baja lentamente un segmento negro situado por encima del sensor mientras se observa un voltímetro conectado a ambos extremos de R4. Este proceso se repite con un segmento blanco.

Voltajes de salida:

  • Negro: de 1.7 mV a 403 mV
  • Blanco: de 1.7 mV a 610 mV

Nota: Las pruebas de tensión de salida se realizaron con una fuente de alimentación de 5 V, una distancia de 1 mm entre el sensor y la regleta, y con iluminación interior.

Si se elige un valor aproximado de punto medio de 500 mV, la salida lógica queda definida. Las tensiones inferiores a 500 mV se consideran BAJAS (negro), mientras que cualquier valor igual o superior a 500 mV, se consideran ALTAS (blanco). El ajuste de R2, R3 y R4 permite obtener cualquier rango de valores de salida y nivel de sensibilidad que se desee, ya sea mediante cálculo o por ensayo y error.

Tenga en cuenta que una salida con una sensibilidad excesiva puede provocar resultados no deseados cuando hay un ruido de luz ambiental excesivo. Al introducir contaminación lumínica en el experimento mediante la linterna de un teléfono inteligente, se demostró que R2, R3 y R4 aumentaban la sensibilidad sin dar lugar a activaciones falsas. Tenga en cuenta que los valores del esquema completo pueden diferir de los del ejemplo debido a ajustes adicionales.

Acondicionamiento de señal

Hasta el momento, se ha establecido que cualquier salida superior a 500 mV se considera ALTA. En el ámbito de la lógica de 5 V que utilizan los registros de desplazamiento y los microcontroladores, 500 mV se considera lógicamente "BAJO". Una solución a este problema consistiría en añadir un transistor de unión bipolar (BJT) para amplificar la salida hasta 2.7 V o más (Figura 4). Este enfoque funciona bien en muchos casos, pero puede provocar "fluctuaciones" o que la tensión de salida oscile por encima y por debajo del umbral hasta que el fototransistor del sensor se active lo suficiente.

Esquema del VCNT2020 de Vishay con acondicionamiento mediante BJTFigura 4: VCNT2020 con acondicionamiento BJT.

Si bien una etapa de transistores puede amplificar la señal, no ofrece los umbrales de conmutación bien definidos ni la histéresis que proporciona un comparador como el TLV7031. Los comparadores consiguen una salida estable mediante la supervisión de una entrada de referencia de tensión establecida y el uso de la histéresis para eliminar las fluctuaciones. Compara la tensión del fototransistor con la tensión de referencia y establece su salida en nivel ALTO cuando la tensión de entrada es igual o superior a la tensión de referencia (Figura 5).

Esquema del VCNT2020 de Vishay con comparadorFigura 5: VCNT2020 con comparador.

El comparador TLV7031 cuenta con una histéresis integrada de 25 mV, lo que evita que la salida oscile entre los distintos estados lógicos cuando se producen pequeñas fluctuaciones en la tensión de entrada. Cuando la entrada alcanza los 500 mV y la salida pasa de BAJO a ALTO, la entrada podría descender hasta los 488 mV (500 mV - 12.5 mV) antes de que la salida vuelva a pasar a BAJO.

La histéresis del nivel lógico ALTO puede aumentar mediante un bucle de retroalimentación desde la salida del comparador hasta la entrada, a través de una resistencia de alto valor. Para comprender mejor cómo afecta la histéresis a la salida, realice un experimento variando el valor de la resistencia de retroalimentación. Ejemplo: Si se reduce demasiado la resistencia, puede añadirse suficiente histéresis como para que la salida quede bloqueada en el estado ALTO tras una transición de BAJO a ALTO, y no podrá desactivarse a menos que se elimine la retroalimentación.

La incorporación de un LED y una resistencia limitadora de corriente a la salida permite visualizar la transición de ALTO a BAJO (Figura 6). El uso de un osciloscopio o un multímetro en la salida durante la prueba también le ayudará a visualizar las interacciones entre el sensor y el comparador. Dado que la salida del comparador TLV7031 es de tipo push-pull (contrafase), los únicos valores que pueden aparecer en la salida deben estar próximos a la tensión de alimentación o a los niveles de tierra. Cualquier otra tensión, como 2.5 V, implica que la salida se activa y desactiva rápidamente, lo que requiere un mayor ajuste de la entrada del comparador; de lo contrario, los datos de salida no serán fiables.

Esquema del VCNT2020 de Vishay con comparador y LEDFigura 6: VCNT2020 con comparador y LED.

Recopilación de datos y SPI

Una vez definidos con precisión los valores ALTO (HIGH) y BAJO (LOW), cada salida del comparador se conecta a un pin de entrada de un registro de desplazamiento 74HC597D, capaz de almacenar ocho valores de entrada en paralelo, tal como se muestra en la Figura 7. Cuando recibe un impulso de reloj de transferencia, el registro envía los datos a través de un único cable a un microcontrolador. Dado que el 74HC597 dispone de pines para datos en serie y de una entrada de reloj de transferencia, la comunicación SPI se implementa con facilidad. Antes de la transferencia de datos, el pin PL, que normalmente está ALTO, se pone en BAJO para bloquear temporalmente la entrada de nuevos datos mientras se transfieren los datos anteriores. El microcontrolador lee los 8 bits de datos transferidos como un número que representa la posición real de los sensores (absoluta).

Nota: En este ejemplo, el octavo bit de D7 aparece etiquetado como "QUAD" en lugar de "OS7", lo que hace referencia a la detección en cuadratura en un sistema de pórtico XY con codificador doble.

Esquema de circuitos detectores y de un registro de desplazamiento de paralelo a serie con salidas SPI para una MCU (haga clic para ampliar)Figura 7: Circuitos detectores y registro de desplazamiento de paralelo a serie con salidas SPI para la MCU.

Un noveno sensor y un comparador detectan una fila adicional de segmentos estrechos y espaciados uniformemente que activan automáticamente la entrada de desplazamiento del registro (pin 12) en el flanco ascendente cuando los otros ocho sensores de datos se encuentran directamente sobre sus segmentos correspondientes. Este es el evento que captura los estados actuales de los sensores en el registro. La señal de salida de este noveno sensor también puede activar una interrupción opcional en el microcontrolador en su flanco descendente, lo que indica a la MCU que hay un nuevo valor de posición disponible. El uso de una interrupción permite al microcontrolador ignorar el sensor cuando no se produce ningún cambio de posición.

Nota: Aunque muchos codificadores absolutos comerciales utilizan el código Gray para minimizar los errores de transición, este proyecto emplea una banda codificada en binario, ya que las posiciones del sensor se sincronizan mediante el noveno canal, denominado "bit loader".

Diseño de la banda de código lineal

Un código de 8 bits ofrece 256 posiciones únicas. La resolución física depende de la longitud de la banda impresa dividida por el número de posiciones codificadas. En la figura 8 se muestra una tira de código normal. En el caso del proyecto Spork-A-Veyor de DigiKey, por ejemplo, la franja comienza en el 0 en el extremo izquierdo y se incrementa hasta el 100 en el extremo derecho con un ligero giro. El diseño definitivo de la placa de circuito impreso del codificador dispone los sensores de forma escalonada para proporcionar espacio adicional para el montaje, de modo que la banda codificada tenga el mismo desplazamiento que las marcas de graduación (Figura 9).

Imagen de la disposición habitual de una tira de código, con los números binarios representados en columnas verticalesFigura 8: Disposición normal de una tira de código con números binarios representados en columnas verticales.

Imagen del diseño de una tira de código con números binarios representados en columnas escalonadasFigura 9: Disposición de la tira de código con números binarios representados en columnas escalonadas.

En otro proyecto, el codificador debía detectar la posición en un sistema de coordenadas cartesianas. El centro de la franja se sitúa en el cero y los números que aumentan a la izquierda y a la derecha representan el eje x. Para determinar si el valor está por encima o por debajo de cero, se utiliza el octavo bit como valor de cuadrante (figura 10). Por encima de cero se encuentra el cuadrante 1 o el 4 (valores positivos) y por debajo, el cuadrante 2 o el 3 (valores negativos). Al añadir otro sensor y una tira de código para el eje Y, se obtiene un sistema de mapeo cartesiano totalmente navegable.

Imagen de la disposición de la tira de códigos para la navegación cartesiana con el cero en el centroFigura 10: Disposición de la banda de código para la navegación cartesiana con el cero en el centro.

El conjunto del codificador ya montado, que se muestra en la figura 11, está acoplado a un sistema de movimiento que se desplaza sobre la tira de códigos. Los LED y las etiquetas de la placa de circuito impreso indican lo que detectan los sensores en la parte posterior de la placa y qué información se transmite a la MCU a través de la interfaz SPI. Durante el funcionamiento, cada vez que se enciende el LED "Bit Loader", los datos indicados por los LED anteriores se almacenan en la memoria de salida de los registros de desplazamiento. Cuando el LED "Bit Loader" se apaga, se envía una señal a la MCU para que transfiera los datos del registro de salida de los registros de desplazamiento a un registro designado de la MCU.

Imagen de un codificador lineal absoluto en funcionamientoFigura 11: Codificador lineal absoluto en funcionamiento.

Conclusión

Los codificadores absolutos proporcionan valores de posición precisos con una elevada repetibilidad y exactitud. Son útiles para la detección de la posición y para detectar bloqueos en el sistema de movimiento. No requieren calibración y siguen funcionando incluso en caso de corte total de suministro eléctrico. Una vez restablecida la alimentación eléctrica, comunican su posición actual con precisión sin necesidad de volver al punto de referencia ni de recalibrarse.

Componentes necesarios:

  • 9x fototransistores (por ejemplo, VCNT2020)
  • 9× comparadores (por ejemplo, TVL7041 y TVL7031)
  • 1× registro de desplazamiento de 8 bits (p. ej., 74HC597D)
  • Microcontrolador con capacidad SPI
  • Referencia de tensión o divisor resistivo para los umbrales de los comparadores
  • Tira de codificación (por ejemplo, patrón en blanco y negro impreso o grabado)
  • Placa de CI

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.

Acerca de este autor

Image of Don Johanneck

Don Johanneck

Don Johanneck, desarrollador de contenido técnico de DigiKey, ha trabajado para esta empresa desde 2014. Fue promovido recientemente y su responsabilidad actual es de escribir las descripciones de videos y contenido sobre productos. Don obtuvo un título de Ciencias aplicadas en tecnología electrónica y sistemas automatizados en Northland Community & Technical College a través del programa de becas de DigiKey. También disfruta del control por radio y restauración y experimentación con máquinas antiguas.