Innholdsfortegnelse:

MCP41HVX1 digitalt potensiometer for Arduino: 10 trinn (med bilder)
MCP41HVX1 digitalt potensiometer for Arduino: 10 trinn (med bilder)

Video: MCP41HVX1 digitalt potensiometer for Arduino: 10 trinn (med bilder)

Video: MCP41HVX1 digitalt potensiometer for Arduino: 10 trinn (med bilder)
Video: This component can control tons of circuits! Digital Potentiometer Guide! EB#51 2024, November
Anonim
MCP41HVX1 digitalt potensiometer for Arduino
MCP41HVX1 digitalt potensiometer for Arduino

MCP41HVX1 -familien av digitale potensiometre (aka DigiPots) er enheter som etterligner funksjonen til et analogt potensiometer og styres gjennom SPI. Et eksempel kan være å erstatte volumknappen på stereoanlegget med en DigiPot som styres av en Arduino. Dette forutsetter at volumkontrollen på stereoanlegget ditt er et potensiometer og ikke en roterende encoder.

MCP41HVX1 er litt annerledes enn andre DigiPots ved at de har en delt skinnedesign. Dette betyr at selv om DigiPot selv kan styres av utgangsspenningen til en Arduino, fungerer signalet som sendes gjennom motstandsnettverket med et langt større spenningsområde (opptil 36 volt). De fleste DigiPots som kan styres med 5 volt er begrenset til 5 volt over motstandsnettverket, noe som begrenser bruken av ettermontering av en eksisterende krets som opererer på høyere spenning, for eksempel det du finner i en bil eller båt.

MCP41HVX1 -familien består av følgende sjetonger:

  • 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)

7 -bits sjetongene tillater 128 trinn i motstandsnettverket og 8 -bits sjetonger tillater 256 trinn i motstandsnettverket. Dette betyr at 8 -bits sjetonger tillater dobbelt så mange motstandsverdier fra potensiometeret.

Rekvisita

  • Velg den passende MCP41HVX1 -brikken fra listen ovenfor. Brikken du velger er basert på motstandsområdet som kreves for søknaden din. Denne instruksen er basert på TSSOP 14 pakkeversjoner av brikken, så følg med denne guiden, velg hvilken som helst brikke i listen, bortsett fra MCP41HV31-103E/MQ som er en QFN-pakke. Det anbefales å få noen ekstra sjetonger ettersom jeg støtte på en dårlig, og de er rimelige. Jeg bestilte min fra Digi-Key.
  • Sekundær likestrømforsyning som er fra 10 til 36 volt. I mitt eksempel bruker jeg en 17 volt veggvorter likestrøm fra boksen min med gamle strømforsyninger.
  • Loddefluks
  • Loddejern
  • Lodding
  • Pincett og / eller tannpirker
  • TSSOP 14 pin breakout board - Amazon - QLOUNI 40pcs PCB Proto Boards SMD to DIP Adapter Plate Converter TQFP (32 44 48 64 84 100) SOP SSOP TSSOP 8 10 14 16 20 23 24 28 (Sortiment av størrelser. Mye tilgjengelig for flere prosjekter)
  • Kvantifiser 2 - 7 -pins hoder - Amazon - DEPEPE 30 stk 40 Pin 2,54mm Male og Female Pin Headers for Arduino Prototype Shield - (Kutt i størrelse nødvendig. Mye i pakken for flere prosjekter)
  • Arduino Uno - hvis du ikke har en, vil jeg foreslå å få et offisielt styre. Jeg har hatt blandet flaks med de uoffisielle versjonene. Digi -Key - Arduino Uno
  • Multimeter som kan måle motstand og også sjekke kontinuitet
  • Jumper ledninger
  • Brødbrett
  • Sterkt anbefalt, men ikke absolutt nødvendig, er en håndfri forstørrelsesglass da TSSOP -brikkene er veldig små. Du trenger begge hender for lodding og testing med multimåleren. Jeg bruker et par Harbor Freight 3x Clip-On forstørrelsesglass på toppen av mine reseptbriller og et frittstående / leddet forstørrelsesglass. Andre alternativer er et par billige lesere fra rabatt- eller dollarbutikken. Du kan til og med bruke leserne over reseptbelagte briller eller få to par lesere (det ene på toppen av det andre) avhengig av hvor godt (eller dårlig) synet ditt er. Hvis du dobler glassene, vær forsiktig, da synsområdet ditt er svært begrenset, så sørg for å ta dem av før du gjør noe annet. Vær også ekstra forsiktig ved lodding.
  • Et annet element som ikke er nødvendig, men sterkt anbefalt, er Harbour Freight Helping Hands. De er krokodilleklemmer festet til en metallbase. Disse er også tilgjengelig fra mange andre leverandører på internett under forskjellige merkenavn. Disse er veldig nyttige når du lodder brikken på utbruddskortet.

Trinn 1: Lodding TSSOP -brikken til et breakout -bord

Image
Image
Lodding av TSSOP -brikken til et breakout -bord
Lodding av TSSOP -brikken til et breakout -bord
Lodding av TSSOP -brikken til et breakout -bord
Lodding av TSSOP -brikken til et breakout -bord

TSSOP -brikken må loddes til et utbruddstavle, slik at du kan bruke den med et brødbrett eller direkte med DuPont -hoppere. For prototypearbeid er de altfor små til å jobbe med direkte.

På grunn av sin lille størrelse kan lodding av TSSOP -brikken være den mest utfordrende delen av dette prosjektet, men å vite trikset for å gjøre dette gjør det til en oppgave som alle kan utføre. Det er flere teknikker, den ene nedenfor er hva jeg gjorde.

Strategien er å flyte loddetinn videre til sporene etter utbruddstavlen først.

  • Ikke legg brikken på utbruddskortet før du blir bedt om det.
  • Den første tingen å gjøre er å sette en generøs mengde fluks på breakout -brettet.
  • Deretter bruker du loddejernet litt loddetinn og flyter det videre til sporene.
  • Legg litt mer fluss på toppen av loddetinnet som du rant ut på sporene så vel som bunnen av bena på brikken.
  • Plasser brikken på toppen av sporene der du nettopp plasserte loddetinn og fluss. Pincett eller en tannpirker gir gode verktøy for å sette brikken nøyaktig på plass. Sørg for å justere brikken riktig slik at alle pinnene er rett over sporene. Juster pinne en av brikken med markeringen for pinne en på brytebrettet.
  • Ved hjelp av loddejernet, varme en av pinnene på enden av brikken (enten pinne 1, 7, 8 eller 14) og trykke den inn i sporet. Loddetinnet du tidligere påførte smelter og flyter rundt pinnen.

Se videoen i dette trinnet for å se en demonstrasjon av hvordan du lodder brikken til utbruddskortet. Et forslag jeg har som er annerledes enn videoen, er at etter at du har loddet den første pin -stopperen og kontrollert om hele brikken er justert for å sikre at alle pinnene fortsatt er på toppen av sporene. Hvis du er litt ute, er det enkelt å korrigere på dette tidspunktet. Når du er komfortabel ser alt bra ut, lodd enda en pinne i motsatt ende av brikken og sjekk justeringen igjen. Hvis det ser bra ut, fortsett og gjør resten av pinnene.

Etter at du har loddet alle pinnene, foreslår videoen å bruke et forstørrelsesglass for å bekrefte tilkoblingene dine. En bedre metode er å bruke et multimeter for å sjekke kontinuitet. Du bør plassere den ene sonden på benet på tappen og den andre sonden på den delen av brettet hvor du skal lodde hodet (se det andre bildet i dette trinnet). Du bør også sjekke de tilstøtende pinnene for å forsikre deg om at de ikke er tilkoblet på grunn av lodding som korter flere pinner sammen. Så for eksempel hvis du bekrefter pin 4, sjekk også pin 3 og pin 5. Pin 4 skal vise kontinuitet mens pin 3 og pin 5 skal vise en åpen krets. Det eneste unntaket er at viskeren P0W kan vise tilkobling til P0A eller P0B.

TIPS:

  • Som nevnt i materialelisten vil det være nyttig å ha en forstørrelse tilgjengelig som lar hendene dine være fri til å arbeide i dette trinnet.
  • Ved å bruke alligatorklemmen til å holde hendene i utbruddskortet, blir lodding alt litt enklere.
  • Skriv chip -nummeret på et stykke maskeringstape og hold deg til bunnen av breakout -brettet (se det tredje bildet i denne delen). Hvis du i fremtiden må identifisere brikken, vil det være mye lettere å lese av maskeringstapen. Min personlige erfaring er at jeg fikk en liten flux på brikken og nummeret gikk helt av, så alt jeg har er båndet.

Trinn 2: Kabling

Kabling
Kabling

Du må koble Arduino og Digipot som vist i koblingsskjemaet. Pinnene som brukes, er basert på utformingen av en Arduino Uno. Hvis du bruker en annen Arduino, kan du se det siste trinnet.

Trinn 3: Få Arduino -biblioteket for å kontrollere DigiPot

Få Arduino -biblioteket for å kontrollere DigiPot
Få Arduino -biblioteket for å kontrollere DigiPot

For å forenkle programmeringen har jeg laget et bibliotek som er tilgjengelig på Github. Gå til github.com/gregsrabian/MCP41HVX1 for å få MCP41HVX1 -biblioteket. Du vil velge "Clone" -knappen og deretter velge "Download Zip". Sørg for å lagre Zip -filen på et sted du vet hvor den er. Skrivebordet eller nedlastingsmappen er praktiske steder. Når du har importert den til Arduino IDE, kan du slette den fra nedlastingsstedet.

Trinn 4: Importere det nye biblioteket til Arduino IDE

Importere det nye biblioteket til Arduino IDE
Importere det nye biblioteket til Arduino IDE

Gå til "Sketch" i Arduino IDE, velg deretter "Inkluder bibliotek", velg deretter "Legg til ZIP -bibliotek..". En ny dialogboks vil dukke opp slik at du kan velge. ZIP -filen du lastet ned fra GitHub.

Trinn 5: Bibliotekeksempler

Bibliotek Eksempler
Bibliotek Eksempler

Etter at du har lagt til det nye biblioteket, vil du legge merke til at hvis du går til "Fil", velger du "Eksempler", og deretter velger du "Eksempler fra tilpassede biblioteker", vil du nå se en oppføring for MCP41HVX1 i listen. Hvis du holder musepekeren over den oppføringen, ser du WLAT, Wiper Control og SHDN som er eksempler på skisser. I denne instruksen bruker vi Wiper Control -eksemplet.

Trinn 6: Undersøk kildekoden

#include "MCP41HVX1.h" // Definer pinnene som brukes på Arduino#definere WLAT_PIN 8 // Hvis satt til Lav "overføring og bruk" #define SHDN_PIN 9 // Sett høyt for å aktivere motstandsnettverket#definere CS_PIN 10 // Sett til lav for å velge chip for SPI // Definer noen verdier som brukes for testappen#definere FORWARD true#definere REVERSE false#definere MAX_WIPER_VALUE 255 // Maksimal visker verdt MCP41HVX1 Digipot (CS_PIN, SHDN_PIN, WLAT_PIN); ugyldig oppsett () { Serial.begin (9600); Serial.print ("Startposisjon ="); Serial.println (Digipot. WiperGetPosition ()); // Vis startverdi Serial.print ("Set Wiper Position ="); Serial.println (Digipot. WiperSetPosition (0)); // Sett viskerposisjonen til 0} void loop () {static bool bDirection = FORWARD; int nWiper = Digipot. WiperGetPosition (); // Få nåværende viskerposisjon // Bestem retningen. hvis (MAX_WIPER_VALUE == nWiper) {bDirection = REVERSE; } annet hvis (0 == nWiper) {bDirection = FORWARD; } // Flytt digipot -viskeren hvis (FORWARD == bDirection) {nWiper = Digipot. WiperIncrement (); // Retningen er fremover Serial.print ("Inkrement -"); } annet {nWiper = Digipot. WiperDecrement (); // Retningen er bakover Serial.print ("Decrement -"); } Serial.print ("Vindusviskerposisjon ="); Serial.println (nWiper); forsinkelse (100);}

Trinn 7: Forstå kildekoden og kjøre skissen

Image
Image

Denne kildekoden er tilgjengelig i Arduino IDE ved å gå til Eksempler -menyen og finne MCP41HVX1 som du nettopp har installert (se forrige trinn). I MCP41HVX1 åpner du "Wiper Control" -eksemplet. Det er best å bruke koden som følger med biblioteket, som om det er feilrettinger, vil den bli oppdatert.

Wiper Control -eksemplet demonstrerer følgende API -er fra MCP41HVX1 -biblioteket:

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

Sørg for å sette MAX_WIPER_VALUE til 127 hvis du bruker en 7 -bits chip. Standard er 255, som er for 8 biters chips. Hvis du gjør endringer i prøven, vil Arduino IDE tvinge deg til å velge et nytt navn for prosjektet, da det ikke lar deg oppdatere eksempelkoden. Dette er forventet oppførsel.

Hver gang gjennom sløyfen øker viskeren med ett trinn eller reduseres med ett trinn, avhengig av retningen den går. Hvis retningen er oppe og den kommer til MAX_WIPER_VALUE, vil den snu retningen. Hvis den treffer 0, vil den reversere igjen.

Etter hvert som skissen går, oppdateres den serielle skjermen med den nåværende viskerposisjonen.

For å se motstandsendringen må du bruke et multimetersett for å lese Ohm. Sett målesonderne på P0B (pin 11) og P0W (pin 12) på digipotten for å se motstanden endres mens applikasjonen kjører. Vær oppmerksom på at motstandsverdien ikke vil gå helt ned til null, da det er en viss indre motstand i brikken, men den vil komme nær 0 ohm. Det vil mest sannsynlig ikke gå til maksverdien heller, men vil være nær.

Når du ser på videoen, kan du se at multimeteret viser motstanden som øker til den når maksverdien og deretter begynner å synke. Brikken som brukes i videoen er MCP41HV51-104E/ST som er en 8-biters brikke med maksimal verdi på 100k ohm.

Trinn 8: Feilsøking

Hvis ting ikke fungerer som forventet, er det noen ting du må se på.

  • Kontroller ledningene dine. Alt må være riktig tilkoblet. Sørg for at du bruker hele koblingsskjemaet som angitt i denne instruksjonsboken. Det er alternative koblingsskjemaer presentert i README, bibliotekets kildekode og nedenfor i denne instruksjonsboken, men hold deg til det som er dokumentert ovenfor i ledningstrinnet ovenfor.
  • Sørg for at hver pinne på digitpotten din er loddet til utbruddskortet. Å bruke visuell inspeksjon er ikke bra nok. Sørg for at du bekrefter ved hjelp av kontinuitetsfunksjonen til multimeteret ditt for å bekrefte at alle pinnene på digipotten er elektrisk koblet til utbruddskortet, og at det ikke er noen kryssforbindelse mellom pinner fra loddetinn som kan ha bygd bro over spor.
  • Hvis den serielle skjermen viser at viskerposisjonen endres når du kjører skissen, men motstandsverdien ikke endres, er det en indikator på at WLAT eller SHDN ikke gjør en skikkelig forbindelse til utbruddskortet eller jumper -viskerne for WLAT eller SHDN er ikke riktig koblet til Arduino.
  • Sørg for at du bruker en sekundær strømforsyning som er likestrøm mellom 10 og 36 volt.
  • Sørg for at strømforsyningen på 10 til 36 volt fungerer ved å måle spenningen med multimeteret ditt.
  • Prøv å bruke den originale skissen. Hvis du har gjort noen endringer, kan du ha innført en feil.
  • Hvis ingen av feilsøkingstrinnene har hjulpet med å prøve en annen digipot -brikke. Forhåpentligvis har du kjøpt flere og loddet dem samtidig til et TSSOP -brett, så det burde bare være å bytte ut det ene mot det andre. Jeg hadde en dårlig chip som forårsaket meg litt frustrasjon, og dette var fiksen.

Trinn 9: Internt og tilleggsinformasjon

Alternativt koblingsskjema
Alternativt koblingsskjema

Mer informasjon:

Ytterligere informasjon finnes i databladet MCP41HVX1.

Full dokumentasjon om hele MCP41HVX1 -biblioteket er tilgjengelig i README.md -filen som er en del av nedlastingen av biblioteket. Denne filen er skrevet med mark down og kan sees med riktig formatering i Github (se nederst på siden) eller med en mark down viewer / editor.

Kommunikasjon mellom Arduino og DigiPot:

Arduino kommuniserer med DigiPot ved hjelp av SPI. Etter at biblioteket sender en viskerposisjonskommando som WiperIncrement, WiperDecrement eller WiperSetPosition, kaller den WiperGetPosition for å få viskerposisjonen fra brikken. Verdien som returneres fra disse Wiper -kommandoene er viskerens posisjon slik brikken ser det og kan brukes til å bekrefte at viskeren har flyttet til det forventede stedet.

Avansert funksjonalitet (WLAT & SHDN)

Disse avanserte funksjonene er ikke demonstrert i eksempelet "Wiper Control". Det er APIer tilgjengelig i biblioteket for å kontrollere WLAT og SHDN. Det er også WLAT- og SHDN -eksempelskisser (på samme sted som Wiper Control -skissen) med biblioteket.

SHDN (Shutdown)

SHDN brukes til å deaktivere eller aktivere motstandsnettverket. Innstilling av SHDN til lav deaktiverer og høy aktiverer motstandsnettverket. Når motstandsnettverket er deaktivert, kobles P0A (DigiPot pin 13) fra og P0B (DigiPot pin 11) er koblet til P0W (DigiPot pin 12). Det vil være en liten mengde motstand mellom P0B og P0W, slik at måleren din ikke vil lese 0 ohm.

Hvis søknaden din ikke trenger å kontrollere SHDN, kan du koble den direkte til HIGH (se alternativt koblingsskjema). Du må bruke riktig konstruktør eller pass i MCP41HVX1_PIN_NOT_CONFIGURED til konstruktøren for å indikere at SHDN er fast kablet. Det er viktig å merke seg at hvis du følger med eksemplet, må du bruke hele koblingsskjemaet (se ledningstrinn ovenfor).

WLAT (skrivelås)

Den interne arkitekturen består av to komponenter på en enkelt brikke. En av komponentene er SDI -grensesnittet og registeret for å holde viskerverdien. Den andre komponenten er selve motstandsnettverket. WLAT kobler begge interne komponenter sammen.

Når WLAT er satt til LAV, sendes enhver innstilt viskerposisjonskommandoinformasjon direkte til motstandsnettverket og viskerposisjonen oppdateres.

Hvis WLAT er satt til HIGH, holdes viskerposisjonsinformasjonen som sendes gjennom SPI i et internt register, men blir ikke sendt til motstandsnettverket, og derfor vil viskerposisjonen ikke oppdateres. Når WLAT er satt til LAV, overføres verdien fra registeret til motstandsnettverket.

WLAT er nyttig hvis du bruker flere digipotter som du trenger for å holde synkronisert. Strategien er å sette WLAT til HIGH på alle digipottene og deretter sette viskerverdien på alle sjetongene. Når viskerverdien er sendt til alle digipottene, kan WLAT settes til LAVT på alle enheter samtidig, slik at de alle flytter viskerne samtidig.

Hvis du bare kontrollerer én DigiPot eller har flere, men de ikke trenger å være synkronisert, trenger du sannsynligvis ikke denne funksjonaliteten og kan derfor koble WLAT direkte til LAV (se alternativt koblingsskjema). Du må bruke riktig konstruktør eller pass i MCP41HVX1_PIN_NOT_CONFIGURED til konstruktøren for å indikere at WLAT er fast kablet. Det er viktig å merke seg at hvis du følger eksemplet, må du bruke hele koblingsskjemaet (se ledningstrinn ovenfor).

Trinn 10: Alternativt koblingsskjema

Kabling

Du har muligheten til å koble WLAT fra digpotten direkte til LOW / GND i stedet for å koble til en digital pin. Hvis du gjør dette, vil du ikke kunne kontrollere WLAT. Du har også muligheten til å koble SHDN direkte til HIGH i stedet for en digital pin. Hvis du gjør dette, vil du ikke kunne kontrollere SHDN.

WLAT og SHDN er uavhengige av hverandre, slik at du kan koble den ene og koble den andre til en digital pinne, hard ledning begge to, eller koble begge til digitale pinner, slik at de kan kontrolleres. Se det alternative koblingsskjemaet for de du vil koble til, og gå tilbake til hovedledningsdiagrammet i trinn 2 for ledninger til kontrollerbare digitale pinner.

Konstruktører

Det er tre konstruktører i MCP41HVX -klassen. Vi skal diskutere to av dem. De er alle dokumentert i README.md -filen, så hvis du er interessert i den tredje konstruktøren, vennligst se dokumentasjonen.

  • MCP41HVX1 (int nCSPin) - bruk denne konstruktøren bare hvis både WLAT og SHDN er tilkoblet.
  • MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin) - Bruk denne konstruktøren hvis enten WLAT eller SHDN er tilkoblet. Send inn konstanten MCP41HVX1_PIN_NOT_CONFIGURED hvis pinnen er fast kablet eller pinnummeret hvis den er koblet til en digital pinne.

nCSPin må være koblet til en digital pin. Det er ugyldig å sende MCP41HVX1_PIN_NOT_CONFIGURED til konstruktøren for nCSPin.

Hva om jeg ikke bruker en Arduino Uno?

Arduino bruker SPI for å kommunisere til digipotten. SPI -pinnene er spesifikke pinner på Arduino -kortet. SPI -pinnene på Uno er:

  • SCK - pin 13 på Uno koblet til pin 2 på digipotten
  • MOSI - pin 11 på Uno koblet til pin 4 på digipotten
  • MISO - pin 12 på Uno koblet til pin 5 på digipotten

Hvis du bruker en Arduino som ikke er en Uno, må du finne ut hvilken pin som er SCK, MOSI og MISO og koble disse til digipotten.

De andre pinnene som brukes i skissen er vanlige digitale pinner, så enhver digital pinne vil fungere. Du må endre skissen for å spesifisere pinnene du velger på Arduino -brettet du bruker. De vanlige digitale pinnene er:

  • CS - pin 10 på Uno koblet til pin 3 på digipoten (oppdater CS_PIN i skissen med ny verdi)
  • WLAT - pin 8 på Uno koblet til pin 6 på digipotten (oppdater WLAT_PIN i skissen med ny verdi)
  • SHDN - pin 9 på Uno koblet til pin 7 på digipotten (oppdater SHDN_PIN i skissen med ny verdi)

Anbefalt: