Çoklu lineer aktüatörler arasındaki senkron hareket, bazı müşteri uygulamalarının başarısı için hayati öneme sahip olabilir, bunlardan biri, bir kapıyı açan iki lineer aktüatördür. Bunu başarmak için özel Firgelli'yi kullanmanızı öneririz. senkron kontrol kutusu FA-SYNC-2 ve FA-SYNC-4. Ancak bazı DIY yapanlar ve bilgisayar korsanları, Arduino gibi bir mikrodenetleyicinin sunduğu özgürlüğü tercih ediyor ve bunun yerine kendi senkronize kontrol programlarını yazmayı tercih ediyor. Bu eğitim, bunu kullanarak bunu nasıl başaracağınıza genel bir bakış sağlamayı amaçlamaktadır. Optik Serisi doğrusal aktüatör.
Önsöz
Bu eğitim, Arduino ile senkronize kontrol elde etmek için gereken adımların titiz bir şekilde ele alınması değil, kendi özel programınızı yazmanıza yardımcı olacak geniş bir genel bakış niteliğindedir. Bu eğitim ileri düzeydedir ve Arduino donanımına, yazılımına zaten aşina olduğunuzu ve ideal olarak darbe genişlik modülasyonu (PWM) sinyalleri, kesinti servis rutini (ISR), sensörlerin hata bildirimi ve motor kodlayıcıları konusunda deneyim sahibi olduğunuzu varsayar. Bu öğreticide verilen örnek, ilkel bir orantılı denetleyicidir. Aşağıdaki örnekte, bunlarla sınırlı olmamak üzere, birçok iyileştirme uygulanabilir: bir PID kontrol döngüsünün uygulanması ve ikiden fazla doğrusal aktüatör için ölçeklendirme. Lütfen Arduino uygulamaları için teknik destek sağlayacak kaynaklara sahip olmadığımızı ve bu halka açık eğitimlerin dışında hata ayıklama, düzenleme, kod veya bağlantı şemaları sağlamayacağımızı unutmayın.
Genel Bakış Senkron Kontrol
Senkron kontrol, iki doğrusal aktüatörün uzunluğunun karşılaştırılması ve hızın orantılı olarak ayarlanmasıyla elde edilir; bir aktüatör diğerinden daha hızlı hareket etmeye başlarsa onu yavaşlatırız. Doğrusal aktüatörün konumunu dahili optik kodlayıcı aracılığıyla okuyabiliriz. Optik kodlayıcı, DC motora bağlanan, içinde 10 delik bulunan küçük bir plastik disktir, öyle ki motor döndüğünde plastik disk de döner. Bir kızılötesi LED, plastik diske doğru yönlendirilir, böylece ışığı döndürürken optik diskteki deliklerden iletilir veya diskin plastiği tarafından engellenir. Diskin diğer tarafındaki bir kızılötesi sensör, ışığın delikten ne zaman iletildiğini algılar ve bir kare dalga sinyali verir. Alıcının algıladığı darbe sayısını sayarak, hem motorun RPM'sini hem de doğrusal aktüatörün kat ettiği mesafeyi hesaplayabiliriz. 35 lb optik doğrusal aktüatör, hareketin inç başına 50 (+/- 5) optik darbesine sahipken, 200 lb ve 400 lb aktüatörlerin her ikisi de inç başına 100 (+/- 5) darbeye sahiptir. Her bir lineer aktüatörün ne kadar uzadığını karşılaştırarak, iki aktüatörün hızını orantılı olarak, uzarken her zaman aynı uzunlukta kalacak şekilde ayarlayabiliyoruz.
Gerekli Bileşenler
- İki optik lineer aktüatör
- İki IBT-2 motor sürücüsü
- Arduino Uno
- 12V güç kaynağı
- 3 anlık düğme (Firgelli tarafından satılmaz)
- Ek kablolama
Bağlantı şeması
Yukarıdaki kablo bağlantılarını yapın. Renklendirme kuralı yukarıdaki şemada gösterilenden farklı olabileceğinden, doğrusal aktüatörden çıkan kablo renklerini her zaman kontrol edin.
Hızlı Eğitim
Sadece iki lineer aktüatörünüzü senkronize hareket ettirmek istiyorsanız, aşağıdaki adımları uygulamanız yeterlidir:
- Bağlantıları kablo şemasında gösterildiği gibi yapın.
- Aşağıdaki ilk programı yükleyin ve çalıştırın.
- Bu programın çıkardığı iki değeri aşağıdaki ikinci programın 23. satırına kopyalayın.
- İkinci programı yükleyin ve çalıştırın.
- K_p değişkenini (satır 37, ikinci program) değiştirerek sisteminize ince ayar yapın. Bu en kolay şekilde analog pin A0'a bir potansiyometre ekleyerek ve potansiyometreyi okumak için kodu değiştirerek ve map () işlevini kullanarak yapılır: K_p = map (analogRead (A0), 0, 1023, 0, 20000);
Bu eğitimin geri kalanı, programların bazı temel özelliklerini daha ayrıntılı olarak ele alacaktır. Yine, bunun kapsamlı bir eğitim olmadığını, kendi programınızı oluştururken göz önünde bulundurmanız gereken şeylerin bir özeti olduğunu yineliyoruz.
Kalibrasyon Programına Genel Bakış
Eşzamanlı kontrole ulaşılmadan önce sistemi kalibre etmeliyiz. Bu, çalıştırma döngüsü başına darbe sayısının sayılmasını içerir, çünkü ürün özelliklerinde belirtildiği gibi, hareketin inç başına bir (+/- 5) darbe toleransı vardır. Aşağıdaki programı yükleyin ve çalıştırın. Bu program aktüatörleri tamamen geri çekecek (hat 53) ve optik darbe sayacı değişkenini sıfıra ayarlayacak ve daha sonra tamamen uzatılacak ve tamamen geri çekilecektir (sırasıyla satır 63 ve 74). Bu çalıştırma döngüsü sırasında, darbe sayısı, kesinti servis rutini (ISR), satır 153 ve 166 tarafından sayılacaktır. Çalıştırma döngüsü tamamlandıktan sonra, ortalama darbe sayısı çıkacaktır, satır 88, bu değerleri daha sonra not edin.
https://gist.github.com/Will-Firgelli/89978da2585a747ef5ff988b2fa53904
Senkron Programa Genel Bakış
Eşzamanlı kontrol programını yüklemeden önce, ilk olarak kalibrasyon programı tarafından çıkılan değerleri 23. satıra kopyalamanız ve mevcut diziyi: {908, 906} kendi değerlerinizle değiştirmeniz gerekir. Ek olarak, 35 lb doğrusal aktüatör kullanıyorsanız, 29. satırdaki değişkenin değerini 20 milisaniyeden 8 milisaniyeye değiştirmeniz gerekecektir.
Bir kez tamamen geri çekildikten sonra (orijini belirlemek için) her iki doğrusal aktüatörü uzatma, geri çekme ve durdurma komutlarına karşılık gelen üç düğmeye basarak senkronize olarak hareket ettirebilirsiniz. Aktüatörler, göreceli darbe sayaçlarını karşılaştırarak ve her zaman senkronize kalacak şekilde aralarındaki hızı ayarlayarak, eşit olmayan yükler altında bile senkronize kalacaktır. Mevcut programın basit bir orantısal kontrolör uyguladığı hatırlatılmalıdır, bu nedenle, bu nedenle denge etrafında aşma ve salınıma tabidir. Bunu, 37. satırda tanımlanan K_p değişkenini değiştirerek ayarlayabilirsiniz. Bu en kolay şekilde analog pin A0'a bir potansiyometre ekleyerek ve potansiyometreyi okumak için kodu değiştirerek ve map () işlevini kullanarak yapılır: K_p = map (analogRead (A0), 0, 1023, 0, 20000);
En iyi sonuçlar için, orantılı denetleyiciyi kaldırmanızı ve bir PID kontrol döngüsü uygulamayı şiddetle tavsiye ederiz; ancak bu, bu giriş öğreticisinin kapsamı dışındadır ve kasıtlı olarak atlanmıştır.
https://gist.github.com/Will-Firgelli/44a14a4f3cac3209164efe8abe3285b6
Bullet 36 ve Bullet 50 Aktüatörlerini Eşzamanlı Olarak Kullanma
Optik Serisi doğrusal aktüatörümüze ek olarak, dahili kodlayıcılara sahip iki lineer aktüatör sunuyoruz: Bullet 36 Cal. ve Bullet 50 Cal, her ikisi de dahili bir dört evreli Hall Etkisi kodlayıcıya sahiptir. Hall Effect kodlayıcı, optik kodlayıcı ile aynı prensipte çalışır, ancak ışık kullanmak yerine manyetizmayı kullanır. Ayrıca, karesel bir kodlayıcı olarak, her biri 90 derece faz dışı olan iki sinyal çıkışına sahiptir. Bu nedenle, 4 veya daha fazla kesme pini olan bir Arduino kartı kullanmanız (Arduino Uno'da yalnızca iki tane vardır) ve aktüatör başına iki sinyalden girişi işlemek için kodu değiştirmeniz gerekir. Ayrıca, geri çevrilme süresi değişkeni olan falsepulseDelay'in K_p ile birlikte ayarlanması gerekecektir.
Kendi Programınızı Yazmanın İpuçları
İkiden fazla lineer aktüatör
İki veya daha fazla lineer aktüatör kullanırken, Arduino Uno, yalnızca iki kesme pini mevcut olduğundan artık çalışmayacaktır. Uygun sayıda kesme pini bulunan bir Arduino kartı kullanmanız gerekecek, daha fazla bilgi: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
İkinci olarak, verimlilik açısından programlamanızı diziler ve for () döngüleri kullanarak vektörleştirerek her bir aktüatör üzerinde yinelemeniz önerilir.
Debouncing
Birçok sensörde olduğu gibi zıplayan sinyallerin de farkında olmak önemlidir. Mekanik anahtarlar olduğu gibi, kodlayıcılar da sıçrayan muzdarip olabilir. Yukarıdaki örnekte debouncing işlemi basit bir gecikme (falsepulseDelay değişkeni tarafından tanımlanan) tarafından ele alınmıştır, yaptığınız herhangi bir yazılım değişiklikleri veya fiziksel devre ile sıçrayan gürültü filtrelemek için bu işlemek için önemlidir.
Döndürme devrilme
Parolayı değiştirirseniz, millis() işlevi ile uğraşırken rollover'a dikkat edin. Hem millis() hem de lastDebounceTime dizisi imzasız uzun değişkenler olarak bildirilir, yani 4.294.967.295 (32^2-1) değeri depolayabilirler. Bu kabaca 49,7 günlük bir rollover süresi anlamına gelir. Geçerli program ISR (kesme hizmet yordamı) işlevlerinde rollover işlemek için tasarlanmıştır: count_0 & count_1, ancak bu programı değiştirirseniz değişken rollover doğru işlemek için emin olun, aksi takdirde program sürekli kullanım ~ 49,7 gün sonra çökecek. Daha fazla bilgi için bkz: https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/