Ebben az oktatóanyagban fejlesztünk egy áramkört a Force érzékelő, az Arduino Uno és a szervomotor segítségével. Ez egy szervo vezérlőrendszer lesz, ahol a szervo tengely helyzetét az erőérzékelőn lévő súly határozza meg. Mielőtt tovább folytatnánk, beszéljünk a szervóról és más alkatrészekről.
A szervomotorokat ott alkalmazzák, ahol pontos tengelymozgásra vagy helyzetre van szükség. Ezeket nem javasoljuk nagy sebességű alkalmazásokhoz. Ezeket alacsony fordulatszámra, közepes nyomatékra és pontos helyzetmeghatározásra javasoljuk. Ezeket a motorokat robotkaros gépekben, repülésvezérlőkben és vezérlőrendszerekben használják. A szervomotorokat egyes nyomtatókban és faxgépekben is használják.
A szervomotorok különböző formában és méretben kaphatók. A szervomotor főként vezetékekkel rendelkezik, az egyik a pozitív feszültségre vonatkozik, a másik a földre, az utolsó pedig a helyzet beállítására. A RED vezeték csatlakozik az áramhoz, a fekete vezeték a földhöz és a SÁRGA vezeték csatlakozik a jelhez.
A szervomotor az egyenáramú motor, a helyzetszabályozó rendszer és a fogaskerekek kombinációja. Az egyenáramú motor tengelyének helyzetét a szervóban lévő vezérlő elektronika állítja be, a SIGNAL tű PWM jelének teljesítményaránya alapján. Egyszerűen szólva a vezérlő elektronika állítsa be a tengely helyzetét a DC motor vezérlésével. Ezeket az adatokat a tengely helyzetéről a SIGNAL csapon keresztül küldjük. A helyzetadatokat a vezérlőnek PWM jel formájában kell elküldeni a szervomotor Signal csapján keresztül.
A PWM (impulzusszélesség modulált) jel frekvenciája a szervomotor típusától függően változhat. A fontos itt a PWM jel DUTY RATIO. Ezen DUTY RATION alapján a vezérlő elektronika állítja be a tengelyt.
Amint az az alábbi ábrán látható, a tengely 9o-os órára mozgatásához a BEKAPCSOLÁSI ARÁNYNAK 1 / 18.ie-nek kell lennie. 1millió másodperc az 'ON time' és 17millió másodperc az 'OFF time' egy 18ms-os jelben.
Ahhoz, hogy a tengely 12o órára mozdulhasson, a jel bekapcsolási idejének 1,5 ms-nak, a kikapcsolási idejének 16,5 ms-nak kell lennie.
Ezt az arányt a szervo vezérlő rendszere dekódolja, és ez alapján állítja be a helyzetet.
Ez az itt található PWM az ARDUINO UNO használatával jön létre.
Tehát egyelőre tudjuk, hogy az UNO által generált PWM jel terhelési arányának változtatásával vezérelhetjük a SERVO MOTOR tengelyt.
Most beszéljünk az erőérzékelőről vagy a súlyérzékelőről.
A FORCE érzékelő és az ARDUINO UNO összekapcsolására az arduno uno 8 bites ADC (Analog to Digital Conversion) funkcióját fogjuk használni.
A FORCE érzékelő egy jelátalakító, amely megváltoztatja ellenállását, ha nyomást gyakorolnak a felületre. A FORCE érzékelő különböző méretben és formában kapható.
Az egyik olcsóbb verziót fogjuk használni, mert itt nem kell sok pontosság. Az FSR400 az egyik legolcsóbb erőérzékelő a piacon. Az FSR400 képét az alábbi ábra mutatja.
Most fontos megjegyezni, hogy az FSR 400 hosszában érzékeny, az erőt vagy a súlyt az érzékelő szemének közepén lévő labirintusra kell koncentrálni, amint az az ábrán látható.
Ha az erőt rossz időben alkalmazzák, a készülék tartósan károsodhat.
Egy másik fontos dolog tudni, hogy az érzékelő nagy hatótávolságú áramokat képes meghajtani. Tehát ne felejtse el a hajtási áramokat a telepítés során. Az érzékelő erőhatára 10Newton. Tehát csak 1 kg súlyt alkalmazhatunk. 1 kg-nál nagyobb súlyok alkalmazása esetén az érzékelő eltéréseket mutathat. Ha 3 kg-nál nagyobb mértékben növekszik. az érzékelő tartósan károsodhat.
Mint korábban elmondtuk, ezt az érzékelőt használják a nyomás változásainak érzékelésére. Tehát amikor a súlyt ráhelyezzük a FORCE érzékelő tetejére, az ellenállás drasztikusan megváltozik. Az FS400 súlyellenállása az alábbi grafikonon látható:
Amint az a fenti ábrán látható, az érzékelő két érintkezője közötti ellenállás súlyával csökken, vagy az érzékelő két érintkezője közötti vezetőképesség nő.
A tiszta vezető ellenállását a következők adják:
Hol, p- A vezető ellenállása
l = a vezető hossza
A = A vezető területe.
Vegyünk egy „R” ellenállású vezetőt, ha valamilyen nyomást gyakorolunk a vezető tetejére, akkor a vezeték területe csökken és a vezető hossza megnő a nyomás hatására. Tehát képlet szerint a vezető ellenállásának növekednie kell, mivel az R ellenállás fordítottan arányos a területtel és egyenesen arányos az l hosszúsággal.
Tehát ezzel egy nyomás vagy súly alatti vezető esetén a vezető ellenállása növekszik. De ez a változás az általános ellenálláshoz képest kicsi. Jelentős változás érdekében sok vezető egymásra rakódik.
Ez történik a fenti ábrán látható erőérzékelők belsejében. Alaposan megnézve az érzékelő belsejében sok vonal látható. E vonalak mindegyike egy vezetőt képvisel. Az érzékelő érzékenysége a vezető számában van megadva.
De ebben az esetben az ellenállás a nyomás hatására csökken, mert az itt használt anyag nem tiszta vezető. Az FSR itt robusztus polimer vastag film (PTF) eszközök. Tehát ezek nem tiszta vezető anyagú eszközök. Ezek olyan anyagból készülnek, amelynek ellenállása csökken az érzékelő felületére kifejtett erő növekedésével.
Ez az anyag az FSR grafikonján bemutatott jellemzőket mutatja.
Az ellenállásnak ez a változása csak akkor hozhat jót, ha ki tudjuk olvasni őket. A kézben lévő vezérlő csak a feszültség esélyeit tudja leolvasni, és nem kevesebbet, ehhez feszültségosztó áramkört fogunk használni, ezzel levezethetjük az ellenállás változását feszültségváltozásként.
A feszültségosztó egy rezisztív áramkör, és az ábrán látható. Ebben az rezisztív hálózatban van egy állandó ellenállásunk és egy másik változó ellenállásunk. Amint az ábrán látható, R1 itt állandó ellenállás, R2 pedig FORCE érzékelő, amely ellenállásként működik.
Az elágazás középpontját mérésre vesszük. Az R2 változással a Voutnál van változás. Tehát ezzel van egy feszültségünk, amely változik a súlytól.
Most fontos megjegyezni, hogy a vezérlő által az ADC átalakításhoz bevitt bemenet akár 50µAmp. Az ellenállás alapú feszültségosztónak ez a terhelő hatása fontos, mivel a feszültségosztó Vout-jából vett áram növeli a hiba százalékos arányát, egyelőre nem kell aggódnunk a terhelési hatás miatt.
Most, amikor az erőt kifejtjük a FORCE SENSOR-ra, az osztó végén lévő feszültség megváltoztatja ezt a csapot, amikor az UNO ADC csatornájához csatlakozik, akkor az UNO ADC-től eltérő digitális értéket kapunk, amikor az érzékelőre ható erő megváltozik.
Ez az ADC digitális érték illeszkedik a PWM jel terhelési arányához, így rendelkezünk a SERVO helyzetszabályozással az érzékelőre kifejtett erő vonatkozásában.
Alkatrészek
Hardver: UNO, tápegység (5v), 1000uF kondenzátor, 100nF kondenzátor (3 db), 100KΩ ellenállás, SERVO MOTOR (SG 90), 220Ω ellenállás, FSR400 erőérzékelő.
Szoftver: Atmel studio 6.2 vagy aurdino nightly.
Áramköri ábra és működési magyarázat
A szervomotor erőérzékelővel történő vezérlésének kapcsolási rajza az alábbi ábrán látható.
Az érzékelőn átmenő feszültség nem teljesen lineáris; zajos lesz. A zaj kiszűrésére egy kondenzátort helyeznek el az elválasztó áramkör minden ellenállásán, az ábra szerint.
Itt fogjuk venni az osztó által biztosított feszültséget (a súlyt lineárisan ábrázoló feszültség), és betápláljuk az Arduino Uno egyik ADC csatornájába. Az átalakítás után felvesszük a digitális értéket (a súlyt képviselve), és összekapcsoljuk a PWM értékkel, és ezt a PWM jelet továbbítjuk a SERVO motorhoz.
Tehát a tömeggel megvan a PWM értéke, amely a digitális értéktől függően megváltoztatja a terhelési arányát. Minél magasabb a digitális érték, annál magasabb a PWM terhelési aránya. Tehát magasabb PWM jelű teljesítményarány esetén a szervo tengelyének el kell érnie a jobb vagy a bal szélt, a bevezetőben megadott ábra szerint.
Ha kisebb a súly, akkor alacsonyabb lesz a PWM-ráta, és a bevezető ábra szerint a szervónak el kell érnie a szélsőjobbot.
Ezzel egy SERVO helyzetszabályozást végezhetünk SÚLY vagy FORCE segítségével.
Ahhoz, hogy ez megtörténjen, néhány utasítást kell létrehoznunk a programban, és ezekről az alábbiakban részletesen beszélünk.
Az ARDUINO-nak hat ADC csatornája van, amint az az ábrán látható. Ezekben bármelyik vagy mindegyik használható analóg feszültség bemenetként. Az UNO ADC 10 bites felbontású (tehát a (0- (2 ^ 10) 1023 értékekből származó egész értékek). Ez azt jelenti, hogy a 0 és 5 volt közötti bemeneti feszültségeket 0 és 1023 közötti egész értékekre fogja feltérképezni. (5/1024 = 4,9 mV) egységenként.
Itt az UNO A0-ját fogjuk használni. Tudnunk kell néhány dolgot.
|
Először is, az Arduino Uno ADC csatornák alapértelmezett referenciaértéke 5 V. Ez azt jelenti, hogy bármilyen bemeneti csatornán maximális 5 V bemeneti feszültséget adhatunk az ADC konverzióhoz. Mivel egyes érzékelők 0-2,5 V feszültséget szolgáltatnak, 5 V referenciával kisebb pontosságot kapunk, ezért van egy utasításunk, amely lehetővé teszi számunkra a referenciaérték megváltoztatását. Tehát a referenciaérték megváltoztatásához („analogReference ();”) Mostantól így hagyjuk.
Alapértelmezés szerint a kártya maximális 10 bites felbontását kapjuk meg, ez a felbontás az utasítás használatával megváltoztatható („analogReadResolution (bit);”). Ez a felbontásváltozás bizonyos esetekben jól jöhet. Egyelőre így hagyjuk.
Ha a fenti feltételeket alapértelmezés szerint állítjuk be, akkor a „0” csatorna ADC-jéből leolvashatjuk az értéket az „analogRead (pin);” függvény közvetlen meghívásával, itt a „pin” azt a csapot jelenti, ahová analóg jelet csatlakoztattunk, ebben az esetben „A0” lenne. Az ADC-ből származó érték egész számba vehető: „int SENSORVALUE = analogRead (A0); ”, Ezzel az utasítással az ADC utáni érték a„ SENSORVALUE ”egész számba kerül.
Az UNO PWM-je a NYÁK-kártyán „~” szimbólumokkal jelölt csapok bármelyikénél elérhető. Az UNO-ban hat PWM csatorna található. Célunkhoz a PIN3-at fogjuk használni.
analogWrite (3, VALUE); |
A fenti feltételből közvetlenül megkapjuk a PWM jelet a megfelelő csapnál. A zárójelben található első paraméter a PWM jel pin számának kiválasztására szolgál. A második paraméter az írási terhelési arányra vonatkozik.
Az Arduino Uno PWM értéke 0-ról 255-re változtatható. A „0” legalacsonyabb a „255” a legmagasabb értékre. 255-ös terhelési aránnyal 5 V-ot kapunk a PIN3-nál. Ha az illetékarány 125-ként van megadva, akkor a PIN3-nál 2,5 V-ot kapunk.
Most beszéljünk a szervomotor vezérléséről, az Arduino Uno rendelkezik egy olyan funkcióval, amely lehetővé teszi számunkra, hogy a fokérték megadásával szabályozzuk a szervo helyzetét. Mondjuk, ha azt akarjuk, hogy a szervo 30 legyen, akkor közvetlenül képviselhetjük az értéket a programban. A SERVO fejlécfájl gondoskodik az összes vámarány-számításról belsőleg. Az arduino szervomotor vezérléséről itt tudhat meg többet.
Most az sg90 0-180 fokról mozoghat, ADC eredményünk 0-1024.
Tehát az ADC körülbelül hatszorosa a SERVO POSITION-nak. Tehát elosztva az ADC eredményt 6-mal megkapjuk a hozzávetőleges SERVO kéz helyzetét. Ezért van egy PWM jelünk, amelynek a terhelés aránya lineárisan változik a SÚLY vagy az ERŐ függvényében. Ezt a szervomotor kapja, a szervomotort erőérzékelővel vezérelhetjük.