În acest tutorial vom interfața senzorul FLEX cu microcontrolerul ATMEGA8. În ATMEGA8, vom folosi funcția ADC de 10 biți (conversie analogică la digitală) pentru a face această treabă. Acum ADC-ul din ATMEGA nu poate lua o intrare mai mare de + 5V.
Ce este un senzor flexibil?
Un senzor FLEX este un traductor care își schimbă rezistența la schimbarea formei sale. Este prezentat în figura de mai jos.
Acest senzor este folosit pentru a simți schimbările de liniaritate. Deci, atunci când senzorul FLEX este îndoit, rezistența este îndoită drastic. Acest lucru este prezentat în figura de mai jos.
Acum, pentru a converti această schimbare a rezistenței la schimbarea tensiunii, vom folosi un circuit divizor de tensiune. În această rețea rezistivă avem o rezistență constantă și altă rezistență variabilă. Așa cum se arată în figura de mai jos, R1 este o rezistență constantă, iar R2 este un senzor FLEX care acționează ca o rezistență. Punctul mediu al ramurii este luat la măsurare. Când rezistența R2 se schimbă, Vout se schimbă liniar. Deci, cu aceasta avem o tensiune care se schimbă cu liniaritatea.
Acum, un lucru important de remarcat aici este că intrarea luată de controler pentru conversia ADC este de până la 50µAmp. Acest efect de încărcare al divizorului de tensiune bazat pe rezistență este important deoarece curentul extras din Vout al divizorului de tensiune crește procentul de eroare, deocamdată nu trebuie să ne facem griji cu privire la efectul de încărcare.
Vom lua două rezistențe și vom forma un circuit divizor, astfel încât pentru un Vin de 25 de volți, să obținem un Vout de 5 Volți. Deci tot ce trebuie să facem este să înmulțim valoarea Vout cu „5” în program pentru a obține tensiunea reală de intrare.
Componente necesare
HARDWARE: ATMEGA8, sursă de alimentare (5v), PROGRAMATOR AVR-ISP, JHD_162ALCD (16x2LCD), condensator 100uF, condensator 100nF (5 bucăți), rezistor 100KΩ.
SOFTWARE: Atmel studio 6.1, progisp sau flash magic.
Diagrama circuitului și explicația de lucru
În circuitul PORTD al ATMEGA8 este conectat la portul de date LCD. În ecranul LCD 16x2 există 16 pini peste tot dacă există o lumină din spate, dacă nu există lumină din spate vor exista 14 pini. Se poate alimenta sau lăsa pinii luminii din spate. Acum, în cele 14 pinii există 8 pini de date (7-14 sau D0-D7), 2 pini de alimentare (1 & 2 sau VSS & VDD sau gnd & + 5v), 3 rd pini pentru controlul contrastului (VEE-control cât de gros personajele ar trebui să fie prezentate) și 3 pini de control (RS & RW & E).
În circuit, puteți observa că am luat doar doi pini de control. Bitul de contrast și READ / WRITE nu sunt adesea folosite, astfel încât acestea pot fi scurtcircuitate la sol. Acest lucru pune LCD în cel mai mare contrast și modul de citire. Trebuie doar să controlăm ENABLE și pinii RS pentru a trimite caractere și date în consecință.
Conexiunile LCD cu ATmega8 sunt după cum urmează:
PIN1 sau VSS la masă
PIN2 sau VDD sau VCC la + 5v putere
PIN3 sau VEE la sol (oferă contrast maxim cel mai bun pentru un începător)
PIN4 sau RS (Selectare înregistrare) la PB0 de uC
PIN5 sau RW (citire / scriere) la masă (pune LCD în modul de citire ușurează comunicarea pentru utilizator)
PIN6 sau E (Activare) la PB1 de uC
PIN7 sau D0 la PD0 de uC
PIN8 sau D1 la PD1 de uC
PIN9 sau D2 la PD2 de uC
PIN10 sau D3 la PD3 de uC
PIN11 sau D4 până la D4 de uC
PIN12 sau D5 la PD5 de uC
PIN13 sau D6 la PD6 de uC
PIN14 sau D7 la PD7 de uC
În circuit puteți vedea că am folosit comunicarea pe 8 biți (D0-D7), totuși acest lucru nu este obligatoriu, putem folosi comunicația pe 4 biți (D4-D7), dar programul de comunicare pe 4 biți devine un pic complex, așa că am mers doar cu 8 biți comunicare. (Verificați și acest tutorial: interfață LCD 16x2 cu microcontroler AVR)
Deci, din simpla observare din tabelul de mai sus, conectăm 10 pini de LCD la controler, în care 8 pini sunt pini de date și 2 pini sunt pentru control.
Tensiunea pe R2 nu este complet liniară; va fi unul zgomotos. Pentru a filtra condensatorii de zgomot sunt așezați pe fiecare rezistor din circuitul divizor așa cum se arată în figură.
Potul de 1K aici este pentru a regla precizia ADC. Acum să discutăm despre ADC-ul ATMEGA8.
În ATMEGA8, putem da intrare analogică oricăruia dintre PATRU canale ale PORTC, nu contează canalul pe care îl alegem, deoarece toate sunt aceleași, vom alege canalul 0 sau PIN0 al PORTC.
În ATMEGA8, ADC are o rezoluție de 10 biți, astfel încât controlerul poate detecta o schimbare minimă a Vref / 2 ^ 10, deci dacă tensiunea de referință este de 5V, obținem o creștere de ieșire digitală pentru fiecare 5/2 ^ 10 = 5mV. Deci, pentru fiecare increment de 5mV în intrare vom avea o creștere de unul la ieșirea digitală.
Acum trebuie să setăm registrul ADC pe baza următoarelor condiții, 1. În primul rând trebuie să activăm caracteristica ADC în ADC.
2. Aici veți obține o tensiune maximă de intrare pentru conversia ADC este de + 5V. Deci, putem seta valoarea maximă sau referința ADC la 5V.
3. Controlerul are o caracteristică de conversie a declanșatorului, ceea ce înseamnă că conversia ADC are loc numai după un declanșator extern, deoarece nu dorim să setăm registrele pentru ca ADC să ruleze în modul de rulare liberă continuă.
4. Pentru orice ADC, frecvența conversiei (valoarea analogică la valoarea digitală) și precizia ieșirii digitale sunt invers proporționale. Deci, pentru o mai bună precizie a ieșirii digitale, trebuie să alegem o frecvență mai mică. Pentru ceasul ADC normal, setăm pre-vânzarea ADC la valoarea maximă (2). Deoarece folosim ceasul intern de 1 MHz, ceasul ADC va fi (1000000/2).
Acestea sunt singurele patru lucruri pe care trebuie să le cunoaștem pentru a începe cu ADC.
Toate cele patru caracteristici de mai sus sunt setate prin două registre:
ROȘU (ADEN): Acest bit trebuie setat pentru a activa caracteristica ADC a ATMEGA.
ALBASTRU (REFS1, REFS0): Acești doi biți sunt utilizați pentru a seta tensiunea de referință (sau tensiunea maximă de intrare pe care o vom da). Din moment ce dorim să avem tensiunea de referință 5V, REFS0 ar trebui setat de tabel.
GALBEN (ADFR): Acest bit trebuie setat pentru ca ADC să ruleze continuu (modul de rulare liber).
ROSE (MUX0-MUX3): Acești patru biți sunt pentru a spune canalului de intrare. Deoarece vom folosi ADC0 sau PIN0, nu trebuie să setăm niciun biți ca în tabel.
BROWN (ADPS0-ADPS2): acești trei biți sunt pentru setarea prescalarului pentru ADC. Deoarece folosim un prescalar de 2, trebuie să setăm un bit.
DARK GREEN (ADSC): acest bit setat pentru ca ADC să înceapă conversia. Acest bit poate fi dezactivat în program atunci când trebuie să oprim conversia.
Interfața senzorului FLEX cu ATmega8 este explicată pas cu pas în codul C dat mai jos.