Tabla de contenido:

Potenciómetro digital MCP41HVX1 para Arduino: 10 pasos (con imágenes)
Potenciómetro digital MCP41HVX1 para Arduino: 10 pasos (con imágenes)

Video: Potenciómetro digital MCP41HVX1 para Arduino: 10 pasos (con imágenes)

Video: Potenciómetro digital MCP41HVX1 para Arduino: 10 pasos (con imágenes)
Video: This component can control tons of circuits! Digital Potentiometer Guide! EB#51 2024, Mes de julio
Anonim
Potenciómetro digital MCP41HVX1 para Arduino
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.

MCP41HVX1 son un poco diferentes a otros DigiPots en que tienen un diseño de riel dividido. Esto significa que mientras que el DigiPot en sí puede ser controlado por 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 modernizar un circuito existente que opera con un voltaje más alto, como el que encontraría en un automóvil o bote.

La familia MCP41HVX1 está compuesta por los siguientes chips:

  • MCP41HV31-104E / ST - 100 k ohmios (7 bits)
  • MCP41HV31-503E / ST - 50 k ohmios (7 bits)
  • MCP41HV31-103E / ST - 10k ohmios (7 bits)
  • MCP41HV31-502E / ST - 5 k ohmios (7 bits)
  • MCP41HV31-103E / MQ - 10k ohmios (7 bits)
  • MCP41HV51-104E / ST - 100 k ohmios (8 bits)
  • MCP41HV51-503E / ST - 50 k 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 apropiado 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 algunas fichas adicionales, ya que encontré una mala y son económicas. Pedí el mío a Digi-Key.
  • Fuente de alimentación de CC secundaria que es de 10 a 36 voltios. En mi ejemplo, utilizo una fuente de alimentación de CC de verrugas de pared de 17 voltios de mi caja de fuentes de alimentación antiguas.
  • Fundente de soldadura
  • Soldador
  • Soldar
  • Pinzas y / o palillo de dientes
  • TSSOP Placa de conexión de 14 pines - Amazon - QLOUNI 40 piezas PCB Proto Boards SMD a DIP Adaptador convertidor de placa TQFP (32 44 48 64 84100) SOP SSOP TSSOP 8 10 14 16 20 23 24 28 (Surtido de tamaños. Disponible para múltiples proyectos)
  • Cuantificación de 2 a 7 pines - Amazon - DEPEPE 30 piezas 40 pines 2,54 mm macho y hembra pines para Arduino Prototype Shield - (se necesita cortar a la 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 con las versiones no oficiales. Digi-Key - Arduino Uno
  • Multímetro que puede medir la resistencia y también verificar la continuidad
  • Cables de puente
  • Tablero de circuitos
  • Muy recomendable, pero no absolutamente necesario, 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 con clip Harbour Freight 3x 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 de un 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 está duplicando los lentes, 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 el Harbor Freight Helping Hands. Son pinzas de cocodrilo unidas a una base de metal. Estos están disponibles en muchos otros proveedores en Internet, así como con diferentes marcas. Estos son muy útiles al soldar el chip en la placa de conexión.

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

Image
Image
Soldar el chip TSSOP a una placa de conexión
Soldar el chip TSSOP a una placa de conexión
Soldar el chip TSSOP a una placa de conexión
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 pruebas o directamente con puentes de DuPont. Para el trabajo de creación de prototipos, son demasiado pequeños para trabajar 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.

La estrategia es hacer fluir la soldadura sobre las huellas de la placa de ruptura primero.

  • No coloque el chip en la placa de arranque hasta que se le indique.
  • Lo primero que debe hacer es poner una cantidad generosa de fundente en la placa de arranque.
  • Luego, use su soldador para calentar un poco de soldadura y fluya hacia las pistas.
  • Pon un poco más de fundente en la parte superior de la soldadura que fluyó en los trazos, así como en la parte inferior de las patas del chip.
  • Coloque el chip encima de las trazas donde acaba de colocar la soldadura y el fundente. Las pinzas o un palillo 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 encima de las trazas. Alinee el pin uno del chip con la marca del pin uno en la placa de separación.
  • 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 el trazo. La soldadura que aplicó anteriormente 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 conexión. 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 estén todavía en la parte superior de las pistas. Si está un poco desviado, es fácil de corregir 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, siga adelante y haga 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 que la soldadura ha provocado un cortocircuito en varios pines juntos. Entonces, por ejemplo, si está verificando el pin 4, también verifique el pin 3 y el pin 5. El pin 4 debería mostrar continuidad, mientras que el pin 3 y el pin 5 deberían mostrar un circuito abierto. La única excepción es que el limpiaparabrisas P0W puede mostrar conectividad a P0A o P0B.

CONSEJOS:

  • Como se menciona en la lista de materiales, tener algunos aumentos disponibles que le dejen 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 ruptura facilita la soldadura de todo.
  • Escriba el número de chip en un trozo de cinta adhesiva y péguelo en la parte inferior del tablero de separación (vea la tercera imagen en 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 obtuve un poco de flujo en el chip y el número salió completamente, así que todo lo que tengo es la cinta.

Paso 2: cableado

Alambrado
Alambrado

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, consulte el último paso.

Paso 3: Obtener la biblioteca Arduino para controlar el DigiPot

Obtener la biblioteca Arduino para controlar el DigiPot
Obtener la biblioteca 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 ubicaciones ú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

Importación de la nueva biblioteca al IDE de Arduino
Importación de la nueva biblioteca al IDE de Arduino

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

Paso 5: Ejemplos de bibliotecas

Ejemplos de biblioteca
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 Wiper Control.

Paso 6: examinar el código fuente

#include "MCP41HVX1.h" // Defina los pines usados en el Arduino # defina WLAT_PIN 8 // Si se establece en Bajo "transfiera y use" #define SHDN_PIN 9 // Establezca alto para habilitar la red de resistencias # defina CS_PIN 10 // Establecer en bajo para seleccionar el chip para SPI // Definir algunos valores utilizados para la aplicación de prueba # definir FORWARD verdadero # definir REVERSE falso # definir MAX_WIPER_VALUE 255 // Limpiador máximo valorado MCP41HVX1 Digipot (CS_PIN, SHDN_PIN, WLAT_PIN); void setup () { Serial.begin (9600); Serial.print ("Posición inicial ="); Serial.println (Digipot. WiperGetPosition ()); // Muestra el valor inicial Serial.print ("Set Wiper Position ="); Serial.println (Digipot. WiperSetPosition (0)); // Establece la posición del limpiador en 0} void loop () {static bool bDirection = FORWARD; int nWiper = Digipot. WiperGetPosition (); // Obtener la posición actual del limpiaparabrisas // Determinar la dirección. if (MAX_WIPER_VALUE == nWiper) {bDirection = REVERSE; } else if (0 == nWiper) {bDirection = FORWARD; } // Mueve el limpiaparabrisas de digipot if (FORWARD == bDirection) {nWiper = Digipot. WiperIncrement (); // La dirección es hacia adelante Serial.print ("Incremento -"); } else {nWiper = Digipot. WiperDecrement (); // La dirección es hacia atrás Serial.print ("Decremento -"); } Serial.print ("Posición del limpiaparabrisas ="); Serial.println (nWiper); retraso (100);}

Paso 7: comprensión del código fuente y ejecución del boceto

Image
Image

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

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

  • Constructor MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin)
  • WiperGetPosition ()
  • WiperSetPosition (byte por Wiper)
  • WiperIncrement ()
  • WiperDecrement ()

En el 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á en un paso o disminuirá en un paso según 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 retroceder.

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 digipot para ver el cambio de resistencia a medida que se ejecuta la aplicación. Tenga en cuenta que el valor de resistencia no bajará hasta 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 utiliza en el video es el MCP41HV51-104E / ST, que es un chip de 8 bits con un valor máximo de 100k ohmios.

Paso 8: solución de problemas

Si las cosas no funcionan como se esperaba, aquí hay algunas cosas a tener en cuenta.

  • Verifique su cableado. Todo debe estar conectado correctamente. Asegúrese de estar 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 Cableado anterior.
  • Asegúrese de que todos los pines de su digitpot estén soldados a la placa de conexiones. La inspección visual no es suficiente. Asegúrese de verificar usando la función de continuidad de su multímetro para verificar que todos los pines del digipot estén conectados eléctricamente a la placa de conexión y que no haya una conexión cruzada de los pines de la soldadura que puedan haber puenteado las pistas.
  • Si el monitor en serie muestra que la posición del limpiaparabrisas está cambiando cuando ejecuta el boceto, pero el valor de resistencia no cambia, eso es un indicador de que WLAT o SHDN no están haciendo una conexión adecuada con la placa de conexión o los limpiadores de puentes para WLAT o SHDN. no están conectados correctamente al Arduino.
  • Asegúrese de que está utilizando una fuente de alimentación secundaria de 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.
  • Intente 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 le ha ayudado, pruebe con otro chip digital. Es de esperar que haya comprado varios y los haya soldado al mismo tiempo a una placa de conexión TSSOP, por lo que debería ser solo una cuestión de cambiar uno por otro. Tenía un chip defectuoso que me causó un poco de frustración y esta fue la solución.

Paso 9: Información interna y adicional

Diagrama de cableado alternativo
Diagrama de cableado alternativo

Más información:

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

La documentación completa sobre toda la biblioteca MCP41HVX1 está disponible en el archivo README.md que es 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 (mire en la parte inferior de la página) o con un visor / editor de mark down.

Comunicaciones entre Arduino y DigiPot:

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

Funcionalidad avanzada (WLAT y SHDN)

Estas funciones avanzadas no se muestran en el ejemplo "Wiper Control". 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) se desconecta 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 HIGH (consulte el diagrama de cableado alternativo). Deberá utilizar 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 utilizar el diagrama de cableado completo (consulte el paso de cableado anterior).

WLAT (pestillo de escritura)

La arquitectura interna consta de dos componentes en un solo chip. Uno de los componentes es la interfaz SDI y el registro para mantener el valor del limpiador. El otro componente es la propia red de resistencias. WLAT conecta ambos componentes internos juntos.

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 la posición del limpiador se actualiza.

Si WLAT se establece en ALTO, la información de la posición del limpiador 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 limpiador no se actualizará. Una vez que WLAT se establece en LOW, el valor se transfiere del registro a la red de resistencias.

WLAT es útil si está utilizando varios botes digitales que necesita mantener sincronizados. La estrategia es establecer WLAT en ALTO en todos los botes digitales y luego establecer el valor del limpiador en todos los chips. Una vez que el valor del limpiaparabrisas se ha enviado a todos los botes 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, pueda conectar WLAT directamente a LOW (consulte el diagrama de cableado alternativo). Deberá utilizar 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 utilizar 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 digpot 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 poder controlarlos. 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. Discutiremos 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)

Recomendado: