Capitolul 19 - Transformarea AD
În manual, am învățat prin sarcini elementare cum să programăm în asamblare, cum să transmitem semnale de control către circuite externe, cum să primim semnale externe în două stări și cum să generăm semnale PWM și cum să implementăm semnale PWM cu rezoluție aproape arbitrară și frecvență. Asta ar fi bine până acum, dar încă lipsește ceva. Altceva lipsește cu adevărat. Aceasta este o interpretare diferită a semnalelor externe din două stări. În realitate, nu totul este binar, chiar dacă face parte din lumea noastră digitală a microcontrolerelor, deci trebuie să detectăm și semnale externe (de ex. Tensiune) cu rezoluția potrivită pentru multe probleme. O astfel de soluție electronică se numește convertor analog-digital, iar dispozitivul care poate face acest lucru se numește convertor analog-digital.
19.1. Convertor ADuC 842 AD
Blocul convertor analog-digital ADuC 842 permite o rezoluție rapidă, 8 canale, 12 biți, sursă de alimentare unilaterală (nu este necesară o putere negativă). Utilizatorul profesionist are chiar opțiunea de calibrare. Convertorul AD funcționează pe principiul aproximării succesive, care se bazează pe un condensator pentru conversia AD. Conversia poate fi simplă (aceasta este desigur repetabilă) sau continuă, tensiunea de referință poate fi un semnal intern sau extern. Convertorul AD joacă, de asemenea, un rol în accesarea oricărei memorii externe conectate. Convertorul ADuC 842 AD este calibrat din fabrică; la pornire, constantele de calibrare sunt încărcate pentru a asigura o funcționare optimă.
Tensiunea de referință internă a convertorului AD este de 2,5 V, deci poate fi obținută o precizie de 0,61 mV cu o rezoluție de 12 biți (212 = 4.096) (2,5/4.095 = 0,61). Acest lucru este suficient pentru multe aplicații. Din nou, valorile de tensiune digitalizate sunt disponibile numai într-un registru dublu (ADCDATAH/ADCDATAL), dar rețineți că cei 4 biți superiori ai registrului ADCDATAH sunt utilizați pentru identificarea canalului. Acest lucru este ilustrat în figura de mai jos.
Există trei registre de configurare pentru conversia AD, ADCCON1, ADCCON2 și ADCCON3. Acesta din urmă este implicat doar în calibrarea convertorului, așa că nu luăm în considerare acest lucru deoarece discutăm doar câteva elemente ale soluției din manual. Celelalte două registre sunt descrise în [Tabelul 19.1] și [Tabelul 19.2].
Registrul de control al conversiei AD
Registrul de control al transformării AD
Valoare implicită după pornire:
40h = 0100 0000 b
Opțiunea de adresare bitwise:
1 - Porniți convertorul AD. 0 - opriți convertorul AD.
1 - utilizarea referinței externe. 0 - utilizați referința internă. Nu vom discuta.
Biții divizorului de ceas pentru propriul ceas al conversiei AD. Un convertor AD necesită un semnal de ceas de 8,38 MHz sau mai puțin pentru o funcționare corectă. O conversie AD tipică necesită 16 ceasuri de conversie AD, plus timpul de acces la date selectat. Raportul de împărțire poate fi selectat dintre următoarele:
CK1 CK0 Separator de ceas
0 1 4 (Nu utilizați când ceasul este pe CD
Biții de acces la date pot fi utilizați pentru a selecta ora care va fi disponibilă pentru amplificatorul de urmărire și menținere a intrării pentru a interoga semnalul de intrare. Pentru accesul la date sunt recomandate 3 sau mai multe ceasuri de conversie AD.
AQ1 AQ0 Numărul de ceasuri de conversie AD
Utilizarea temporizatorului 2. Nu vom discuta.
Folosiți un semnal de declanșare extern. Nu vom discuta.
Registrul de control al conversiei AD 2
Registrul de control al conversiei AD 2
Valoare implicită după pornire:
Opțiunea de adresare bitwise:
Conversie AD bit de avort. Este setat la 1 la sfârșitul ciclului de conversie. Dacă programul sare la o rutină de întrerupere prin propriul său vector de întrerupere, acesta va fi șters. În caz contrar, utilizatorul trebuie să îl șteargă.
Modul DMA activează bitul. Nu vom discuta.
Bit de mod continuu. Când este setat la 1, are loc o transformare continuă AD, adică un nou ciclu de transformare începe după finalizarea celui precedent.
Bitul unei conversii unice. Se produce un singur ciclu de conversie, la sfârșitul căruia bitul se schimbă automat la 0.
CS3 CS2 CS1 CS0 Număr canal/alt comentariu
1 0 0 0 Monitorizarea temperaturii. Nu
1 0 0 1 DAC0. Nu vom discuta.
1 0 1 0 DAC1. Nu vom discuta.
1 0 1 1 AGND. Nu vom discuta.
1 1 1 1 DMA STOP. Nu vom discuta.
Celelalte combinații sunt ocupate.
19.2. Conversie AD simplă
În această subsecțiune, se efectuează o conversie AD pe orice sursă de tensiune folosind cicluri de conversie unice. Este foarte important ca tensiunea de convertit să nu depășească +2,5 V! Apropo, acest lucru ar trebui să aibă întotdeauna grijă de utilizator, așa că, dacă realizăm propria noastră aplicație și circuit, ar trebui să acordăm o atenție foarte mare acestei reguli și să proiectăm circuitele noastre în consecință! Oricum, cipul ADuC 842 nu va eșua chiar dacă depășim ușor limita de tensiune de +2,5 V, dar oricum nu putem începe cu o valoare care depășește limita, deoarece atunci valoarea convertită a atins de mult maximul. Polaritatea sursei de tensiune este o problemă și mai delicată, dacă este inversată accidental când tensiunea este conectată la intrarea convertorului AD, fumul de măsurare va crește ... A [19.2. figura]. Figura 2 repetă regulile pentru conversia AD în litere mari, color ...
După toate acestea, putem lansa prima noastră aplicație de conversie AD.
Măsurați tensiunea cu microcontrolerul în intervalul 0 V până la +2,5 V și trimiteți valoarea măsurată pe portul serial către computer, dar utilizați doar cei mai valoroși 8 biți ai convertorului AD! [Cod43]
În primul rând, să ne gândim la ce înseamnă să ai cei mai valoroși 8 biți ai unui convertor AD! A [19.1. figura]. Figura 1 arată în ce registre și în care găsim cei 12 biți ai nivelului semnalului digitalizat. Acum avem nevoie de cele mai valoroase 8, adică le aruncăm pe cele patru de jos. Acesta este, de asemenea, o potrivire bună pentru încercarea inițială, deoarece rezoluția noastră va fi în continuare de 0,0098 V. Ideea este că jumătate din biții noștri necesari se află în registrul ADCDATAH și cealaltă jumătate în registrul ADCDATAL. A [19.3. figura]. Figura 1 arată ce biți avem nevoie.
Pescuitul celor 8 biți necesari din cele două registre va fi mai ușor decât credeți. Setul de instrucțiuni de bază al procesorului 8051/8052 conține o instrucțiune foarte potrivită pentru acest lucru:
Instrucțiunea schimbă pur și simplu cei doi jumătăți de octeți ai bateriei. Mnemonica însăși, așa cum este, se întâmplă să fie un cuvânt semnificativ în limba engleză; înseamnă a schimba, a schimba. Prin urmare, dacă valoarea bateriei este, să zicem, A = 10010110, A = 01101001 este generată după executarea instrucțiunii SWAP A. Știind acest lucru, vom încărca conținutul registrului ADCDATAH în baterie, îi vom reseta cei patru biți superiori, vom schimba cei doi jumătăți de octeți și vom salva valoarea rezultată la o tensiune. Astfel, primii 4 biți (11-8) ai valorii tensiunii digitalizate sunt la locul lor. Apoi încărcăm conținutul registrului ADCDATAL în baterie, ștergem cei patru biți inferiori ai acestuia, schimbăm cei doi jumătăți de octeți, apoi adăugăm conținutul de tensiune la valoarea obținută și valoarea care conține valoarea de tensiune digitalizată 11-4 în ordinea corectă este deja generată. biți, adică cei mai valoroși 8. Și putem salva deja această valoare, chiar înapoi la variabila de tensiune. Totul arată în limbajul asamblării:
Așa că am apucat cei mai importanți 8 biți ai valorii tensiunii digitalizate, care desigur neschimbat reprezintă un nivel de semnal între 0 V și +2,5 V, cu o rezoluție doar mai mică decât dacă am avea 12 biți. Problema este că, cu un nivel maxim de tensiune de +2,5 V, suntem destul de norocoși. Acest lucru se datorează faptului că valoarea maximă a unui număr binar reprezentat de 8 biți este 255, care este de aproape o sută de ori 2,5. Astfel, nu facem o mare greșeală prin simpla împărțire a numărului de 8 biți obținut ca nivel de tensiune la 100 și luarea în considerare a valorii tensiunii „măsurate”, exprimată în volți, desigur. Eroarea pe care o facem în 1-250/255 = 0,0196 Problema 31] va fi utilizată în modul unic, iar divizorul de ceas și timpul de acces la date vor fi luate cât mai mult posibil, deoarece în acest caz nimic nu este urgent ... Canalul AD selectat este zero va fi. Acordați o atenție deosebită vârfurilor de pe panou de utilizat! Pentru a nu-l atinge accidental, [19.4. figura]. Figura este concepută ca un ghid.
Pentru conversia AD, va fi utilizat bitul de start SCONV (vezi [Tabelul 19.2]). Când este setat la 1, începe conversia AD și acest bit revine la 0 numai când ciclul de conversie este finalizat. În acest fel ne putem aștepta cu ușurință în program:
Dacă programul depășește aceste două linii (evidențiate în culoare în cod), putem extrage cu bucurie valoarea tensiunii digitalizate din registrele ADCDATAH și ADCDATAL.
Codul nu poate fi numit scurt din cauza comunicării portului serial, dar nu conține nicio răsucire sau fapte. Nici vechiul nostru subrutin DELAY nu este listat acum. Comunicare port serial
Funcționarea programului este prezentată acum nu cu un videoclip, ci cu un studiu de caz ușor diferit. A [19.5. figura]. Așa cum se arată în Fig. 1, ne-am uitat la tensiunea celulelor creionului, deoarece este garantat să nu depășească +2,5 V. Aveam două elemente creion; măsurat cu un multimetru digital, unul avea o tensiune de ralanti de 1,35 V, iar celălalt 0,83 V. Seria de măsurători efectuate cu microcontrolerul este descrisă în [19.6. figura]. prezentat în figura. Datele încadrate în roșu se referă la cele două elemente creion. Se poate observa că abaterile sunt doar în jur de 2%, ceea ce este exact în conformitate cu abaterea sistematică obținută la producerea fracției zecimale.
Valorile dintre cele două seturi de date încadrate par puțin confuze, dar oferim o explicație imediat. Atunci am înlocuit bateria creionului din mână, iar cablurile de testare „pur și simplu atârnau în aer”. În acest caz, după o secvență aleatorie de valori, valoarea măsurată este setată la maxim. Acest lucru poate fi văzut în [19.6. figura]. tot în figură.
- Capitolul 7: TOXICOLOGIA SOLVENTULUI
- Capitolul 3: Baremuri de merite și păcate
- Capitolul 24 - Controlul motorului pas cu pas
- Caise uscate pentru beneficii și daune pentru pierderea în greutate
- Morcovii au beneficii și daune corpului Cu ceea ce aveți nevoie pentru a mânca morcovi pentru a îmbunătăți vederea