- Gerekli Bileşenler
- Servo Motorun Pin Açıklaması
- Devre şeması
- AVR ATmega16 ile Servo Motorun Kontrolü
- USBasp Kullanarak Atmega16'yı Programlama
Servo Motorlar, robotlar, Otomatik Makineler, robotik kol vb. Hassas kontrolün gerekli olduğu yerlerde yaygın olarak kullanılmaktadır. Ancak servo motorun kapsamı bu kadar sınırlı değildir ve birçok uygulamada kullanılabilir. Servo motorun temelleri, teorisi ve çalışma prensibi hakkında daha fazla bilgi edinmek için bağlantıyı takip edin.
Daha önce Servo Motor ile birçok Mikroişlemci arasında arayüz oluşturduk:
- ARM7-LPC2148 ile Servo Motor Arayüzü
- Servo Motor ile MSP430G2'nin Arabirimi
- Servo Motor ile STM32F103C8 Arabirimi
- MPLAB ve XC8 kullanarak Servo Motor ile PIC Mikrodenetleyici arasında arayüz oluşturma
- Servo Motoru Arduino Uno ile Arayüz
- 8051 Mikrodenetleyicili Servo Motor Arayüzü
Bu eğitimde, Atmel Studio 7.0 kullanarak Mikro Servo Motor ile Atmega16 AVR Mikroişlemcisi arasında arayüz oluşturacağız. Servo motor 4,8-6V'de çalışacak şekilde derecelendirilmiştir. Darbe katarı veya PWM sinyalleri uygulayarak dönüş açısını ve yönünü kontrol edebiliriz. Servo motorların 360 derece tam dönüş için hareket edemediğini, bu nedenle sürekli dönüşün gerekli olmadığı yerlerde kullanıldığını unutmayın. Dönme açısı 0-180 derece veya (-90) - (+90) derecedir.
Gerekli Bileşenler
- SG90 Tower Pro Mikro Servo Motor
- Atmega16 Mikrodenetleyici IC
- 16Mhz Kristal Osilatör
- İki adet 100nF Kapasitör
- İki adet 22pF Kapasitör
- Butona basınız
- Atlama Telleri
- Breadboard
- USBASP v2.0
- Led (Herhangi Bir Renk)
Servo Motorun Pin Açıklaması
- Kırmızı = Pozitif Güç Kaynağı (4.8V - 6V)
- Kahverengi = Zemin
- Turuncu = Kontrol Sinyali (PWM Pimi)
Devre şeması
AVR Mikrodenetleyiciyi kullanarak Servo motorunu döndürmek için tüm bileşenleri aşağıdaki şemada gösterildiği gibi bağlayın. Dört adet PWM Pini vardır, Atmega16'nın herhangi bir PWM pini kullanabiliriz. Bu eğitimde PWM oluşturmak için Pin PD5 (OC1A) kullanıyoruz. PD5, doğrudan giriş sinyal pini olan servo motorun turuncu kablosuna bağlanır. Güç göstergesi için herhangi bir renkli led bağlayın. Ayrıca, gerektiğinde Atmega16'yı sıfırlamak için Sıfırlama pimindeki bir düğmeyi bağlayın. Atmega16'yı uygun kristal osilatör devresine bağlayın. Tüm sistem 5V besleme ile beslenecektir.
Tam kurulum aşağıdaki gibi görünecektir:
AVR ATmega16 ile Servo Motorun Kontrolü
Step Motor gibi, Servo motor da herhangi bir harici sürücüye ihtiyaç duymaz, örneğin ULN2003 veya L293D motor sürücüsü. Servo motoru sürmek için sadece PWM yeterlidir ve bir mikrodenetleyiciden PWM üretmek çok kolaydır. Bu servo motorun torku 2,5 kg / cm'dir, bu nedenle daha fazla torka ihtiyacınız varsa bu servo uygun değildir.
Servo motorun her 20 ms'de bir darbe istediğini ve pozitif darbenin uzunluğunun servo motorun dönüş açısını belirlediğini bildiğimiz gibi.
20ms darbeyi elde etmek için gereken frekans 50Hz'dir (f = 1 / T). Bu nedenle , bu servo motor için, spesifikasyon, 0 derece için 0.388ms'ye, 90 derece için 1.264ms'ye ve 180 derece için 2.14ms darbeye ihtiyacımız olduğunu söylüyor.
Belirtilen darbeleri üretmek için Atmega16'nın Timer1'ini kullanacağız. CPU frekansı 16Mz'dir, ancak mikrodenetleyiciye bağlı çok fazla çevre birimimiz olmadığından ve mikro denetleyicide fazla yük olmadığından yalnızca 1Mhz kullanacağız, bu nedenle 1Mhz işi yapacak. Ön ölçekleyici 1'e ayarlanmıştır. Dolayısıyla, saat 1Mhz / 1 = 1Mhz (1uS) olarak bölünmüştür ki bu harika. Timer1, Hızlı PWM Modu, yani Mod 14 olarak kullanılacaktır. İstenen darbe dizisini oluşturmak için farklı zamanlayıcı modları kullanabilirsiniz. Referans aşağıda verilmiştir ve daha fazla açıklamayı Atmega16 Resmi Veri Sayfasında bulabilirsiniz.
Timer1'i hızlı PWM modu olarak kullanmak için ICR1'in TOP değerine ihtiyacımız olacak (Giriş Yakalama Kaydı1). ÜST değeri bulmak için aşağıda verilen formülü kullanın:
f pwm = f cpu / nx (1 + ÜST)
Bu, şu şekilde basitleştirilebilir:
ÜST = ( f cpu / ( f pwm xn)) - 1
Nerede, N = Ön ölçeklendirme seti değeri
f cpu = CPU Frekansı
f pwm = 50Hz olan Servo motor darbe genişliği
Şimdi gerekli tüm değere sahip olduğumuz için ICR1 değerini hesaplayın, N = 1, f cpu = 1MHz, f pwm = 50Hz
Değerleri yukarıdaki formüle koymanız yeterlidir.
ICR1 = 1999
Bu, maksimum dereceye ulaşmak anlamına gelir, yani 180 0, ICR1 1999 olmalıdır.
16MHz kristal ve 16'ya ayarlanmış Ön Ölçekleyici için, ICR1 = 4999
Şimdi taslağı tartışmaya geçelim.
USBasp Kullanarak Atmega16'yı Programlama
Servo Motoru kontrol etmek için tam AVR kodu aşağıda verilmiştir. Kod basittir ve kolayca anlaşılabilir.
Burada 0'dan servo motoru döndürmek için Atmega16 kodlu olan 0 180 0 180 den tekrar geri geliyor 0 0 0. Bu geçiş 9 adımda, yani 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0'da tamamlanacaktır. Gecikme için, Atmel Studio'nun dahili kütüphanesini kullanacağız.
USBASP v2.0'ınızı bağlayın ve USBASP ve Atmel Studio 7.0 kullanarak Atmega16 AVR Mikrodenetleyiciyi programlamak için bu bağlantıdaki talimatları izleyin. Sadece çizimi oluşturun ve harici araç zincirini kullanarak yükleyin.
Tanıtım Videosu ile kodun tamamı aşağıda verilmiştir. Ayrıca Robotikteki önemini bilerek servo motorlar hakkında daha fazla bilgi edinin.