resimde de görüldüğü gibi servonun sinyal ucuna uygulanana 20 ms lik kare
dalgada duty cycle 1 ms olarak gönderildiğinde servo tam sol, 2 ms olarak göderildiğinde
ise tam sol pozisyon alır. servoya besleme uygulanıp ta sinyal verilmediğinde motor boşta kalır ve motorun kolu
serbest kalır az zorlamayla motorun kolu çevrilebilir ama sinyal alırken motorun kolu büyük bir kuvvetle
pozisyonunu korur.Servoların özelliğine göre de değişebilir elimdeki microservolarda anlattığım gibi oluyor.
MCU ile kontrol yapılırken :
zamanlamaya çok dikkat edilmelidir
hele yazılımsal gecikmelerle kontrol yapacaksak bütün işlemleri hesaba katmalıtız
örneğin iki butonlu bir çalışma yapacağız birine basınca tam sağ öbürüne basınca tam sol pozisyon alsın
yazacağımız programda kare dalga üretilirken butonların birine basılıp basılmadığı da
testedilip işleme tabi tutulacağından bunun da yaptığı gecikmeleri de hesaba katmalıyız
işin kolayı şöyle kesme kullanırsak gerek kalmaz sadece kesme alt programına dalga üretici kod yazarız
1 ms lik duty cycle olan 20 ms kare dalga üretelim
önce timer 20 ms gecikme yapacak şekilde kurarız
sonra kesme kullanırız timer 20 ms de bir kesme oluşturur
kesme alt programına 1ms duty cycle kodu yazarsak
MCU nun çıkış olarak ayarladığımız pininden istediğimiz kare dalga yı üretiriz
işin en pratiği ise CCP (Capture(Yakala)-Compare(Karşılaştır)-PWM) modülü olan bi MCU nun
PWM modülünü kullanırız.(CCP kullanımını kaynaklardan kolayca bulabilirsin)
PWM modülü de anlattığım prensibe benzer şekilde karedalga üretir.
bir de servonun hareket ederken hızı da önemli bunun da üstesinden hesapla gelebiliriz
her servonun özellikleri verilir (ki ben kendi servomun duty cycle sürelerini bulamadım)
kaç ms de kaç derece döner diye değerler var bunlara bakarak servonun hızı da kontrol edilir
eğer robotikte kullanılacaksa mutlaka dikkat edilir ama digital servolar bu işin üstesinden
kolaylıkla gelebiliyolar bizim işimiz analog servolarla.
diyelim ki bir otomatik yelpaze yapacaz(ki çok saçma olur çünkü basit bi düzenekle bu iş daha kolay yapılır neyse)
çırpma sayısı hızla doğru orantılıdır biz şimdi servoya bir 2 ms bir 1 ms duty cycle
verirsek motor maximum hızıyla tam sağdan tam sol
pozisyon alırdı ama gecikmeli sürelerle 1 ms -> 1.25ms -> 1.50 ms -> 1.75 ms -> 2 ms
duty cycle sinyal verseydik yelpazenin çırpılma süresi uzayacak ve daha az serinletecekti
iki yada daha çok butonla bu hızları ayarlayabileceğimiz bir yelpaze yapabiliriz
aklın sınırı olmadığı için çoook değişik yerlerde kullanabiliriz
son olarak ta kare dalganın periyodu değişemeli demiştim ya burada kare dalga oluştururken
dutycycle gecikmesi ve lojik 0 gecikmesi toplam belirlenen periyot süresi kadar olmalı
yani örneğin 1 ms lik duty cyle + 20 ms periyot = 21 ms KESİNLİKLE!!! yanlış çünkü böyle yaparsak her verdiğimiz
değerde periyot değişecek ve servo motor çalışmayacak
DOĞRUSU-----> periyot=duty cycle +lojik 0 şeklinde olmalıdır
örneğin 1.5 ms için (periyot süresi 20 ms kabul edelim)
1.5 ms boyunca çıkışa lojik 1 ve (20 - 1.5=18.5) 18.5 ms boyunca da lojik 0 gönderilmeli
bildiklerim bu kadara ilginç şeyler bulursanız yazın görüşmek üzere
PIC_achu (
[email protected] )