Tartalomjegyzék:
- 1. lépés: Az áramkör építése
- 2. lépés: Az oszcilloszkóp beállítása
- 3. lépés: Töltse le és futtassa a szoftvert
- 4. lépés: Hozza létre saját egyéni rajzát
- Lépés: Illessze be a koordinátákat az SVG fájlból az Arduino IDE -be
- 6. lépés: Értse meg, miért olyan lassú a PWM
- 7. lépés: Menj el a -ból B -be, Tad Bit gyorsabban
- 8. lépés: A -ból B -be, turbófeltöltővel
- 9. lépés: A kód megértése
- 10. lépés: Nagy sebességgel, nagy felelősséggel jár
Videó: Szupergyors analóg feszültségek az Arduino -tól: 10 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
Ez az utasítás bemutatja, hogyan lehet szupergyors analóg feszültségváltozásokat generálni egy Arduino, valamint egy egyszerű ellenállás és kondenzátor párból. Az egyik alkalmazás, ahol ez hasznos, grafikák generálása oszcilloszkópon. Több más projekt is ezt tette. A Johngineer egy egyszerű karácsonyfát mutat be impulzusszélesség -modulációval (PWM). Mások továbbfejlesztették ezt a projektet egy ellenállás létra vagy egy dedikált digitális-analóg átalakító chip használatával.
A PWM használata sok villódzást okoz, míg az ellenállás létra vagy a digitális-analóg átalakító használata több kimeneti tüskét és alkatrészeket igényel, amelyek esetleg nem állnak rendelkezésre. Az általam használt áramkör ugyanaz a holt egyszerű ellenállás és kondenzátor pár, mint a karácsonyfa bemutatójában, de lényegesen kevesebb villódzással működik.
Először is végigvezetem az áramkör felépítésének folyamatán. Akkor megtanítom, hogyan adhat hozzá saját képet. Végül bemutatom azt az elméletet, hogy mi teszi gyorsabbá.
Ha tetszett ez az Instructable, akkor fontolja meg a szavazást!:)
1. lépés: Az áramkör építése
Az áramkör felépítéséhez a következőkre lesz szüksége:
a) Arduino, amely az Atmel 16MHz ATmega328P alapú, például Arduino Uno vagy Arduino Nano.
b) Két R értékű ellenállás, amely legalább 150Ω.
c) Két C értékű kondenzátor, C = 0,0015 / R, példák:
- R = 150Ω és C = 10µ
- R = 1,5 kΩ és C = 1 µ
- R = 15 kΩ és C = 100 nF
- R = 150 kΩ és C = 10 nF
Ezen értékek kiválasztásának kettős oka van. Elsősorban az Arduino csapjain lévő áramot szeretnénk a maximális 40 mA névleges áram alatt tartani. A 150Ω érték használata az áramot 30 mA -re korlátozza, ha 5 V -os Arduino tápfeszültséggel használja. A nagyobb R értékek csökkentik az áramot, ezért elfogadhatók.
A második megkötés az, hogy az időt állandó értéken szeretnénk tartani, ami R és C szorzata, körülbelül 1,5 ms. A szoftvert kifejezetten erre az időállandóra hangolták. Bár a szoftverben lehetőség van az R és C értékek módosítására, egy szűk tartományban fog működni, ezért válassza ki az összetevőket a javasolt arányhoz közel.
Az elmélet részben részletesebb magyarázatot adunk arra, hogy miért fontos az RC állandó, miután bemutattam a bemutató áramkör összeállítását.
2. lépés: Az oszcilloszkóp beállítása
A bemutatóhoz X/Y módba állított oszcilloszkóp szükséges. A mérővezetékeket a kapcsolási rajzok szerint kell csatlakoztatni. Az oszcilloszkópja eltér az enyémtől, de végigjárom az X/Y mód beállításához szükséges lépéseket a készüléken:
a) Állítsa be a vízszintes söprést a B csatorna (X tengely) vezérlésére.
b) Állítsa az oszcilloszkópot kétcsatornás üzemmódba.
c) Állítsa be a feszültséget/div mindkét csatornán úgy, hogy 0V és 5V közötti feszültséget tudjon megjeleníteni. Az enyémet 0,5V/div -ra állítottam.
d) Állítsa a csatolási módot DC -re mindkét csatornán.
e) Állítsa be X és Y helyzetét úgy, hogy a pont a képernyő bal alsó sarkában legyen, amikor az Arduino ki van kapcsolva.
3. lépés: Töltse le és futtassa a szoftvert
Töltse le a szoftvert az Arduino gyors vektoros kijelzőjéről. A szoftver a GNU Affero Public License v3 licencével rendelkezik, és szabadon használható és módosítható az adott licenc feltételei szerint.
Nyissa meg a "fast-vector-display-arduino.ino" fájlt az Arduino IDE-ben, és töltse fel az Arduino-ra. Pillanatnyilag "Boldog új évet" animáció jelenik meg az oszcilloszkóp képernyőjén.
Ezt a projektet személyes hackatonként dolgoztam ki a karácsony előtti hetekben, ezért van egy karácsonyi és újévi témájú üzenet, amelyet a PATTERN változó módosításával láthat.
4. lépés: Hozza létre saját egyéni rajzát
Ha saját rajzot szeretne létrehozni, akkor illessze be a pontkoordinátákat az Arduino vázlatba az USER_PATTERN -t meghatározó vonalon.
Azt tapasztaltam, hogy az Inkscape nagyon jó eszköz egyéni rajz készítéséhez:
- Hozzon létre szöveget egy nagy, vastag betűtípussal, például az Impact használatával.
- Válassza ki a szöveges objektumot, és válassza az "Object to Path" elemet az "Path" menüből.
- Válassza ki az egyes betűket, és fedje át őket, hogy összekapcsolt alakzatot hozzon létre
- Válassza az "Unió" lehetőséget az "Útvonal" menüből, hogy egyetlen görbévé egyesítse őket.
- Ha lyukak vannak a betűkben, vágjon egy kis bevágást úgy, hogy a téglalap eszközzel téglalapot rajzol, és kivonja a kontúrból a "Különbség" eszköz segítségével.
- A csomópontok megjelenítéséhez kattintson duplán az elérési útra.
- Válassza ki az összes csomópontot téglalap alakban, majd kattintson a "Kijelölt csomópontok létrehozása sarokba" eszközre.
- Mentse az SVG fájlt.
A lényeg az, hogy a rajz egyetlen zárt utat és lyukakat ne tartalmazzon. Győződjön meg arról, hogy a terv kevesebb mint 130 pontot tartalmaz.
Lépés: Illessze be a koordinátákat az SVG fájlból az Arduino IDE -be
- Nyissa meg az SVG fájlt, és másolja ki a koordinátákat. Ezek be lesznek ágyazva az "útvonal" elembe. Az első koordinátapár figyelmen kívül hagyható; cserélje ki őket 0, 0 -val.
- Illessze be a koordinátákat a zárójelben lévő Arduino -vázlatba közvetlenül a "#define USER_PATTERN" után.
- Cserélje ki az összes szóközt vesszővel, különben fordítási hibát kap. A "Csere és keresés" eszköz hasznos lehet.
- Fordítsa össze és futtassa!
- Ha problémái vannak, nézze meg a soros konzolt az esetleges hibákért. Különösen akkor láthat üzeneteket, ha a mintája túl sok pontot tartalmaz a belső pufferhez. Ilyen esetekben a kép túlzottan vibrál.
6. lépés: Értse meg, miért olyan lassú a PWM
Először nézzük át a kondenzátor viselkedését töltés közben.
A Vcc feszültségforráshoz csatlakoztatott kondenzátor exponenciális görbe szerint növeli feszültségét. Ez a görbe aszimptotikus, vagyis lassulni fog, amint megközelíti a célfeszültséget. Minden gyakorlati célból a feszültség "elég közel" van 5 RC másodperc után. Az RC -t "időállandónak" nevezik. Amint azt korábban láttuk, ez az áramkörben lévő ellenállás és kondenzátor értékeinek szorzata. A probléma az, hogy az 5 RC meglehetősen hosszú idő a grafikus kijelző egyes pontjainak frissítéséhez. Ez sok villódzáshoz vezet!
Ha impulzusszélesség -modulációt (PWM) használunk a kondenzátor feltöltésére, akkor sem vagyunk jobb helyzetben. A PWM segítségével a feszültség gyorsan vált 0V és 5V között. A gyakorlatban ez azt jelenti, hogy gyorsan felváltva töltjük a töltést a kondenzátorba, és húzzunk ki belőle egy kicsit - ez a lökés és húzás inkább olyan, mintha egy nagy lépést előre, majd egy kis lépést hátrálva próbálnánk lefutni egy maratont. újra és újra.
Ha mindent átlagol, a kondenzátor PWM használatával való töltése pontosan ugyanaz, mint ha állandó Vpwm feszültséget használt volna a kondenzátor töltésére. Még mindig körülbelül 5 RC másodperc szükséges ahhoz, hogy "elég közel" érjük el a kívánt feszültséget.
7. lépés: Menj el a -ból B -be, Tad Bit gyorsabban
Tegyük fel, hogy van egy kondenzátorunk, amely már fel van töltve Va -ig. Tegyük fel, hogy az analogWrite () segítségével írjuk ki a b új értékét. Mennyi ideig kell várni a Vb feszültség elérésére?
Ha 5 RC másodpercet tippelt, az nagyszerű! Az 5 RC másodperc várakozással a kondenzátort nagyon közel Vb -ra töltik fel. De ha akarjuk, akkor egy kicsit kevesebbet várhatunk.
Nézd meg a töltési görbét. Látod, a kondenzátor már Va -nál volt, amikor elkezdtük. Ez azt jelenti, hogy nem kell várnunk a t_a időre. Csak akkor kellene, ha nulláról töltenénk a kondenzátort.
Tehát ha nem várjuk meg ezt az időt, javulást látunk. A t_ab idő valójában valamivel rövidebb, mint 5 RC.
De tarts ki, sokkal többet tudunk csinálni! Nézze meg ezt a helyet a v_b felett. Ez a különbség a Vcc, a rendelkezésünkre álló maximális feszültség és az elérni kívánt Vb között. Látod, hogyan segíthet ez az extra feszültség sokkal gyorsabban eljutni oda, ahová szeretnénk?
8. lépés: A -ból B -be, turbófeltöltővel
Úgy van. Ahelyett, hogy a PWM -et V_b célfeszültség mellett használnánk, sokkal -sokkal rövidebb ideig állandó Vcc -n tartjuk. Ezt Turbo Charger módszernek hívom, és nagyon -nagyon gyorsan eljutunk oda, ahová szeretnénk menni! Az időkésleltetés után (amit ki kell számolnunk), a fékeket lecsapjuk, átkapcsolva a PWM -re V_b -nél. Ez megakadályozza, hogy a feszültség túlszárnyalja a célt.
Ezzel a módszerrel lehetőség van a kondenzátor feszültségének V_a -ról V_b -re történő megváltoztatására az idő töredéke alatt, mint csak a PWM használatával. Így szerezhet helyet, kicsim!
9. lépés: A kód megértése
Egy kép ezer szónál többet ér, így a diagram az adatokat és a kódban végrehajtott műveleteket mutatja. Balról jobbra:
- A grafikus adatokat a PROGMEM (azaz flash memória) tárolja pontok listájaként.
- A fordítási, skálázási és forgatási műveletek bármely kombinációja egy affin transzformációs mátrixba kerül. Ezt minden animációs keret elején egyszer kell elvégezni.
- A pontokat egyenként olvassák le a grafikus adatokból, és mindegyiket megszorozzák a tárolt transzformációs mátrixszal.
- Az átalakított pontokat ollózó algoritmuson keresztül tápláljuk, amely a látható területen kívül minden pontot levág.
- Az RC késleltetési táblázat segítségével a pontokat menetfeszültséggé és időkésleltetéssé alakítják át. Az RC késleltetési tábla az EEPROM-ban van tárolva, és újra felhasználható a kód többszöri futtatásához. Indításkor az RC keresési tábla pontossága ellenőrizve van, és a helytelen értékek frissülnek. Az EEPROM használata értékes RAM memóriát takarít meg.
- A hajtási feszültségeket és késleltetéseket a keretpuffer inaktív keretébe írják. A keretpuffer helyet tartalmaz egy aktív keretnek és egy inaktív keretnek. A teljes keret megírása után az inaktív keret aktívvá válik.
- Egy megszakítási szolgáltatási rutin folyamatosan újrarajzolja a képet a feszültségértékek és a késleltetések kiolvasásával az aktív keretpufferből. Ezen értékek alapján módosítja a kimeneti csapok működési ciklusait. Az 1. időzítőt az időkésleltetés néhány nanosekundum pontosságú mérésére használják, míg a 2. időzítőt a csapok életciklusának szabályozására.
- A legnagyobb feszültségváltozással rendelkező csap mindig "turbófeltöltésű", nulla vagy 100%-os üzemidővel, ami a leggyorsabb töltési vagy kisülési időt biztosítja. A kisebb feszültségváltozással rendelkező csapot az első csapszeg átmeneti idejének megfelelően választott működési ciklussal hajtják meg-ez az időbeosztás fontos annak biztosítása érdekében, hogy a vonalak egyenesen húzódjanak az oszcilloszkópon.
10. lépés: Nagy sebességgel, nagy felelősséggel jár
Mivel ez a módszer sokkal gyorsabb, mint a PWM, miért nem használja az analogWrite ()? Nos, mert csak a PWM használata elég jó a legtöbb programhoz, és sokkal megbocsátóbb. A "Turbo Charger" módszer azonban gondos kódolást igényel, és csak bizonyos esetekben alkalmas:
- Rendkívül érzékeny az időzítésre. Amint elértük a célfeszültség szintjét, a hajtótüskét azonnal normál PWM üzemmódba kell kapcsolni, hogy elkerüljük a célfeszültség túllépését.
- Ehhez szükség van az RC állandó ismeretére, ezért ezeket az értékeket előre be kell írni. Helytelen értékek esetén az időzítés és a feszültségek helytelenek lesznek. Rendszeres PWM esetén garantált, hogy egy idő után a megfelelő feszültségre áll, még akkor is, ha az RC állandó nem ismert.
- A kondenzátor töltésének pontos időintervallumának kiszámításához olyan logaritmikus egyenletekre van szükség, amelyek túl lassúak az Arduino valós idejű számításához. Ezeket minden animációs keret előtt előre ki kell számítani, és valahol gyorsítótárazni kell a memóriában.
- Az ezzel a módszerrel foglalkozó programoknak szembe kell nézniük azzal a ténnyel, hogy a késések nagyon nem lineárisak (valójában exponenciálisak). A Vcc vagy GND közelében lévő célfeszültségek elérése sok nagyságrenddel tovább tart, mint a középpont közelében.
Ezen korlátok leküzdése érdekében a vektorgrafikus kódom a következőket teszi:
- Az 1. időzítőt 16 kHz -en és megszakítási szolgáltatási rutinot használja a pontos kimeneti manipulációhoz és időzítéshez.
- Ez megköveteli az RC időállandó meghatározott értékének használatát, korlátozva a kondenzátor és az ellenállás értékeit.
- Memóriapufferben tárolja az animációs keret összes pontjának késleltetését. Ez azt jelenti, hogy az időkésleltetéseket kiszámító rutin sokkal lassabban fut, mint a megszakítási szolgáltatási rutin, amely frissíti a kimeneti csapokat. Bármelyik keret több tucatszor festhető, mielőtt a következő keret új késleltetése készen áll a használatra.
- A memóriapuffer használata korlátozza a képkockánként húzható pontok számát. Helytakarékos kódolást alkalmazok, hogy a legtöbbet hozzam ki a rendelkezésre álló RAM -ból, de még mindig csak 150 pontra van korlátozva. Körülbelül száz ponton túl a kijelző úgyis villogni kezd, szóval vitatott!
Ajánlott:
Szupergyors RC földi hatású jármű (Ekranoplan): 5 lépés (képekkel)
Szupergyors RC földi hatású jármű (Ekranoplan): Tudja, hogy a leszállások során a repülőgépek egy ideig lebegnek néhány méterrel a talaj felett, mielőtt a kerekeik ténylegesen a kifutópályára ütköznek? Ez nemcsak az utasok zökkenőmentes leszállását biztosítja, hanem a talajhatás természetes eredménye is, amelyben
LEDura - analóg LED óra: 12 lépés (képekkel)
LEDura - Analóg LED -óra: Hosszú idő után, amikor különféle projekteket készítettem, úgy döntöttem, hogy magam is elkészítek egy tanulhatót. Az elsőben végigvezetem Önt a saját analóg óra készítésének folyamatán, félelmetes címezhető LED -gyűrűvel. A belső gyűrű mutatja az órákat, ou
Több analóg érték olvasása egy analóg tűvel: 6 lépés (képekkel)
Több analóg érték olvasása egy analóg tűvel: Ebben az oktatóanyagban megmutatom, hogyan kell több analóg értéket olvasni csak egy analóg bemeneti tűvel
Raspberry Pi GPIO áramkörök: LDR analóg érzékelő használata ADC nélkül (analóg -digitális átalakító): 4 lépés
Raspberry Pi GPIO áramkörök: LDR analóg érzékelő használata ADC nélkül (analóg -digitális átalakító): Korábbi utasításunkban megmutattuk, hogyan kapcsolhatja össze a Raspberry Pi GPIO -csapjait LED -ekhez és kapcsolókhoz, és hogyan lehetnek a GPIO -tűk magasak vagy Alacsony. De mi van akkor, ha a Raspberry Pi -t analóg érzékelővel szeretné használni? Ha egy
Arduino DIY analóg hőmérő: 7 lépés (képekkel)
Arduino DIY analóg hőmérő: Kedves barátaink, üdvözöljük egy másik oktatóanyagban! Ma megtanuljuk, hogyan kell használni ezt az analóg voltmérőt az Arduino -val, és hogy a feszültség helyett a hőmérsékletet mutassa. Amint láthatja, ebben a módosított voltmérőben láthatjuk a hőmérsékletet