STM32F4 ve OBDII

Başlatan ArifAhmet, 21 Temmuz 2014, 15:18:50

ArifAhmet

Merhabalar. Stm32f4 kullnarak arabadaki sensörleri OBDII üzerinden okumak istiyorum. Bunun için internette ne örnek nede kütüphane bulabildim. Yardımcı olabilecek birileri varmı?
İyi çalışmalar.
Yaşasın Open Source!

Mucit23

CanBus Haberleşmesi yapacaksın. Bu konuda araştırma yapman gerekiyor.

İnternette bir dünya örnek ve kod var.
Bu link yeterli
https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fSTM32Discovery%2fSTM32F4%20DISCOVERY%20CAN%20bus%20controller%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=6126

STM32F407'nin içerisinde CAN interface modülü var. Bu modülün RX ve TX çıkışlarına Can TransReciever Çipi bağlaman gerekir.

Yukarıda verdiğim linkte Bu modül kullanılarak CAN haberleşmesi yapılmaya çalışılmış. Can TransReciever Çipi olarakda AMIS30663 kullanılmış. Bunun yine Microchip'in MCP2551 Çipide kullanılabilir.

Eğer Donanım konusunda sıkıntın var ise ilk önce CANBUS haberleşmesi için hangi donanım kurulması gerekiyor onu öğren. Yazılımı halledersin.


ArifAhmet

Alıntı yapılan: Mucit23 - 21 Temmuz 2014, 15:40:00
CanBus Haberleşmesi yapacaksın. Bu konuda araştırma yapman gerekiyor.

İnternette bir dünya örnek ve kod var.
Bu link yeterli
https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fSTM32Discovery%2fSTM32F4%20DISCOVERY%20CAN%20bus%20controller%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=6126

STM32F407'nin içerisinde CAN interface modülü var. Bu modülün RX ve TX çıkışlarına Can TransReciever Çipi bağlaman gerekir.

Yukarıda verdiğim linkte Bu modül kullanılarak CAN haberleşmesi yapılmaya çalışılmış. Can TransReciever Çipi olarakda AMIS30663 kullanılmış. Bunun yine Microchip'in MCP2551 Çipide kullanılabilir.

Eğer Donanım konusunda sıkıntın var ise ilk önce CANBUS haberleşmesi için hangi donanım kurulması gerekiyor onu öğren. Yazılımı halledersin.



CAN Bus ile haberleştiğini biliyorum ama şöyle bi sorun var. Ben can bus yapısını öğrenince direkt olarak istediğim veriyi obdII portundan okuyabilecekmiyim. Yani durum nasıl olacak?
Yaşasın Open Source!

Mucit23

Tam olarak bende bilmiyorum ama tahimince yaptığın cihazı arabanın OBD2 portuna bağlayınca Hızlı birşekilde Datalar gelmeye başlayacaktır.
Can bus veri yapısını bilmek gerekiyor. Aşağıdaki resimde güzel bir şekilde anlatılmış.

Can bus veri paketinin başında 11Bit uzunluğunda tanımlayıcı bulunur. Yukarıda yeşil ile renklendirilmiş kısım bu tanımlayıcıdır.
Tanımlayıcı bi anlamda mesajı gönderen kişinin kimliğidir. Bu kimliğin hangi sensöre ait olduğunu sen kendin tespit etmelisin.

ArifAhmet

Alıntı yapılan: Mucit23 - 21 Temmuz 2014, 16:12:09
Tam olarak bende bilmiyorum ama tahimince yaptığın cihazı arabanın OBD2 portuna bağlayınca Hızlı birşekilde Datalar gelmeye başlayacaktır.
Can bus veri yapısını bilmek gerekiyor. Aşağıdaki resimde güzel bir şekilde anlatılmış.
(Resim gizlendi görmek için tıklayın.)
Can bus veri paketinin başında 11Bit uzunluğunda tanımlayıcı bulunur. Yukarıda yeşil ile renklendirilmiş kısım bu tanımlayıcıdır.
Tanımlayıcı bi anlamda mesajı gönderen kişinin kimliğidir. Bu kimliğin hangi sensöre ait olduğunu sen kendin tespit etmelisin.

İşte, OBDII'nin tam çlışma yapısını bilmeden birşeyler yapamıyorum. Ama veriler hemen gelmiyor diye biliyorum. PID denen verileri yolluyoruz onlar bize ilgili sensördeki veriyi geitiriyor.
Yaşasın Open Source!

CLR

obdII'de sadece can bus yok, değişik K-line,PWM vs. protokollerde var, önce hangi araçla ve o araç hangi protokolü kullanıyor bilmen lazım, aşağıdakilerden biri olacaktır. Eğer araç 2003 veya daha yeni ise muhtemelen can bus ile SAE J1939' protokolünü kullanıyordur. Bu protokolde araç içindeki her modülün bir ID'si ve struct yapısı var, o yapıya göre data basmak ve almak gerekir. SAE J1939 ilgili microchip notları ve projesi var inceleyebilirsin. SAE J1939 protokol kitabı satın alırsan veya free bulursan(biraz zor olabilir) daha detaylı inceleyebilirsin ama kek bir proje değildir biraz uğraştırabilir(yani bir kaç ay). 

ISO 9141-2
KWP 2000-4
SAE J1850 PWM
SAE J1850 VPW
ISO 15765-4 (CAN 11-bit & 29-bit)
SAE J1939
Knowledge and Experience are Power

cuneytatay

Hazır OBDII modül alarakta bu işi daha basit şekilde halledebilirsin. Bu şekilde sadece rs232 deki at komutlarıyla ilgilenirsin.

muhittin_kaplan


ArifAhmet

Alıntı yapılan: cuneytatay - 22 Temmuz 2014, 13:37:35
Hazır OBDII modül alarakta bu işi daha basit şekilde halledebilirsin. Bu şekilde sadece rs232 deki at komutlarıyla ilgilenirsin.
Evet onu düşünüm. Sparkfun'ın aruino için CAN BUS sehield'i var ama ben bu shieldi ARM'da nasıl kullanacağım bilmiyorum. Yani bu sheild benimle SPI üzerindenmi haberleşiyor? yada bunun haberleşme şekli nedir, nasıldır?

Alıntı yapılan: muhittin_kaplan - 22 Temmuz 2014, 15:28:07
elm327

Bunuda duydum ama üstüne pek düşmedim.
Yaşasın Open Source!

Mucit23

Alıntı yapılan: ArifAhmet - 22 Temmuz 2014, 17:44:43
Evet onu düşünüm. Sparkfun'ın aruino için CAN BUS sehield'i var ama ben bu shieldi ARM'da nasıl kullanacağım bilmiyorum. Yani bu sheild benimle SPI üzerindenmi haberleşiyor? yada bunun haberleşme şekli nedir, nasıldır?

Arduino için yapılmış benzer bir modül bendede var.

Haberleşme şekli modülün üzerindeki çipe göre değişiyor.
mesela bende bu modülden var.
http://www.seeedstudio.com/wiki/CAN-BUS_Shield
Üzerinde MCP2515 Var. CanBus ile ilgili bütün işlemleri bu tek başına yapıyor. Sen sadece SPI'dan mesaj gönderip alıyorsun.

Ama STM32'lerin içerisinde bu enteğrenin yaptığı işi yapan modül zaten var. Çipin içinde böyle bir modül varken ekstradan böyle bir enteğre kullanmaya gerek yok.  STM32'nin CAN_RX ve CAN_TX çıkışlarına  MCP2551 CAN transceiver bağladınmı tamamdır.

ArifAhmet

Alıntı yapılan: Mucit23 - 22 Temmuz 2014, 17:56:41
Arduino için yapılmış benzer bir modül bendede var.

Haberleşme şekli modülün üzerindeki çipe göre değişiyor.
mesela bende bu modülden var.
http://www.seeedstudio.com/wiki/CAN-BUS_Shield
Üzerinde MCP2515 Var. CanBus ile ilgili bütün işlemleri bu tek başına yapıyor. Sen sadece SPI'dan mesaj gönderip alıyorsun.

Ama STM32'lerin içerisinde bu enteğrenin yaptığı işi yapan modül zaten var. Çipin içinde böyle bir modül varken ekstradan böyle bir enteğre kullanmaya gerek yok.  STM32'nin CAN_RX ve CAN_TX çıkışlarına  MCP2551 CAN transceiver bağladınmı tamamdır.

Benim elimde şu var; http://skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html Şimdi deiğinize göre stm32f4'e bunun mosi, miso bacaklarını bağlarsak herşey çok kolay olacak. Peki bu bize sürekli verimi aktaracak yoksa bizmi isteyecez. İsteyeceksek neye göre?
Yaşasın Open Source!

Mucit23

Sana sürekli veri akacak ihtimal. Ama bende hiç araç üzerinde deneme yapmadım. Tahmin ediyorum sadece.

ArifAhmet

İnternette bir tane bile örnek bulamadım. Deneme yanılma yapacaz galiba. Ama sürekli veri aktaracağını sanmıyorum. Çünkü PID denen bir olay var.
Yaşasın Open Source!

CLR

Yukarıda yazmıştım ama çok önemsemedin galiba, hangi aracın obd2 portu ile heberleşeceksin(VW, opel vs) , kaç model ? Hangi protokolü kullanıyor? bunları bilmeden deneme yanılma ile birşey bulamazsın.
sae j1939 can protokolü ise ki şuan birçok araç onu kullanıyor pic serisi için örnek var o referans olacaktır.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en020237

Knowledge and Experience are Power

ArifAhmet

Alıntı yapılan: CLR - 22 Temmuz 2014, 18:47:32
Yukarıda yazmıştım ama çok önemsemedin galiba, hangi aracın obd2 portu ile heberleşeceksin(VW, opel vs) , kaç model ? Hangi protokolü kullanıyor? bunları bilmeden deneme yanılma ile birşey bulamazsın.
sae j1939 can protokolü ise ki şuan birçok araç onu kullanıyor pic serisi için örnek var o referans olacaktır.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en020237



Ben sadece ISO 15765-4 ile haberleşeceğim.
Yaşasın Open Source!