top of page
Buscar
Foto del escritorYeah Tutoriales

Potenciómetro digital MCP41HVX1 para Arduino


La familia de potenciómetros digitales MCP41HVX1 (también conocidos como DigiPots) son dispositivos que imitan la función de un potenciómetro analógico y se controlan a través de SPI. Una aplicación de ejemplo sería reemplazar la perilla de volumen de su estéreo con un DigiPot controlado por un Arduino. Esto supone que el control de volumen de su estéreo es un potenciómetro y no un codificador rotatorio.

Los MCP41HVX1 son un poco diferentes a otros DigiPots en que tienen un diseño de riel dividido. Esto significa que, si bien el DigiPot en sí puede controlarse mediante el voltaje de salida de un Arduino, la señal que pasa a través de la red de resistencias funciona con un rango de voltaje mucho mayor (hasta 36 voltios). La mayoría de los DigiPots que se pueden controlar con 5 voltios están limitados a 5 voltios en la red de resistencias, lo que restringe su uso para adaptar un circuito existente que funciona con un voltaje más alto, como el que encontraría en un automóvil o un barco.

La familia MCP41HVX1 está compuesta por los siguientes chips:

  • MCP41HV31-104E/ST - 100 k ohmios (7 bits)

  • MCP41HV31-503E/ST - 50k ohmios (7 bits)

  • MCP41HV31-103E/ST - 10k ohmios (7 bits)

  • MCP41HV31-502E/ST - 5k ohmios (7 bits)

  • MCP41HV31-103E/MQ - 10k ohmios (7 bits)

  • MCP41HV51-104E/ST - 100 k ohmios (8 bits)

  • MCP41HV51-503E/ST - 50k ohmios (8 bits)

  • MCP41HV51T-503E/ST - 50 k ohmios (8 bits)

  • MCP41HV51-103E/ST - 10k ohmios (8 bits)

  • MCP41HV51-502E/ST - 5k ohmios (8 bits)

Los chips de 7 bits permiten 128 pasos en la red de resistencias y los chips de 8 bits permiten 256 pasos en la red de resistencias. Esto significa que los chips de 8 bits permiten el doble de valores de resistencia del potenciómetro.


Suministros


  • Elija el chip MCP41HVX1 adecuado de la lista anterior. El chip que seleccione se basa en el rango de resistencia requerido para su aplicación. Este Instructable se basa en las versiones del paquete TSSOP 14 del chip, por lo que para seguir esta guía, elija cualquier chip de la lista, excepto el MCP41HV31-103E/MQ, que es un paquete QFN. Se recomienda obtener algunos chips adicionales, ya que encontré uno malo y son económicos. Pedí el mío a Digi-Key .

  • Fuente de alimentación secundaria de CC que es de 10 a 36 voltios. En mi ejemplo, uso una fuente de alimentación de CC de verruga de pared de 17 voltios de mi caja de fuentes de alimentación antiguas.

  • flujo de soldadura

  • Soldador

  • Soldar

  • Pinzas y/o palillo de dientes

  • TSSOP 14 pin breakout board - Amazon - QLOUNI 40pcs PCB Proto Boards SMD a DIP Adapter Plate Converter TQFP (32 44 48 64 84 100) SOP SSOP TSSOP 8 10 14 16 20 23 24 28 (Surtido de tamaños. Mucho disponible para múltiples proyectos)

  • Cuantificar de 2 - Cabeceras de 7 pines - Amazon - DEPEPE 30 Pcs 40 Pin 2.54mm Macho y hembra Pin Headers para Arduino Prototype Shield - (Se necesita cortar a medida. Mucho en el paquete para múltiples proyectos)

  • Arduino Uno: si no tiene uno, le sugiero que obtenga una placa oficial. He tenido suerte dispar con las versiones no oficiales. Digi-Key-Arduino Uno

  • Multímetro que puede medir la resistencia y también comprobar la continuidad

  • Cables puente

  • Tablero de circuitos

  • Muy recomendable, pero no absolutamente necesaria, es una lupa de manos libres, ya que los chips TSSOP son muy pequeños. Necesitará ambas manos para soldar y probar con el multímetro. Utilizo un par de lupas Harbor Freight 3x Clip-On encima de mis anteojos recetados y una lupa articulada independiente. Otras opciones son un par de lectores económicos de la tienda de descuento o dólar. Incluso puede usar los lectores sobre sus anteojos recetados u obtener dos pares de lectores (uno encima del otro) dependiendo de qué tan buena (o mala) sea su visión. Si duplica el uso de anteojos, tenga cuidado ya que su rango de visión será muy limitado, así que asegúrese de quitárselos antes de hacer cualquier otra cosa. También tenga mucho cuidado al soldar.

  • Otro elemento que no es obligatorio pero muy recomendable es Harbor Freight Helping Hands. Son pinzas de cocodrilo unidas a una base de metal. Estos están disponibles a través de muchos otros proveedores en Internet, así como bajo diferentes marcas. Estos son muy útiles cuando se suelda el chip en la placa de conexiones.


Paso 1: soldar el chip TSSOP a una placa de conexión


El chip TSSOP debe soldarse a una placa de conexión para que pueda usarlo con una placa de prueba o directamente con puentes DuPont. Para el trabajo de creación de prototipos, son demasiado pequeños para trabajar con ellos directamente.

Debido a su pequeño tamaño, soldar el chip TSSOP puede ser la parte más desafiante de este proyecto, pero conocer el truco para hacerlo lo convierte en una tarea que cualquiera puede realizar. Hay varias técnicas, la de abajo es la que hice yo.

La estrategia es hacer fluir la soldadura a las huellas de la placa de conexiones primero.

  • No coloque el chip en la placa de conexión hasta que se le indique.

  • Lo primero que debe hacer es poner una cantidad generosa de fundente en el tablero de conexiones.

  • Luego, usando su soldador, caliente un poco de soldadura y fluya sobre las pistas.

  • Ponga un poco más de fundente encima de la soldadura que fluyó en las huellas, así como en la parte inferior de las patas del chip.

  • Coloque el chip encima de las huellas donde acaba de colocar la soldadura y el fundente. Las pinzas o un palillo de dientes son buenas herramientas para colocar con precisión el chip en su lugar. Asegúrese de alinear el chip correctamente para que todos los pines estén directamente sobre las pistas. Alinee el pin uno del chip con la marca del pin uno en el tablero de ruptura.

  • Usando su soldador, caliente uno de los pines en el extremo del chip (ya sea el pin 1, 7, 8 o 14) presionándolo en la pista. La soldadura que aplicó previamente se derretirá y fluirá alrededor del pin.

Mire el video en este paso para ver una demostración de cómo soldar el chip a la placa de conexiones. Una sugerencia que tengo que es diferente del video es que después de haber soldado el primer pin, deténgase y vuelva a verificar la alineación de todo el chip para asegurarse de que todos los pines todavía estén encima de las pistas. Si te equivocas un poco, es fácil corregirlo en este punto. Una vez que se sienta cómodo, todo se ve bien, suelde otro pin en el extremo opuesto del chip y verifique la alineación nuevamente. Si eso se ve bien, adelante y haz el resto de los pines.

Después de haber soldado todos los pines, el video sugiere usar una lupa para verificar sus conexiones. Un mejor método es usar un multímetro para verificar la continuidad. Debe colocar una sonda en la pata del pin y la otra sonda en la parte de la placa donde soldará el cabezal (vea la segunda imagen en este paso). También debe verificar los pines adyacentes para asegurarse de que no estén conectados debido a la soldadura que cortocircuita varios pines entre sí. Entonces, por ejemplo, si está verificando el pin 4, también verifique el pin 3 y el pin 5. El pin 4 debe mostrar continuidad, mientras que el pin 3 y el pin 5 deben mostrar un circuito abierto. La única excepción es que el limpiaparabrisas P0W puede mostrar conectividad con P0A o P0B.

PUNTAS:

  • Como se menciona en la lista de materiales, tener algo de aumento disponible que le deje las manos libres para trabajar será muy útil en este paso.

  • El uso de la pinza de cocodrilo para ayudar a las manos a sostener la placa de conexión hace que soldar todo sea un poco más fácil.

  • Escriba el número de chip en un trozo de cinta adhesiva y péguelo en la parte inferior de la placa de conexiones (consulte la tercera imagen de esta sección). Si en el futuro necesita identificar el chip, será mucho más fácil leer la cinta adhesiva. Mi experiencia personal es que tengo un poco de flujo en el chip y el número se desprendió por completo, así que todo lo que tengo es la cinta.


Paso 2: Cableado



Deberá conectar Arduino y Digipot como se muestra en el diagrama de cableado. Los pines que se utilizan se basan en el diseño de un Arduino Uno. Si está utilizando un Arduino diferente, vea el último paso.



Paso 3: obtener la biblioteca de Arduino para controlar el DigiPot



Para simplificar la programación, he creado una biblioteca que está disponible en Github. Vaya a github.com/gregsrabian/MCP41HVX1 para obtener la biblioteca MCP41HVX1. Deberá seleccionar el botón "Clonar" y luego seleccionar "Descargar Zip". Asegúrese de guardar el archivo Zip en una ubicación que sepa dónde está. El escritorio o la carpeta de descargas son lugares útiles. Una vez que lo importe al IDE de Arduino, puede eliminarlo de la ubicación de descarga.



Paso 4: Importación de la nueva biblioteca al IDE de Arduino


Dentro del IDE de Arduino, vaya a "Sketch", luego seleccione "Include Library", luego elija "Add ZIP Library...". Aparecerá un nuevo cuadro de diálogo que le permitirá seleccionar el archivo .ZIP que descargó de GitHub.


Paso 5: Ejemplos de biblioteca



Después de haber agregado la nueva biblioteca, notará que si va a "Archivo", luego selecciona "Ejemplos" y luego elige "Ejemplos de bibliotecas personalizadas", ahora verá una entrada para MCP41HVX1 en la lista. Si pasa el cursor sobre esa entrada, verá WLAT, Wiper Control y SHDN, que son bocetos de ejemplo. En este Instructable usaremos el ejemplo de control de limpiaparabrisas.


Paso 6: examinar el código fuente




#include "MCP41HVX1.h"

// Define the pins used on the Arduino
#define WLAT_PIN  8    // If set to Low "transfer and use"
#define SHDN_PIN  9    // Set high to enable the resistor network
#define CS_PIN   10    // Set to low to select chip for SPI

// Define some values used for the test app
#define FORWARD true
#define REVERSE false
#define MAX_WIPER_VALUE 255     //  Maximum wiper valued 

MCP41HVX1 Digipot( CS_PIN, SHDN_PIN, WLAT_PIN);

void setup ()
{
    Serial.begin( 9600);
    Serial.print( "Starting Position = ");
    Serial.println( Digipot.WiperGetPosition());    // Display initial value
    Serial.print( "Set Wiper Position = ");
    Serial.println( Digipot.WiperSetPosition( 0));  // Set wiper position to 0
}

void loop ()
{
    static bool  bDirection = FORWARD;
    int   nWiper = Digipot.WiperGetPosition();  // Get current wiper position
    // Determine the direction.
    if( MAX_WIPER_VALUE == nWiper)
    {
      bDirection = REVERSE;
    }
    else if( 0 == nWiper)
    {
      bDirection = FORWARD;
    }
    // Move the digipot wiper
    if( FORWARD == bDirection)
    {
      nWiper = Digipot.WiperIncrement();    // The direction is forward
      Serial.print( "Increment - ");
    }
    else
    {
      nWiper = Digipot.WiperDecrement();    // The direction is backward
      Serial.print( "Decrement - ");
    }

    Serial.print( "Wiper Position = ");
    Serial.println( nWiper);

    delay( 100);
}



Paso 7: comprender el código fuente y ejecutar el boceto



Este código fuente está disponible dentro del IDE de Arduino yendo al menú Ejemplos y localizando el MCP41HVX1 que acaba de instalar (vea el paso anterior). Dentro de MCP41HVX1, abra el ejemplo "Control de limpiaparabrisas". Es mejor usar el código que se incluye con la biblioteca, ya que si hay correcciones de errores, se actualizará.

El ejemplo de Wiper Control demuestra las siguientes API de la biblioteca MCP41HVX1:

  • Constructor MCP41HVX1( int nCSPin, int nSHDNPin, int nWLATPin)

  • LimpiaparabrisasObtenerPosición()

  • WiperSetPosition( byte byWiper)

  • LimpiaparabrisasIncremento()

  • LimpiaparabrisasDecremento()

Dentro del código fuente de muestra, asegúrese de establecer MAX_WIPER_VALUE en 127 si está utilizando un chip de 7 bits. El valor predeterminado es 255, que es para chips de 8 bits. Si realiza cambios en la muestra, el IDE de Arduino lo obligará a elegir un nuevo nombre para el proyecto, ya que no le permitirá actualizar el código de ejemplo. Este es el comportamiento esperado.

Cada vez que pasa por el bucle, el limpiaparabrisas aumentará un paso o disminuirá un paso dependiendo de la dirección en la que vaya. Si la dirección es hacia arriba y llega al MAX_WIPER_VALUE, invertirá la dirección. Si llega a 0, volverá a invertirse.

A medida que se ejecuta el boceto, el monitor en serie se actualiza con la posición actual del limpiaparabrisas.

Para ver el cambio de resistencia, necesitará usar un multímetro para leer ohmios. Coloque las sondas del medidor en P0B (pin 11) y P0W (pin 12) en el potenciómetro digital para ver el cambio de resistencia a medida que se ejecuta la aplicación. Tenga en cuenta que el valor de la resistencia no bajará completamente a cero, ya que hay algo de resistencia interna dentro del chip, pero se acercará a 0 ohmios. Lo más probable es que tampoco llegue al valor máximo, pero estará cerca.

Mientras mira el video, puede ver que el multímetro muestra que la resistencia aumenta hasta que alcanza el valor máximo y luego comienza a disminuir. El chip que se usa en el video es el MCP41HV51-104E/ST, que es un chip de 8 bits con un valor máximo de 100k ohm.


Paso 8: Solución de problemas

Si las cosas no funcionan como se esperaba, aquí hay algunas cosas que debe mirar.

  • Verifique su cableado. Todo debe estar conectado correctamente. Asegúrese de que está utilizando el diagrama de cableado completo como se indica en este Instructable. Hay diagramas de cableado alternativos presentados en el LÉAME, el código fuente de la biblioteca y más abajo en este Instructable, pero siga con lo documentado anteriormente en el paso de Cableado anterior.

  • Asegúrese de que cada pin de su digitpot esté soldado a la placa de conexiones. Usar la inspección visual no es suficiente. Asegúrate de verificar usando la función de continuidad de tu multímetro para verificar que todos los pines en el potenciómetro digital estén conectados eléctricamente a la placa de conexiones y que no haya una conexión cruzada de pines de soldadura que puedan haberse cruzado en los rastros.

  • Si el monitor en serie muestra que la posición del limpiaparabrisas está cambiando cuando ejecuta el boceto pero el valor de la resistencia no cambia, eso es un indicador de que WLAT o SHDN no están haciendo una conexión adecuada con la placa de conexiones o los limpiaparabrisas de puente para WLAT o SHDN no están conectados correctamente al Arduino.

  • Asegúrese de estar utilizando una fuente de alimentación secundaria que sea CC entre 10 y 36 voltios.

  • Asegúrese de que la fuente de alimentación de 10 a 36 voltios esté funcionando midiendo el voltaje con su multímetro.

  • Intenta usar el boceto original. Si realizó algún cambio, es posible que haya introducido un error.

  • Si ninguno de los pasos de solución de problemas ha ayudado, pruebe con otro chip digipot. Con suerte, compró varios y los soldó al mismo tiempo a una placa de conexión TSSOP, por lo que solo debería ser cuestión de cambiar uno por el otro. Tenía un chip defectuoso que me causó bastante frustración y esta fue la solución.

Paso 9: Información interna y adicional



Más información:

Puede encontrar más información en la hoja de datos de MCP41HVX1.

La documentación completa sobre toda la biblioteca MCP41HVX1 está disponible en el archivo README.md que forma parte de la descarga de la biblioteca. Este archivo está escrito en Mark Down y se puede ver con el formato adecuado dentro de Github (consulte la parte inferior de la página) o con Mark Down Viewer/Editor.

Comunicaciones entre Arduino y el DigiPot:

El Arduino se comunica con el DigiPot usando SPI. Después de que la biblioteca envía un comando de posición del limpiaparabrisas, como WiperIncrement, WiperDecrement o WiperSetPosition, llama a WiperGetPosition para obtener la posición del limpiaparabrisas del chip. El valor que devuelven estos comandos de limpiaparabrisas es la posición del limpiaparabrisas tal como lo ve el chip y se puede usar para verificar que el limpiaparabrisas se ha movido a la ubicación esperada.

Funcionalidad avanzada (WLAT y SHDN)

Estas funciones avanzadas no se muestran en el ejemplo de "Control de limpiaparabrisas". Hay API disponibles en la biblioteca para controlar WLAT y SHDN. También hay bocetos de ejemplo de WLAT y SHDN (en la misma ubicación que el boceto de Wiper Control) con la biblioteca.

SHDN (apagado)

SHDN se utiliza para deshabilitar o habilitar la red de resistencias. Establecer SHDN en bajo deshabilita y alto habilita la red de resistencias. Cuando la red de resistencias está desactivada, P0A (pin 13 de DigiPot) está desconectado y P0B (pin 11 de DigiPot) está conectado a P0W (pin 12 de DigiPot). Habrá una pequeña cantidad de resistencia entre P0B y P0W, por lo que su medidor no leerá 0 ohmios.

Si su aplicación no necesita controlar SHDN, puede conectarla directamente a ALTA (vea el diagrama de cableado alternativo). Deberá usar el constructor correcto o pasar MCP41HVX1_PIN_NOT_CONFIGURED al constructor para indicar que SHDN está cableado. Es importante tener en cuenta que si sigue el ejemplo, debe usar el diagrama de cableado completo (consulte el paso de cableado anterior).

WLAT (bloqueo de escritura)

La arquitectura interna es de dos componentes en un solo chip. Uno de los componentes es la interfaz SDI y el registro para contener el valor del limpiaparabrisas. El otro componente es la propia red de resistencias. WLAT conecta ambos componentes internos entre sí.

Cuando WLAT se establece en BAJO, cualquier información de comando de posición del limpiaparabrisas establecida se pasa directamente a la red de resistencias y se actualiza la posición del limpiaparabrisas.

Si WLAT se establece en ALTO, la información de posición del limpiaparabrisas que se pasa a través de SPI se mantiene en un registro interno, pero no se pasa a la red de resistencias y, por lo tanto, la posición del limpiaparabrisas no se actualizará. Una vez que WLAT se establece en BAJO, el valor se transfiere del registro a la red de resistencias.

WLAT es útil si está utilizando varios potenciómetros digitales que necesita mantener sincronizados. La estrategia es establecer WLAT en ALTO en todos los potenciómetros digitales y luego establecer el valor de limpieza en todos los chips. Una vez que el valor del limpiaparabrisas se ha enviado a todos los potenciómetros digitales, WLAT se puede configurar en BAJO en todos los dispositivos simultáneamente para que todos muevan los limpiaparabrisas al mismo tiempo.

Si solo está controlando un DigiPot o tiene varios, pero no es necesario mantenerlos sincronizados, lo más probable es que no necesite esta funcionalidad y, por lo tanto, puede conectar WLAT directamente a BAJO (consulte el diagrama de cableado alternativo). Deberá usar el constructor correcto o pasar MCP41HVX1_PIN_NOT_CONFIGURED al constructor para indicar que WLAT está cableado. Es importante tener en cuenta que si sigue el ejemplo, debe usar el diagrama de cableado completo (consulte el paso de cableado anterior).


Paso 10: Diagrama de cableado alternativo




Alambrado

Tiene la opción de conectar WLAT desde el dippot directamente a LOW\GND en lugar de conectarse a un pin digital. Si hace esto, no podrá controlar WLAT. También tiene la opción de conectar SHDN directamente a HIGH en lugar de un pin digital. Si hace esto, no podrá controlar SHDN.

WLAT y SHDN son independientes entre sí, por lo que puede cablear uno y conectar el otro a un pin digital, cablear ambos o conectar ambos a pines digitales para que puedan controlarse. Consulte el diagrama de cableado alternativo para los que desea cablear y consulte el diagrama de cableado principal en el paso 2 para el cableado a los pines digitales controlables.

Constructores

Hay tres constructores en la clase MCP41HVX. Hablaremos de dos de ellos. Todos están documentados en el archivo README.md, por lo que si está interesado en el tercer constructor, consulte la documentación.

  • MCP41HVX1 (int nCSPin): use este constructor solo si tanto WLAT como SHDN están cableados.

  • MCP41HVX1( int nCSPin, int nSHDNPin, int nWLATPin): use este constructor si WLAT o SHDN están cableados. Pase la constante MCP41HVX1_PIN_NOT_CONFIGURED si el pin está cableado o el número de pin si está conectado a un pin digital.

nCSPin debe estar conectado a un pin digital. No es válido pasar MCP41HVX1_PIN_NOT_CONFIGURED al constructor para nCSPin.


¿Qué pasa si no estoy usando un Arduino Uno?

El Arduino usa SPI para comunicarse con el digipot. Los pines SPI son pines específicos en la placa Arduino. Los pines SPI en el Uno son:

  • SCK - pin 13 en el Uno conectado al pin 2 en el digipot

  • MOSI - pin 11 en el Uno conectado al pin 4 en el digipot

  • MISO - pin 12 en el Uno conectado al pin 5 en el digipot

Si está utilizando un Arduino que no es Uno, deberá averiguar qué pin es SCK, MOSI y MISO y conectarlos al digipot.

Los otros pines utilizados en el boceto son pines digitales normales, por lo que cualquier pin digital funcionará. Deberá modificar el boceto para especificar los pines que elija en la placa Arduino que está utilizando. Los pines digitales regulares son:

  • CS: pin 10 en el Uno conectado al pin 3 en el digipot (actualice CS_PIN en el boceto con un nuevo valor)

  • WLAT: pin 8 en el Uno conectado al pin 6 en el digipot (actualice WLAT_PIN en el boceto con un nuevo valor)

  • SHDN: pin 9 en el Uno conectado al pin 7 en el digipot (actualice SHDN_PIN en el boceto con un nuevo valor)

0 comentarios

Comments


bottom of page