Robotik kol için işlemci arası iletişim


13

Bir hobi 6-DOF robot kolu inşa ediyorum ve işlemciler arasında iletişim kurmanın en iyi yolunun ne olduğunu merak ediyorum (3-4 AVR, maksimum 18 inç ayırma). Bir Atmega32u4 USB-üzerinden mikroişlemcilere komutlar gönderen bilgisayarda kontrol döngüsünün çalışmasını istiyorum - ??? köprü.

Düşündüğüm bazı fikirler:

  1. RS485
    • Artıları: aynı teldeki tüm işlemciler, diferansiyel sinyal daha sağlam
    • Eksileri: ek yongalar gerektirir, işlemcilerin aynı anda iletimini önlemek için protokol yazmanız (veya bulmanız?) Gerekir
  2. UART döngüsü (yani, bir işlemcinin TX'si bir sonraki RX'e bağlanır)
    • Artıları: basit bellenim, işlemciler UART yerleşik
    • Eksileri: son bağlantı robot uzunluğu seyahat etmek zorunda, her işlemci mesajları yeniden iletimi döngüleri harcamak zorunda
  3. CANbus (Bu konuda çok az şey biliyorum)

Ana düşüncelerim donanım ve bellenim karmaşıklığı, performans ve fiyat (pahalı bir kutudan satın alamıyorum).

Yanıtlar:


13

Bilgisayarla iletişim için USB kullanmak istiyorsunuz. Çok sayıda mikro denetleyiciniz varsa, büyük olasılıkla mikro denetleyicilerden yalnızca birini doğrudan bilgisayara bağlayacaksınız. Diğer mikrodenetleyicilerin komutlarını ana mikrodenetleyiciden almaları gerekir.

Seçtiğiniz iletişim bir dizi faktöre bağlı olacaktır:

  • gerekli bant genişliği (bunları 16MHz'de çalıştırdığınızı varsayacağız)
  • karmaşıklık (kablolama ve kodlama)
  • iki yönlü veya usta köle

Hemen hemen tüm seçeneklerin AVR mikrodenetleyici üzerinde yerleşik desteği vardır. Ek donanım gerektiren yerleşik seçeneklere göre makul bir şekilde tercih edebileceğiniz bir seçenek yoktur. Yerleşik desteğe sahip oldukları için, yazılım karmaşıklığı benzerdir, sadece bağlantı noktasını yapılandırmanız (kayıtları kullanarak), verileri başka bir kayıt defterine iletmeniz, ardından başka bir kayıt defterinde biraz ayarlayarak iletimi tetiklemenizdir. Alınan tüm veriler başka bir kayıtta bulunur ve işleyebilmeniz için bir kesinti tetiklenir. Hangi seçeneği seçerseniz seçin, tek fark kayıt konumlarındaki değişiklik ve yapılandırma kayıtlarındaki bazı değişikliklerdir.


Bir USART döngüsü aşağıdaki özelliklere sahiptir:

  • 90KB / s civarında aktarım hızı olan maksimum CLK / 16 = 1MHz (16MHz saatte) baud hızı
  • tamamen çift yönlü iletişim (master veya slave tanımlaması yok)
  • her bir mikro denetleyici çifti arasında ayrı kablolar gerektirir - Atmega32u4, pratikte bir ağa bağlayabileceğiniz mikro denetleyici sayısını sınırlandırarak (veya bağlantılı bir listeye bağlı olarak uzun bir mikro denetleyici dizisiyle sonuçlanır) yerel olarak iki USART bağlantı noktasını destekler. tavır)

Not: RS232 iletişimi elde etmek için kullanacağınız şey budur, ancak RS232 10V gerektirdiğinden, bu voltaj seviyelerini almak için bir sürücü gerektirir. Mikrodenetleyiciler arasındaki iletişim için bu yararlı değildir (sadece voltaj seviyeleri değiştirilir).

RS485:

  • Esasen, USART portunu farklı bir modda kullanırsınız - bant genişliğinde bir avantaj yoktur ve kablolamayı sadece biraz basitleştirebilir, ancak aynı zamanda karmaşık hale getirir. Bu önerilmez.

İki telli arayüz:

  • Buna I2C de denir. Bu, tüm cihazların aynı iki kabloyu paylaştığı anlamına gelir.

  • Her iki kabloda bir çekme direncine ihtiyacınız var

  • Yavaştır (çünkü çekme dirençlerinin değeri sınırlıdır ve cihaz sayısı arttıkça ve kablo uzunluğu arttıkça kapasitans artar). Bu AVR mikro denetleyici için, hız 400 kHz'e kadar - USART'tan daha yavaş (ancak bu hız kapasitansınızı sınırlamaya bağlıdır). Bunun nedeni, bir cihaz veri telini düşük sürmesine rağmen, ters geçiş, telin tekrar yükselmesini sağlayarak (çekme direnci) gerçekleştirilir.

  • ALL iletişiminin aynı sınırlı bant genişliğini paylaştığını düşündüğünüzde daha da yavaştır. Tüm iletişim aynı sınırlı bant genişliğini paylaştığından, gönderilmeden önce ağın boşta kalana kadar verilerin beklemesi gereken iletişimde gecikmeler olabilir. Sürekli olarak başka veriler gönderiliyorsa, verilerin gönderilmesini de engelleyebilir.

  • Bir master-slave protokolüne dayanır, burada master bir slave'e hitap eder, daha sonra bir komut / istek gönderir ve daha sonra slave cevaplar. Bir seferde yalnızca bir cihaz iletişim kurabilir, bu nedenle slave'in master'ın bitmesini beklemesi gerekir.

  • Herhangi bir cihaz hem master hem de slave olarak hareket edebilir ve bu da onu oldukça esnek hale getirir.

SPI

  • Mikrodenetleyiciler arasındaki genel iletişim için önerdiğim / kullandığım budur.

  • Yüksek hız - CLK / 2 = 8MHz'e kadar (16MHz'de CLK için), en hızlı yöntem haline getirir. Bu, sadece saat için ayrı telinden dolayı elde edilebilir.

  • MOSI, MISO verileri ve SCK saat kabloları tüm ağda paylaşılır, bu da daha basit kablolamaya sahip olduğu anlamına gelir.

  • Bu bir master-slave biçimidir, ancak herhangi bir cihaz bir master ve / veya slave olabilir. Ancak, slave select komplikasyonları nedeniyle, paylaşılan kablolama için (ağ içinde), onu sadece hiyerarşik bir şekilde kullanmalısınız (iki telli arayüzün aksine). IE. tüm aygıtları bir ağaçta düzenlerseniz, aygıtın yalnızca çocuklarına hakim olması ve yalnızca üst öğesinin köle olması gerekir. Bu, bağımlı modda, bir cihazın her zaman aynı master'a sahip olacağı anlamına gelir. Ayrıca, bunu doğru bir şekilde yapmak için, akış yukarı master'a MISO / MOSI / SCK'ya dirençler eklemeniz gerekir, böylece cihaz aşağı yönde iletişim kurarsa (köle olarak seçilmediğinde) iletişim, diğer bölümlerdeki iletişimleri etkilemez. ağ (dirençleri kullanarak bunu yapabileceğiniz düzeylerin sayısının sınırlı olduğunu unutmayın, her iki SPI bağlantı noktasını kullanarak daha iyi çözüm için aşağıya bakın).

    AVR mikrodenetleyici, bağımlı seçildiğinde MOSI sinyalini otomatik olarak üç durumlu hale getirebilir ve bağımlı moduna geçebilir (master ise).

    Hiyerarşik bir ağ gerektirse de, çoğu ağ ağaç benzeri bir şekilde organize edilebilir, bu nedenle genellikle önemli bir sınırlama değildir

  • Yukarıdakiler hafifçe gevşetilebilir, çünkü her AVR mikrodenetleyici iki ayrı SPI portunu destekler, böylece her cihaz iki farklı ağda farklı konumlara sahip olabilir.

    Bunu söyledikten sonra, ağacınızda / hiyerarşinizde birçok seviyeye ihtiyacınız varsa (2'den fazla), dirençleri kullanan yukarıdaki çözüm işe yaramayacaktır. Bu durumda, ağacın her katmanı arasındaki SPI ağını değiştirmelisiniz. Bu, her cihazın bir SPI ağındaki çocuklarına ve diğer SPI ağındaki üst öğelerine bağlanacağı anlamına gelir. Her ne kadar yalnızca tek bir bağlantı ağacınız olduğu anlamına gelse de, avantaj, bir cihazın hem çocuklarından biri hem de ebeveyniyle aynı anda iletişim kurabilmesi ve sağlam dirençlere sahip olmamanızdır (doğru değerleri seçmek her zaman zordur) .

  • Ayrı MOSI ve MISO kabloları olduğundan, hem master hem de slave aynı anda iletişim kurabilir ve bu da hızda iki artış artışı potansiyeli verir. Her ek slave için slave seçimi için ekstra bir pim gereklidir, ancak bu büyük bir yük değildir, 10 farklı slave bile sadece 10 ekstra pim gerektirir, bu da tipik bir AVR mikrodenetleyicisine kolayca yerleştirilebilir.

CAN , belirttiğiniz AVR mikro denetleyici tarafından desteklenmiyor. Başka iyi seçenekler olduğu için, muhtemelen bu durumda önemli değildir.


Öneri SPI'dır , çünkü hızlıdır, kablolama çok karmaşık değildir ve sıkıca yukarı çeken dirençler gerektirmez. SPI'nin ihtiyaçlarınızı tam olarak karşılamadığı nadir durumlarda (muhtemelen daha karmaşık ağlarda), birden fazla seçenek kullanabilirsiniz (örneğin, iki kablolu arabirim ile birlikte her iki SPI bağlantı noktasını kullanın ve bazı mikro denetleyicileri eşleştirin) USART döngüsü kullanarak!)

Sizin durumunuzda, SPI kullanmak, doğal olarak, bilgisayara USB bağlantısı olan mikrodenetleyicinin ana olabileceği anlamına gelir ve ilgili komutları bilgisayardan her bağımlı cihaza iletebilir. Ayrıca her bir slave'den gelen güncellemeleri / ölçümleri okuyabilir ve bunları bilgisayara gönderebilir.

8MHz ve 0.5m kablo uzunluğunda, bunun bir sorun olacağını düşünmüyorum. Ancak öyleyse, kapasitansa daha dikkatli olun (toprak ve sinyal kablolarını çok yakın tutun ve ayrıca farklı iletkenler arasındaki bağlantılara dikkat edin) ve ayrıca sinyal sonlandırma. Olası bir durumda, saat hızını düşürebilirsiniz, ancak gerekli olduğunu düşünmüyorum.


Benden SPI Yaşasın
georgebrindeiro

2
Ben de bir SPI hayranıyım, belki de I2C de dikkate değer (her cihaza ayrı CS hatları ihtiyacını önler). Ama CAN o kadar kolay işten çıkarılmamalı - sonuçta, seçilen otomotiv otobüsü, bu yüzden hobi robotu için bunu dışlamam!
Andrew

SPI veri yolu gerçekten master'dan her slave'e ayrı CS hatları gerektiriyor mu? Eğer öyleyse, kaç köle bağlı olursa olsun, SPI veriyolundaki Wikipedia makalesinde belirtilen, master'a tam olarak 4 bağlantı gerektiren diğer veriyoluna ne denir ?
David Cary

1
+1 Büyük tepki için ben eski okulum ve 485'i seviyorum ve genellikle yazılım adresli otobüsleri seviyorum, ancak bu durumda hız ve kaynak tüketimi bileşenleri, SPI'yı seçerdim. Mesafeye ve elektrik gürültüsüne çok dikkat etmenize rağmen, özellikle de otobüsünüz farklı iletim hızıyla diğer IC'yi birlikte kullanıyorsa:
kaşıntılara

3
CAN hakkındaki yorumlarınız doğru değil. CAN sadece 2 telli bir otobüs değildir. Bence 400kbps hıza sahip I2C ile karıştırıyorsunuz. CAN'ın en yüksek hızı 1Mbps'dir.
Rocketmagnet

5

İşlemciler arası iletişim için CAN'ı şiddetle tavsiye ederim. Aynı otobüste 22 adede kadar işlemciyle robotlarımızda kullanıyoruz. İyi protokol tasarımıyla, mevcut bant genişliğinin yaklaşık% 90'ını kullanabilirsiniz (tüm hata kontrolü ve çerçeveler arası boşlukları dikkate aldığınızda yaklaşık 640 kb / sn). Tek bir CAN veriyolunda 1000Hz'de 10 motor servo edebiliyoruz. Bu sınıra yaklaşıyor. Verileri çok dikkatli bir şekilde paketlerseniz muhtemelen 20 motora sıkıştırabilirsiniz.

Genellikle CAN'ın her işlemci için bir alıcı-verici çip olması gerekir (sadece 8 pinli bir cihazdır). Alıcı-verici size çok az parazit yayan hoş bir diferansiyel sinyal verir ve ayrıca elektriksel olarak gürültülü bir ortamda (motorlar, solenoidler ve radyo vericileri) çalışıyorsanız parazite karşı bağışıklık kazandırır.

CAN Otobüs bağlantıları

Ancak, sınırlı durumlarda, alıcı-vericisiz CAN kullanmak mümkündür .


EtherCAT

Ciddi bant genişliği olan bir veri yolu uygulamak istiyorsanız, EtherCAT'i denemenizi tavsiye ederim . PC'nizin Ethernet bağlantı noktasına bağlanabilen 100Mb'lik bir veri yolu. Otobüste iki önemli parça var:

  • Köprü. Bu, Ethernet fiziksel katmanını daha büyük, düşük maliyetli LVDS fiziksel katmanına dönüştürür; bu, büyük konektörler, Phy çip ve Ethernet'in yaptığı birçok bileşeni gerektirmez.
  • Düğümler. Her düğümün sadece bir ET1200 yongasına ve bir mikro denetleyiciye ihtiyacı vardır.

PC, düğümlere 1kHz veya daha hızlı bir şekilde büyük miktarda veri iletebilir ve alabilir. Tek bir EtherCAT veriyolunda birçok şeyi kontrol edebilirsiniz .

Katma:

Shadow Robot Company şimdi Ronex adlı kullanışlı bir EtherCAT Bus sistemi satıyor . Oldukça fazla I / O eklemenizi sağlar ve yakında motor kontrolörleri ve yüksek kaliteli ADC'ler gibi birçok başka kart türünü tanıtacaklardır.


Bu görüntünün kaynağı nedir? Bu sahiptir CAN Highhem kırmızı ve mavi teller için.
Ian

1

Ben eski bir iplik kazıyorum biliyorum ve bu bir tür konu dışı, ama ben sadece Beckhoff ET1200 cips alabilir sanmıyorum. Kısa bir süre önce onlara e-posta gönderdim ve Ethercat grubuna katılmam gerektiği tavsiye edildi. Bunu yapmak için gruba katkıda bulunacağımı göstermeliydim - yani, Ethercat malzemelerini kullanan cihazlar üretip satarak. Şu anda (ve bu) noktada, cihazımı hala (robot uygulamaları için fırçasız motor kontrolörü - şu anda CAN kullanıyor) prototipleştiriyorum, bu yüzden hiçbir şey sunamadım (tamamlanmak için sağlam bir zaman veremiyorum - hala benim üzerinde çalışıyorum lisans). Onlara hayal kırıklığımı ifade ettim. Hayal kırıklığına değil dediler! Oldukça komik şeyler! Yapardım gerçektenEthercat'e girmek ister, ancak ASIC'ler hobiler veya bir şirketi olmayanlar için dokunulmaz görünmektedir. Ayrıca, bu benim ilk yazım, bu yüzden eski bir yazıyı kazarak tanrıları kızdırırsam özür dilerim!


Hoşgeldiniz. Cevabınız uygunsa eski bir gönderiyi diriltmek iyidir. Ve yorumun benimle alakalı görünüyor ...
Andrew

Teşekkürler dostum. Bu harika bir forum! İlgisiz, Ethercat ile ilgili bir deneyiminiz var mı? PCB'lerde prototip oluşturma için uygun bir bağımlı cihaz elde etmenin başka yöntemlerini biliyor musunuz? Ödemeye hazırım, ancak şu anda Bechoff ASIC'leri satın almak için gruba katılma gereksinimlerini karşılamıyorum. Sinir bozucu!
hukuk

EtherCat değil, hayır. CAN (iyi bir seçenek), LIN (çok iyi değil IMHO) kullanıyorum ve kesinlikle SPI veya I2C'yi tavsiye edebilirim
Andrew

ET1100 veya ET1200 çipine tutunmayı başardınız mı? Şimdi başka bir seçenek yoksa: mikroçip LAN9252, ET1100 ile uyumludur ve oldukça iyi çalışır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.