analogReference – pomoc
Úvodní stránka › Fórum › Vaše projekty › Arduino › analogReference – pomoc
- Toto téma obsahuje celkem 11 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel peter57 a poslední změna proběhla před 8 roky a 1 měsícem.
-
AutorPříspěvky
-
17.10.2016 v 22:50 #8843peter57Účastník
Zdravím,
píšu program který má za úkol přečíst analogové napětí baterie z které je napájen a indikovat stav pomocí LED. Dále má číst analogové napětí na posuvníku. z toho důvodu potřebuji měnit referenci.analogReference(INTERNAL); batt = analogRead(A6);
tohle samo o sobě funguje, ale nefunguje pak čtení posuvníku a když udělám
analogReference(INTERNAL); batt = analogRead(A6); analogReference(DEFAULT); joy = (analogRead(A0) / 2);
tak už to nefunguje. a do batt to dává nesmyslná čísla.Jak mám tu referenci měnit?
mám procesor mega328p (arduino pro mini)17.10.2016 v 23:04 #8844posjirkaÚčastníkneuvádíš jak je to zapojený …. máš tam stabilizator pro napájení mikroprocesoru, nebo přímo z baterie ?
Pokud ze satbilizátoru tak bych baterii dal přes odporový dělič a měřil výsledke. Doporučuju vyopočítat pro napětí tak 2/3 reference. Tady se počítá s tím, že s emění napětí baterie a refernční napětí zůstává stejné.
Druhá varinata je , že napájíš mikroprocesor přímo z baterie a tím pádem se ti mění i refernční napětí. v tom případě na baterii použij nějáký stabilizátor pro přesné refernční napětí (jen ne diodu ta je dost teplotně závislá), v nouzovém případě i klasický stabilizátor 7803 pro 3V. Pak budeš mít obrácenou logiku : snížení hodnoty analogvého pinu indikuje snížení napětí bateri / referenční napětí …Posuvník jako termín nechápu, předpokládám, že je to nějáký potenciometr připojený mezi zem a refenreční napětí, pak ti neovlivńuje funkci měření …
17.10.2016 v 23:15 #8845peter57ÚčastníkProcesor je napájen přímo z baterie. Na ADC vstupu mám dělič který mi v závislosti na stavu baterie srazí napětí na cca 0,7-1,05 V proto používám tu referenci 1,1V.
jak píšeš, REF napětí se mi mění v závisloti na stavu baterie což je pro mě dobře kvuli tomu posuvníku…jedná se o joy. funkci měření mi neovlivňuje. jen mi jde o program. Nějak přestává fungovat, když furt měním reference. když čtu napští na joy (což je dělič) potřebuju referenci v závisloti na napájení… aby byla 0 furt v 0 a aby byl celý rozsah použit. pro měření Baterie potřebuju referenci 1,1 V abych určil stav té baterie.
Attachments:
17.10.2016 v 23:23 #8848peter57Účastníktakhle to je zapojene… omlouvám se je to v malování
Attachments:
18.10.2016 v 7:59 #8851posjirkaÚčastníkjak jsem psal, místo odporu 100k použij nějáký pevný stabilizátor. …. pro začátek třeba tu mojí zatracovanou diodu … obyč. dioda 1b4001 katodou na zem, anodou na analogový pin.
18.10.2016 v 11:09 #8855peter57ÚčastníkMoc děkuji za odpověď,
jen nechápu úplně k čemu mi tam bude… ta dioda se otevře a bude na ní cca 0,7V a je jedno kdy to budu měřit ale vždy na ní bude toto napětí a ten odpor 400k na sobě bude mít zbytek.Muj problém je software… z nějakého důvodu vadí AD převodu když furt měním reference. Tak vlastně měla znít moje otázka… jak často popřípadě s jakýma podmínkami mohu měnit reference analogového napětí z napájecí a interní(1,1V) a z5.
jde mi číst stav bateri tak jak to mám… funguje to super. ale musím pouřít vnitří referenci na 1.1V
analogReference(INTERNAL);
a když v kodu uplně v jiné metodě, která se pustí třeba 100ms po převodu mám kvuli měření joy
analogReference(DEFAULT);
tak přestane fungovat převod té baterie 🙁
další HW řešení mě napadlo takové že bych nastavil referenci jen jednou a to na AREF kam bych přes stabilizátor přivedl 3.3V, který bych musel přivést i na joy. tím by joy fungoval a nasavil bych dělič třeba 1/2 takže napětí baterie by bylo 1,75-2,1 což se do 3.3 vejde ALE to znamená předělat DPS… furt si myslím že by to šlo nějak udělat kodem…
18.10.2016 v 19:23 #8864MiKÚčastníkJá si myslím, že problém nebude v referenci, ale v příliš velkých odporech v děliči na tom vstupu A6.
Problém s příkazem analogRead() je v tom, že přepne multiplexer na požadovaný vstup a okamžitě načte hodnotu napětí. Jenže kvůli vnitřní kapacitě vstupu a velkému sériovému odporu se to měřené napětí nestačí ještě ustálit.
Už jsem jednou podobný problém řešil a stačilo dát to měření napětí na A6 2x za sebou s nějakou krátkou pauzou:
batt = analogRead(A6);
delay(50);
batt = analogRead(A6);Třeba tady o tom taky něco píšou (a tu pauzu mezi dvěma stejnými měřeními tam ani nemají):
https://www.quora.com/Why-is-a-little-delay-needed-after-analogRead-in-ArduinoDruhým řešením by bylo snížení (třeba 10x) hodnoty odporů v tom děliči.
18.10.2016 v 20:00 #8865peter57ÚčastníkTaky jsem se někde dočetl o tomto problému dal jsem analogRead() asi 6x pod sebe, skoušel jsem to i s delay() nepomohlo to… a ten převod sám o sobě funguje naprosto super, dokuď neměním reference. Když tam jednou nastavím analogReference(INTERNAL); tak to funguje super.. když si na zdroji dám 4,2V tak LED krásně zeleně září. Postupně ubírám napětí tak to žloutne až červená a u 3,4V začne LED červeně blikat přesně tak jak to po ní chci.
ale v tom momentu kdy se v kodu začne přehozavot analogReference(INTERNAL); a analogReference(DEFAULT); je furt ten DEFAULT zkoušel jsem to napsat i taktodo{ analogReference(INTERNAL); batt = analogRead(A6); }while(batt < 100);
a tím se mi program zasekne…
do batt se mělo uložit číslo od 0-1023 a v referenci na 1,1V pro napětí od 3,4-4,2 by hodnoty měli být 790 – 1000 +-18.10.2016 v 20:12 #8868posjirkaÚčastníkpánové ,proč to řešíte tak složitě ….
vezměte si, že budete mít konstantní zdroj 0,7V (dioda).
Když necháme refenreční napětí = napájecí napětí tak při 5V to bude třeba hodnota 200, když klesne napětí baterie na 3,5V tak to bude hodnota 400 (té konstaktny 0,7V) …18.10.2016 v 20:16 #8869peter57Účastníkjo takhle to bylo myšleno… já furt nechápal tu diodu v tom děliči…. ááha to by taky šlo a DPS by se nemuselo předělávat jen by se vyhodil ten odpor a hodila se tam ta dioda… beru to na vědomí… a moc děkuji… ale furt mě štve to, že to nejde udělat tak jak to mám napsané.. prostě nevím proč to nejde 🙁
ještě mě došlo že se asi zapoměl dát kondenzátor na AREF a někde jsem myslím četl že i když se používá vnitřní reference že by tam měl být…
18.10.2016 v 22:54 #8872posjirkaÚčastníkno já si myslim, že je to způsobeno použitím. měnit referenci a přitom mít zapojené na jiném analog.vstupu vyšší hodnotu je už z principu špatně. zkus zajet joystickem na s´tranu k zemi a zkus to . Případně dej Joystick na stejný potenciál jako je refernční napětí (nepoužívej interní) ….
19.10.2016 v 22:25 #8873peter57ÚčastníkTak pánové, moc děkuji za pomoc nakonec jsem tam dal tu diodu. Funguje to bez problému.
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.