MCP2551 bir UART-CAN dönüştürücü mü?


12

Bilgisayarımı kullanarak 250 kbit / sn'lik bir CAN veri yolu sniffer yapmak istiyorum. Bazı araştırmalardan sonra MCP2551'in CAN'ın fiziksel katmanı için bir tür voltaj seviye regülatörü olduğunu gördüm . Bunu akılda tutarak, bu kurulumun işe yarayıp yaramayacağını merak ediyorum. Sadece iletilen mesajların otomatik test amacıyla kaydedilmesini istiyorum, iletişimin bir parçası değil:

PC <-> USB-UART (belki CP2102, bacause zaten bir tane var) <-> MCP2551 <-> CAN veri yolu

Değilse, otobüsün bir parçası olmak için MCP2551'e ne tür sinyaller girmeli?

Yanıtlar:


14

Bunu yapabilirsiniz, ancak CAN veriyolunuzda alacağınız şey CAN voltaj seviyelerini kullanarak UART olacaktır. Veri yolunuzdaki CAN aygıtlarıyla iletişim kurmak istiyorsanız, MCP2551'e CAN protokol mesajları sağlamanız gerekir. Dinlemek için aynı: CAN mesajları UART formatından o kadar farklıdır ki UART onlarla ne yapacağını bilemez. Her zaman en az çerçeve hatası alırsınız ve mesajın içeriğine ulaşmazsınız.
Bu resim bir CAN mesajının yapısını göstermektedir:

resim açıklamasını buraya girin

Bir CAN arayüzüne sahip etrafında bol mikroişlemcisi, var sans alıcı. Bunlar için MCP2551 tasarlandı. Geçmişte 4 CAN arayüzüne sahip NXP LPC2294'ü kullanıyorduk. Her biri bir CAN veriyoluna bağlanmak için bir MCP2551'e ihtiyaç duyar. NXP'nin daha yeni denetleyicileri, tüm üyelerinin CAN'ı desteklediği LPC1800 ailesini içerir.


Ben tamamen UART start / stop bitleri ve muhtemelen bazı CAN "start / top bit" durumlarını unuttum. Muhtemelen PC'de bir CAN yığını kullanarak FTDI'yi gpio olarak kullanarak MCP2551'e aktarılacak bir çözüm bulmaya çalışacağım
17'de

3
@rnunes - Bu sadece başlatma / durdurma bitleri değil. Bunlar olmadan bir UART iletimi sadece 8 bit bayttır. Bir CAN mesajı, adresleme, öncelik ve hata kontrolü ile çok daha karmaşıktır. İkisini karşılaştıramazsınız.
stevenvh

Ama FTDI kullanarak biraz yavaş çalışacağım (temelde, gerçekten hızlı bir USB <-> GPIO), UART'ta olduğu gibi bayt byte değil. Zaten bu CAN MCU'yu arıyorum, ama şimdilik para harcamayı tercih ederim (bir öğrenci hobi projesi) ve zaten FTDI var. Araştırmalarımla FTDI'nın bunu yapamayacağı sonucuna varırsam, bir CAN MCU kullanmayı deneyeceğim.
rnunes

Yığın, her şeyi (örn. Bit doldurma) işlemekten ve yavaş yavaş MCP2551'e iletmekten sorumlu olacaktır. Şu anda yaşadığım tek sorun FTDI gecikmesidir, çünkü hızlı ve düzenli olmasına ihtiyacım var, ancak daha sonra ölçeceğim.
rnunes

1
@rnunes - Ama CP2102'den (FTDI değil SiLab'lar) çıkan bit bit değil bayttır . Bir bit sonra durduramazsın. Mikrodenetleyicinizi USB ile arayüzlemek için CP2102'ye ve CAN + MCP2551'i destekleyen bir mikrodenetleyiciye ihtiyacınız olacaktır. Veya bir USB cihazı olarak da işlev görebilen bir mikrodenetleyici. O zaman CP2102'ye ihtiyacınız yoktur.
stevenvh

7

MPSSE modunda (UART'ı unutma), MCP2515 ve MCP2551'de FT2232H kullanarak bir USB / CAN arayüzü yaptım. MCP2515 burada kaçırdığınız anahtar parça. Ne yaptığını iyi çalış. Çerçeveleme, ACK'lar, sağlama toplamı oluşturma ve doğrulama, mesaj filtreleme ve standart olarak bir CAN düğümünün yapması gereken daha az belirgin şeyler yapan gerçek CAN denetleyicisidir. Bir dinleyici istiyorsanız, MCP2515'in veri yolunda aktarımı garanti etmeyen bir dinleme modu vardır. MCP2551, RS-232 için MAX232 veya RS-485 için ADM485'e benzeyen basit bir fiziksel katman adaptörüdür.

FTDI MPSSE teknolojisinin kesintiler için hiçbir desteği olmadığı için bu mimari mükemmel olmaktan çok uzak (sadece sahnelerin arkasında toplu USB aktarımları kullandığına inanıyorum), bu yüzden denetleyiciyi yeni mesajlar için sık sık yoklamak zorundayım. Bu, USB ana bilgisayar denetleyicisine çok yük bindirir ancak yine de hiçbir iletinin kaybolmadığını garanti etmez (MCP2515, "taşma modunu" etkinleştirirseniz dahili olarak en fazla 2 alınan iletiyi saklayabilir, yalnızca seçmediyseniz bir tane). Çok daha iyi bir çözüm, yerleşik CAN ve STM32F105 gibi USB çevre birimleri ile uygun bir mikrodenetleyici olacaktır (103 aynı anda USB ve CAN kullanamaz). Tam olarak bu fikrin çalışan bir uygulaması için bu projeye bakın . Stevenh tarafından önerilen LPC18xx de işe yarayacaktır, ancak LPC17xx muhtemelen daha ucuz ve daha kolay bulunur.


Bu durumda, havuz oluşturmak bir sorun değildir, ancak evet, ideal çözüm, CAN ileti arabelleği olarak çalışan CAN denetleyicili bir MCU kullanmak olacaktır. Artık yazdığınız ilk kurulumu kullanmayı deneyeceğim. Teşekkürler
rnunes

+1 Bir uC olmadan doğrudan bir CAN denetleyicisiyle konuşmak için FTDI yongasını kullanmak düzgün. Görünüşe göre FTDI, SPI köprüsü için özel bir USB olan FT221X'i çıkardı. (USB'den I2C'ye de farklı bir model var.)
Nick Alexeev

2

Soruyu anladığım için mevcut bir CAN veriyolunu dinlemek istediğinizden, gerçekten bir UART kullanamazsınız. CAN ve UART işaretleme tamamen farklıdır.

Teorik olarak MCP2551'den çıkan CAN alma hattına bakabilir ve CAN trafiğinin kodunu çözebilirsiniz. Bu kolay olmayacak, ancak teorik olarak mümkün. Özelleştirilmiş CAN donanımı olmadan, CAN bit hızından birkaç kat daha hızlı örneklemeniz ve daha sonra yazılımda bu bit akışının kodunu çözmeniz gerekir. 250 kbit / s CAN kodunu çözmek için muhtemelen yaklaşık 1 Mbit / s'de kayıt yapmanız gerekecektir.

Mikrodenetleyici kullanmak çok daha kolay olacaktır. PIC 18F2580 ve diğer benzer işlemciler yerleşik bir CAN çevre birimine sahiptir. Donanım tüm bit seviyesi kod çözme işlemini yapar ve tüm CAN çerçevelerini alır. İşlemci daha sonra alınan CAN çerçevelerini UART üzerinden PC'nize gönderebilir.

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.