Batarya yönetim sistemi kartım RS485 üzerinden STM32 ile iletişim sağlayamıyor.

sezear07

Üye
Katılım
20 Haziran 2024
Mesajlar
21
Merhaba, SEPLOS marka batarya yönetim sistemi kartım var ve bu karttan sıcaklık ve voltaj verilerini okumak istiyorum. Başlangıçta, RS485 üzerinden SEPLOS batarya yönetim sistemi kartından veri okumak için bir STM32F407VGT6 kartı kullanacağım. Veriyi almak için önce komutları gönderiyorum ancak veri gönderiliyor olmasına rağmen okuma işlemini gerçekleştiremiyorum. Sizce bu sorunun nedeni ne olabilir?

Aşağıda göndereceğim PDF dosyasında SEPLOS marka batarya yönetim sisteminden verileri RS485 üzerinden nasıl okumam gerektiğine dair bilgi sayfası bulunmaktadır. Nerede hata yaptığımı bulmak için lütfen PDF'ye ve koduma bakın.

Cevaplarınız için teşekkür ederim.



WhatsApp Görsel 2024-06-20 saat 21.37.12_9c1a0877.jpg
WhatsApp Görsel 2024-06-20 saat 21.37.12_c44ef19d.jpg


WhatsApp Görsel 2024-06-20 saat 21.37.12_d9796b56.jpg
 

Ekler

  • SEPLOS BMS Communication Protocol_V2.0 (1).pdf
    347.4 KB · Görüntüleme: 72
Son düzenleme:
1- Verinin yollandığını nasıl doğruladın? USB RS485 in mi var? Var ise aynı şekilde bilgisayardan data yolladığında tepki alabiliyor musun?
2- Blocking modda uart transmit belki kullanılabilir, ama receive genel anlamda çok mantıklı değil. Belki de yolluyor ama sizin receive doğru çalışmıyordur. Bunu doğruladın mı? Usb RS485 in var ise bilgisayar ile 407yi haberleştirmeyi dene istersen.
3- Hatırladığım kadarıyla F4 lerin 485için hardware direction seçeneği yoktu, yazılımsal olarak yapman gerekir bu işi bu durumda ama herhangi bir yön değişimi göremiyorum kodda, auto direction transciever mı kullanıyorsun?
 
yollandığını nasıl doğruladın? USB RS485 in mi var?
Merhaba cevabınızın için çok teşekkür ederim.

-Evet RS485 için TTL MAX485 modülü kullanıyorum stm ile bms arasında ve live expression dan veriler okunuyor mu oknmuyor mu diye kontrol ediyorum.

-Normal modda uartı transmitt işlemi yapıyorum transmit işlemini başarılı bir şekilde gerçekleştirebiliyorum pdf'teki datasheete göre fakat receive'de herhangi bir bilgi gelmiyor. Zaten SEPLOS marka batarya yönetim sistemine içeriden müdahale edemiyorum sadece GATEWAY kartları veya stm ile komut gönderip gönderilen komuta göre veri alabiliyorsun

-Aynı zamanda SEPLOSUN kendi programından bütün verileri usb-rs485 üzerinden okuma yapabiliyorum ama benim amacım stm ile okuma yapabilmek çünkü stm ile okuma yaptıktan sonraki amacım inverter ile bms arasında veri haberleşmesini sağlayabilmek. o yüzden stm den veri okuyabilmem benim için çok önemli.

-3. soruyu tam olarak olarak anlamadım normalde uart üzerinden veri alışverişi olduğu için farklı bir ayar yapmamız gerekir mi?
 
RS485 fiziksel bir katman, ve senin alıcı mı verici mi olduğunu transciever a söylemen gerekiyor, eğer bunu otomatik yapan türden değilse. Şu an söylüyor musun bunu? Transceiver ın ne? Stm ile usb-rs485 iki yönlü haberleşebiliyor mu
 
RS485 fiziksel bir katman, ve senin alıcı mı verici mi olduğunu transciever a söylemen gerekiyor, eğer bunu otomatik yapan türden değilse. Şu an söylüyor musun bunu? Transceiver ın ne? Stm ile usb-rs485 iki yönlü haberleşebiliyor

Benim bağlantım şu şekilde Bilgisayardan bir usb kablosu debug için stme bağlı stmin transciever ve receive bacakları MAX485in pin A ve pin B bacakları ile veriler taşınıp ardından seplos marka bms içerisindeki 485 donanımı ile mikrodenetleyiciye veriler gönderilip alınıyor. Burada datasheetteki telemetry verilerini stm ile bmse komut gönderip ardından bu veriler otomatik olarak stm de okuma yapmam gerekiyor. sizin söylediğiniz gibi otomatik veya manuel bir ayar yapmadım yapmam gerekiyorsa öncelikle hangi kısıma dikkat etmem gerekiyor
 
Max485 te receive ve transmit için aktifleştirmen gereken pinler bulunuyor. Bunu transmit yaptığında atıyorum low yapman gerekiyor ise receive moda gectiğinde ise high yapmanız gerekıyor. Bunları bildiğinizi farz ediyorum ve buradaki sorun transmit moddan receive moda gecişte kaybedilen zaman olabilir. O kaybedilen zamanda receive verisini kaçırıyor olabilirsiniz. Diğer bir husus ise bu durumu max485 in arduino için geliştirlen modüllerinde deneme yapıyorsanız ve hatta birden fazla slave rs485 modülü var ise bu veri kaybı sorunlarını yaşamanız normaldir . Bu durumu çözmek için bir endüstiyel rs485 modülü kullanmanızı tavsiye ederim ve test ettikten sonra doğru donanım seçimi yapabilirsiniz. Diğer bir öneri ise bana göre uart işlemlerini dma ile çok daha sağlıklı yapabileceğinizi belirtmek isterim.
 
Son düzenleme:
bms üzeerinde 120R direnç var mı?
Senin devrende120R var mı?
Rs485 hattının her iki ucunda da 120R olması gerekli.

-Evet RS485 için TTL MAX485 modülü kullanıyorum stm ile bms arasında ve live expression dan veriler okunuyor mu oknmuyor mu diye kontrol ediyorum.
Hayır bu yanlış. Bms ile devre arasındaki hatta usb-485 dönüştürücü bağlayıp, dönüştürücü üzerinden haberleşmeyi gör. Devren doğru mesajı gönderiyor mu? Gönderiyorsa Bms yanıt veriyor mu?

Birde ekran görüntüsü olarak kod paylaşmayın, forumda kod olarak paylaşın
 
Max485 te receive ve transmit için aktifleştirmen gereken pinler bulunuyor. Bunu transmit yaptığında atıyorum low yapman gerekiyor ise receive moda gectiğinde ise high yapmanız gerekıyor. Bunları bildiğinizi farz ediyorum ve buradaki sorun transmit moddan receive moda gecişte kaybedilen zaman olabilir. O kaybedilen zamanda receive verisini kaçırıyor olabilirsiniz. Diğer bir husus ise bu durumu max485 in arduino için geliştirlen modüllerinde deneme yapıyorsanız ve hatta birden fazla slave rs485 modülü var ise bu veri kaybı sorunlarını yaşamanız normaldir . Bu durumu çözmek için bir endüstiyel rs485 modülü kullanmanızı tavsiye ederim ve test ettikten sonra doğru donanım seçimi yapabilirsiniz. Diğer bir öneri ise bana göre uart işlemlerini dma ile çok daha sağlıklı yapabileceğinizi belirtmek isterim.

Evet haklısınız hatalardan biri bu olması lazım transmitt yaparken RE VE DE bacakları VCC pinine bağlı olması gerekirken receive yaparken RE ve DE BACAKLARI GND ye çekilmesi lazım fakat asıl sorum şu ben STM den hem transmitt hem de receive yapmam gerekiyor bu durumda MAX485 modulünü nasıl kullanabilirim?

Transmitt moddan receive moda geçiste kaybedilen zamandan kastınız tam olarak nedir? Daha ayrıntılı açıklayabilir misiniz

Birden fazla slave cihaz kullanmıyorum ama dediğiniz gibi DMAyı bu HAL_UARTEx_ReceiveToIdle_DMA(&huart1, RxData, sizeof(RxData)); fonksiyonda kullanmak hattın boşa düştüğü zaman verileri çekmesini ve veri boyutu bilinmese bile daha doğru bir şekilde receive işlemini gerçekleştirebilir. Bu işlemi hala denemedim ama umarım sorunlar bu iki kısımdan kaynaklanıyordur
 
bms üzeerinde 120R direnç var mı?
Senin devrende120R var mı?
Rs485 hattının her iki ucunda da 120R olması gerekli.

-Evet RS485 için TTL MAX485 modülü kullanıyorum stm ile bms arasında ve live expression dan veriler okunuyor mu oknmuyor mu diye kontrol ediyorum.
Hayır bu yanlış. Bms ile devre arasındaki hatta usb-485 dönüştürücü bağlayıp, dönüştürücü üzerinden haberleşmeyi gör. Devren doğru mesajı gönderiyor mu? Gönderiyorsa Bms yanıt veriyor mu?

Birde ekran görüntüsü olarak kod paylaşmayın, forumda kod olarak paylaşın

Evet 120R direncim bulunmaktadır.

-Hayır bu yanlış. Bms ile devre arasındaki hatta usb-485 dönüştürücü bağlayıp, dönüştürücü üzerinden haberleşmeyi gör. Devren doğru mesajı gönderiyor mu? Gönderiyorsa Bms yanıt veriyor mu?

söylemek istediğiniz şey ilk başta bilgisayarın arasına usb-485 dönüştürücü kullanıp bms ile haberleşip haberleşmediğini mi kontrol etmem gerektiğini söylüyorsunuz?
 
Şu anda Re ve De high da kaldığı için her durumda sen transmit/receive arasında bir geçiş yapamıyorsun, o kısmı 3V3 e değilde bir pine götüreceksin sonrasında ise pinin durumunu ayarlayacaksın. Transmit edeceğinde transmit moda geç, sonrasında hep dinle. Sen bunu software da çözdüğünde 1uS altında pin togglelanır, iletişim hızın düşük snaırım yanı çalışır. 120ohm şart değil inanmayan söksün kısa mesafede denesin düşük hızlarda iletişim devam edecek, o yüzden buradaki hatanın termination bazlı olduğunu düşünmüyorum. Hattı biaslamak gerekebiliyor, max485 eski bir transceiver sanırım kendi içinde bias ı yoktur ama modül kullanıyorsun sanırım onun içinde vardır bu kısım o yüzden orada da hata yok gibi. Sadece 3V3 e giden bacakları sök, bir gpio ya bağla. Transmit işlevini blocking olarak yap istersen, ama receive işlemini dma ya bağla bence.
 
Şu anda Re ve De high da kaldığı için her durumda sen transmit/receive arasında bir geçiş yapamıyorsun, o kısmı 3V3 e değilde bir pine götüreceksin sonrasında ise pinin durumunu ayarlayacaksın. Transmit edeceğinde transmit moda geç, sonrasında hep dinle. Sen bunu software da çözdüğünde 1uS altında pin togglelanır, iletişim hızın düşük snaırım yanı çalışır. 120ohm şart değil inanmayan söksün kısa mesafede denesin düşük hızlarda iletişim devam edecek, o yüzden buradaki hatanın termination bazlı olduğunu düşünmüyorum. Hattı biaslamak gerekebiliyor, max485 eski bir transceiver sanırım kendi içinde bias ı yoktur ama modül kullanıyorsun sanırım onun içinde vardır bu kısım o yüzden orada da hata yok gibi. Sadece 3V3 e giden bacakları sök, bir gpio ya bağla. Transmit işlevini blocking olarak yap istersen, ama receive işlemini dma ya bağla bence.

Çok teşekkür ederim söylediğiniz gibi deneyeceğim
 
Çok teşekkür ederim söylediğiniz gibi deneyeceğim
Usb rs485 in çok ucuz versiyonları var şu an kontrol etmedim ama 80 lira falandır, bu hızlarda iş yapar elinde yoksa ondan al bir tane. Termite, hterm gibi bir program kullanarak bilgisayar ile haberleş rs485den öyle emin olabilirsin çalıştığından. Bu konularda internette pek türkçe kaynak yok, takıldığın noktalarda ingilizce ararsan gerek ST nin forumlarında gerek başka forumlarda bolca konuşma mevcut
 
Evet 120R direncim bulunmaktadır.

-Hayır bu yanlış. Bms ile devre arasındaki hatta usb-485 dönüştürücü bağlayıp, dönüştürücü üzerinden haberleşmeyi gör. Devren doğru mesajı gönderiyor mu? Gönderiyorsa Bms yanıt veriyor mu?

söylemek istediğiniz şey ilk başta bilgisayarın arasına usb-485 dönüştürücü kullanıp bms ile haberleşip haberleşmediğini mi kontrol etmem gerektiğini söylüyorsunuz?

Her iki uçta da birer adet 120R var değil mi? Bakın bu olay önemli, hat üzerinde 3 adet olursa haberleşemezsiniz.

Demek istediğim şu, Bms ile devrenizi birbirine bağlayın. Ayrıca 3. olarak usb-485i de bu hatta bağlayın. Devrenizden bms e giden ve gelen mesajları usb üzerinden izleyin. Veriler bozuluyor mu? Devreden bms'e doğru mesaj gidiyor mu? Bms doğru cevabı veriyor mu?

Sizin mevcutta kritik hatanız RE/DE bağlantısı şuan için
 
Usb rs485 in çok ucuz versiyonları var şu an kontrol etmedim ama 80 lira falandır, bu hızlarda iş yapar elinde yoksa ondan al bir tane. Termite, hterm gibi bir program kullanarak bilgisayar ile haberleş rs485den öyle emin olabilirsin çalıştığından. Bu konularda internette pek türkçe kaynak yok, takıldığın noktalarda ingilizce ararsan gerek ST nin forumlarında gerek başka forumlarda bolca konuşma mevcut

Benim anlamadığım noktalardan birisi neden USB-RS485 modülü kullanıyorsunuz bunun amacı bilgisayardan verileri direkt okumak için kullanılmıyor mu? Ben SEPLOS marka Batarya Yönetim Sisteminin kendi PC programından USB-RS485 üzerinden batarya paketlerinin gerilimleri veya sıcaklıklarını okuyabiliyorum ama benim amacım işi en basite indirip ilk başta veriyi RS485 ile oku eğer okuma işleminde bir problem yoksa CAN BUS hattını kullanarak invertör ile bms arasında haberleşmeyi sağlamak. bu yüzden stm kullanıyorum çünkü invertör ve bms arasına GATEWAY kartı tasarlamam gerekiyor bunun için stm mikrodenetleyicisini kullanacağım.
 
Her iki uçta da birer adet 120R var değil mi? Bakın bu olay önemli, hat üzerinde 3 adet olursa haberleşemezsiniz.

Demek istediğim şu, Bms ile devrenizi birbirine bağlayın. Ayrıca 3. olarak usb-485i de bu hatta bağlayın. Devrenizden bms e giden ve gelen mesajları usb üzerinden izleyin. Veriler bozuluyor mu? Devreden bms'e doğru mesaj gidiyor mu? Bms doğru cevabı veriyor mu?

Sizin mevcutta kritik hatanız RE/DE bağlantısı şuan için

Evet her iki ucunda paralel bir şekilde 120R lik bir direnç bulunmaktadır. Ama dediğiniz gibi ilk göze çarpan hatalardan birisi RE/DE bağlantısı. Umarım sadece hata bu kısımdan kaynaklanıyordur.
 
Evet haklısınız hatalardan biri bu olması lazım transmitt yaparken RE VE DE bacakları VCC pinine bağlı olması gerekirken receive yaparken RE ve DE BACAKLARI GND ye çekilmesi lazım fakat asıl sorum şu ben STM den hem transmitt hem de receive yapmam gerekiyor bu durumda MAX485 modulünü nasıl kullanabilirim?

Transmitt moddan receive moda geçiste kaybedilen zamandan kastınız tam olarak nedir? Daha ayrıntılı açıklayabilir misiniz

Birden fazla slave cihaz kullanmıyorum ama dediğiniz gibi DMAyı bu HAL_UARTEx_ReceiveToIdle_DMA(&huart1, RxData, sizeof(RxData)); fonksiyonda kullanmak hattın boşa düştüğü zaman verileri çekmesini ve veri boyutu bilinmese bile daha doğru bir şekilde receive işlemini gerçekleştirebilir. Bu işlemi hala denemedim ama umarım sorunlar bu iki kısımdan kaynaklanıyordur
Attığın resimdeki devreni inceledim . Bu düştüğün hatanın aynısına bende düştüm . Ve sorunun basit max485 dönüştürücüsünde olduğunu farkettim . Sen bu devrede rx-tx yaparken okuma ve dinleme pinlerini işlemciye high-low yaptırıyorsun bu işlemler sırasında rx moda geçerken bir sorun alınıyor nedenini bilmiyorumve inceleyecek zamanım yoktu. Eğer aşağıdaki linkteki ürüne bakarsan bu ürünü aldıktan sonra high-low işleri ile ilgilenmiyorsun , içerisindeki entegre bunu kendisi yapıyor ve bu şekilde tüm sorunlarım çözüldü. Denemeni tavsiye ederim. Sorunu şuanki devren ile Bu sefer çözsen bile başka bir anda timing(high-low) olayını ayarlayamazsan yine hataya düşebilirsin. Ve dma yı mutlaka öğrenip uygula .Çok şey kazanacaksın.
Aşağıdaki linkteki ürün rs232-rs485 dönüştürücü bunun içinde bir ttl-rs232 dönüştürücüsne ihtiyac duyabilirsin , Sorunun çözüldüğünü göreceksin . Daha sonra donanımını revize edebilirsin.

https://www.direnc.net/rs232-rs485-cevirici

.
 
Attığın resimdeki devreni inceledim . Bu düştüğün hatanın aynısına bende düştüm . Ve sorunun basit max485 dönüştürücüsünde olduğunu farkettim . Sen bu devrede rx-tx yaparken okuma ve dinleme pinlerini işlemciye high-low yaptırıyorsun bu işlemler sırasında rx moda geçerken bir sorun alınıyor nedenini bilmiyorumve inceleyecek zamanım yoktu. Eğer aşağıdaki linkteki ürüne bakarsan bu ürünü aldıktan sonra high-low işleri ile ilgilenmiyorsun , içerisindeki entegre bunu kendisi yapıyor ve bu şekilde tüm sorunlarım çözüldü. Denemeni tavsiye ederim. Sorunu şuanki devren ile Bu sefer çözsen bile başka bir anda timing(high-low) olayını ayarlayamazsan yine hataya düşebilirsin. Ve dma yı mutlaka öğrenip uygula .Çok şey kazanacaksın.
Aşağıdaki linkteki ürün rs232-rs485 dönüştürücü bunun içinde bir ttl-rs232 dönüştürücüsne ihtiyac duyabilirsin , Sorunun çözüldüğünü göreceksin . Daha sonra donanımını revize edebilirsin.

https://www.direnc.net/rs232-rs485-cevirici

.

Cevabın için çok teşekkür ederim. Evet farklı bir modül kullanmam daha iyi olacak. Aldığım modül basit bir yapıya sahip ve sorun sadece high low yapmamdan daha farklı bir problem olabilir.
 
Usb rs485 kullan diyorum çünkü kontrollü bir test yapman lazım. Stm nin rs485den yollayıp alabildiği üstüne kabaca bir denet tasarlaman uygulaman lazım, buna deney değil de test diyoruz tabiki. Bu testin sonucunda evet stm nin rs485i çalışıyor, seplos un da çalışıyor sonucuna vardığında sistem entegrasyon yapacaksın, yani seplos ile stm haberleşecek. Neden usb rs485 dersen kullanımı kolay ve ucuz, yoksa bir scop ile de yapılıyor aynı iş.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,950
Mesajlar
118,747
Üyeler
2,822
Son üye
lalemasall

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top