Referința analogică AREF | Arduino Shop and Tutorials

    • Rezoluția convertoarelor ADC.
    • Referințele interne de comparație în Arduino.
    • Referința externă AREF.

Material necesar.

.

Spania Spania Mexic
UNO Starter Kit UNO Starter Kit
MEGA Starter Kit
MEGA Starter Kit MEGA Starter Kit MEGA Starter Kit MEGA Starter Kit MEGA Starter Kit

Conversia analog-digitală

Într-o sesiune anterioară am spus deja că Arduino are 6 convertoare analog-digitale (ADC) care sunt pinii de la A0 la A5, și am spus că acestea sunt capabile să convertească valori de tensiune până la un maxim de 5V, care este tensiunea de referință pe Arduino.

Am mai spus că una dintre caracteristicile cheie ale convertorului este numărul de biți, care definește finețea cu care putem cuantifica acea conversie în digital. În cazul lui Arduino, sunt 10 biți pe care îi gestionează în porțile analogice, ceea ce înseamnă că rezoluția sa este de 210 =1.024 de valori posibile.

Cu cât această rezoluție este mai mare, cu atât mai bună este capacitatea de a aproxima valoarea reală a cărei conversie o căutăm.

  • Este important să înțelegem că o conversie în digital a unui semnal analogic este întotdeauna o aproximare și chiar și în cazul puțin probabil în care valoarea analogică este exact ceea ce ne spune convertorul, vom avea întotdeauna o incertitudine.
  • La un convertor Arduino cu rezoluție pe 10 biți, fiecare pas de măsurare este de 5V/1024 = 0,0048828125 V, puțin sub 5mV, ceea ce înseamnă că nu poate discrimina între valori de tensiune a căror diferență este mai mică decât aceasta.

Fără a intra prea mult în detalii, merită spus că ceea ce face un convertor ADC este să compare succesiv semnalul pe care dorim să-l cuantificăm la intrare, cu o tensiune de referință față de care face comparații.

Cu alte cuvinte, un ADC nu furnizează valori absolute, ci oferă o comparație cuantificată în raport cu o valoare de referință. Așadar, în sesiunea cu senzorul de temperatură TMP36, am calculat tensiunea de intrare pe unul dintre pinii analogici ca fiind citirea înmulțită cu un raport între valoarea maximă a intrării de 5V și valoarea maximă măsurată de convertorul 1024.

Cum semnalele pe care le manevrăm în mod normal pe Arduino sunt în jur de 5V, compararea cu 5V este un lucru rezonabil de făcut, pentru că și în industrie există o întreagă gamă de senzori a căror valoare maximă revine la 5V.

Dar din ce în ce mai mult, industria produce electronice de 3,3V, Arduino DUE însuși este un exemplu în acest sens, iar dacă folosim ADC-urile noastre pentru a digitiza semnale de vârf de 3,3V, pierdem acuratețe și rezoluție, deoarece irosim o parte din comparațiile posibile, de fapt o treime.

În practică, 3,3V fiind tensiunea maximă de intrare în comparație cu 5V înseamnă că nu vom avea niciodată citiri mai mari de 1.024 * 3,3 /5 = 675 și vom avea în continuare pași de intrare de 5mV.

Dar dacă convertorul este un comparator de tensiune, dacă am putea schimba valoarea tensiunii cu care comparăm la 3,3V, treptele ar fi 3,3V/1024 = 0,00322265625 sau 3,2 mV. Cu alte cuvinte, am îmbunătățit rezoluția convertorului nostru și fără să cheltuim un ban.

Deci, într-o situație ideală, tensiunea de comparație față de care efectuăm conversia de la analogic la digital, ar trebui să fie valoarea maximă posibilă a semnalului de intrare. Pentru că atunci vom avea cea mai bună rezoluție posibilă cu acel convertor.

Băieții de la Arduino au fost conștienți de această problemă și de aceea au inclus un pin extern, pe care noi nu l-am folosit până acum, care vă permite să conectați o tensiune de referință externă, față de care va fi comparat semnalul pe care îl citim pe porțile noastre de la A0 la A5.

Acest pin este etichetat AREF (referință analogică) și se află cu doi pini deasupra pinului digital 13:

Utilizarea referinței analogice externe

Întrebarea referinței analogice față de care comparăm eșantioanele din porțile A0-A6 este atât de importantă încât Arduino oferă mai multe tensiuni interne pentru comparație, pe care le putem activa pentru a schimba referința.

Pentru a activa o referință internă de 1,1V pe un Arduino UNO folosiți instrucțiunea

analogReference(INTERNAL);

Dacă folosiți un MEGA puteți folosi exclusiv:

analogReference(INTERNAL1V1);
analogReference(INTERNAL2V56);

Care va activa referințe de 1,1V și respectiv 2,56V.

Dacă folosiți tasta DEFAULT, reveniți la referința standard de 5V pe aproape toate modelele Arduino.

analogReference(DEFAULT);
  • Atenție la referința DEFAULT, pentru că pe DUE înseamnă 3,3V, deoarece aceasta este tensiunea sa de referință. Asigurați-vă de acest lucru înainte de a-l folosi în mod fericit.

Când conectăm o tensiune de referință la pinul AREF, trebuie să îi spunem lui Arduino că dorim să o folosim. Și facem asta cu instrucțiunea

analogReference(EXTERNAL);

Folosiți-vă capul atunci când modificați referința analogică, pentru că, dacă nu sunteți atenți, veți mânca Arduino la cină. Este relativ ușor să o dai în bară cu anumite acțiuni care par inocente:

  • Asigură-te că, dacă folosești o referință externă, GND-urile lui Arduino și ale referinței sunt identice, legându-le împreună. A nu face acest lucru are un prognostic foarte prost la prima schimbare.
  • Nu folosiți sub nicio formă mai puțin de 0v pe pinul AREF (SAU un semnal care variază și poate avea tranzitorii negative) deoarece rezultatul este imprevizibil.
  • Dacă conectați o tensiune de referință externă, nu apelați analogRead() înainte de a executa instrucțiunea analogReference(EXTERNAL), deoarece veți scurtcircuita semnalul de comparație intern la tensiunea externă la AREF și, eventual, veți profita de ocazia de a cumpăra acel nou Arduino pe care sunteți atât de nerăbdător să-l cumpărați.
  • Nu conectați la AREF mai puțin de 1V sau mai mult de 5V, nu puteți seta 12 și să vă așteptați să vă dea o valoare.

Circuit de test

Vom monta un circuit de test cu un afișaj I2C, așa cum am văzut în sesiune… și un potențiometru. Dar de data aceasta, vom conecta la capetele potențiometrului GND și 3,3V astfel încât în pinul central pe care îl vom citi cu A1, acesta să nu poată depăși niciodată 3,3V simulând un senzor cu această valoare maximă.

În timp ce rotim potențiometrul, vom citi o cădere de tensiune între 0V și 3,3V. și citirea pinului A1, va da valori între 0 și 670, deoarece ne aflăm în cazul pe care l-am definit puțin mai sus.

Programul va citi pur și simplu pinul analogic A1 și va trimite valoarea acestuia către un afișaj I2C de 16 caractere pe două linii, așa cum am văzut în sesiune….

Contenit disponibil doar pentru abonați. Accesează conținutul!

Iată un mini-video cu citirile potențiometrului

Dacă acum conectăm tensiunea internă de 3,3V a lui Arduino la pinul AREF, vom avea un circuit ca acesta:

Să vedem acum programul:

Iată un video cu diferența:

Rezumat al sesiunii

În acest curs de arduino am învățat următoarele:

    • Am insistat asupra problemei conversiei analogic-digitale și am văzut că, în principiu, este vorba de o comparație față de o valoare de referință.
    • Am văzut că putem folosi o valoare de tensiune internă sau externă, alta decât cea obișnuită de 5V.
    • Cunoaștem acum instrucțiunile precise pentru a activa acea referință externă și precauțiile pe care trebuie să le luăm atunci când o folosim.