Servo motorlar elektronik ve gömülü sistemlerde çok kullanışlıdır. Servo motor kullanımını çevrenizin her yerinde bulabilirsiniz, oyuncaklarda, robotlarda, bilgisayarın CD tepsisinde, arabalarda, uçaklarda vb. Kullanılır. Bu geniş kapsamın nedeni servo motorun çok güvenilir ve hassas olmasıdır. Onu herhangi bir açıya döndürebiliriz. Yüksek torklu motordan düşük torklu motorlara kadar geniş bir aralıkta mevcutturlar. Bu eğitimde bir servo motoru 8051 mikro denetleyiciye (AT89S52) bağlayacağız.
Öncelikle servo motorların çalışma prensibini anlamamız gerekiyor. Servo motor, PWM (Darbe genişlik modülasyonu) prensibinde çalışır, yani dönme açısının, Kontrol PIN'ine uygulanan darbenin süresi tarafından kontrol edildiği anlamına gelir. Temel olarak servo motor, değişken bir direnç (potansiyometre) ve bazı dişliler tarafından kontrol edilen DC motordan oluşur. DC motorun yüksek hız kuvveti, Gears tarafından torka dönüştürülür. ÇALIŞMA = KUVVET X MESAFE, DC motorda Kuvvetin az, mesafenin (hız) yüksek ve Servoda kuvvetin Yüksek ve mesafenin daha az olduğunu biliyoruz. Potansiyometre, açıyı hesaplamak ve DC motoru istenen açıda durdurmak için Servo'nun çıkış miline bağlanır.
Servo motor 0 ile 180 derece arasında döndürülebilir, ancak üreticiye bağlı olarak 210 dereceye kadar çıkabilir. Bu dönüş derecesi, 1 ms ila 2 ms arasında bir süre boyunca bir MANTIK seviye 1 darbesi uygulanarak kontrol edilebilir. 1 ms servoyu 0 dereceye, 1,5 ms 90 dereceye ve 2 ms darbeyi 180 dereceye döndürebilir. 1 ila 2 ms arasındaki süre, Servo motoru 0 ila 180 derece arasında herhangi bir açıya döndürebilir.
Devre Şeması ve Çalışma Açıklaması
Servo motorda Vcc (güç kaynağı) için Kırmızı, Toprak için Kahverengi ve Kontrol kablosu Turuncu olmak üzere üç tel vardır. Kontrol teli 8051'e bağlanabilir, 8051'in 2.1 numaralı pinine bağladık. Şimdi bu pini 0 derece, 1.5ms 90 derece, 2 ms 180 derece döndürmek için Mantık 1'e 1ms tutmamız gerekiyor. Gecikme yaratmak için 8051 çip Zamanlayıcılarını kullandık. “Servo_delay” fonksiyonu aracılığıyla 50us'luk gecikme yarattık ve 50us'un katlarında gecikme yaratmak için “for” döngüsünü kullandık.
Zamanlayıcı 0 kullanıyoruz ve Mod 1'de, bu nedenle TMOD kaydına 01H koyduk. Mod 1, 16 bit zamanlayıcı modudur ve TH0, Yüksek bayt içerir ve TL0, 16 bit zamanlayıcının Düşük baytını içerir. FFD2'yi 16 bit zamanlayıcı yazmacına, FF'yi TH0'a ve D2'yi TL0'a koyduk. FFD2 koymak yakl. 11.0592MHz kristal ile 50 us. TR0 ve TF0, TCON kaydının bitleridir, TR pini ayarlandığında zamanlayıcıyı başlatmak ve sıfırlandığında durmak için kullanılır (0). TF, taşma durumunda donanım tarafından ayarlanan ve yazılım tarafından sıfırlanması gereken taşma bayrağıdır. Temel olarak TF, Zamanlayıcının tamamlandığını söyler ve 16 zamanlayıcı FFFFH'den 0000H'ye geçtiğinde donanım tarafından ayarlanır. 50 us gecikmesini oluşturmak için zamanlayıcı kayıtlarındaki değer hesaplamasını anlamak için "8051 Zamanlayıcılar" hakkında bilgi edinebilirsiniz.
Şimdi CRO'dan ölçüldüğünde, 13 döngü servo_delay işlevi 1ms'lik gecikme verecektir, bu nedenle 1ms'den (13 döngü) başladık ve servoyu 0'dan 180 dereceye döndürmek için 2 ms'ye (26 döngü) gittik. Ancak gecikmeyi 1ms'den yavaşça artırdık, 1ms'den 2ms'ye pencereyi 1.14ms, 1.28ms, 1.42ms gibi 7 parçaya böldük, böylece servo yakl. 26 derece (180/7). 180'den sonra otomatik olarak 0 dereceye dönecektir.