Innehållsförteckning:

MCP41HVX1 digital potentiometer för Arduino: 10 steg (med bilder)
MCP41HVX1 digital potentiometer för Arduino: 10 steg (med bilder)

Video: MCP41HVX1 digital potentiometer för Arduino: 10 steg (med bilder)

Video: MCP41HVX1 digital potentiometer för Arduino: 10 steg (med bilder)
Video: Show Wiper Control Arduino sketch running while controlling an MCP41HV51-104E/ST digipot. 2024, December
Anonim
MCP41HVX1 digital potentiometer för Arduino
MCP41HVX1 digital potentiometer för Arduino

MCP41HVX1 -familjen av digitala potentiometrar (aka DigiPots) är enheter som efterliknar funktionen hos en analog potentiometer och styrs genom SPI. Ett exempel är att byta volymknappen på din stereo med en DigiPot som styrs av en Arduino. Detta förutsätter att volymkontrollen på din stereo är en potentiometer och inte en roterande kodare.

MCP41HVX1 är lite annorlunda än andra DigiPots genom att de har en delad rälsdesign. Detta betyder att medan DigiPot själv kan styras av utgångsspänningen från en Arduino, fungerar signalen som skickas genom motståndsnätverket med ett mycket större spänningsintervall (upp till 36 volt). De flesta DigiPots som kan styras med 5 volt är begränsade till 5 volt över motståndsnätverket vilket begränsar deras användning för eftermontering av en befintlig krets som arbetar med högre spänning, till exempel vad du skulle hitta i en bil eller båt.

Familjen MCP41HVX1 består av följande marker:

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

7 bitars chips tillåter 128 steg i motståndsnätverket och 8 bitars chips tillåter 256 steg i motståndsnätverket. Detta innebär att 8 -bitars chips tillåter dubbelt så många motståndsvärden från potentiometern.

Tillbehör

  • Välj lämpligt MCP41HVX1 -chip från listan ovan. Det chip du väljer är baserat på det motståndsintervall som krävs för din applikation. Denna instruktionsbok är baserad på TSSOP 14-paketversionerna av chipet så att följa tillsammans med den här guiden välja alla chip i listan utom MCP41HV31-103E/MQ som är ett QFN-paket. Det rekommenderas att få några extra marker eftersom jag stötte på en dålig och de är billiga. Jag beställde min från Digi-Key.
  • Sekundär likström som är från 10 till 36 volt. I mitt exempel använder jag en 17 volt väggvatten likström från min låda med gamla strömförsörjningar.
  • Lödningsflöde
  • Lödkolv
  • Löda
  • Pincett och / eller tandpetare
  • TSSOP 14 -stifts utbrottskort - Amazon - QLOUNI 40st PCB Proto Boards SMD till DIP Adapter Plate Converter TQFP (32 44 48 64 84100) SOP SSOP TSSOP 8 10 14 16 20 23 24 28 (Sortiment av storlekar. Massor tillgängliga för flera projekt)
  • Kvantifiera 2 - 7 -stifts rubriker - Amazon - DEPEPE 30 st 40 stift 2,54 mm hona och hona stifthuvuden för Arduino Prototype Shield - (Klipp till den storlek som krävs. Gott om i paketet för flera projekt)
  • Arduino Uno - om du inte har en skulle jag föreslå att du skaffar en officiell styrelse. Jag har haft blandad tur med de inofficiella versionerna. Digi -Key - Arduino Uno
  • Multimätare som kan mäta motstånd och även kontrollera kontinuitet
  • Bygelkablar
  • Bakbord
  • Rekommenderas starkt men inte absolut nödvändigt är ett handsfree -förstoringsglas eftersom TSSOP -chipsen är mycket små. Du behöver båda händerna för lödning och testning med multimätaren. Jag använder ett par Harbor Freight 3x Clip-On förstoringsglas ovanpå mina receptglasögon och ett fristående / ledat förstoringsglas. Andra alternativ är ett par billiga läsare från rabatt- eller dollarbutiken. Du kan till och med bära läsarna över dina receptglasögon eller få två par läsare (det ena ovanpå det andra) beroende på hur bra (eller dålig) din syn är. Om du fördubblar glasögonen, var försiktig eftersom din synvinkel är mycket begränsad, så se till att ta av dem innan du gör något annat. Var också extra försiktig vid lödning.
  • En annan sak som inte krävs men rekommenderas är Harbor Freight Helping Hands. De är krokodilklämmor fästa vid en metallbas. Dessa är tillgängliga från många andra leverantörer på internet samt under olika varumärken. Dessa är till stor hjälp vid lödning av chipet på utbrottskortet.

Steg 1: Lödning av TSSOP -chipet till ett breakout -kort

Image
Image
Lödning av TSSOP -chipet till ett breakout -kort
Lödning av TSSOP -chipet till ett breakout -kort
Lödning av TSSOP -chipet till ett breakout -kort
Lödning av TSSOP -chipet till ett breakout -kort

TSSOP -chipet måste lödas till ett utbrottskort så att du kan använda det med en brödbräda eller direkt med DuPont -hoppare. För prototyper är de alldeles för små för att arbeta direkt.

På grund av deras lilla storlek kan lödning av TSSOP -chipet vara den mest utmanande delen av detta projekt, men att veta tricket för att göra detta gör det till en uppgift som alla kan utföra. Det finns flera tekniker, den nedan är vad jag gjorde.

Strategin är att först flöda lödet till spåren av utbrottskortet.

  • Lägg inte chippet på utbrottskortet förrän du har fått instruktioner.
  • Det första du ska göra är att lägga en generös mängd flöde på brytbrädan.
  • Använd sedan ditt lödkolv för att värma lite lödning och flöda vidare till spåren.
  • Lägg lite mer flöde ovanpå lodet som du flödade ut på spåren såväl som botten av benen på chipet.
  • Placera chipet ovanpå spåren där du precis placerade löd och fluss. Pincett eller en tandpetare ger bra verktyg för att exakt sätta chipet på plats. Var noga med att rikta in chipet ordentligt så att alla stiften är direkt ovanför spåren. Rikta in stiftet en av flisen med markeringen för stift ett på utbrottskortet.
  • Använd ditt lödkolv för att värma en av stiften på slutet av chipet (antingen stift 1, 7, 8 eller 14) och tryck in den i spåret. Lödet som du tidigare applicerat smälter och flyter runt stiftet.

Titta på videon i detta steg för att se en demonstration av hur man lödar chipet till utbrottskortet. Ett förslag som jag har som skiljer sig från videon är att efter att du har lödt det första stiftet och kontrollerat om hela chipet är inriktat för att se till att alla stiften fortfarande ligger ovanpå spåren. Om du är lite ledig är det lätt att korrigera vid det här laget. När du är bekväm ser allt bra ut, löd ett annat stift i motsatt ände av chipet och kontrollera inriktningen igen. Om det ser bra ut, fortsätt och gör resten av stiften.

När du har lödt alla stiften föreslår videon att du använder ett förstoringsglas för att verifiera dina anslutningar. En bättre metod är att använda en multimeter för att kontrollera kontinuitet. Du bör placera en sond på benets ben och den andra sonden på den del av brädet där du ska löda rubriken (se den andra bilden i detta steg). Du bör också kontrollera de intilliggande stiften för att se till att de inte är anslutna på grund av lödning som kortar ihop flera stift. Så till exempel om du verifierar stift 4, kontrollera också stift 3 och stift 5. Stift 4 ska visa kontinuitet medan stift 3 och stift 5 ska visa en öppen krets. Det enda undantaget är att torkaren P0W kan visa anslutning till P0A eller P0B.

TIPS:

  • Som nämnts i materiallistan med viss förstoring som gör att dina händer är fria att arbeta kommer att vara till stor hjälp i detta steg.
  • Att använda alligatorklämman hjälper händerna att hålla utbrottskortet gör det lättare att lödda allt.
  • Skriv chipnumret på en bit maskeringstejp och håll fast vid botten av utbrottskortet (se den tredje bilden i detta avsnitt). Om du i framtiden behöver identifiera chipet blir det mycket lättare att läsa av maskeringstejpen. Min personliga erfarenhet är att jag fick lite fluss på chipet och numret släpptes helt så allt jag har är tejpen.

Steg 2: Kabeldragning

Kabeldragning
Kabeldragning

Du måste ansluta Arduino och Digipot som visas i kopplingsschemat. Stiften som används är baserade på layouten på en Arduino Uno. Om du använder en annan Arduino, se det sista steget.

Steg 3: Skaffa Arduino -biblioteket för att styra DigiPot

Skaffa Arduino -biblioteket för att styra DigiPot
Skaffa Arduino -biblioteket för att styra DigiPot

För att förenkla programmeringen har jag skapat ett bibliotek som är tillgängligt på Github. Gå till github.com/gregsrabian/MCP41HVX1 för att hämta MCP41HVX1 -biblioteket. Du kommer att vilja välja "Klon" -knappen och sedan välja "Ladda ner zip". Se till att spara Zip -filen på en plats där du vet var den är. Skrivbordet eller nedladdningsmappen är praktiska platser. När du har importerat den till Arduino IDE kan du ta bort den från nedladdningsplatsen.

Steg 4: Importera det nya biblioteket till Arduino IDE

Importera det nya biblioteket till Arduino IDE
Importera det nya biblioteket till Arduino IDE

Gå till "Sketch" i Arduino IDE, välj sedan "Inkludera bibliotek", välj sedan "Lägg till ZIP -bibliotek..". En ny dialogruta visas där du kan välja. ZIP -filen som du laddade ner från GitHub.

Steg 5: Exempel på bibliotek

Biblioteksexempel
Biblioteksexempel

När du har lagt till det nya biblioteket kommer du att märka att om du går till "Arkiv", väljer du "Exempel" och sedan väljer "Exempel från anpassade bibliotek" kommer du nu att se en post för MCP41HVX1 i listan. Om du svävar över den posten ser du WLAT, Wiper Control och SHDN som är exempelskisser. I denna instruktionsbok använder vi Wiper Control -exemplet.

Steg 6: Undersök källkoden

#inkludera "MCP41HVX1.h" // Definiera stiften som används på Arduino#definiera WLAT_PIN 8 // Om den är inställd på Låg "överföring och använd" #define SHDN_PIN 9 // Ställ in högt för att aktivera motståndsnätverket#definiera CS_PIN 10 // Ställ in på låg för att välja chip för SPI // Definiera några värden som används för testappen#definiera FORWARD true#definiera REVERSE falskt#definiera MAX_WIPER_VALUE 255 // Maximal torkare värderad MCP41HVX1 Digipot (CS_PIN, SHDN_PIN, WLAT_PIN); tomrumsinställning () { Serial.begin (9600); Serial.print ("Startposition ="); Serial.println (Digipot. WiperGetPosition ()); // Visa startvärde Serial.print ("Ställ in torkarposition ="); Serial.println (Digipot. WiperSetPosition (0)); // Ställ in torkarpositionen till 0} void loop () {static bool bDirection = FORWARD; int nWiper = Digipot. WiperGetPosition (); // Få aktuell torkarposition // Bestäm riktningen. om (MAX_WIPER_VALUE == nWiper) {bDirection = REVERSE; } annars om (0 == nWiper) {bDirection = FRAMÅT; } // Flytta digipot -torkaren om (FORWARD == bDirection) {nWiper = Digipot. WiperIncrement (); // Riktningen är framåt Serial.print ("Ökning -"); } annat {nWiper = Digipot. WiperDecrement (); // Riktningen är bakåt Serial.print ("Minska -"); } Serial.print ("Torkarposition ="); Serial.println (nWiper); fördröjning (100);}

Steg 7: Förstå källkoden och köra skissen

Image
Image

Denna källkod är tillgänglig i Arduino IDE genom att gå till menyn Exempel och hitta MCP41HVX1 som du just installerat (se föregående steg). Innan MCP41HVX1 öppnar du "Wiper Control" -exemplet. Det är bäst att använda koden som ingår i biblioteket som om det finns några buggfixar kommer det att uppdateras.

Wiper Control -exemplet visar följande API: er från MCP41HVX1 -biblioteket:

  • Konstruktör MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin)
  • WiperGetPosition ()
  • WiperSetPosition (byte byWiper)
  • WiperIncrement ()
  • WiperDecrement ()

Innan provkällkoden, se till att ställa in MAX_WIPER_VALUE till 127 om du använder ett 7 -bitars chip. Standard är 255 vilket är för 8 bitars chips. Om du gör ändringar i provet kommer Arduino IDE att tvinga dig att välja ett nytt namn för projektet eftersom det inte låter dig uppdatera exempelkoden. Detta är förväntat beteende.

Varje gång genom slingan kommer torkaren att öka med ett steg eller minska med ett steg beroende på den riktning den går. Om riktningen är uppåt och den når MAX_WIPER_VALUE kommer den att vända riktning. Om den träffar 0 kommer den att vända igen.

När skissen körs uppdateras den seriella monitorn med den aktuella torkarpositionen.

För att se motståndsförändringen måste du använda en multimeter för att läsa Ohms. Sätt mätarproberna på P0B (stift 11) och P0W (stift 12) på digipoten för att se hur motståndet ändras när programmet körs. Observera att motståndsvärdet inte kommer att gå ända ner till noll eftersom det finns lite internt motstånd i chipet men det kommer att bli nära 0 ohm. Det kommer sannolikt inte att gå till maxvärdet heller men kommer att vara nära.

När du tittar på videon kan du se att multimetern visar att motståndet ökar tills det når maxvärdet och sedan börjar minska. Chippet som används i videon är MCP41HV51-104E/ST som är ett 8-bitars chip med maxvärde 100k ohm.

Steg 8: Felsökning

Om saker inte fungerar som förväntat här är några saker att titta på.

  • Verifiera din ledning. Allt måste vara korrekt anslutet. Se till att du använder hela kopplingsschemat som anges i denna instruktionsbok. Det finns alternativa kopplingsscheman som presenteras i README, bibliotekets källkod och nedanför i denna instruktionsbok, men håller dig till det som dokumenteras ovan i ledningssteget ovan.
  • Se till att varje stift på din digitpott är lödda på utbrottskortet. Att använda visuell inspektion är inte tillräckligt bra. Se till att du verifierar med kontinuitetsfunktionen på din multimeter för att verifiera att alla stiften på digipoten är elektriskt anslutna till brytkortet och att det inte finns någon tvärförbindelse av stift från lödet som kan ha överbryggat över spår.
  • Om seriemonitorn visar att torkarpositionen ändras när du kör skissen men motståndsvärdet inte ändras är det en indikator på att WLAT eller SHDN inte gör en korrekt anslutning till brytbordet eller bygelrutorna för WLAT eller SHDN är inte korrekt anslutna till Arduino.
  • Se till att du använder en sekundär strömförsörjning som är likström mellan 10 och 36 volt.
  • Se till att 10 till 36 volt strömförsörjning fungerar genom att mäta spänningen med din multimeter.
  • Prova att använda den ursprungliga skissen. Om du har gjort några ändringar kan du ha infört ett fel.
  • Om inget av felsökningsstegen har hjälpt till att prova ett annat digipotchip. Förhoppningsvis köpte du flera och lödde dem samtidigt till en TSSOP -utbrottskort så det borde bara vara att byta ut det ena mot det andra. Jag hade ett dåligt chip som orsakade mig ganska lite frustration och det här var fixen.

Steg 9: Intern och ytterligare information

Alternativt kopplingsschema
Alternativt kopplingsschema

Vidare information:

Ytterligare information finns i MCP41HVX1 -databladet.

Fullständig dokumentation om hela MCP41HVX1 -biblioteket finns tillgänglig i filen README.md som ingår i nedladdningen av biblioteket. Den här filen är nedskriven och kan ses med korrekt formatering i Github (se längst ner på sidan) eller med en markering ner viewer / editor.

Kommunikation mellan Arduino och DigiPot:

Arduino kommunicerar med DigiPot med SPI. När biblioteket skickar ett torkarpositionskommando som WiperIncrement, WiperDecrement eller WiperSetPosition kallar det sedan WiperGetPosition för att få torkarpositionen från chipet. Värdet som returneras från dessa Wiper -kommandon är torkarens position som chipet ser det och kan användas för att verifiera att torkaren har flyttat till den förväntade platsen.

Avancerad funktionalitet (WLAT & SHDN)

Dessa avancerade funktioner visas inte i exemplet "Wiper Control". Det finns API: er tillgängliga i biblioteket för att styra WLAT & SHDN. Det finns också WLAT- och SHDN -exempelskisser (på samma plats som Wiper Control -skissen) med biblioteket.

SHDN (avstängning)

SHDN används för att inaktivera eller aktivera motståndsnätverket. Att ställa in SHDN till låg inaktiverar och hög aktiverar motståndsnätverket. När motståndsnätverket är inaktiverat kopplas P0A (DigiPot pin 13) från och P0B (DigiPot pin 11) är ansluten till P0W (DigiPot pin 12). Det kommer att finnas en liten resistans mellan P0B och P0W så att din mätare inte läser 0 ohm.

Om din applikation inte behöver styra SHDN kan du koppla den direkt till HIGH (se alternativt kopplingsschema). Du måste använda rätt konstruktör eller passera i MCP41HVX1_PIN_NOT_CONFIGURED till konstruktören för att indikera att SHDN är fastkopplad. Det är viktigt att notera att om du följer exemplet måste du använda hela kopplingsschemat (se ledningssteget ovan).

WLAT (Write Latch)

Den interna arkitekturen består av två komponenter på ett enda chip. En av komponenterna är SDI -gränssnittet och registret för att hålla torkarvärdet. Den andra komponenten är själva motståndsnätverket. WLAT ansluter båda interna komponenterna.

När WLAT är inställt på LÅG skickas all inställt torkarpositionskommandoinformation direkt till motståndsnätverket och torkarpositionen uppdateras.

Om WLAT är inställt på HIGH lagras torkarpositionsinformationen som skickas via SPI i ett internt register men skickas inte till motståndsnätverket och därför kommer torkarpositionen inte att uppdateras. När WLAT är inställt på LOW överförs värdet från registret till motståndsnätverket.

WLAT är användbart om du använder flera digipots som du behöver för att synkronisera. Strategin är att ställa in WLAT till HIGH på alla digipotter och sedan ställa in torkarvärdet på alla marker. När torkarvärdet har skickats till alla digipots kan WLAT ställas in på LOW på alla enheter samtidigt så att de alla flyttar torkarna samtidigt.

Om du bara styr en DigiPot eller har flera men de inte behöver hållas synkroniserade behöver du troligen inte denna funktion och kan därför koppla WLAT direkt till LÅG (se alternativt kopplingsschema). Du måste använda rätt konstruktör eller passera i MCP41HVX1_PIN_NOT_CONFIGURED till konstruktorn för att indikera att WLAT är fastkopplad. Det är viktigt att notera att om du följer exemplet måste du använda hela kopplingsschemat (se ledningssteget ovan).

Steg 10: Alternativt kopplingsschema

Kabeldragning

Du har möjlighet att ansluta WLAT från digpot direkt till LOW / GND istället för att ansluta till en digital pin. Om du gör detta kommer du inte att kunna styra WLAT. Du har också möjlighet att ansluta SHDN direkt till HIGH istället för en digital pin. Om du gör detta kommer du inte att kunna styra SHDN.

WLAT och SHDN är oberoende av varandra så att du kan koppla ihop den ena och ansluta den andra till en digital stift, båda trådarna eller ansluta båda till digitala stift så att de kan styras. Se det alternativa kopplingsschemat för de som du vill koppla ihop och hänvisa tillbaka till huvudkopplingsschemat i steg 2 för anslutning till styrbara digitala stift.

Konstruktörer

Det finns tre konstruktörer i klassen MCP41HVX. Vi kommer att diskutera två av dem. De är alla dokumenterade i filen README.md så om du är intresserad av den tredje konstruktören, se dokumentationen.

  • MCP41HVX1 (int nCSPin) - använd denna konstruktör endast om både WLAT och SHDN är hårda.
  • MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin) - Använd den här konstruktorn om antingen WLAT eller SHDN är trådbundna. Skicka in konstanten MCP41HVX1_PIN_NOT_CONFIGURED om stiftet är fastkopplat eller stiftnumret om det är anslutet till ett digitalt stift.

nCSPin måste vara ansluten till en digital stift. Det är ogiltigt att skicka MCP41HVX1_PIN_NOT_CONFIGURED till konstruktören för nCSPin.

Vad händer om jag inte använder en Arduino Uno?

Arduino använder SPI för att kommunicera till digipoten. SPI -stiften är specifika stift på Arduino -kortet. SPI -stiften på Uno är:

  • SCK - pin 13 på Uno ansluten till pin 2 på digipot
  • MOSI - pin 11 på Uno ansluten till pin 4 på digipot
  • MISO - stift 12 på Uno ansluten till stift 5 på digipot

Om du använder en Arduino som inte är en Uno måste du ta reda på vilken stift som är SCK, MOSI och MISO och ansluta dem till digipoten.

De andra stiften som används i skissen är vanliga digitala stift så att alla digitala stift fungerar. Du måste ändra skissen för att ange stiften som du väljer på Arduino -kortet som du använder. De vanliga digitala stiften är:

  • CS - pin 10 på Uno ansluten till pin 3 på digipot (uppdatera CS_PIN i skissen med nytt värde)
  • WLAT - pin 8 på Uno ansluten till pin 6 på digipot (uppdatera WLAT_PIN i skissen med nytt värde)
  • SHDN - pin 9 på Uno ansluten till pin 7 på digipot (uppdatera SHDN_PIN i skissen med nytt värde)

Rekommenderad: