- Gerekli Bileşenler
- 3D yazdırılmış Robotik KOLU hazırlanıyor
- Devre şeması
- Robotik Kol için LPC2148 Programlamasında yer alan adımlar
- Kodlama Açıklaması
- Push butonları kullanılarak döndürülecek Servo Motorun seçilmesi
- Toplama ve Yerleştirme Robot Kolunun Çalışması
Robotic Arms, büyüleyici mühendislik eserlerinden biridir ve karmaşık işleri tıpkı bir insan kolunun yapacağı gibi yapmak için bu şeylerin eğilip döndüğünü izlemek her zaman büyüleyicidir. Bu robotik kollar, kaynak, delme, boyama vb. Gibi yoğun mekanik işler yapan montaj hattındaki endüstrilerde yaygın olarak bulunabilmektedir, son zamanlarda gelişmiş robotik kollar da karmaşık cerrahi operasyonları gerçekleştirmek için yüksek hassasiyetle geliştirilmektedir. Öyleyse bu eğitimde, birkaç potansiyometreyi manuel olarak kontrol ederek bir nesneyi seçmek ve yerleştirmek için ARM7-LPC2148 mikro denetleyiciyi kullanarak basit bir Robotik Kol oluşturalım.
Bu eğitimde, Thingsiverse'deki prosedürü takip ederek oluşturulmuş bir 3D yazdırılmış robotik ARM kullanacağız. ARM, robotik ARM hareketi için 4 servo motor kullanır. Yazıcınız yoksa Arduino Robotik Kol Projemiz için yaptığımız gibi basit kartonlarla da kolunuzu inşa edebilirsiniz. İlham almak için, daha önce Arduino kullanarak oluşturduğumuz Record and Play Robotic Arm'a da başvurabilirsiniz.
Öyleyse şimdi projemiz için her şeyi hazırlayalım
Gerekli Bileşenler
- 3D Yazıcı Robotik ARM
- ARM7-LPC2148
- SG-90 Servo Motor (4)
- 10k Potansiyometre (4)
- Basmalı Düğme (4)
- LED (4)
- 5V (1A) DC Güç Adaptörü
- Dirençler (10k (4), 2.2k (4))
- Breadboard
- Kabloların Bağlanması
3D yazdırılmış Robotik KOLU hazırlanıyor
Bu eğitimde kullanılan 3 boyutlu yazdırılmış Robotik Kol, Thingiverse'de bulunan EEZYbotARM tarafından verilen tasarım takip edilerek yapılmıştır. 3D baskılı robotik kolu yapmak için eksiksiz prosedür ve videolu montaj detayı, yukarıda paylaştığımız şey çeşitliliği bağlantısında mevcuttur.
Bu, 4 Servo Motor ile monte edildikten sonra 3 boyutlu yazdırılmış Robotik Kolumun görüntüsü.
Devre şeması
Aşağıdaki resim ARM tabanlı Robotik Kolun devre bağlantılarını göstermektedir .
Proje için devre bağlantıları basittir. Servo Motorlara ayrı bir 5V DC güç adaptörü ile güç sağladığınızdan emin olun. Potansiyometreler ve butonlar için LPC2148 mikrodenetleyicide bulunan 3,3V kullanabiliriz.
Burada LPC2148'in 4 potansiyometreli 4 ADC pini kullanıyoruz. Ve ayrıca servo motorun PWM pinlerine bağlı LPC2148'in 4 PWM pini. Hangi motorun çalıştırılacağını seçmek için 4 basma düğmesi de bağladık. Bu nedenle, düğmeye bastıktan sonra, potansiyometre servo motorun konumunu değiştirmek için değiştirilir.
LPC2148'in GPIO'suna bağlı olan basma düğmeleri bir ucu 10k'lık dirençle aşağı çekilir ve diğer ucu 3,3V ile bağlanır. Ayrıca konumu değiştirmek için hangi servo motorun seçildiğini göstermek için 4 LED bağlanmıştır.
4 Servo Motor ve LPC2148 arasındaki devre bağlantıları:
LPC2148 | Servo Motor |
P0.1 | SERVO1 (PWM-Turuncu) |
P0.7 | SERVO2 (PWM-Turuncu) |
P0.8 | SERVO3 (PWM-Turuncu) |
P0.21 | SERVO4 (PWM-Turuncu) |
4 Potansiyometre ve LPC2148 arasındaki devre bağlantıları:
LPC2148 | Potansiyometre Merkez Pimi Sol Pim - LPC2148'in 0V GND'si Sağ Pim - 3.3V LPC2148 |
P0.25 | Potansiyometre1 |
P0.28 | Potansiyometre2 |
P0.29 | Potansiyometre3 |
P0.30 | Potansiyometre4 |
LPC2148 ile 4 LED'in devre bağlantıları:
LPC2148 | LED Anot (Tüm LED'lerin katotları GND'dir) |
P1.28 | LED1 (Anot) |
S1.29 | LED2 (Anot) |
S1.30 | LED3 (Anot) |
S1.31 | LED4 (Anot) |
LPC2148 ile 4 butonun devre bağlantıları:
LPC2148 | Basmalı Düğme (Aşağı Çekme Dirençli 10k) |
P1.17 | Puşbuton 1 |
P1.18 | Basma düğmesi2 |
S1.19 | Basma düğmesi3 |
S1.20 | Basmalı düğme 4 |
Robotik Kol için LPC2148 Programlamasında yer alan adımlar
Bu Robotik Kol için programlama yapmadan önce, LPC2148'de PWM üretmeyi ve ARM7-LPC2148'de ADC'yi kullanmayı bilmemiz gerekir. Bunun için, Servo motoru LPC2148 ile Arayüzleştirme ve LPC2148'de ADC'nin nasıl kullanılacağı konusundaki önceki projelerimize bakın.
LPC2148 kullanarak ADC dönüşümü
Servo Motor konumunu kontrol etmek için PWM çıkışı oluşturmak için görev döngüsü değerini ayarlamak için ADC değerleri sağlamamız gerektiğinden. Potansiyometrenin ADC değerlerini bulmamız gerekiyor. Dört Servo motoru kontrol etmek için dört potansiyometremiz olduğundan, LPC2148'in 4 ADC kanalına ihtiyacımız var. Bu eğitimde, sırasıyla LPC2148'de bulunan 4,1,2,3 ADC kanallarının ADC pinlerini (P0.25, P0.28, P0.29, P0.30) kullanıyoruz.
LPC2148 kullanarak Servo Motor için PWM sinyalleri oluşturma
Servo motor pozisyonunu kontrol etmek için PWM sinyalleri üretmemiz gerektiğinden. PWM'nin görev döngüsünü ayarlamamız gerekiyor. Robotik kola bağlı dört Servo motorumuz var, bu nedenle LPC2148'in 4 PWM kanalına ihtiyacımız var. Burada bu eğitimde, sırasıyla LPC2148'de bulunan 3,2,4,5 PWM kanallarının PWM pinlerini (P0.1, P0.7, P0.8, P0.21) kullanıyoruz.
Hex Dosyasını LPC2148'e Programlama ve Yanıp Sönme
ARM7-LPC2148'i programlamak için keil uVision'a ihtiyacımız var & HEX kodunu LPC2148 Flash Magic aracına flaş etmek gerekiyor. ARM7 Stick'i mikro USB portu üzerinden programlamak için burada bir USB Kablosu kullanılır. Keil kullanarak kod yazıyoruz ve bir hex dosyası oluşturuyoruz ve ardından HEX dosyası Flash Magic kullanarak ARM7 çubuğuna flash yapıyor. Keil uVision ve Flash Magic kurulumu ve bunların nasıl kullanılacağı hakkında daha fazla bilgi edinmek için ARM7 LPC2148 Mikrodenetleyiciye Başlarken bağlantısını izleyin ve Keil uVision kullanarak Programlayın.
Kodlama Açıklaması
Bu Robotik Kol Projesi için tam program eğitimin sonunda verilmiştir. Şimdi programlamayı detaylı olarak görelim.
GPIO, PWM ve ADC kullanmak için LPC2148 PORT'unu yapılandırma:
ADC kanallarını etkinleştirmek için PINSEL1 kaydını kullanma - P0.25, P0.28, P0.29, P0.30 pinleri için ADC0.4, ADC0.1, ADC0.2, ADC0.3. Ve ayrıca, P0.21 (1 << 10) pini için PWM5 için.
#define AD04 (1 << 18) // P0.25 için AD0.4 işlevini seçin #define AD01 (1 << 24) // P0.28 için AD0.1 işlevini seçin #define AD02 (1 << 26) / / P0.29 için AD0.2 işlevini seçin #define AD03 (1 << 28) // P0.30 PINSEL1 için AD0.3 işlevini seçin - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
LPC2148 pinleri P0.1, P0.7, P0.8 için PWM kanalları PWM3, PWM2, PWM4'ü etkinleştirmek için PINSEL0 kaydını kullanma.
PINSEL0 = 0x000A800A;
LED ve basma düğmesinin bağlanması için kullanılan PORT1'deki tüm pinler için GPIO pin işlevini etkinleştirmek için PINSEL2 kaydını kullanma.
PINSEL2 = 0x00000000;
LED pinlerini Output ve Pushbuton pinlerini Input olarak yapmak için IODIR1 kaydı kullanılır. (GİRİŞ için 0 ve ÇIKIŞ için 1)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Pin numaraları şu şekilde tanımlanırken
#define SwitchPinNumber1 17 // (P1.17 ile bağlantılı) #define SwitchPinNumber2 18 // (P1.18 ile bağlantılı) #define SwitchPinNumber3 19 // (P1.19 ile bağlantılı) #define SwitchPinNumber4 20 // (P1.17 ile bağlantılı) 20) #define LedPinNumber1 28 // (P1.28 ile bağlantılı) #define LedPinNumber2 29 // (P1.29 ile bağlantılı) #define LedPinNumber3 30 // (P1.30 ile bağlantılı) #define LedPinNumber4 31 // (Bağlantılı S1.31)
ADC dönüştürme ayarını yapılandırma
Daha sonra ADC dönüştürme modu ve ADC için saat, AD0CR_setup kaydı kullanılarak ayarlanır.
işaretsiz uzun AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // ADC Modunu Ayarlama
CLCKDIV, Burst Mode ve PowerUP şu şekilde tanımlanır:
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 açık ve 0 kapalı # tanımlı PowerUP (1 << 21)
ADC Dönüştürme (CLKDIV) için saati ayarlama
Bu, ADC için saati üretmek için kullanılır. "CLKDIV-1" in gerçekte kullanıldığı 4Mhz ADC saati (ADC_CLOCK = PCLK / CLKDIV), bizim durumumuzda PCLK = 60mhz
Burst Modu (Bit-16): Bu bit BURST dönüşümü için kullanılır. Bu bit ayarlanırsa, ADC modülü, SEL bitlerinde seçilen (SET) tüm kanallar için dönüştürme yapacaktır. Bu bitte 0 ayarlamak BURST dönüşümünü devre dışı bırakır.
Güç Kapatma Modu (Bit-21): Bu, ADC'yi AÇMAK veya KAPATMAK için kullanılır. Bu bitteki (1) ayarı, ADC'yi güç kapatma modundan çıkarır ve onu çalışır hale getirir. Bu biti temizlemek ADC'yi kapatacaktır.
PWM dönüştürme ayarını yapılandırma
Önce PWMTCR kaydını kullanarak PWM için sayacı sıfırlayın ve devre dışı bırakın ve ön ölçekleyici değeri ile PWM Zamanlayıcı Ön Ölçek Kaydını ayarlayın.
PWMTCR = 0x02; PWMPR = 0x1D;
Ardından bir döngüde maksimum sayım sayısını ayarlayın. Bu Match Register 0'da (PWMMR0) yapılır. 20000'e sahip olduğumuz için, 20 ms'lik bir PWM dalgası
PWMMR0 = 20000;
Bundan sonra maç kayıtlarındaki görev döngüsü değerini ayarladıktan sonra, PWMMR4, PWMMR2, PWMMR3, PWMMR5 kullanıyoruz. Burada 0 milisaniye (Toff) başlangıç değerlerini ayarlıyoruz
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Bundan sonra, PWM Maç Kontrol Kaydını, maç kaydı oluştuğunda bir sayaç sıfırlamasına neden olacak şekilde ayarlayın.
PWMMCR = 0x00000002; // MR0 eşleşmesinde sıfırla
Bundan sonra, eşleşme değerinin (PWMLER) kullanımını etkinleştirmek için PWM Etkin Kaydı mandalı
PWMLER = 0x7C; // PWM2, PWM4, PWM4 ve PWM5 için mandal etkinleştirme
PWM Zamanlayıcı Kontrol Kaydında (PWMTCR) bir bit kullanarak zamanlayıcı sayacını sıfırlayın ve ayrıca PWM'yi etkinleştirin.
PWMTCR = 0x09; // PWM ve sayacı etkinleştir
Daha sonra PWM çıkışlarını etkinleştirin ve PWM'yi PWM kontrol yazmacında (PWMPCR) tek kenar kontrollü moda ayarlayın.
PWMPCR = 0x7C00; // PWM2, PWM4, PWM4 ve PWM5'i, tek kenar kontrollü PWM'yi etkinleştirin
Push butonları kullanılarak döndürülecek Servo Motorun seçilmesi
Dört farklı servo motoru döndürmek için kullanılan dört basma düğmemiz var. Bir düğmeyi seçerek ve ilgili potansiyometreyi değiştirerek, ADC değeri görev döngüsünü ayarlar ve karşılık gelen servo motor konumunu değiştirir. Basmalı düğme anahtarının durumunu almak için
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Böylece, hangi anahtar değerinin YÜKSEK olduğuna bağlı olarak ADC dönüşümü gerçekleşir ve ardından ADC (0 ila 1023) değerinin başarılı bir şekilde dönüştürülmesinden sonra (0 ila 2045) cinsinden eşlenir ve ardından görev döngüsü değeri servo motora bağlı (PWMMRx) PWM pini. Ayrıca, hangi anahtara basıldığını göstermek için bir LED YÜKSEK konuma getirilir. Aşağıda, ilk basma düğmesi için bir örnek verilmiştir
eğer (switchStatus1 == 1) { IOPIN1 = (1 <
Toplama ve Yerleştirme Robot Kolunun Çalışması
Kodu LPC2148'e yükledikten sonra, herhangi bir anahtara basın ve robotik kolun konumunu değiştirmek için ilgili potansiyometreyi değiştirin.
Her bir anahtar ve potansiyometre, sola veya sağa hareket, yukarı veya aşağı hareket, ileri veya geri hareket olan her bir servomotor hareketini ve ardından hareketi tutmak ve serbest bırakmak için kıskacı kontrol eder. Ayrıntılı bir çalışma videosu ile eksiksiz kod aşağıda verilmiştir.