A/D prevodnik a napätova referencia v ATMega328P na Arduine

Richard Kaliciak hw.kaliciak na stonline.sk
Čtvrtek Březen 23 14:24:05 CET 2017


Dobry den,

chcem sa podelit s poznatkami ohladom Vref na Arduine.

Mam kupeny cinsky klon Arduina
https://www.terraelectronica.ru/%2Fds%2Fpdf%2FU%2FUNO_R3(CH340G).pdf

Zatial vsetky priklady, co pouzivaju ADC, su napoisane tak, ze ako Vref
sa pouzije Vcc. Co je v pripade pouzitia potenciometra zapojeneho medzi
Vcc a GND alebo tlacitok na LCD Keypad Shield aj OK, pretoze tam nam
staci relativna hodnota.
Ak uz ale chcem merat napätie alebo prud presnejsie, tak pouzit Vcc ako
Vrej je nekorektne. Ziaden problem, pouzijem vnutornu referenciu. Ale
ejhla, namerane hodnoty nie su stabilne.
Prvy pohlad na schemu originalneho Arduina ukaze, ze Aref je v lufte a
AVCC je priamo spojene s Vcc, pricom v datasheete od ATMega je
odporucene zapojenie s cievkou a kondenzatorom medzi AVcc a Vcc. Na tom
cinskom klone je aspon na AVref pripojeny kondenzator 100nF.
Rozptyl nameranych hodnot sa este zväcsil, ked som procesor v slucke
poslal do IDLE modu.

V porgrame je pouzity TIMER0, ktory vyvolava prerusenie kazdu cca. 1 ms.
Tu su namerane priebehy:
* napajanie z USB nabijacky, CH1 = 5V, CH2 = Vref. Je vidno korelaciu
Vref a Vcc
http://kaliciak.ddns.net/temp/arduino/SDS00039.png

* napajanie z externeho zdroja 12V, CH1 = 5V, CH2 = Vref. Korelacia Vref
a Vcc tu nieje, ale vidno zmenu Vref s periodou 1ms. Ci to pochadza od
prerusenia alebo ci to rusi USB CH340 neviem posudit.
http://kaliciak.ddns.net/temp/arduino/SDS00040.png

* napajanie z USB z PC, CH1 = 5V, CH2 = Vref. Tu je zmena Vref este
vyraznejsia.
http://kaliciak.ddns.net/temp/arduino/SDS00042.png

* napajanie z USB z PC, procesor pocas cakania v IDLE Mode, CH1 = LCD
Enable, CH2 = Vref. Tak toto sa uz za referenciu neda povazovat. V RUN
mode je to ako v predchadzajucich meraniach, ale v IDLE mode to vyleti
hore. Prve A/D prevody po prebudeni z IDLE vykazuju velku odchylku.
http://kaliciak.ddns.net/temp/arduino/SDS00048.png

* napajanie z USB z PC, procesor pocas cakania v IDLE Mode, pred
vyvolanim IDLE sa vypne ADC:
    CBI(ADCSR,ADEN);
    SLEEP_MODE;
    SBI(ADCSR,ADEN);

CH1 = LCD Enable, CH2 = Vref. Ani toto sa za referenciu neda povazovat.
http://kaliciak.ddns.net/temp/arduino/SDS00050.png
detail
http://kaliciak.ddns.net/temp/arduino/SDS00051.png


Problem som vyriesil pripojenim externej napätovej referencie 1,235V
B589 (este z DDR = AD589) + odpor 6k8. DC meranie konecne ukaze rovnu
ciaru, AC meranie je tu:
http://kaliciak.ddns.net/temp/arduino/SDS00055.png
Hodnoty z A/D su stabilne a podla ocakavania.
Myslim si, ze Vref s obycajnym TL431 by tiez bola dobra oproti internej
referencie.



Otazky do plena:
- Je to vlastnost Arduina, ATMegy alebo aj to AVR je cinsky klon?
- Ak to nieje vlastnost, v com je chyba? (okrem toho, ze som pouzil
Arduino ako polotovar)
- Pouziva tu niekto interny A/D prevodnik + Vref a IDLE mode? Ak ano, ako?
- Ake IO pre referencie bezne pouzivate?


Este chcem pochvalit Dana V. (balu), ze v konstrukcii pre ZENIT pouzil
externe A/D a D/A prevodniky, usetril si s tym kopu starosti.


Richard Kaliciak



Další informace o konferenci Hw-list