Índice:

Potenciômetro digital MCP41HVX1 para Arduino: 10 etapas (com imagens)
Potenciômetro digital MCP41HVX1 para Arduino: 10 etapas (com imagens)

Vídeo: Potenciômetro digital MCP41HVX1 para Arduino: 10 etapas (com imagens)

Vídeo: Potenciômetro digital MCP41HVX1 para Arduino: 10 etapas (com imagens)
Vídeo: This component can control tons of circuits! Digital Potentiometer Guide! EB#51 2024, Julho
Anonim
Potenciômetro digital MCP41HVX1 para Arduino
Potenciômetro digital MCP41HVX1 para Arduino

A família MCP41HVX1 de potenciômetros digitais (também conhecidos como DigiPots) são dispositivos que imitam a função de um potenciômetro analógico e são controlados por meio de SPI. Um exemplo de aplicação seria substituir o botão de volume do seu aparelho de som por um DigiPot controlado por um Arduino. Isso pressupõe que o controle de volume em seu estéreo é um potenciômetro e não um codificador rotativo.

MCP41HVX1 são um pouco diferentes dos outros DigiPots por terem um design de trilho dividido. Isso significa que, embora o próprio DigiPot possa ser controlado pela tensão de saída de um Arduino, o sinal que passa pela rede de resistores funciona com uma faixa de tensão muito maior (até 36 volts). A maioria dos DigiPots que podem ser controlados por 5 volts são limitados a 5 volts através da rede de resistores, o que restringe seu uso para adaptar um circuito existente que opera em voltagem mais alta, como o que você encontraria em um carro ou barco.

A família MCP41HVX1 é composta pelos seguintes chips:

  • MCP41HV31-104E / ST - 100k ohm (7 bits)
  • MCP41HV31-503E / ST - 50k ohm (7 bits)
  • MCP41HV31-103E / ST - 10k ohm (7 bits)
  • MCP41HV31-502E / ST - 5k ohm (7 bits)
  • MCP41HV31-103E / MQ - 10k ohm (7 bits)
  • MCP41HV51-104E / ST - 100k ohm (8 bits)
  • MCP41HV51-503E / ST - 50k ohm (8 bits)
  • MCP41HV51T-503E / ST - 50k ohm (8 bits)
  • MCP41HV51-103E / ST - 10k ohm (8 bits)
  • MCP41HV51-502E / ST - 5k ohm (8 bits)

Os chips de 7 bits permitem 128 etapas na rede de resistores e os chips de 8 bits permitem 256 etapas na rede de resistores. Isso significa que os chips de 8 bits permitem o dobro dos valores de resistência do potenciômetro.

Suprimentos

  • Escolha o chip MCP41HVX1 apropriado na lista acima. O chip selecionado é baseado na faixa de resistência necessária para a sua aplicação. Este Instructable é baseado nas versões do chip do pacote TSSOP 14, de modo que, para seguir este guia, escolha qualquer chip da lista, exceto o MCP41HV31-103E / MQ, que é um pacote QFN. Recomenda-se obter algumas fichas extras, pois encontrei uma ruim e elas são baratas. Encomendei o meu na Digi-Key.
  • Fonte de alimentação CC secundária de 10 a 36 volts. No meu exemplo, eu uso uma fonte de alimentação DC verruga de parede de 17 volts da minha caixa de fontes de alimentação antigas.
  • Fluxo de solda
  • Ferro de solda
  • Solda
  • Pinça e / ou palito de dente
  • TSSOP 14 pin breakout board - Amazon - QLOUNI 40pcs PCB Proto Boards SMD para DIP Adapter Plate Converter TQFP (32 44 48 64 84 100) SOP SSOP TSSOP 8 10 14 16 20 23 24 28 (Variedade de tamanhos. Abundância disponível para vários projetos)
  • Quantificar de 2 a 7 pinos cabeçalhos - Amazon - DEPEPE 30 Pcs 40 pinos 2,54 mm masculino e feminino pinos cabeçalhos para Arduino Prototype Shield - (corte no tamanho necessário. Abundância no pacote para vários projetos)
  • Arduino Uno - se você não tiver um, sugiro obter uma placa oficial. Tive sorte misturada com as versões não oficiais. Digi-Key - Arduino Uno
  • Multímetro que pode medir a resistência e também verificar a continuidade
  • Fios de ligação
  • Tábua de pão
  • Altamente recomendado, mas não absolutamente obrigatório, é um ampliador de mãos livres, pois os chips TSSOP são muito pequenos. Você precisará das duas mãos para soldar e testar o multímetro. Eu uso um par de Lupas Clip-On Harbor Freight 3x em cima dos meus óculos graduados e uma lupa articulada autônoma. Outras opções são um par de leitores baratos da loja de descontos ou do dólar. Você pode até usar os leitores por cima dos óculos graduados ou obter dois pares de leitores (um em cima do outro), dependendo de quão boa (ou ruim) é sua visão. Se você estiver dobrando os óculos, tenha cuidado, pois seu campo de visão será muito limitado, portanto, certifique-se de tirá-los antes de fazer qualquer outra coisa. Também tenha muito cuidado ao soldar.
  • Um outro item que não é obrigatório, mas altamente recomendado, é o Harbor Freight Helping Hands. Eles são garras de jacaré presas a uma base de metal. Eles estão disponíveis em muitos outros fornecedores na Internet, bem como sob diferentes nomes de marcas. Eles são muito úteis ao soldar o chip na placa de breakout.

Etapa 1: Soldar o chip TSSOP a uma placa de quebra

Image
Image
Soldando o Chip TSSOP em uma Placa Breakout
Soldando o Chip TSSOP em uma Placa Breakout
Soldando o Chip TSSOP em uma Placa Breakout
Soldando o Chip TSSOP em uma Placa Breakout

O chip TSSOP precisa ser soldado a uma placa breakout para que você possa usá-lo com uma placa de ensaio ou diretamente com jumpers DuPont. Para o trabalho de prototipagem, eles são pequenos demais para serem trabalhados diretamente.

Devido ao seu pequeno tamanho, soldar o chip TSSOP pode ser a parte mais desafiadora deste projeto, mas saber o truque para fazer isso torna uma tarefa que qualquer pessoa pode realizar. Existem várias técnicas, a que segue é o que eu fiz.

A estratégia é fluir a solda primeiro para os traços da placa de ruptura.

  • Não coloque o chip na placa de breakout até ser instruído.
  • A primeira coisa a fazer é colocar uma quantidade generosa de fluxo na placa de breakout.
  • Em seguida, usando o ferro de soldar, aqueça um pouco de solda e flua para os traços.
  • Coloque um pouco mais de fluxo no topo da solda que você liberou nos traços, bem como na parte inferior das pernas do chip.
  • Coloque o chip em cima dos rastros onde você acabou de colocar a solda e o fluxo. Uma pinça ou um palito de dente são boas ferramentas para colocar o chip no lugar com precisão. Certifique-se de alinhar o chip corretamente para que todos os pinos fiquem diretamente acima dos traços. Alinhe o pino um do chip com a marcação do pino um na placa de quebra.
  • Usando o ferro de solda, aqueça um dos pinos na extremidade do chip (pino 1, 7, 8 ou 14) pressionando-o contra o traço. A solda que você aplicou anteriormente derreterá e fluirá ao redor do pino.

Assista ao vídeo nesta etapa para ver uma demonstração de como soldar o chip na placa de breakout. Uma sugestão que eu tenho que é diferente do vídeo é que depois de soldar o primeiro pino, pare e verifique novamente o alinhamento de todo o chip para ter certeza de que todos os pinos ainda estão no topo dos traços. Se você estiver um pouco errado, é fácil corrigir neste ponto. Quando estiver confortável, tudo parece bem, solde outro pino na extremidade oposta do chip e verifique o alinhamento novamente. Se isso parecer bom, vá em frente e faça o resto dos pinos.

Depois de soldar todos os pinos, o vídeo sugere o uso de uma lupa para verificar suas conexões. Um método melhor é usar um multímetro para verificar a continuidade. Você deve colocar uma sonda na perna do pino e a outra na parte da placa onde irá soldar o cabeçalho (veja a segunda imagem nesta etapa). Você também deve verificar os pinos adjacentes para certificar-se de que eles não estão conectados devido ao curto-circuito da solda em vários pinos juntos. Portanto, por exemplo, se você estiver verificando o pino 4, verifique também os pinos 3 e 5. O pino 4 deve mostrar continuidade, enquanto o pino 3 e o pino 5 devem mostrar um circuito aberto. A única exceção é que o limpador P0W pode mostrar conectividade com P0A ou P0B.

PONTAS:

  • Conforme mencionado na lista de materiais, ter alguma ampliação disponível que deixe suas mãos livres para trabalhar será muito útil nesta etapa.
  • Usar a garra jacaré para ajudar as mãos para segurar a placa de desagregação torna tudo um pouco mais fácil de soldar.
  • Escreva o número do chip em um pedaço de fita adesiva e cole na parte inferior da placa de breakout (veja a terceira imagem nesta seção). Se no futuro você precisar identificar o chip, será muito mais fácil ler a fita adesiva. Minha experiência pessoal é que obtive um pouco de fluxo no chip e o número saiu completamente, então tudo que tenho é a fita.

Etapa 2: Fiação

Fiação
Fiação

Você precisará conectar o Arduino e o Digipot conforme mostrado no diagrama de fiação. Os pinos que estão sendo usados são baseados no layout de um Arduino Uno. Se você estiver usando um Arduino diferente, consulte a última etapa.

Etapa 3: Obtendo a Biblioteca Arduino para controlar o DigiPot

Obtendo a biblioteca do Arduino para controlar o DigiPot
Obtendo a biblioteca do Arduino para controlar o DigiPot

Para simplificar a programação, criei uma biblioteca que está disponível no Github. Acesse github.com/gregsrabian/MCP41HVX1 para obter a biblioteca MCP41HVX1. Você deve selecionar o botão "Clonar" e, em seguida, selecionar "Baixar Zip". Certifique-se de salvar o arquivo Zip em um local que você saiba onde ele está. A área de trabalho ou a pasta de downloads são locais úteis. Depois de importá-lo para o IDE do Arduino, você pode excluí-lo do local de download.

Etapa 4: importando a nova biblioteca para o IDE do Arduino

Importando a nova biblioteca para o IDE Arduino
Importando a nova biblioteca para o IDE Arduino

No IDE do Arduino, vá para "Sketch", selecione "Incluir biblioteca" e, em seguida, escolha "Adicionar biblioteca ZIP..". Uma nova caixa de diálogo aparecerá permitindo que você selecione o arquivo. ZIP que você baixou do GitHub.

Etapa 5: Exemplos de biblioteca

Exemplos de biblioteca
Exemplos de biblioteca

Depois de adicionar a nova biblioteca, você notará que se for em "Arquivo", selecione "Exemplos" e escolha "Exemplos de bibliotecas personalizadas", você verá uma entrada para MCP41HVX1 na lista. Se você passar o mouse sobre essa entrada, verá WLAT, Wiper Control e SHDN, que são esboços de exemplo. Neste Instructable, usaremos o exemplo do Wiper Control.

Etapa 6: Examinando o código-fonte

#include "MCP41HVX1.h" // Defina os pinos usados no Arduino # define WLAT_PIN 8 // Se definido como Low "transfira e use" #define SHDN_PIN 9 // Defina alto para habilitar a rede de resistor # define CS_PIN 10 // Defina como baixo para selecionar o chip para SPI // Defina alguns valores usados para o aplicativo de teste # define FORWARD true # define REVERSE false # define MAX_WIPER_VALUE 255 // Limpa máximo valorizado MCP41HVX1 Digipot (CS_PIN, SHDN_PIN, WLAT_PIN); void setup () { Serial.begin (9600); Serial.print ("Posição inicial ="); Serial.println (Digipot. WiperGetPosition ()); // Exibe o valor inicial Serial.print ("Definir posição do limpador ="); Serial.println (Digipot. WiperSetPosition (0)); // Defina a posição do limpador para 0} void loop () {static bool bDirection = FORWARD; int nWiper = Digipot. WiperGetPosition (); // Obtenha a posição atual do limpador // Determine a direção. if (MAX_WIPER_VALUE == nWiper) {bDirection = REVERSE; } else if (0 == nWiper) {bDirection = FORWARD; } // Mova o limpador digipot if (FORWARD == bDirection) {nWiper = Digipot. WiperIncrement (); // A direção é para frente Serial.print ("Increment -"); } else {nWiper = Digipot. WiperDecrement (); // A direção é para trás Serial.print ("Decrement -"); } Serial.print ("Posição do limpador ="); Serial.println (nWiper); atraso (100);}

Etapa 7: Compreendendo o código-fonte e executando o esboço

Image
Image

Este código-fonte está disponível no IDE do Arduino acessando o menu Exemplos e localizando MCP41HVX1 que você acabou de instalar (consulte a etapa anterior). Dentro de MCP41HVX1, abra o exemplo "Controle de limpador". É melhor usar o código que está incluído na biblioteca, se houver alguma correção de bug para ele ser atualizado.

O exemplo do Wiper Control demonstra as seguintes APIs da biblioteca MCP41HVX1:

  • Construtor MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin)
  • WiperGetPosition ()
  • WiperSetPosition (byte byWiper)
  • WiperIncrement ()
  • WiperDecrement ()

No código-fonte de amostra, certifique-se de definir MAX_WIPER_VALUE para 127 se estiver usando um chip de 7 bits. O padrão é 255, que é para chips de 8 bits. Se você fizer alterações no exemplo, o IDE do Arduino o forçará a escolher um novo nome para o projeto, pois não permitirá que você atualize o código do exemplo. Este é o comportamento esperado.

Cada vez que passar pelo loop, o limpador aumentará em uma etapa ou diminuirá em uma etapa, dependendo da direção em que está indo. Se a direção for para cima e chegar a MAX_WIPER_VALUE, ela inverterá a direção. Se atingir 0, ele reverterá novamente.

Conforme o esboço é executado, o monitor serial é atualizado com a posição atual do limpador.

Para ver a alteração da resistência, você precisará usar um multímetro configurado para ler Ohms. Coloque as sondas do medidor em P0B (pino 11) e P0W (pino 12) no digipot para ver a mudança de resistência conforme o aplicativo está em execução. Observe que o valor da resistência não vai até zero, pois há alguma resistência interna dentro do chip, mas vai chegar perto de 0 ohms. Provavelmente não irá para o valor máximo, mas estará próximo.

Conforme você assiste ao vídeo, você pode ver que o multímetro mostra a resistência aumentando até atingir o valor máximo e então começar a diminuir. O chip usado no vídeo é o MCP41HV51-104E / ST, que é um chip de 8 bits com valor máximo de 100k ohm.

Etapa 8: Solução de problemas

Se as coisas não estiverem funcionando como esperado, aqui estão alguns itens a serem observados.

  • Verifique sua fiação. Tudo deve estar conectado corretamente. Certifique-se de que você está usando o diagrama de fiação completo conforme declarado neste Instructable. Existem diagramas de fiação alternativos apresentados no README, código-fonte da biblioteca e abaixo neste Instructable, mas siga o que está documentado acima na etapa de fiação acima.
  • Certifique-se de que todos os pinos do seu digitpot sejam soldados à placa de breakout. Usar a inspeção visual não é bom o suficiente. Certifique-se de verificar usando a função de continuidade de seu multímetro para verificar se todos os pinos no digipot estão eletricamente conectados à placa de breakout e se não há conexão cruzada de pinos de solda que podem ter traçado em ponte.
  • Se o monitor serial estiver mostrando que a posição do limpador está mudando quando você executa o esboço, mas o valor da resistência não está mudando, isso é um indicador de que WLAT ou SHDN não está fazendo uma conexão adequada com a placa de breakout ou os limpadores de jumper para WLAT ou SHDN não estão conectados corretamente ao Arduino.
  • Certifique-se de estar usando uma fonte de alimentação secundária que seja CC entre 10 e 36 volts.
  • Verifique se a fonte de alimentação de 10 a 36 volts está funcionando, medindo a tensão com o multímetro.
  • Tente usar o esboço original. Se você fez alguma alteração, pode ter introduzido um erro.
  • Se nenhuma das etapas de solução de problemas ajudou, tente outro chip digipot. Esperançosamente, você comprou vários e os soldou ao mesmo tempo em uma placa de breakout TSSOP, então deve ser apenas uma questão de trocar um pelo outro. Eu tinha um chip defeituoso que me causou um pouco de frustração e essa foi a solução.

Etapa 9: informações internas e adicionais

Diagrama de fiação alternativo
Diagrama de fiação alternativo

Outras informações:

Mais informações podem ser encontradas na folha de dados MCP41HVX1.

A documentação completa de toda a biblioteca MCP41HVX1 está disponível no arquivo README.md, que faz parte do download da biblioteca. Este arquivo é escrito com marcação para baixo e pode ser visualizado com a formatação apropriada dentro do Github (veja na parte inferior da página) ou com um visualizador / editor com marcação para baixo.

Comunicações entre o Arduino e o DigiPot:

O Arduino se comunica com o DigiPot usando SPI. Depois que a biblioteca envia um comando de posição do limpador, como WiperIncrement, WiperDecrement ou WiperSetPosition, ela chama WiperGetPosition para obter a posição do limpador do chip. O valor retornado desses comandos do limpador é a posição do limpador conforme o chip o vê e pode ser usado para verificar se o limpador foi movido para o local esperado.

Funcionalidade avançada (WLAT e SHDN)

Essas funções avançadas não são demonstradas no exemplo "Controle do limpador". Existem APIs disponíveis na biblioteca para controlar WLAT e SHDN. Também há esboços de exemplo WLAT e SHDN (no mesmo local do esboço de Controle do limpador) com a biblioteca.

SHDN (desligamento)

SHDN é usado para desabilitar ou habilitar a rede de resistores. Definir SHDN para baixo desativa e alto habilita a rede de resistores. Quando a rede de resistores está desabilitada, P0A (DigiPot pino 13) é desconectado e P0B (DigiPot pino 11) é conectado a P0W (DigiPot pino 12). Haverá uma pequena quantidade de resistência entre P0B e P0W, então seu medidor não lerá 0 ohms.

Se sua aplicação não precisa controlar o SHDN, você pode conectá-lo diretamente a HIGH (consulte o diagrama de fiação alternativo). Você precisará usar o construtor correto ou passar MCP41HVX1_PIN_NOT_CONFIGURED ao construtor para indicar que o SHDN está conectado fisicamente. É importante observar que, se você estiver seguindo o exemplo, deverá usar o diagrama de fiação completo (consulte a etapa de fiação acima).

WLAT (Write Latch)

A arquitetura interna é composta por dois componentes em um único chip. Um dos componentes é a interface SDI e o registro para armazenar o valor do limpador. O outro componente é a própria rede de resistores. O WLAT conecta os dois componentes internos.

Quando WLAT é definido como LOW, qualquer informação de comando de posição do limpador é passada diretamente para a rede de resistores e a posição do limpador é atualizada.

Se WLAT for definido como HIGH, as informações de posição do limpador passadas através do SPI são mantidas em um registro interno, mas não são passadas para a rede de resistores e, portanto, a posição do limpador não será atualizada. Uma vez que WLAT é definido como LOW, o valor é transferido do registro para a rede de resistores.

O WLAT é útil se você estiver usando vários digipots que precisam ser mantidos em sincronia. A estratégia é definir WLAT como HIGH em todos os digipots e, em seguida, definir o valor do limpador em todos os chips. Uma vez que o valor do limpador tenha sido enviado para todos os digipots, o WLAT pode ser definido como BAIXO em todos os dispositivos simultaneamente para que todos movam os limpadores ao mesmo tempo.

Se você está controlando apenas um DigiPot ou tem vários, mas eles não precisam ser mantidos em sincronia, você provavelmente não precisará dessa funcionalidade e pode, portanto, conectar o WLAT diretamente a BAIXO (consulte o diagrama de fiação alternativo). Você precisará usar o construtor correto ou passar MCP41HVX1_PIN_NOT_CONFIGURED para o construtor para indicar que o WLAT está conectado fisicamente. É importante observar que, se você estiver seguindo o exemplo, deverá usar o diagrama de fiação completo (consulte a etapa de fiação acima).

Etapa 10: Diagrama de fiação alternativo

Fiação

Você tem a opção de conectar o WLAT do digpot diretamente a LOW / GND em vez de conectar a um pino digital. Se você fizer isso, não será capaz de controlar o WLAT. Você também tem a opção de conectar o SHDN diretamente a HIGH em vez de um pino digital. Se você fizer isso, não será capaz de controlar o SHDN.

WLAT e SHDN são independentes um do outro, então você pode fazer a fiação de um e conectar o outro a um pino digital, fazer a fiação de ambos ou conectar ambos a pinos digitais para que possam ser controlados. Consulte o diagrama de fiação alternativo para aqueles que você deseja conectar e consulte o diagrama de fiação principal na etapa 2 para fiação para pinos digitais controláveis.

Construtores

Existem três construtores na classe MCP41HVX. Estaremos discutindo dois deles. Eles estão todos documentados no arquivo README.md, portanto, se estiver interessado no terceiro construtor, consulte a documentação.

  • MCP41HVX1 (int nCSPin) - use este construtor somente se ambos WLAT e SHDN estiverem conectados fisicamente.
  • MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin) - Use este construtor se o WLAT ou o SHDN estiverem com fio. Passe na constante MCP41HVX1_PIN_NOT_CONFIGURED se o pino for conectado fisicamente ou o número do pino se estiver conectado a um pino digital.

nCSPin deve ser conectado a um pino digital. É inválido passar MCP41HVX1_PIN_NOT_CONFIGURED ao construtor para nCSPin.

E se eu não estiver usando um Arduino Uno?

O Arduino usa SPI para se comunicar com o digipot. Os pinos SPI são pinos específicos na placa Arduino. Os pinos SPI no Uno são:

  • SCK - pino 13 no Uno conectado ao pino 2 no digipot
  • MOSI - pino 11 no Uno conectado ao pino 4 no digipot
  • MISO - pino 12 no Uno conectado ao pino 5 no digipot

Se estiver usando um Arduino que não seja Uno, você precisará descobrir qual pino é SCK, MOSI e MISO e conectá-los ao digipot.

Os outros pinos usados no esboço são pinos digitais regulares, então qualquer pino digital funcionará. Você precisará modificar o esboço para especificar os pinos que você escolher na placa Arduino que está usando. Os pinos digitais regulares são:

  • CS - pino 10 no Uno conectado ao pino 3 no digipot (atualize CS_PIN no esboço com o novo valor)
  • WLAT - pino 8 no Uno conectado ao pino 6 no digipot (atualize WLAT_PIN no esboço com o novo valor)
  • SHDN - pino 9 no Uno conectado ao pino 7 no digipot (atualize SHDN_PIN no esboço com o novo valor)

Recomendado: