Indholdsfortegnelse:

MCP41HVX1 digitalt potentiometer til Arduino: 10 trin (med billeder)
MCP41HVX1 digitalt potentiometer til Arduino: 10 trin (med billeder)

Video: MCP41HVX1 digitalt potentiometer til Arduino: 10 trin (med billeder)

Video: MCP41HVX1 digitalt potentiometer til Arduino: 10 trin (med billeder)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, November
Anonim
MCP41HVX1 digitalt potentiometer til Arduino
MCP41HVX1 digitalt potentiometer til Arduino

MCP41HVX1 -familien af digitale potentiometre (aka DigiPots) er enheder, der efterligner funktionen af et analogt potentiometer og styres gennem SPI. Et eksempel på en applikation ville være at udskifte lydstyrkeknappen på dit stereoanlæg med en DigiPot, der styres af en Arduino. Dette forudsætter, at lydstyrkekontrollen på dit stereoanlæg er et potentiometer og ikke en roterende encoder.

MCP41HVX1 er lidt anderledes end andre DigiPots, idet de har et split -rail design. Det betyder, at selvom DigiPot selv kan styres af udgangsspændingen fra en Arduino, fungerer det signal, der sendes gennem modstandsnettet, med et langt større spændingsområde (op til 36 volt). De fleste DigiPots, der kan styres med 5 volt, er begrænset til 5 volt på tværs af modstandsnetværket, hvilket begrænser deres brug til eftermontering af et eksisterende kredsløb, der fungerer på højere spænding, f.eks. Hvad du ville finde i en bil eller båd.

MCP41HVX1 -familien består af følgende 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)

De 7 bit chips tillader 128 trin i modstandsnetværket og 8 bit chips tillader 256 trin i modstandsnetværket. Det betyder, at 8 bit chips tillader dobbelt så mange modstandsværdier fra potentiometeret.

Forbrugsvarer

  • Vælg den passende MCP41HVX1 -chip fra listen ovenfor. Den chip, du vælger, er baseret på det modstandsområde, der kræves til din applikation. Denne instruks er baseret på TSSOP 14-pakkeversionerne af chippen, så følg den sammen med denne vejledning, vælg enhver chip på listen, undtagen MCP41HV31-103E/MQ, som er en QFN-pakke. Det anbefales at få et par ekstra chips, da jeg stødte på en dårlig, og de er billige. Jeg bestilte min fra Digi-Key.
  • Sekundær jævnstrømforsyning, der er fra 10 til 36 volt. I mit eksempel bruger jeg en 17 volt vægvorter DC -strømforsyning fra min æske med gamle strømforsyninger.
  • Loddeflux
  • Loddekolbe
  • Lodde
  • Pincet og / eller tandstikker
  • TSSOP 14 pin breakout board - Amazon - QLOUNI 40 stk PCB Proto Boards SMD til DIP Adapter Plate Converter TQFP (32 44 48 64 84 100) SOP SSOP TSSOP 8 10 14 16 20 23 24 28 (Sortiment af størrelser. Masser til flere projekter)
  • Kvantificer 2 - 7 pin headers - Amazon - DEPEPE 30 stk. 40 Pin 2,54 mm Male og Female Pin Headers til Arduino Prototype Shield - (Skær i størrelse nødvendig. Masser i pakken til flere projekter)
  • Arduino Uno - hvis du ikke har en, vil jeg foreslå at få en officiel bestyrelse. Jeg har haft blandet held med de uofficielle versioner. Digi -Key - Arduino Uno
  • Multi-meter, som kan måle modstand og også kontrollere kontinuitet
  • Jumper ledninger
  • Brødbræt
  • Stærkt anbefalet, men ikke absolut påkrævet, er en håndfri forstørrelsesglas, da TSSOP -chipsene er meget små. Du skal bruge begge hænder til lodning og testning med multimåleren. Jeg bruger et par Harbor Freight 3x Clip-On forstørrelsesglas oven på mine receptpligtige briller og et fritstående / artikuleret forstørrelsesglas. Andre muligheder er et par billige læsere fra discount- eller dollarbutikken. Du kan endda bære læserne over dine receptpligtige briller eller få to par læsere (det ene oven på det andet) afhængigt af hvor god (eller dårlig) din vision er. Hvis du fordobler glassene, skal du være forsigtig, da dit synsinterval vil være meget begrænset, så sørg for at tage dem af, før du gør noget andet. Vær også ekstra forsigtig ved lodning.
  • Et andet element, der ikke er påkrævet, men stærkt anbefales, er Harbor Freight Helping Hands. De er alligatorclips fastgjort til en metalbase. Disse er tilgængelige fra mange andre leverandører på internettet samt under forskellige mærkenavne. Disse er meget nyttige, når du lodder chippen på udbrudskortet.

Trin 1: Lodning af TSSOP -chippen til et breakout -kort

Image
Image
Lodning af TSSOP -chippen til et breakout -kort
Lodning af TSSOP -chippen til et breakout -kort
Lodning af TSSOP -chippen til et breakout -kort
Lodning af TSSOP -chippen til et breakout -kort

TSSOP -chippen skal loddes til et breakout -bord, så du kan bruge den med et brødbræt eller direkte med DuPont -jumpere. Til prototypearbejde er de alt for små til at arbejde direkte med.

På grund af deres lille størrelse kan lodning af TSSOP -chippen være den mest udfordrende del af dette projekt, men at kende tricket til at gøre dette gør det til en opgave, som alle kan udføre. Der er flere teknikker, den ene herunder er, hvad jeg gjorde.

Strategien er først at strømme loddetøjet til sporene efter breakout -brættet.

  • Læg ikke chippen på breakout -kortet, før du får besked.
  • Den første ting at gøre er at lægge en generøs mængde flux på breakout -brættet.
  • Brug derefter dit loddejern til at varme lidt loddemetal op og før det videre til sporene.
  • Læg noget mere flux oven på loddet, som du flyder ud på sporene samt bunden af benene på chippen.
  • Placer chippen oven på sporene, hvor du lige har placeret loddetin og flux. Pincet eller en tandstikker giver gode værktøjer til præcist at sætte chippen på plads. Sørg for at justere chippen korrekt, så alle stifter er direkte over sporene. Juster pin en af chippen med markeringen for pin one på break out boardet.
  • Brug dit loddejern til at varme en af stifterne på enden af chippen (enten pin 1, 7, 8 eller 14) og trykke den ind i sporet. Loddet, som du tidligere har påført, smelter og flyder rundt om stiften.

Se videoen i dette trin for at se en demonstration af, hvordan du lodder chippen til udbrudskortet. Et forslag, som jeg har, der er forskelligt fra videoen, er, at når du har loddet det første pin -stop og kontrolleret for justering af hele chippen for at sikre, at alle stifterne stadig er oven på sporene. Hvis du er lidt væk, er det let at rette på dette tidspunkt. Når du har det godt, ser alt godt ud, loddet en anden nål i den modsatte ende af chippen og kontrollerer justeringen igen. Hvis det ser godt ud, skal du fortsætte og gøre resten af stifterne.

Når du har loddet alle stifter, foreslår videoen at bruge et forstørrelsesglas til at kontrollere dine forbindelser. En bedre metode er at bruge et multimeter til at kontrollere kontinuitet. Du skal placere den ene sonde på benets ben og den anden sonde på den del af brættet, hvor du vil lodde headeren (se det andet billede i dette trin). Du bør også kontrollere de tilstødende stifter for at sikre, at de ikke er forbundet på grund af lodning, der kortslutter flere stifter sammen. Så hvis du f.eks. Verificerer pin 4, skal du også kontrollere pin 3 og pin 5. Pin 4 skal vise kontinuitet, mens pin 3 og pin 5 skal vise et åbent kredsløb. Den eneste undtagelse er viskeren P0W kan vise forbindelse til P0A eller P0B.

TIPS:

  • Som nævnt i materialelisten vil en vis forstørrelse, der lader dine hænder være fri til arbejde, være meget nyttig i dette trin.
  • Ved hjælp af alligatorklemmen hjælper hænderne med at holde breakout -bordet med at lodde alt lidt lettere.
  • Skriv chip -nummeret på et stykke malertape og hold dig til bunden af breakout -kortet (se det tredje billede i dette afsnit). Hvis du i fremtiden skal identificere chippen, vil det være meget lettere at aflæse malertapen. Min personlige erfaring er, at jeg fik en lille smule flux på chippen, og nummeret kom helt af, så alt jeg har er båndet.

Trin 2: Ledningsføring

Ledninger
Ledninger

Du skal tilslutte Arduino og Digipot som vist i ledningsdiagrammet. Benene, der bruges, er baseret på layoutet af en Arduino Uno. Hvis du bruger en anden Arduino, kan du se det sidste trin.

Trin 3: Få Arduino -biblioteket til styring af DigiPot

Få Arduino -biblioteket til styring af DigiPot
Få Arduino -biblioteket til styring af DigiPot

For at forenkle programmeringen har jeg oprettet et bibliotek, der er tilgængeligt på Github. Gå til github.com/gregsrabian/MCP41HVX1 for at hente MCP41HVX1 -biblioteket. Du vil vælge knappen "Klon" og derefter vælge "Download zip". Sørg for at gemme Zip -filen på et sted, hvor du ved, hvor den er. Desktop- eller downloadmappen er praktiske steder. Når du har importeret det til Arduino IDE, kan du slette det fra downloadplaceringen.

Trin 4: Import af det nye bibliotek til Arduino IDE

Import af det nye bibliotek til Arduino IDE
Import af det nye bibliotek til Arduino IDE

Gå til "Skitse" i Arduino IDE, vælg derefter "Inkluder bibliotek", vælg derefter "Tilføj ZIP -bibliotek..". En ny dialogboks vises, så du kan vælge. ZIP -filen, som du downloadede fra GitHub.

Trin 5: Bibliotekseksempler

Bibliotekseksempler
Bibliotekseksempler

Når du har tilføjet det nye bibliotek, vil du bemærke, at hvis du går til "File", derefter vælger "Eksempler", og derefter vælger "Eksempler fra brugerdefinerede biblioteker", vil du nu se en post for MCP41HVX1 på listen. Hvis du svæver over den post, vil du se WLAT, Wiper Control og SHDN, som er eksempelskitser. I denne Instructable vil vi bruge Wiper Control -eksemplet.

Trin 6: Undersøgelse af kildekoden

#include "MCP41HVX1.h" // Definer de ben, der bruges på Arduino#definere WLAT_PIN 8 // Hvis indstillet til Lav "overførsel og brug" #define SHDN_PIN 9 // Sæt højt for at aktivere modstandsnetværket#definere CS_PIN 10 // Indstil til lav for at vælge chip til SPI // Definer nogle værdier, der bruges til testappen#definér FORVARD sand#definér REVERSE falsk#definer MAX_WIPER_VALUE 255 // Maksimal visker værdi MCP41HVX1 Digipot (CS_PIN, SHDN_PIN, WLAT_PIN); ugyldig opsætning () { Serial.begin (9600); Serial.print ("Startposition ="); Serial.println (Digipot. WiperGetPosition ()); // Vis startværdi Serial.print ("Indstil viskerposition ="); Serial.println (Digipot. WiperSetPosition (0)); // Indstil viskerposition til 0} void loop () {statisk bool bDirection = FREM; int nWiper = Digipot. WiperGetPosition (); // Få den aktuelle viskerposition // Bestem retningen. hvis (MAX_WIPER_VALUE == nWiper) {bDirection = REVERSE; } ellers hvis (0 == nWiper) {bDirection = FREM; } // Flyt digipot viskeren hvis (FORWARD == bDirection) {nWiper = Digipot. WiperIncrement (); // Retningen er fremad Serial.print ("Forøgelse -"); } ellers {nWiper = Digipot. WiperDecrement (); // Retningen er bagud Serial.print ("Decrement -"); } Serial.print ("Viskerposition ="); Serial.println (nWiper); forsinkelse (100);}

Trin 7: Forståelse af kildekoden og kørsel af skitsen

Image
Image

Denne kildekode er tilgængelig i Arduino IDE ved at gå til menuen Eksempler og finde MCP41HVX1, som du lige har installeret (se forrige trin). Inden for MCP41HVX1 skal du åbne eksemplet "Viskerstyring". Det er bedst at bruge koden, der følger med biblioteket, som om der er fejlrettelser, vil den blive opdateret.

Wiper Control -eksemplet viser 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 at indstille MAX_WIPER_VALUE til 127 inden for prøvekildekoden, hvis du bruger en 7 bit chip. Standard er 255, hvilket er for 8 bit chips. Hvis du foretager ændringer i prøven, vil Arduino IDE tvinge dig til at vælge et nyt navn til projektet, da det ikke lader dig opdatere eksempelkoden. Dette er forventet adfærd.

Hver gang gennem sløjfen øges viskeren med et trin eller falder med et trin afhængigt af den retning, den går. Hvis retningen er oppe, og den når MAX_WIPER_VALUE, vender den retning. Hvis den rammer 0, vender den igen.

Når skitsen kører, opdateres den serielle skærm med den aktuelle viskerposition.

For at se modstandsændringen skal du bruge et multimetersæt til at aflæse ohm. Sæt målesonderne på P0B (pin 11) og P0W (pin 12) på digipotten for at se modstanden ændre sig, mens applikationen kører. Bemærk, at modstandsværdien ikke vil gå helt ned til nul, da der er en vis intern modstand i chippen, men den vil komme tæt på 0 ohm. Det vil sandsynligvis heller ikke gå til maksimalværdien, men vil være tæt.

Når du ser videoen, kan du se, at multimeteret viser modstanden stigende, indtil den når maksimalværdien og derefter begynder at falde. Chippen, der bruges i videoen, er MCP41HV51-104E/ST, som er en 8 bit chip med en maksimal værdi på 100 k ohm.

Trin 8: Fejlfinding

Hvis tingene ikke fungerer som forventet, er der et par ting at se på.

  • Bekræft dine ledninger. Alt skal forbindes korrekt. Sørg for, at du bruger det fulde ledningsdiagram som angivet i denne instruktionsbog. Der er alternative ledningsdiagrammer præsenteret i README, bibliotekets kildekode og nedenunder i denne instruktionsbog, men hold dig til det, der er dokumenteret ovenfor i ledningstrinnet ovenfor.
  • Sørg for, at hver pin på din digitpot er loddet til breakout -kortet. Brug af visuel inspektion er ikke godt nok. Sørg for, at du verificerer ved hjælp af kontinuitetsfunktionen på dit multimeter for at kontrollere, at alle stifterne på digipotten er elektrisk forbundet til udbrudskortet, og at der ikke er nogen krydsforbindelse af stifter fra loddemetal, der kan have broet sig over spor.
  • Hvis den serielle skærm viser, at viskerpositionen ændrer sig, når du kører skitsen, men modstandsværdien ikke ændres, er det en indikator på, at WLAT eller SHDN ikke foretager en korrekt forbindelse til breakout -kortet eller jumper -viskerne til WLAT eller SHDN er ikke forbundet korrekt til Arduino.
  • Sørg for, at du bruger en sekundær strømforsyning, der er DC mellem 10 og 36 volt.
  • Sørg for, at strømforsyningen på 10 til 36 volt fungerer ved at måle spændingen med dit multimeter.
  • Prøv at bruge den originale skitse. Hvis du har foretaget ændringer, har du muligvis indført en fejl.
  • Hvis ingen af fejlfindingstrinnene har hjulpet med at prøve en anden digipot -chip. Forhåbentlig har du købt flere og loddet dem på samme tid til et TSSOP breakout board, så det skulle bare være et spørgsmål om at bytte det ene til det andet. Jeg havde en dårlig chip, som forårsagede mig en smule frustration, og dette var rettelsen.

Trin 9: Intern og yderligere oplysninger

Alternativ ledningsdiagram
Alternativ ledningsdiagram

Yderligere information:

Yderligere oplysninger findes i databladet MCP41HVX1.

Fuld dokumentation om hele MCP41HVX1 -biblioteket er tilgængelig i filen README.md, som er en del af bibliotekets download. Denne fil er skrevet med mark down og kan ses med korrekt formatering i Github (se nederst på siden) eller med en mark down viewer / editor.

Kommunikation mellem Arduino og DigiPot:

Arduino kommunikerer med DigiPot ved hjælp af SPI. Efter at biblioteket har sendt en viskerpositionskommando, f.eks. WiperIncrement, WiperDecrement eller WiperSetPosition, kalder det WiperGetPosition for at få viskerpositionen fra chippen. Den værdi, der returneres fra disse Viskerkommandoer, er viskerens position, som chippen ser den og kan bruges til at kontrollere, at viskeren er flyttet til det forventede sted.

Avanceret funktionalitet (WLAT & SHDN)

Disse avancerede funktioner er ikke demonstreret i eksemplet "Wiper Control". Der er API'er tilgængelige i biblioteket til styring af WLAT & SHDN. Der er også WLAT- og SHDN -eksempelskitser (på samme sted som Wiper Control -skitsen) med biblioteket.

SHDN (Shutdown)

SHDN bruges til at deaktivere eller aktivere modstandsnetværket. Indstilling af SHDN til lav deaktiverer og høj aktiverer modstandsnetværket. Når modstandsnetværket er deaktiveret, afbrydes P0A (DigiPot pin 13), og P0B (DigiPot pin 11) tilsluttes P0W (DigiPot pin 12). Der vil være en lille mængde modstand mellem P0B og P0W, så din måler ikke læser 0 ohm.

Hvis din applikation ikke behøver at styre SHDN, kan du koble den direkte til HIGH (se det alternative ledningsdiagram). Du bliver nødt til at bruge den korrekte konstruktør eller videregive i MCP41HVX1_PIN_NOT_CONFIGURED til konstruktøren for at angive, at SHDN er fast kablet. Det er vigtigt at bemærke, at hvis du følger med eksemplet, skal du bruge det fulde ledningsdiagram (se ledningsføringstrin ovenfor).

WLAT (skrivelås)

Den interne arkitektur er to komponenter på en enkelt chip. En af komponenterne er SDI -grænsefladen og registret til at holde viskerværdien. Den anden komponent er selve modstandsnetværket. WLAT forbinder begge interne komponenter sammen.

Når WLAT er indstillet til LAV, sendes enhver indstillet viskerpositionskommandoinformation direkte til modstandsnettet, og viskerpositionen opdateres.

Hvis WLAT er indstillet til HIGH, holdes viskerpositionsinformationen, der sendes via SPI, i et internt register, men sendes ikke til modstandsnettet, og viskerpositionen opdateres derfor ikke. Når WLAT er sat til LAV, overføres værdien fra registret til modstandsnetværket.

WLAT er nyttig, hvis du bruger flere digipotter, som du skal holde synkroniseret. Strategien er at indstille WLAT til HIGH på alle digipotterne og derefter indstille viskerværdien på alle chipsene. Når viskerens værdi er blevet sendt til alle digipotterne, kan WLAT indstilles til LOW på alle enheder samtidigt, så de alle flytter viskerne på samme tid.

Hvis du kun styrer én DigiPot eller har flere, men de ikke behøver at blive synkroniseret, har du sandsynligvis ikke brug for denne funktionalitet og kan derfor koble WLAT direkte til LAV (se alternativt ledningsdiagram). Du bliver nødt til at bruge den korrekte konstruktør eller videregive i MCP41HVX1_PIN_NOT_CONFIGURED til konstruktøren for at angive, at WLAT er fast kablet. Det er vigtigt at bemærke, at hvis du følger med eksemplet, skal du bruge det fulde ledningsdiagram (se ledningsføringstrin ovenfor).

Trin 10: Alternativ ledningsdiagram

Ledninger

Du har mulighed for at tilslutte WLAT fra digpotten direkte til LOW / GND i stedet for at oprette forbindelse til en digital pin. Hvis du gør dette, vil du ikke kunne styre WLAT. Du har også mulighed for at forbinde SHDN direkte til HIGH i stedet for en digital pin. Hvis du gør dette, vil du ikke kunne kontrollere SHDN.

WLAT og SHDN er uafhængige af hinanden, så du kan hardwire den ene og slutte den anden til en digital pin, hard wire begge eller tilslutte begge til digitale pins, så de kan styres. Se det alternative ledningsdiagram for dem, du vil fastgøre, og referer tilbage til hovedledningsdiagrammet i trin 2 for ledninger til kontrollerbare digitale ben.

Konstruktører

Der er tre konstruktører i MCP41HVX -klassen. Vi vil diskutere to af dem. De er alle dokumenteret i filen README.md, så hvis du er interesseret i den tredje konstruktør, kan du se dokumentationen.

  • MCP41HVX1 (int nCSPin) - brug kun denne konstruktør, hvis både WLAT og SHDN er fast kabelforbundet.
  • MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin) - Brug denne konstruktør, hvis enten WLAT eller SHDN er fast kablet. Indlever konstant MCP41HVX1_PIN_NOT_CONFIGURED, hvis stiften er fast kablet eller pin -nummeret, hvis den er forbundet til en digital pin.

nCSPin skal tilsluttes en digital pin. Det er ugyldigt at videregive MCP41HVX1_PIN_NOT_CONFIGURED til konstruktøren for nCSPin.

Hvad hvis jeg ikke bruger en Arduino Uno?

Arduino bruger SPI til at kommunikere til digipotten. SPI -benene er specifikke stifter på Arduino -kortet. SPI -benene på Uno er:

  • SCK - pin 13 på Uno forbundet til pin 2 på digipot
  • MOSI - pin 11 på Uno tilsluttet pin 4 på digipot
  • MISO - pin 12 på Uno forbundet til pin 5 på digipot

Hvis du bruger en Arduino, der ikke er en Uno, skal du finde ud af, hvilken pin der er SCK, MOSI og MISO og slutte dem til digipotten.

De andre stifter, der bruges i skitsen, er almindelige digitale stifter, så enhver digital pin vil fungere. Du bliver nødt til at ændre skitsen for at angive de ben, du vælger på det Arduino -kort, du bruger. De almindelige digitale pins er:

  • CS - pin 10 på Uno forbundet til pin 3 på digipot (opdater CS_PIN i skitsen med ny værdi)
  • WLAT - pin 8 på Uno forbundet til pin 6 på digipot (opdater WLAT_PIN i skitsen med ny værdi)
  • SHDN - pin 9 på Uno forbundet til pin 7 på digipot (opdater SHDN_PIN i skitsen med ny værdi)

Anbefalede: