- Servo Motor nedir?
- Servo Motorları Mikrodenetleyicilerle Arabirim:
- PICF877A PIC Mikrodenetleyicili Programlama Servo Motor:
- Devre şeması:
- Simülasyon ve Donanım Kurulumu:
Bu, MPLAB ve XC8 kullanarak PIC mikro denetleyicilerini öğrenmeye ilişkin 11. öğreticimizdir. Bu eğitimde Servo Motorun PIC Microcontroller ile nasıl kontrol edileceğini öğreneceğiz. Servo motorlarla zaten çalıştıysanız, bu öğreticinin ilk yarısını atlayabilirsiniz, ancak servo motorda yeniyseniz okumaya devam edin.
Şimdiye kadar, PIC ile yanıp sönen LED, PIC'de Zamanlayıcılar, LCD arayüz oluşturma, 7 segmentli arayüz oluşturma, PIC kullanarak ADC vb. Gibi birçok temel öğreticiyi ele aldık. Mutlak bir acemiyseniz, lütfen PIC öğreticilerinin tam listesini buradan ziyaret edin ve öğrenmeye başla.
Önceki eğitimimizde PIC Mikrodenetleyici kullanarak PWM sinyallerinin nasıl üretileceğini öğrendik, sinyaller potansiyometreden okunan değere göre oluşturuldu. O zaman tüm programları anladıysanız, Tebrikler zaten bir Servo motor için kodlama yapmışsınızdır. EVET, Servo motorlar (burada zamanlayıcıları kullanarak oluşturduğumuz) PWM sinyallerine yanıt verir, bu eğitimde neden ve nasıl olduğunu öğreneceğiz. Bu proje için donanım kurulumunu simüle edip oluşturacağız ve ayrıntılı Videoyu bu Eğitimin sonunda bulabilirsiniz.
Servo Motor nedir?
Servo Motor, açısal kontrole izin veren (çoğunlukla dairesel) bir aktüatör türüdür. Mevcut birçok Servo motor türü vardır, ancak bu eğitimde aşağıda gösterilen hobi servo motorlara odaklanalım.
Hobi servoları, ucuz hareket kontrol yöntemi oldukları için popülerdir. R / C ve robotik meraklılarının ihtiyaçlarının çoğu için hazır bir çözüm sunarlar. Ayrıca, her uygulama için özel bir kontrol sistemi tasarlama ihtiyacını da ortadan kaldırırlar.
Hobi servo motorlarının çoğunda 0- 180 ° dönme açısı vardır, ancak ilgileniyorsanız 360 ° servo motor da alabilirsiniz. Bu eğitimde 0-180 ° servo motor kullanılmaktadır. Dişliye bağlı olarak iki tip Servo motor vardır, biri Plastik Dişli Servo Motor ve diğeri Metal Dişli Servo Motordur. Motorun daha fazla aşınma ve yıpranmaya maruz kaldığı yerlerde metal dişli kullanılır, ancak sadece yüksek bir fiyatla gelir.
Servo motorlar kg / cm (santimetre başına kilogram) olarak derecelendirilir, çoğu hobi servo motor 3kg / cm veya 6kg / cm veya 12kg / cm olarak derecelendirilir. Bu kg / cm, servo motorunuzun belirli bir mesafede ne kadar ağırlık kaldırabileceğini söyler. Örneğin: 6kg / cm'lik bir Servo motor, eğer yük motor şaftından 1 cm uzağa asılırsa 6kg kaldırabilmelidir, mesafe ne kadar büyükse ağırlık taşıma kapasitesi o kadar az olur. Servo motorun Temellerini buradan öğrenin.
Servo Motorları Mikrodenetleyicilerle Arabirim:
Hobi Servo motorlarını MCU ile bağlamak çok kolaydır. Servoların içlerinden çıkan üç teli vardır. Bunlardan ikisi Besleme için kullanılacak (pozitif ve negatif) ve biri MCU'dan gönderilecek sinyal için kullanılacaktır. Bu eğitimde, en yaygın olarak RC arabalarda insansı botlar vb. İçin kullanılan bir MG995 Metal Dişli Servo Motor kullanacağız. MG995'in resmi aşağıda gösterilmiştir:
Servo motorunuzun renk kodlaması farklı olabilir, bu nedenle ilgili veri sayfanızı kontrol edin.
Tüm servo motorlar doğrudan + 5V besleme raylarınızla çalışır ancak motorun tüketeceği akım miktarına dikkat etmeliyiz, ikiden fazla servo motor kullanmayı planlıyorsanız uygun bir servo kalkan tasarlanmalıdır. Bu eğitimde, motoru kontrol etmek için PIC MCU'yu nasıl programlayacağımızı göstermek için sadece bir servo motor kullanacağız. Servo Motor ile diğer Mikroişlemci arasında arayüz oluşturmak için aşağıdaki bağlantıları kontrol edin:
- 8051 mikro denetleyici ile servo motor arabirimi
- Arduino kullanarak servo motor kontrolü
- Raspberry Pi Servo Motor Eğitimi
- AVR Mikrodenetleyicili Servo Motor
PICF877A PIC Mikrodenetleyicili Programlama Servo Motor:
Servo motor için programlamaya başlamadan önce, Servo motorun kontrol edilmesi için ne tür bir sinyal gönderileceğini bilmeliyiz. MCU’yu, Servo motorun sinyal kablosuna PWM sinyalleri gönderecek şekilde programlamalıyız. Servo motorun içinde, PWM sinyalinin görev döngüsünü okuyan ve aşağıdaki resimde gösterildiği gibi servo motor şaftını ilgili yere konumlandıran bir kontrol devresi vardır.
Her servo motor, farklı bir PWM frekansında çalışır (en yaygın frekans, bu eğitimde kullanılan 50HZ'dir), bu nedenle Servo motorunuzun hangi PWM periyodunda çalıştığını kontrol etmek için motorunuzun veri sayfasını edinin.
Tower pro MG995'imiz için PWM sinyalinin ayrıntıları aşağıda gösterilmektedir.
Bundan motorumuzun 20ms (50Hz) PWM Periyodu ile çalıştığı sonucuna varabiliriz. Bu yüzden PWM sinyalimizin frekansı 50Hz olarak ayarlanmalıdır. Önceki eğitimimizde ayarladığımız PWM frekansı 5 KHz idi, aynısını kullanmak burada bize yardımcı olmayacak.
Ama burada bir sorunumuz var. 16F877A alçak frekans PWM sinyallerini oluşturamaz CCP modülü kullanılarak. Veri sayfasına göre PWM frekansı için ayarlanabilecek olası en düşük değer 1,2 KHz'dir. Dolayısıyla, CCP modülünü kullanma fikrinden vazgeçmeli ve kendi PWM sinyallerimizi oluşturmanın bir yolunu bulmalıyız.
Bu nedenle, bu eğitimde, 50Hz frekanslı PWM sinyallerini üretmek için zamanlayıcı modülünü kullanacağız ve servo motorun açısını kontrol etmek için görev döngülerini değiştireceğiz. Zamanlayıcılar veya PIC'li ADC konusunda yeniyseniz, lütfen bu eğiticiye geri dönün, çünkü onları zaten orada ele aldığımız için çoğu şeyi atlayacağım.
Zamanlayıcı modülümüzü 32'lik bir ön ölçekleyici ile başlatıyoruz ve her 1us için taşmasını sağlıyoruz. Veri sayfamıza göre PWM'nin yalnızca 20 ms'lik bir periyodu olmalıdır. Bu yüzden birlikte açma ve kapama zamanımız tam olarak 20ms'ye eşit olmalıdır.
OPTION_REG = 0b00000100; // Harici frekansı olan Timer0 ve ön ölçekleyici olarak 32 TMR0 = 251; // 1us için zaman değerini yükle delayValue sadece 0-256 arasında olabilir TMR0IE = 1; // PIE1 yazmacında zamanlayıcı kesme bitini etkinleştir GIE = 1; // Global Kesmeyi Etkinleştir PEIE = 1; // Çevresel Kesintiyi Etkinleştirin
Bu yüzden, kesme rutin fonksiyonumuzun içinde, belirtilen süre için RB0 pinini açıyoruz ve raybalama süresi için (20ms - on_time) kapatıyoruz. Açık kalma süresinin değeri Potansiyometre ve ADC modülü kullanılarak belirlenebilir. Kesinti aşağıda gösterilmiştir.
oid interrupt timer_isr () {if (TMR0IF == 1) // Zamanlayıcı taştı {TMR0 = 252; / * Zamanlayıcı Değerini yükleyin, (Not: TImer0'ın TMR0'ı artırmaya başlamak için iki komut Döngüsüne ihtiyacı olduğundan Timervalue 101 olarak 100'dür * / TMR0IF = 0; // Zamanlayıcı kesinti işaretini temizle sayacı ++;} if (count> = on_time) { RB0 = 1; // LED'lerin yanıp sönmesi için değeri tamamlayın} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
While döngümüzün içinde ADC modülünü kullanarak potansiyometrenin değerini okuruz ve okuma değerini kullanarak PWM'nin açık kalma süresini güncelleriz.
while (1) {pot_value = (ADC_Read (4)) * 0.039; on_time = (170-pot_value); }
Bu şekilde Periyodu 20 ms olan ve Potansiyometre kullanılarak ayarlanabilen değişken bir görev döngüsüne sahip bir PWM sinyali oluşturduk. Tam Kod aşağıda kod bölümünde verilmiştir.
Şimdi, proteus simülasyonunu kullanarak çıktıyı doğrulayalım ve donanımımıza geçelim.
Devre şeması:
PWM eğitimiyle zaten karşılaştıysanız, bu eğitimin şemaları aynı olacaktır, bunun dışında LED ışık yerine bir servo motor ekleyeceğiz.
Simülasyon ve Donanım Kurulumu:
Proteus simülasyonunun yardımıyla, bir osiloskop kullanarak PWM sinyalini doğrulayabilir ve ayrıca Servo motorun dönen açısını kontrol edebiliriz. Simülasyonun birkaç anlık görüntüsü aşağıda gösterilmektedir, burada servo motorun ve PWM görev döngüsünün dönen açısının potansiyometreye göre değiştiği fark edilebilir. Daha sonra, sonunda farklı PWM'de dönen Tam Videoyu kontrol edin.
Servo dönüş açısı görebildiğimiz gibi potansiyometre değerine göre değişiyor. Şimdi donanım kurulumumuza geçelim.
Donanım kurulumunda LED kartını yeni çıkardık ve Servo motoru yukarıdaki şemalarda gösterildiği gibi ekledik.
Donanım aşağıdaki resimde gösterilmektedir:
Aşağıdaki video, servo motorun potansiyometrenin çeşitli konumlarına nasıl tepki verdiğini göstermektedir.
İşte bu !! Biz var bir PIC Mikrodenetleyici ile Bir servo motor arayüz şimdi de kendi yaratıcılığınızı kullanın ve bu başvuruları öğrenebilirsiniz. Servo motor kullanan birçok proje var.