A szervomotorok nagyon hasznosak az elektronikában és a beágyazott rendszerekben. A szervomotor mindenütt megtalálható körülötted, játékokban, robotokban, számítógépes CD-tálcákban, autókban, repülőgépekben stb. Bármelyik szögbe elforgathatjuk. Széles választékban kaphatók, nagy nyomatékú motortól alacsony nyomatékú motorig. Ebben az oktatóanyagban egy szervomotort csatlakoztatunk a 8051 mikrovezérlőhöz (AT89S52).
Először meg kell értenünk a szervomotorok működési elvét. A szervomotor a PWM (impulzusszélesség-moduláció) főművön működik, vagyis forgásszögét a vezérlő PIN-kódra adott impulzus időtartama szabályozza. Alapvetően a szervomotort egyenáramú motor alkotja, amelyet változtatható ellenállás (potenciométer) és néhány fogaskerék vezérel. Az egyenáramú motor nagy sebességű erőjét a Gears nyomatékká alakítja. Tudjuk, hogy MUNKA = ERŐ X TÁVOLSÁG, egyenáramú motorban az erő kisebb, a távolság (sebesség) nagy, a szervóban pedig az erő nagy, és a távolság kisebb. A potenciométer a szervo kimeneti tengelyéhez van csatlakoztatva a szög kiszámításához és az egyenáramú motor leállításához a kívánt szögben.
A szervomotor 0 és 180 fok között forgatható, de a gyártástól függően 210 fokig is felmehet. Ez a fokozat szabályozható egy LOGIC 1-es szintű impulzus alkalmazásával 1ms és 2ms közötti időtartamra. 1 ms fordulatszámon a szervo 0 fokra, 1,5 ms 90 fokra és 2 ms impulzus 180 fokra forgatható. Az 1-2 ms közötti időtartam a Servo motort bármilyen 0 és 180 fok közötti szögbe forgathatja.
Áramköri ábra és működési magyarázat
A szervomotor három vezetékkel rendelkezik: vörös a Vcc-hez (tápegység), a barna a földhöz, az Orange pedig a vezérlő vezeték. A vezérlővezeték csatlakoztatható a 8051-hez, csatlakoztattuk a 8051-es 2.1-es csatlakozójához. Most ezt a csapot a Logic 1-hez kell 1 ms-ig tartanunk, hogy 0 fokos, 1,5 ms-os 90 fokos, 2 ms-os 180 fokos elforgatásra kerüljön. A késleltetéshez a 8051-es chip időzítőket használtuk. 50us késleltetést hoztunk létre a „servo_delay” függvényen keresztül, és a „for” ciklussal késleltetést hoztunk létre az 50us többszörösében.
A 0-as időzítőt és az 1-es módot használjuk, ezért a 01H-t felvettük a TMOD regiszterbe. Az 1. mód 16 bites időzítő mód, a TH0 pedig magas bájtot, a TL0 pedig 16 bites időzítő alacsony bájtját tartalmazza. Az FFD2-et 16 bites időzítő regiszterbe, az FF-et TH0-ba és a D2-t a TL0-ba tettük. Az FFD2 elhelyezése kb. 50 minket 11,0592MHz kristályával. A TR0 és a TF0 a TCON regiszter bitje, a TR-pin az időzítő indításához állítja be és állítja vissza a nullázáskor (0). A TF túlcsordulási zászló, amelyet a hardver állít be túlcsorduláskor, és szoftverrel kell visszaállítania. Alapvetően a TF megmondja az időzítő befejezését, és hardverrel állítja be, amikor 16 időzítő átmegy FFFFH-ról 0000H-ra. Elolvashatja a „8051 időzítőket”, hogy megértse az időzítő regiszterek értékének kiszámítását, és létrehozza az 50 us késést.
Most, amikor CRO-ból mérjük, a szervo_késleltetés funkció 13 hurkja 1 ms késleltetést ad, tehát 1 ms-ból (13 hurok) kezdtünk, és 2 ms-ba (26 hurok) mentünk, hogy a szervót 0 és 180 fok között forgassuk. De lassan növeltük a késleltetést 1 ms-ról, az 1 ms-ot 2 ms-os ablakot 7 részre osztottuk, például 1,14 ms, 1,28 ms, 1,42 ms és így tovább, így a szervo kb. 26 fok (180/7). 180 után automatikusan 0 fokra tér vissza.