Cuprins:

Potentiometru digital MCP41HVX1 pentru Arduino: 10 pași (cu imagini)
Potentiometru digital MCP41HVX1 pentru Arduino: 10 pași (cu imagini)

Video: Potentiometru digital MCP41HVX1 pentru Arduino: 10 pași (cu imagini)

Video: Potentiometru digital MCP41HVX1 pentru Arduino: 10 pași (cu imagini)
Video: This component can control tons of circuits! Digital Potentiometer Guide! EB#51 2024, Iulie
Anonim
Potentiometru digital MCP41HVX1 pentru Arduino
Potentiometru digital MCP41HVX1 pentru Arduino

Familia de potențiometre digitale MCP41HVX1 (aka DigiPots) sunt dispozitive care imită funcția unui potențiometru analog și sunt controlate prin SPI. Un exemplu de aplicație ar fi înlocuirea butonului de volum de pe stereo cu un DigiPot care este controlat de un Arduino. Aceasta presupune că controlul volumului pe stereo este un potențiometru și nu un codificator rotativ.

MCP41HVX1 sunt puțin diferite de alte DigiPots prin faptul că au un design de șină divizată. Aceasta înseamnă că, în timp ce DigiPot în sine poate fi controlat de tensiunea de ieșire a unui Arduino, semnalul care este trecut prin rețeaua de rezistențe funcționează cu o gamă mult mai mare de tensiune (până la 36 de volți). Majoritatea DigiPoturilor care pot fi controlate de 5 volți sunt limitate la 5 volți în rețeaua de rezistențe, ceea ce le restrânge utilizarea pentru modernizarea unui circuit existent care funcționează la o tensiune mai mare, cum ar fi ceea ce ați găsi într-o mașină sau barcă.

Familia MCP41HVX1 este formată din următoarele jetoane:

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

Cipurile de 7 biți permit 128 de pași în rețeaua de rezistențe, iar cipurile de 8 biți permit 256 de pași în rețeaua de rezistențe. Aceasta înseamnă că cipurile de 8 biți permit de două ori mai multe valori de rezistență de la potențiometru.

Provizii

  • Alegeți cipul MCP41HVX1 corespunzător din lista de mai sus. Cipul pe care îl selectați se bazează pe domeniul de rezistență necesar pentru aplicația dvs. Acest instructabil se bazează pe versiunile pachetului TSSOP 14 ale cipului, astfel încât să urmați împreună cu acest ghid alegeți orice cip din listă, cu excepția MCP41HV31-103E / MQ, care este un pachet QFN. Este recomandat să obțin câteva jetoane suplimentare, deoarece am întâlnit unul rău și sunt ieftine. Am comandat-o pe a mea de la Digi-Key.
  • Sursa secundară de curent continuu de la 10 la 36 volți. În exemplul meu, utilizez o sursă de curent continuu de negru de 17 volți pe perete din cutia mea de surse de alimentare vechi.
  • Flux de lipit
  • Ciocan de lipit
  • Solder
  • Pensete și / sau scobitoare
  • 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 (Asortiment de dimensiuni. Numeroase disponibile pentru mai multe proiecte)
  • Cantitatea de 2 - 7 pini antet - Amazon - DEPEPE 30 buc 40 pini 2,54 mm antet masculin și feminin pentru Arduino Prototype Shield - (Tăiat la dimensiune necesar. O mulțime în pachet pentru mai multe proiecte)
  • Arduino Uno - dacă nu aveți unul, aș sugera să obțineți un consiliu oficial. Am avut noroc amestecat cu versiunile neoficiale. Digi-Key - Arduino Uno
  • Multimetru care poate măsura rezistența și, de asemenea, poate verifica continuitatea
  • Sârme de jumper
  • Pană de pâine
  • Foarte recomandat, dar nu absolut necesar, este o lupă mâini libere, deoarece cipurile TSSOP sunt foarte mici. Veți avea nevoie de ambele mâini pentru lipire și testare cu multimetrul. Folosesc o pereche de lupe Clip-On Harbor Freight 3x deasupra ochelarilor de prescripție și o lupă articulată în picioare. Alte opțiuni sunt o pereche de cititori ieftini din magazinul cu discount sau dolar. Puteți chiar să purtați cititorii peste ochelarii de prescripție sau să obțineți două perechi de cititoare (una peste alta) în funcție de cât de bună (sau rea) este viziunea dvs. Dacă vă dublați ochelarii, aveți grijă, deoarece viziunea dvs. va fi foarte limitată, deci asigurați-vă că le scoateți înainte de a face orice altceva. De asemenea, fiți foarte atenți când lipiți.
  • Un alt element care nu este necesar, dar foarte recomandat este Mâinile ajutătoare pentru transportul maritim de porturi. Sunt cleme de aligator atașate la o bază metalică. Acestea sunt disponibile de la mulți alți furnizori de pe internet, precum și sub diferite mărci. Acestea sunt foarte utile atunci când lipiți cipul pe placa de rupere.

Pasul 1: lipirea cipului TSSOP pe o placă de separare

Image
Image
Lipirea cipului TSSOP pe o placă de separare
Lipirea cipului TSSOP pe o placă de separare
Lipirea cipului TSSOP pe o placă de separare
Lipirea cipului TSSOP pe o placă de separare

Cipul TSSOP trebuie lipit pe o placă de decupare, astfel încât să o puteți folosi cu o placă sau direct cu jumperii DuPont. Pentru lucrul cu prototipuri, acestea sunt mult prea mici pentru a putea lucra direct.

Datorită dimensiunilor mici, lipirea cipului TSSOP poate fi cea mai provocatoare parte a acestui proiect, dar cunoașterea trucului pentru a face acest lucru îl face o sarcină pe care oricine o poate îndeplini. Există mai multe tehnici, cea de mai jos este ceea ce am făcut.

Strategia este de a trece mai întâi lipirea pe urmele plăcii de rupere.

  • Nu puneți cipul pe placa de deconectare până când nu vi se indică.
  • Primul lucru de făcut este să puneți o cantitate generoasă de flux pe placa de separare.
  • Apoi, folosind fierul de lipit încălziți o lipire și treceți-o pe urme.
  • Puneți mai mult flux pe partea de sus a lipitului pe care l-ați scurs pe urme, precum și pe partea inferioară a picioarelor cipului.
  • Așezați cipul deasupra urmelor în care tocmai ați plasat lipirea și fluxul. Penseta sau o scobitoare fac instrumente bune pentru fixarea precisă a cipului la locul său. Asigurați-vă că aliniați corect cipul, astfel încât toți pinii să fie direct deasupra urmelor. Aliniați pinul unu a cipului cu marcajul pinului 1 de pe placa de rupere.
  • Folosind fierul de lipit încălziți unul dintre știfturile de la capătul cipului (fie pinul 1, 7, 8 sau 14) apăsându-l în urmă. Lipirea pe care ați aplicat-o anterior se va topi și va curge în jurul știftului.

Urmăriți videoclipul în acest pas pentru a vedea o demonstrație a modului de lipire a cipului pe placa de rupere. O sugestie pe care o am este diferită de videoclip este aceea că, după ce ați lipit primul pin, opriți și verificați din nou pentru alinierea întregului cip, pentru a vă asigura că toți pinii sunt încă deasupra urmelor. Dacă sunteți puțin, este ușor de corectat în acest moment. Odată ce vă simțiți confortabil, totul arată bine, lipiți un alt pin la capătul opus al cipului și verificați din nou alinierea. Dacă arată bine, mergeți mai departe și faceți restul pinilor.

După ce ați lipit toate știfturile, videoclipul sugerează utilizarea unei lupe pentru a vă verifica conexiunile. O metodă mai bună este utilizarea unui multimetru pentru a verifica continuitatea. Ar trebui să plasați o sondă pe piciorul știftului și cealaltă sondă pe partea plăcii unde veți lipi antetul (a se vedea a doua imagine din acest pas). De asemenea, trebuie să verificați pinii adiacenți pentru a vă asigura că nu sunt conectați din cauza lipirii care scurtcircuitează mai mulți pini împreună. De exemplu, dacă verificați pinul 4, verificați și pinul 3 și pinul 5. Pinul 4 ar trebui să arate continuitate în timp ce pinul 3 și pinul 5 ar trebui să prezinte un circuit deschis. Singura excepție este ștergătorul P0W poate prezenta conectivitate la P0A sau P0B.

SFATURI:

  • Așa cum se menționează în lista de materiale, dacă aveți o mărire disponibilă, care vă lasă mâinile libere să lucreze, vă va fi de mare ajutor în acest pas.
  • Folosirea clemei de aligator ajutând mâinile să țină placa de spargere simplifică lipirea totul.
  • Scrieți numărul cipului pe o bucată de bandă de mascare și lipiți-l în partea de jos a plăcii de rupere (a se vedea a treia imagine din această secțiune). Dacă pe viitor trebuie să identificați cipul, va fi mult mai ușor să citiți banda de mascare. Experiența mea personală este că am obținut un pic de flux pe cip și numărul s-a desprins complet, așa că tot ce am este banda.

Pasul 2: Cablare

Cablare
Cablare

Va trebui să conectați Arduino și Digipot așa cum se arată în schema de conectare. Pinii utilizați se bazează pe aspectul unui Arduino Uno. Dacă utilizați un alt Arduino, vedeți ultimul pas.

Pasul 3: Obținerea Bibliotecii Arduino pentru controlul DigiPot

Obținerea Bibliotecii Arduino pentru controlul DigiPot
Obținerea Bibliotecii Arduino pentru controlul DigiPot

Pentru a simplifica programarea, am creat o bibliotecă disponibilă pe Github. Accesați github.com/gregsrabian/MCP41HVX1 pentru a obține biblioteca MCP41HVX1. Veți dori să selectați butonul „Clonare” și apoi să selectați „Descărcați Zip”. Asigurați-vă că salvați fișierul Zip într-o locație în care știți unde se află. Desktopul sau folderul de descărcări sunt locații la îndemână. După ce îl importați în IDE-ul Arduino, îl puteți șterge din locația de descărcare.

Pasul 4: Importarea noii biblioteci în IDE Arduino

Importarea noii biblioteci în IDE-ul Arduino
Importarea noii biblioteci în IDE-ul Arduino

În cadrul IDE Arduino, accesați „Schiță”, apoi selectați „Includeți biblioteca”, apoi alegeți „Adăugați o bibliotecă ZIP..”. Va apărea o nouă casetă de dialog care vă permite să selectați fișierul. ZIP pe care l-ați descărcat de pe GitHub.

Pasul 5: Exemple de bibliotecă

Exemple de bibliotecă
Exemple de bibliotecă

După ce ați adăugat noua bibliotecă, veți observa că, dacă mergeți la „Fișier”, apoi selectați „Exemple”, apoi alegeți „Exemple din biblioteci personalizate”, veți vedea acum o intrare pentru MCP41HVX1 în listă. Dacă treceți cu mouse-ul peste acea intrare, veți vedea WLAT, Wiper Control și SHDN, care sunt exemple de schițe. În acest Instructable vom folosi exemplul Wiper Control.

Pasul 6: examinarea codului sursă

. Setați la scăzut pentru a selecta cipul pentru SPI // Definiți unele valori utilizate pentru aplicația de testare # define FORWARD true # define REVERSE false # define MAX_WIPER_VALUE 255 // Valoare maximă a ștergătorului MCP41HVX1 Digipot (CS_PIN, SHDN_PIN, WLAT_PIN); void setup () { Serial.begin (9600); Serial.print ("Poziția inițială ="); Serial.println (Digipot. WiperGetPosition ()); // Afișați valoarea inițială Serial.print ("Setare ștergător poziție ="); Serial.println (Digipot. WiperSetPosition (0)); // Setați poziția ștergătorului la 0} void loop () {static bool bDirection = FORWARD; int nWiper = Digipot. WiperGetPosition (); // Obțineți poziția curentă a ștergătorului // Determinați direcția. if (MAX_WIPER_VALUE == n Ștergător) {bDirecție = INVERSARE; } else if (0 == nWiper) {bDirection = FORWARD; } // Mutați ștergătorul digipot dacă (FORWARD == bDirection) {nWiper = Digipot. WiperIncrement (); // Direcția este înainte Serial.print ("Increment -"); } else {nWiper = Digipot. WiperDecrement (); // Direcția este înapoi Serial.print ("Decrement -"); } Serial.print ("Poziția ștergătorului"); Serial.println (nWiper); întârziere (100);}

Pasul 7: Înțelegerea codului sursă și executarea schiței

Image
Image

Acest cod sursă este disponibil în IDE-ul Arduino accesând meniul Exemple și localizând MCP41HVX1 pe care tocmai l-ați instalat (consultați pasul anterior). În cadrul MCP41HVX1 deschideți exemplul „Wiper Control”. Cel mai bine este să folosiți codul inclus în bibliotecă, de parcă ar exista remedieri de erori, acesta va fi actualizat.

Exemplul Wiper Control demonstrează următoarele API-uri din biblioteca MCP41HVX1:

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

În cadrul eșantionului de cod sursă, asigurați-vă că setați MAX_WIPER_VALUE la 127 dacă utilizați un cip de 7 biți. Valoarea implicită este 255, care este pentru cipuri de 8 biți. Dacă modificați eșantionul, IDE-ul Arduino vă va obliga să alegeți un nou nume pentru proiect, deoarece nu vă va permite să actualizați codul de exemplu. Acesta este un comportament așteptat.

De fiecare dată prin buclă ștergătorul va crește cu un pas sau va scădea cu un pas, în funcție de direcția în care merge. Dacă direcția este sus și ajunge la MAX_WIPER_VALUE, va inversa direcția. Dacă atinge 0, se va inversa din nou.

Pe măsură ce schița rulează, monitorul serial este actualizat cu poziția curentă a ștergătorului.

Pentru a vedea schimbarea rezistenței, va trebui să utilizați un set de multimetre pentru a citi Ohmi. Puneți sondele contorului pe P0B (pinul 11) și P0W (pinul 12) pe digipot pentru a vedea schimbarea rezistenței pe măsură ce aplicația rulează. Rețineți că valoarea rezistenței nu va merge până la zero, deoarece există o anumită rezistență internă în cip, dar se va apropia de 0 ohmi. Cel mai probabil nu va merge nici la valoarea maximă, dar va fi aproape.

Pe măsură ce vizionați videoclipul, puteți vedea multimetrul care arată rezistența crescând până când atinge valoarea maximă și apoi începe să scadă. Cipul utilizat în videoclip este MCP41HV51-104E / ST, care este un cip de 8 biți cu o valoare maximă de 100k ohm.

Pasul 8: Depanare

Dacă lucrurile nu funcționează așa cum era de așteptat, iată câteva lucruri de luat în considerare.

  • Verificați cablajul. Totul trebuie conectat corect. Asigurați-vă că utilizați schema de cablare completă, așa cum se menționează în acest manual. Există diagrame de cablare alternative prezentate în README, codul sursă al bibliotecii și mai jos în acest instructabil, dar respectați ceea ce este documentat mai sus în etapa de cablare de mai sus.
  • Asigurați-vă că fiecare pin de pe digitpotul dvs. este lipit pe placa de separare. Folosirea inspecției vizuale nu este suficient de bună. Asigurați-vă că verificați folosind funcția de continuitate a multimetrului pentru a verifica dacă toți pinii de pe digipot sunt conectați electric la placa de rupere și că nu există o conexiune transversală a pinilor de la lipire care ar putea fi legați peste urme.
  • Dacă monitorul serial arată că poziția ștergătorului se schimbă atunci când rulați schița, dar valoarea rezistenței nu se schimbă, acesta este un indicator că WLAT sau SHDN nu realizează o conexiune adecvată la placa de spargere sau ștergătoarele jumper pentru WLAT sau SHDN nu sunt conectate corect la Arduino.
  • Asigurați-vă că utilizați o sursă de alimentare secundară care are o tensiune continuă între 10 și 36 de volți.
  • Asigurați-vă că alimentarea de la 10 la 36 volți funcționează măsurând tensiunea cu multimetrul.
  • Încercați să utilizați schița originală. Dacă ați făcut modificări, este posibil să fi introdus o eroare.
  • Dacă niciunul dintre pașii de depanare nu a ajutat la încercarea unui alt cip digipot. Sperăm că ați cumpărat mai multe și le-ați lipit în același timp pe o placă de separare TSSOP, așa că ar trebui să fie doar o chestiune de a schimba una cu cealaltă. Am avut un cip rău care mi-a provocat destul de multă frustrare și asta a fost soluția.

Pasul 9: Interne și informații suplimentare

Schema de cablare alternativă
Schema de cablare alternativă

Informatii suplimentare:

Informații suplimentare pot fi găsite în fișa tehnică MCP41HVX1.

Documentația completă privind întreaga bibliotecă MCP41HVX1 este disponibilă în fișierul README.md care face parte din descărcarea bibliotecii. Acest fișier este scris cu marcare în jos și poate fi vizualizat cu o formatare adecvată în Github (uitați-vă în partea de jos a paginii) sau cu un vizualizator de marcare / editor.

Comunicări între Arduino și DigiPot:

Arduino comunică cu DigiPot utilizând SPI. După ce biblioteca trimite o comandă de poziție a ștergătorului, cum ar fi WiperIncrement, WiperDecrement sau WiperSetPosition, atunci apelează WiperGetPosition pentru a obține poziția ștergătorului de pe cip. Valoarea returnată de la aceste comenzi de ștergător este poziția ștergătorului așa cum o vede cipul și poate fi utilizată pentru a verifica dacă ștergătorul s-a mutat în locația așteptată.

Funcționalitate avansată (WLAT și SHDN)

Aceste funcții avansate nu sunt demonstrate în exemplul „Wiper Control”. Există API-uri disponibile în bibliotecă pentru controlul WLAT și SHDN. Există, de asemenea, exemple de schițe WLAT și SHDN (în aceeași locație ca schița Wiper Control) cu biblioteca.

SHDN (Închidere)

SHDN este utilizat pentru a dezactiva sau activa rețeaua de rezistențe. Setarea SHDN la low dezactivează și high activează rețeaua de rezistențe. Când rețeaua de rezistențe este dezactivată, P0A (pinul DigiPot 13) este deconectat și P0B (pinul DigiPot 11) este conectat la P0W (pinul DigiPot 12). Va exista o cantitate mică de rezistență între P0B și P0W, astfel încât contorul dvs. să nu citească 0 ohmi.

Dacă aplicația dvs. nu are nevoie să controleze SHDN, o puteți conecta direct la HIGH (consultați schema de cablare alternativă). Va trebui să utilizați constructorul corect sau să treceți în MCP41HVX1_PIN_NOT_CONFIGURED la constructor pentru a indica faptul că SHDN este conectat la cablu. Este important să rețineți că, dacă urmați exemplul, trebuie să utilizați schema completă de cablare (consultați pasul de cablare de mai sus).

WLAT (Write Latch)

Arhitectura internă are două componente pe un singur cip. Una dintre componente este interfața SDI și registrul pentru a păstra valoarea ștergătorului. Cealaltă componentă este rețeaua de rezistențe în sine. WLAT conectează ambele componente interne împreună.

Când WLAT este setat la LOW, orice informație de comandă a poziției ștergătorului este transmisă direct la rețeaua de rezistențe și poziția ștergătorului este actualizată.

Dacă WLAT este setat la HIGH, informațiile despre poziția ștergătorului transmise prin SPI sunt păstrate într-un registru intern, dar nu sunt transmise rețelei de rezistențe și, prin urmare, poziția ștergătorului nu se va actualiza. Odată ce WLAT este setat la LOW, valoarea este transferată din registru în rețeaua de rezistențe.

WLAT este util dacă utilizați mai multe digipoturi pe care trebuie să le păstrați sincronizate. Strategia este să setați WLAT la HIGH pe toate digipoturile și apoi să setați valoarea ștergătorului pe toate jetoanele. Odată ce valoarea ștergătorului a fost trimisă tuturor digipoturilor, WLAT poate fi setat la LOW pe toate dispozitivele simultan, astfel încât toate să mute ștergătoarele în același timp.

Dacă controlați un singur DigiPot sau aveți mai multe, dar nu trebuie să fie sincronizate, cel mai probabil nu veți avea nevoie de această funcționalitate și, prin urmare, puteți conecta WLAT direct la LOW (a se vedea schema de cablare alternativă). Va trebui să utilizați constructorul corect sau să treceți în constructor MCP41HVX1_PIN_NOT_CONFIGURED pentru a indica faptul că WLAT este cablat. Este important să rețineți că, dacă urmați exemplul, trebuie să utilizați schema completă de cablare (consultați pasul de cablare de mai sus).

Pasul 10: Schema de cablare alternativă

Cablare

Aveți opțiunea de a conecta WLAT de la digpot direct la LOW / GND în loc să vă conectați la un pin digital. Dacă faceți acest lucru, nu veți putea controla WLAT. De asemenea, aveți opțiunea de a conecta SHDN direct la HIGH în loc de un pin digital. Dacă faceți acest lucru, nu veți putea controla SHDN.

WLAT și SHDN sunt independente unul de celălalt, astfel încât să puteți conecta unul la altul și să îl conectați pe celălalt la un pin digital, să le conectați ambele sau să le conectați pe ambii la pinii digitali, astfel încât să poată fi controlați. Consultați schema de cablare alternativă pentru cele pe care doriți să le conectați și consultați schema de cablare principală din pasul 2 pentru cablarea pinilor digitali controlabili.

Constructori

Există trei constructori în clasa MCP41HVX. Vom discuta două dintre ele. Toate sunt documentate în fișierul README.md, deci, dacă sunteți interesat de cel de-al treilea constructor, vă rugăm să consultați documentația.

  • MCP41HVX1 (int nCSPin) - utilizați acest constructor numai dacă atât WLAT, cât și SHDN sunt cablate.
  • MCP41HVX1 (int nCSPin, int nSHDNPin, int nWLATPin) - Utilizați acest constructor dacă WLAT sau SHDN sunt conectate la cablu. Treceți constantul MCP41HVX1_PIN_NOT_CONFIGURED dacă pinul este cablat sau numărul pinului dacă este conectat la un pin digital.

nCSPin trebuie conectat la un pin digital. Nu este valid să treci MCP41HVX1_PIN_NOT_CONFIGURED către constructorul pentru nCSPin.

Ce se întâmplă dacă nu folosesc un Arduino Uno?

Arduino folosește SPI pentru a comunica digipotului. Pinii SPI sunt pini specifici de pe placa Arduino. Pinii SPI de pe Uno sunt:

  • SCK - pinul 13 de pe Uno conectat la pinul 2 de pe digipot
  • MOSI - pinul 11 de pe Uno conectat la pinul 4 de pe digipot
  • MISO - pinul 12 de pe Uno conectat la pinul 5 de pe digipot

Dacă utilizați un Arduino care nu este Uno, va trebui să aflați care pin este SCK, MOSI și MISO și să le conectați la digipot.

Ceilalți pini folosiți în schiță sunt pini digitali obișnuiți, astfel încât orice pini digitali vor funcționa. Va trebui să modificați schița pentru a specifica pinii pe care îi alegeți pe placa Arduino pe care o utilizați. Pinii digitali obișnuiți sunt:

  • CS - pinul 10 pe Uno conectat la pinul 3 de pe digipot (actualizați CS_PIN în schiță cu o valoare nouă)
  • WLAT - pinul 8 pe Uno conectat la pinul 6 pe digipot (actualizați WLAT_PIN în schiță cu o valoare nouă)
  • SHDN - pinul 9 de pe Uno conectat la pinul 7 de pe digipot (actualizați SHDN_PIN în schiță cu o valoare nouă)

Recomandat: