Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: dmc1 - 29 Eylül 2016, 09:13:44

Başlık: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: dmc1 - 29 Eylül 2016, 09:13:44
Merhabalar,

2'den fazla STM32F4 kullanarak bir CAN BUS ağı kurmak istiyorum.Biri master olacak ve senkron bir şekilde adrese bağlı olarak diğer slave kartlardan veri çekecek.Yalnız bunları yaparken hazır kütüphane kullanmak istemiyorum.İşlemcinin register larına kendim müdahale ederek bu yazılım altyapısını geliştirmek istiyorum.

Bu konuda yardımcı olabilecek varsa şimdiden teşekkürler.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: 1n4001 - 29 Eylül 2016, 10:04:38
Öncelikle CANBus ağı için her MCU kartı için bir CAN Transciever kullanmalısın. Hattın iki başında 120R sonlandırma direnci kullanmalısın. CAN hattı diferansiyel olduğundan twisted pair kablo kullanmalısın. Master dediğin cihaz ile kullanacağın adresten Request istediğinde ilgili Slave bu adres üzerinden geri cevap döndürebilirsin. CAN hattı 250Kbps için yaklaşık saniyede 1000 mesaj taşıyabilir. Sorgulama ve cevaplarını örn. 10 ms aralıklarla yapman hat doluluğunun önüne geçer. ST'nin Standard Peripheral Kütüphanelerini beğeniyorum. Onları kullanabilirsin. Register ile uğraşmak bu noktada uzun sürebilir veya iş içinden çıkılmaz duruma gelebilir.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: dmc1 - 29 Eylül 2016, 10:17:23
Uzun sürmesi önemli değil işi temelinden öğrenmek için tüm ayrıntıları kendim inşa etmek istiyorum o yüzden hazır kütüphane kullanmayı sevmiyorum.Verdiğiniz bilgiler için teşekkürler.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: sadogan - 29 Eylül 2016, 12:42:20
Alıntı yapılan: dmc1 - 29 Eylül 2016, 09:13:44
2'den fazla STM32F4 kullanarak bir CAN BUS ağı kurmak istiyorum.Biri master olacak ve senkron bir şekilde adrese bağlı olarak diğer slave kartlardan veri çekecek.
Canbus master ve slave lerden oluşan bir yapı deyildir.
Canbus ta paketlerin ID leri olur.
Her node, BUS müsait olduğunda verisini BUS a aktarır, otonom bir yapısı vardır.



Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 29 Eylül 2016, 12:47:18
 ilkönce canbus nedir nasıl çalışır onu anlamaya calis. Bu dökümanla başla takıldığın yerleri sorarak ilerleyebilirsin
http://ww1.microchip.com/downloads/en/AppNotes/00713a.pdf (http://ww1.microchip.com/downloads/en/AppNotes/00713a.pdf)
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: dmc1 - 30 Eylül 2016, 15:59:14
Linkini paylaştığınız döküman doğrultusunda CAN BUS konusunda yanlış bildiklerimi de öğrenmiş oldum.Teşekkürler ederim.

Soruma gelecek olursak bir ana modül olacak ve bu modül, diğer tüm modüllere sırayla ve senkron bir şekilde bilgi gönderecek ve bu modüllerden bilgi alacak.CAN 2.0 A ya da B protokolleriyle bu haberleşme altyapısını nasıl kurabilirim.Cevaplar için şimdiden teşekkürler.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 30 Eylül 2016, 16:07:14
slave mantığı diye birşey yok  herkes herkese mesaj yollar. sen kime mesaj yollarsan onunda sana mesaj yollamasını beklersin. standart olarak  her birimde 1 adet stmf4 ve mcp2551 kullanacaksın.rs485 hattı gibi kuracaksın.
fiziksel olarak tüm sistemi kurmadan önce eline bir adet stm32f4 discovery bordu al ve canbusu LOOPBACK moduna geçirerek denemelerini yap. Direkman cantx i canrx e bağlar içerden  mcp ye falan gerek olmaz .Ne yolluyorsan onu alırsın böylece sistemi çalıştırırsın. Bunu hallettikten sonra gerisi çocuk oyuncağı
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: dmc1 - 30 Eylül 2016, 16:16:09
Örneğin X modülünden Y modülüne veri yollanır yollanmaz Y'den X modülüne veri gönderilmesi standart bir durum mu CAN protokolünde????
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 30 Eylül 2016, 16:30:43
değil. x modulunen y modulune data yolladın y bunu okur x e cevap verir. Burada ayrım yapman gereken konu mesaj alıcıya özeldir.  yani sen mesajın id sini belirlersin mesela PICPROJE mesajını yollayacksın. Canbus tx bufferina PICPROJE yi yazarsın ID kısmınada sallıyorum 2501 yazarsın sonra datayı basarsın. Diğer tüm sistemler buna bakar ID 2501 i almasına ayarladığın rx bunu alır. Diğerleri ciddiye almaz. Yani yolladığın data ID si kimle uyusuyorsa o alır.

mesaj birleştirme:: 30 Eylül 2016, 16:32:35

http://www.barissamanci.net/Makale/15/can-bus-nedir-can-protokolu-incelemesi/ (http://www.barissamanci.net/Makale/15/can-bus-nedir-can-protokolu-incelemesi/)
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: dmc1 - 30 Eylül 2016, 16:33:22
Yalnız anlattığınız senaryoda herhangi bir cevap göndermedi ID'si 2501 olan işlemci.Datayı sadece aldı.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 30 Eylül 2016, 16:43:55
onuda siz yazıyorsunuz ya sizde kime cevap yollamak istiyorsanız cevabı ID ekleyerek hatta basıyorsunuz.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: M_B - 30 Eylül 2016, 16:55:44
@skara1214 hocam;
Can bus ta filtreleme nasıl oluyor. 
Diyelim 50 tane nodumuz bir tanede masterımız var. Bu nodeların da Id leri 1-den 50 ye kadar.
Masterın da ID si 500 olsun.

Tüm slave nodelar durumlara göre mastera bilgi verecek.
Slave lerde nasıl bir hardware filtreleme yapılıyor.
Yani 5 numaralı slave node mastera bilgi verirken diğer nodelar kendi üstüne almasın.

Demek istediğim.
slave nodelar dongu icinde gelen id ile kendi id sini karşılaştırmasın.
O yuzden hardware filtreleme nasıl yapılıyor.

Teşekkürler


Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 30 Eylül 2016, 17:07:26
şöyle oluyor hocam. Canbusun rx bufferinin filtresini ayarlayabiliyorsunuz yani bir registerla rx1 bufferinin filtresi 500 olsun diyorsunuz. 1 full message geldiğinde bu verdiğim barış samancı linkini incelerseniz data harici birçok bölüm var burada hardware ID yi  inceliyor eger ID çakışması oluşursa o mesajı alıyor ve flagi 1 yapıyor. yoksa o mesajın sizinle alakası yoksa yokmuş gibi davranıyor.

sizin verdiğiniz örnekte node 5 mesaj yazarsa mastera; ID yi 500 ayarlayıp datayı hatta basıyor. Bakın CANBUS MULTİMASTER bir sistemdir rs485 gibi 1 master birçok slave mantığı yoktur.
sizin master dediğiniz hehrangi bir noddur .herhangi bir nod İD Sİ 20 olanla konuşur. ID si 20 olanda isterse IDsi bilmem kaçla konuşur
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: M_B - 30 Eylül 2016, 17:14:53
Teşekkürler hocam.
Verdigim ornek anlaşılsın diye o şekilde tarif ettim. Dediğiniz gibi multimaster bir yapıda çalışıyor.
İşlemci olarak 18f4580 kullanıyorum. Takıldığı yer üzerinde çalıştığım kısım filtreleme. Filtreleme dokümanının tam kavrayamadim da.
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 30 Eylül 2016, 17:40:05
filtreleme şöyle çalışıyor. Filtre önemli değil ona uygulanan mask önemli .
Nasıl yani;
filtre binary olarak yazarsak;
1001 0100 1100 1001
maskta;
1111 0000 0000 0011
maskın 1 olduğu yer önemlidir yani gelen hangi mesaj kabul edilir;
1001 xxxx xxxx xx01

Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: M_B - 30 Eylül 2016, 17:45:18
Alıntı yapılan: skara1214 - 30 Eylül 2016, 17:40:05
filtreleme şöyle çalışıyor. Filtre önemli değil ona uygulanan mask önemli .
Nasıl yani;
filtre binary olarak yazarsak;
1001 0100 1100 1001
maskta;
1111 0000 0000 0011
maskın 1 olduğu yer önemlidir yani gelen hangi mesaj kabul edilir;
1001 xxxx xxxx xx01


Hocam biraz daha aciklayabilirmisiniz.


mesaj birleştirme:: 30 Eylül 2016, 17:50:00

Hocam bu duruma gore 1/2/3 numaralı id leri alır onun dışındakileri almaz. Doğru mu?
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: skara1214 - 30 Eylül 2016, 17:59:16
hocam verdiğim örnekte id16 bit kabul ettim normalde(standart ,extended değil) 11 bittir tam olarak doğru bir örnek vermek gerekirse;
receiver bufferin ID si:    111 1111 0110 olsun
bu receive buffera uygulanan maskta : 000 1001 1001 olsun
bu receiver buffer bu mask bu id ile kabul edeceği id ;
xxx 1xx1 0xx0 dır
yani sadece 0. 3. 4. ve 7. biti karşılaştırılır. Geri kalan bitlerin hiçbir önemi yoktur.  yani Maskta 1 olan bit ciddiye alınır.
bu sistemde;
0.biti 0 3. biti 0 4. biti 1 7.  biti 1 olan mesaj kabul edilir. geri kalan bitlerin önemi yoktur. bu 4 çakışma tam anlamıyla olmazsa o mesaj ciddiye alınmaz
Başlık: Ynt: STM32F4 CAN BUS ÇALIŞMASI
Gönderen: 1n4001 - 03 Ekim 2016, 08:25:57
CANBus'ta filtreleme işi almak istediğiniz ID'nin / ID'lerin maskelenmesi ile yapılıyor.
http://www.cse.dmu.ac.uk/~eg/tele/CanbusIDandMask.html (http://www.cse.dmu.ac.uk/~eg/tele/CanbusIDandMask.html)
adresinde örnekler var. İsterseniz birden fazla ID'yi de maskeleme yapabilirsiniz.