Küsimus:
Küsimus takistuse mõõtmise kohta arduinoga
Julio Orozco
2016-08-10 14:35:48 UTC
view on stackexchange narkive permalink

Viimasel ajal küsisin endalt võimaluse kohta mõõta potentsiomeetri takistust Arduinoga.

Minu küsimused on järgmised:

  1. kas see on võimalik?
  2. Kui see on võimalik, siis millised piirangud on Arduinol mõõdetud takistuse väärtusega?
[See lihtne näide] (https://www.arduino.cc/en/tutorial/potentiometer) näitab, kuidas mõõta ** asukohta **. See kasutab potentsiomeetrit, mille otsad on ühendatud + 5V ja 0V külge ning analoogpinge loete ühenduses "klaasipuhasti", mis on enamiku potentsiomeetrite kese. (Selgituseks - see meetod ei mõõta takistust otseselt, selleks kasutatakse teistsugust korraldust. Kuid enamik potentsiomeetri rakendusi vajavad lihtsalt positsiooni.)
@Andy Võite alati lihtsalt lisada oma koodile kiire võrrandi, et muuta pinge uuesti takistuseks, kui teate kasutatava poti väärtust
@Hayman olete õige, kui poti üldine vastupanu on teada. Kuid minu jaoks pole täiesti selge, kas küsija soovib kasutada tuntud poti vooluringis või üritab mõõta millegi "takistust" üldiselt. Sellepärast olin ettevaatlik :)
Kaks vastused:
Majenko
2016-08-10 17:59:57 UTC
view on stackexchange narkive permalink

Kui teate Ohmi seadust (mida peaksite) ja mõistate, et ADC mõõdab pinget, peaksite saama selle sealt välja töötada. Kuid ma tutvun teie üksikasjadega üksikasjalikult, et saaksite aru.

Ohmi seadus määratleb pinge (V), voolu (I) ja takistuse (R) vahelise seose.

  R = V / I  

Ühe tundmatu väärtuse (teie puhul R) leidmiseks peate teadma kahte ülejäänud väärtust. See tähendab, et takisti kaudu voolav vool ja kogu takisti langenud pinge.

Meil ​​pole mingit võimalust voolu otseselt mõõta, kuid pinget saame mõõta ADC abil. Nii et kui saame kuidagi pinget mõõta ja seda voolu arvutamiseks kasutada, on meil kolm väärtust kaks ja saame arvutada kolmanda. Voolu arvutamiseks on siiski vaja teada takistust - see on see, mida me tahame teada saada.

Seega peame seejärel pakkuma teadaolevat takistust, mida saame mõõta kogu pinge ja leiavad sellest läbi voolava voolu. Kõigepealt paar meeldetuletust põhitõdedest:

  • vool liigub kõigi jadamisi ühendatud takistuste kaudu samamoodi
  • kõigi järjestikuste takistite peale langenud pingete summa võrdub kogu kõik takistid.

Nii et kui asetame kaks takistit järjestikku ja rakendame sellele fikseeritud pinget (meie puhul 5 V), siis voolab neist mõlemast läbi üksik vool. Selle tulemusel langevad takistid üle kahe pinge - ja need kaks pinget lisavad kuni 5 V. arvutage teadaoleva takisti kaudu voolav vool. Ja see vool on sama vool, mis voolab läbi tundmatu takisti. Ja kuna me teame selle takisti pingelangust, saame selle takistuse arvutada selle pinge ja äsja arvutatud voolu abil.

Siin on just kirjeldatud vooluring:

enter image description here

Viinake 5V. Olgu R1 näiteks 10KΩ (piisavalt tavaline väärtus). R2, mida me ei tea.

Arduino ADC abil mõõdame väärtuse 681. Kõigepealt teisendame selle pingeks:

  Vout = 681 / 1024.0 * 5,0 = 3,325 V  

Nii et me teame, et R2-l on üle selle langenud 3,325 V ja kuna kõik pinged peavad olema kokku 5 V, siis teame, et R1-l on (5–3,325) 1,675 V langes üle selle.

Nii et vool (I = V / R) kuni R1 peab olema (1,675 / 10 000) 167,5 µA (0,0001675A).

Nüüd saame arvutada takistuse R2-st, kuna R = V / I ja V on 3,325 ja I on 0,0001675, seega peab R olema 19850Ω - või üsna palju 20KΩ.

See on pikapoolne versioon praegusest vaatenurgast. Siiski on olemas otsetee.

Kuna väljundpinge on sisendpinge lihtne suhe, mis on määratud takistite vahelise suhtega, saame seda kasutada palju lihtsama valemi loomiseks.

Väljundi kohal olevast näitest pinge on kaks kolmandikku sisendpingest - ja R2 on kaks kolmandikku kogu takistusest (R1 + R2). Need kaks sobivad ideaalselt. Nii et saame takisti saamiseks kasutada lihtsat suhtarvu.

Näiteks suhtevalem:

  Vout = R2 / (R1 + R2) * Vin  

(see on R2 kogu takistuse ja sisendpinge korrutisena)

Kui R2 on ümber korraldatud, annab see meile:

  R2 = R1 * (1 / ((Vin / Vout) - 1))  

Nii et võtame ülalpool mõõdetud pinge (3.325) ja teadaoleva takisti (10 000Ω) ning sisendi pinge (5 V) ja asendades need väärtused valemiga, saame:

  R2 = 10 000 * (1 / ((5 / 3,325) - 1)) = 10 000 * (1 / (1,504) ) - 1) = 10 000 * (1 / 0,504) = 10 000 * 1,984 = 19840  

Või päris palju 20KΩ. (Märkus: tulemuste lahknevus on puhtalt ümardamisvigade tõttu. Kasutage suuremaid täpsusväärtusi ja saate paremaid tulemusi).

Kuid selleks, et valida võrreldava väärtusega R1 nii, et pinge Vout oleks täpse mõõtmise jaoks piisavalt suur, peab teil olema ligikaudne ettekujutus takisti suuruse järjestusest, mida proovite leida.

Samuti peate olema teadlik, et ADC sisendil on üsna (suhteliselt) väike impedants (seda võib väga toorelt mõelda kui sisendi ja maapinna vahelist takistit), mida mõõdetakse madala mega -ohm vahemik. See võib mõjutada ADC-ga loetud väärtusi, kui teie takistid on liiga kõrged, kuna see takistus on paralleelne takistiga R2, nii et tegelikult mõõdaksite paralleelselt nii R2 kui ka ADC sisendi takistust . Väga kõrge takistuse mõõtmiseks peaksite kõigepealt puhverdama ADC pinge jälgija kaudu väga kõrge (kümneid või sadu tera-oomi) impedantsi sisendiga.

Tegelikult on ümberarvestustegur 1024, mitte 1023, vastavalt ATmega328P andmelehele. Mitte et sellel oleks siiski suurt vahet ...
Pange 5v ADC-sse ja loete 1023. 1023/1024 * 5 ei ole 5. 1023/1023 * 5 on 5.
@EdgarBonet Kui me tõesti "nokitseme", siis võite väita, et 5V ei ole tõepoolest 5.0000, nii et võite öelda, et ka 5 kasutamine on vale. Nii nagu olen alati teadnud, on 1024 taset, kuna 0 on esimene number, mis teeb 1023 täisskaalaks, kas pole?
@Hayman mõtlete nii, nagu ma arutaksin [oma blogis] (https://hackingmajenkoblog.wordpress.com/2016/02/01/making-accurate-adc-readings-on-the-arduino/)?
See oli huvitav lugemine, proovisin mõelda, kuidas Vcc-d pardal täpselt mõõta, ei teadnud, et saate nii teha. Nüüd on kõik mu analoognäidud natuke täpsemad
Pange ADC-le 5,01 V ja loete 1023. Seda nimetatakse küllastuseks. @Hayman: Mul pole 5 V jaoks paremat alternatiivi. See võib olla rohkem või vähem, kuid see on _ nominaalselt_ 5 V, nii et ma kirjutaksin 5 V, kuni tean paremini. Kuid Vcc ei mõjuta takistuse mõõtmist niikuinii. Ja teisendustegur on _ nominaalselt_ 1024: see võib olla 1023, nagu see võiks olla 1025. Reaalse teguri ja 1024 erinevust nimetatakse _vea veaks_ ja selle suhtes on teatud tolerants. C.f. andmeleht.
Näib, et AVR-i ADC kasutab madalama kvantisatsiooni, nii et suurim väärtus (1023) tähistab Vref - 1 LSB. Ergo 5V-d ei saa kunagi mõõta, kui te ei ühenda VRef-pin rohkem kui 5V-ga. AVR 1024 on siis õige väärtus (arvutused on värskendatud), kuigi see ei pruugi olla teiste ADC-de puhul.
Doodle
2016-08-10 16:02:16 UTC
view on stackexchange narkive permalink

Küsimus pole selgesõnaliselt selge, see vastus põhineb ühe teadaoleva väärtuspoti omamisel ja soovil teada saada selle vastupanu ükskõik millises punktis, selle asemel et proovida täielikult leida tundmatut vastupanu

Otseselt vastupanu ei saa mõõta. Mida saate teha, on aga potentsiomeetri pinge mõõtmine.
Arduino pakub väga head näidet , mille leiate siit.

Nüüd on see võimalik selle muutmiseks vastupanuväärtuseks, pisut koodi muutes

  int potPin = A0; // Valige potentsiomeetri sisendi tihvt potR = 1000; // See on teie maksimaalne potentsiomeetri takistus Ohmsint val = 0; // Muutuv sensorfloat-pingest tuleneva väärtuse salvestamiseks; // See on poti ujumiskindluse klaasipuhasti pinge; // See on poti takistus wipervoidi seadistamisel () {Serial.begin (9600);} void loop () {val = analogRead (potPin); // Loe väärtus poti klaasipuhasti pingest = val * (5,0 / 1023,0); // Väärtuse teisendamine pingetakistuseks = (pinge / 5,0) * potR; // Teisenda pinge takistuseks Serial.print ("Pinge ="); Seeriaprint (pinge); // Trüki pinge Serial.println ("V"); Serial.print ("Takistus ="); Seeriaprint (takistus); // Trükkige takistus Serial.println ("R"); viivitus (1000); // Lisage väike viivitus}  

Mis puutub teie teise küsimusse, siis see võib põhjustada nii suurt vastupanu kui soovite. Niikaua kui värskendate koodi potR väärtust oma poti takistusega (nt 1000000 1MOhm poti jaoks)

Olen kaubanduslikult elektroonikainsener, nii et minu koodi saaks tõenäoliselt puhastada üles ja muudetud efektiivsemaks, see on alles lähtepunkt

Tegelikult saate takistust mõõta ainult siis, kui teil on võrdlustakisti. Seejärel saate mõõta pinget võrdlustakisti ja tundmatu takisti vahel ning seejärel arvutada tundmatu takisti väärtuse.
Lihtsalt nokitsemine: mastaabitegur on 1024, mitte 1023.


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...