31 Aralık 2023 Pazar

CAN Bus Temel Özellikler, Avantajları ve Dezavantajları

Temel Özellikler

  • Bükümlü çift yapısında iki kablo
  • Hat baş ve sonra 2 direnç ile sonlandırılır
  • ~40 metre kablo için 1 Mbps veri iletim hızı vardır
  • Bir mesaj paketinde azami 8 byte veri gönderilir
  • Mesaj gönderme alma prosedürü hatalara dirençli (robust) bir şekilde çalışır
  • Mesaj ID'sine göre önceliklendirme yapısı vardır
  • İki sistem aynı anda mesaj paketi iletmek istese bile ID önceliklendirme yapısı hatayı engeller
  • Mesajlar hat üzerindeki tüm sistemlere iletilir
  • Mesaj iletilmeme durumunda yeniden gönderme yapısı CAN kontrolcüsü üzerinde gerçekleştirilir
  • Sabit/Sürekli bir hata durumunda CAN kontrolcüsü kendini belli durumlarda durdurur

Avantajlar

  • Düşük kablolama karmaşıklığı
  • Araç kablolama işlemlerinde kolaylık
  • Hatta yeni bir sistem eklemek veya hattan bir sistemi kaldırmakta kolaylık
  • Kapalı bir sistem hattı etkilemez
  • Çoklu yönetici, her bir sistem hatta veri basabilir ve hat üzerinde bulunan veriyi okuyabilir
  • Elektromanyetik yayılımdan etkilenmesi halinde emniyetlidir
  • Hata tespit yapıları vardır
  • Arıza durumunda teşhis ve bakım kolaylıkla yapılır
Dezavantajlar
  • Veri iletişim hızı ~1Mbps hızında sınırlıdır
  • Basit protokollere göre uygulaması daha maliyetlidir
  • Siber ataklara karşı açıktır. Kolaylıkla hatta erişilip veriler manipüle edilebilir




23 Aralık 2023 Cumartesi

CAN Bus Temelleri ve Bir Mesajının Yapısı

CAN (Controller Area Network) Bus Robert Bosch GmbH tarafından oluşturulmuştur. 1986'da RB GmbH tarafından SAE'de yayınlanmıştır. Takip eden yıllarda CAN Bus'ın farklı versiyonları yayınlanmıştır ve ISO tarafından standardize edilmiştir. CAN Bus günümüzde içten yanmalı ve elektrikli bir çok araç tipinde aktif olarak kullanılan ve temel kontrol yetenekleri dolayısı ile sıklıkla tercih edilen bir haberleşme protokolüdür.

CAN Bus, mesaj tabanlı bir haberleşme protokolüdür. Hat üzerinde bulunan bütün noktalar hatta veri basabilir ve veriyi okuyabilir. Fiziksel olarak CANH, CANL şeklinde isimlendirilen iki fiziksel hat üzerinden iletilir. Fiziksel hat üzerinde bulunan voltaj farkı üzerinden çalışır.

CAN Bus ile haberleşen bir ağın fiziksel bağlantısı aşağıdaki gibidir. Bir hat boyunca bir çok sistem bağlanabilir. Her bir sistem ağa mesaj gönderebilir ve okuyabilir.

CAN Bus'a bağlantı için transreceiver yapılarına ihtiyaç duyulur. Mikrodenetleyiciler ile CANH, CANL hatları arasında aşağıdaki gibi transreceiver yapıları kullanılır. Mikrodenetleyiciler tarafında Rx, Tx hatları ile iletişim kurulur.

Aşağıda verilen görselde CANH, CANL hatlarındaki değişim ve bu değişimin CAN Rx ucundaki karşılığını gözlemleyebilirsiniz. CANH, CANL aynı seviyede iken CAN Rx 1'dir. Aksi durumda CAN Rx 0 olur. 0 değeri CAN Bus için baskın bit olarak ifade edilir.

Bir önceki görsel üzerinden CAN Bus mesajını inceleyecek olursak;

  • Start of frame: Bir CAN Bus mesajı 0 biti ile başlar.
  • ID-Arbitration: Takip eden bitler mesaj ID sini ifade eder. Mesaj ID'si aynı zamanda paketin önceliğini de ifade eder. Örneğin aynı anda iki sistem hatta veri basmak isterse CAN Bus'ın önceliklendirme yapısına göre değerlendirilir. Çok basitçe ifade etmek gerekirse Veri gönderimi başladığı anda bir mesajın ID'si ne kadar 0 ile başlarsa o kadar baskındır. Görseldeki sıraya göre "00001xx" ve "00100xx" başlayan iki mesaj paketi gelirken birinci paket önceliklendirilir ve ikinci paketi gönderen sistem gönderimi durdurur.
  • RTR: Remote transmission request olarak geçer. Bir mesaj paketini başka bir sistemden talep etmek için kullanılır.
  • Control: Bu kısımda mesaj ile ilgili ek bilgiler yer alır.
    • IDE: ID Extend olarak geçer. 1 olması durumunda 18 bitlik daha ID kısmı aktif olur. Mesaj paketi toplamda 29 bitle ifade edilir.
    • DLC: Data length code olarak geçer. Mesaj paketinin kaç byte olduğunu ifade eder.
  • Data: Veri aktarma kısmıdır. Kullanıcının iletmek istediği veri tam olarak buradadır.
  • CRC: Veri paketinin doğruluğunu teyit etmek için kullanılır.
  • ACK: Gönderilen paketin en azından bir sistem tarafından alındığını ifade eder. Bu kısım Herhangi bir alıcı sistem üzerinden sürülür. Eğer CAN Bus üzerinde başka bir sistem yoksa bu bit 0 olmaz ve gönderici mesajın iletilemediğini anlar.
  • End of frame: Mesaj paketi sonunda 7 bit 1 gönderilir.

16 Aralık 2023 Cumartesi

Batarya Test Düzeneği ve Meganit LR6 AA alkalin 1.5 Volt Pil Değerlendirmesi @250mA

Çeşitli veri toplama işleri için tasarladığım esdaq ve elektronik yük olarak kullandığım Pratic Load Bank kartlarını kullanarak batarya değerlendirmesi yapabilmek adına bir düzenek ve LabVIEW ortamında demo bir program oluşturdum. Demo programına buradaki link üzerinden erişebilirsiniz (Özel bir amaca tasarlanmadığı için düzen problemleri vardır). Kullandığım pil yuvası da 3D yazıcıdan çıkartılmış bir yuvadır. Düzeneğin bir görseli aşağıda verilmiştir.


Oluşturulan yapının şema gösterimi de aşağıda verilmiştir.


Bu çalışmadaki amaç bataryaların farklı durumlarda gösterdiği davranışı kayıt altına almak ve SoC, SoH gibi hesaplamalar için girdi vermeyi sağlayabilmek.

Öğrendiğim kadarıyla kalem pil diye adlandırdığımız AA boyutta 1.5 V piller 250 mA sabit akımda 0.8 V a kadar geldiği süre üzerinden standard kapasite ölçümü yapılır. Bu şekilde bakınca örneğin 250 mA sabit akıma ayarlanmış bir pil 10 saat boyunca 250 mA akımı sağlarsa 10*250 hesabı üzerinden 2500 mAh kapasiteye sabittir denir.

Aşağıda verilerini paylaştığım pil testinde sabit 250 mA akım altında yaklaşık 6 saatlik bir deney gerçekleştirilmiştir. Pil gerilimi ~6. saatte 800 mV a gelmiştir. Bu verilerin ışığında pilin kapasitesini 6 h*250 mA=1500 mAh olarak hesaplayabiliriz. Bu hesap çekilen akım değerine göre değişecektir. Örneğin testi 500 mA ile yaparsak kapasite <1500 mAh olacaktır. Test 100 mA ile gerçekleştirilirse de kapasite >1500 mAh olacaktır.



İlerleyen süreçlerde farklı pillerin farklı akım değerlerinde testlerini girmeye çalışacağım. Yine de belki işe yarar diye yaptığım testin tüm verisini ham olarak aşağıdaki link üzerinden paylaşıyorum.

Label order: Row ID | Time Stamp (Millisecond) | Voltage (mV) | Current (mA) | Set Current (mA)

Veri seti

12 Aralık 2023 Salı

STM32 Serisi İşlemcilerde Timer/Sayaç Modülünü Interrupt/Kesme Modunda Başlatma #STM32Tips

STM32F ve STM32G serisi mikrodenetleyicilerde Device Configurator Tool ve HAL kütüphanesi ile oluşturulan yazılımlarda timer modülleri için gereken ayarlar yapılır. Bu kapsamda timerların prescaler ve counter period gibi seçenekleri ayarlanır. Bunlarla beraber timer interruptları enable edilir.

Bu şekilde konfigürasyon yapıldıktan sonra kod oluşturulur.

Oluşturulan kodda timer başlatılmamış şekilde bir yapı kullanıcıya sunulur. İlgili timerları interrupt modunda başlatmak için aşağıdaki fonksiyon kullanılır. Bu fonksiyonda altı çizili htimX ilgili timerı ifade eder ve X yerine timer numarası yazılır.

HAL_TIM_Base_Start_IT ( &htimX );

Timerlar için yapılan konfigürasyona göre bu fonksiyonun çağrılma yapısı değişiklik gösterir. Auto-Reload edilmiş bir timer için bu fonksiyonu bir defa çalıştırmak yeterlidir.

Belli bir duruma göze özellikle tetiklenecek bir yapı var ise bu fonksiyon her tetiklemede tekrar çağrılır. Şart değil ancak bu modda genellikle auto-reload disable edilmiştir.



20 Nisan 2023 Perşembe

Otomotivde Pasif ve Aktif Emniyet Kavramları (Active Safety/Passive Safety)

Otomotiv sektörü, araçların güvenliği ve emniyeti için sürekli olarak çalışmaktadır. Bu çalışmalar sonucunda otomotiv sektöründe Pasif ve Aktif Emniyet kavramları ortaya çıkmıştır.

Pasif Emniyet, araç kazası durumunda oluşabilecek zararları en aza indirmeyi amaçlayan bir sistemdir. Aktif Emniyet ise, araç kazasını önlemeyi amaçlayan bir sistemdir.

Pasif Emniyet Sistemleri, araç kazası durumunda yolcuların zarar görme riskini en aza indirmek için tasarlanmıştır. Bu sistemler, araç içi ve dışı güvenlik sistemlerini içerir. Örneğin, araç içi emniyet sistemleri arasında; kemerler, hava yastıkları, koltuk başlıkları, koltuk kemeri hatırlatıcıları, çocuk koltukları ve emniyet kafesleri gibi sistemler bulunur. Araç dışı emniyet sistemleri arasında ise; çarpışma anında aracın enerjisini emen ve yavaşlatan kasa yapısı, kaporta ve önemli parçaların çarpışma sonrası deformasyonu sonucunda yolcuların zarar görmesini önleyen sistemler yer alır.

Aktif Emniyet Sistemleri, araç sürüşü esnasında kazaları önlemek için tasarlanmıştır. Bu sistemler arasında, ABS (Anti-Blokaj Fren Sistemi), ESP (Elektronik Stabilite Programı), akıllı hız kontrolü, şerit takip sistemi, park asistanı ve uzaktan kumandalı acil durum freni gibi sistemler bulunur.

Günümüzde, otomotiv sektörü sürekli olarak Pasif ve Aktif Emniyet sistemlerini geliştirmektedir. Bu sistemler, araçların güvenliği ve emniyeti için çok önemlidir.



2 Nisan 2023 Pazar

Birim Adım Cevabına Göre İkinci Dereceden Sistemlerin Sınıflandırılması

Tabii, şimdi birim adım cevabına göre ikinci dereceden sistemlerin sınıflandırılmasını açıklayan bir blog yazısı yazacağım.

İkinci dereceden sistemler, bir giriş sinyaline karşılık olarak bir çıkış sinyali üreten sistemlerdir. Bu sistemlerin matematiksel modelleri ikinci dereceden diferansiyel denklemlerle ifade edilir. Bu denklemlerin genel formu şöyledir:

adt2d2y+bdtdy+cy=f(t)

Burada, $y$ çıkış sinyalini, $f(t)$ giriş sinyalini, $a$, $b$ ve $c$ ise sistem parametrelerini temsil eder.

İkinci dereceden sistemler, genellikle aşağıdaki şekilde sınıflandırılır:

  • Aşırı sönümlü sistemler (Overdamped Systems):

Bu sistemlerin karakteristik denklemi, gerçel, farklı ve negatif köklere sahiptir. Bu durumda, sistem çıkışı, giriş sinyalinin istenen değerine kararlı bir şekilde yaklaşırken, aşırı sönümlü sistemlerin çıkış sinyali, birkaç kez aşım yapabilir ve daha sonra giriş sinyalinin istenen değerine kararlı bir şekilde yaklaşabilir. Bu sistemler, aşırı sönümlü sistemler olarak adlandırılır.

  • Kritik sönümlü sistemler (Critically Damped Systems):

Bu sistemlerin karakteristik denklemi, çift köklüdür ve bu köklerin değeri eşittir. Bu durumda, sistem çıkışı, giriş sinyalinin istenen değerine kararlı bir şekilde yaklaşırken, kritik sönümlü sistemlerin çıkış sinyali, aşırı sönümlü sistemlerin çıkış sinyalinden daha hızlı bir şekilde istenen değere yaklaşır.

  • Aşırı sönümsüz sistemler (Underdamped Systems):

Bu sistemlerin karakteristik denklemi, karmaşık köklere sahiptir. Bu durumda, sistem çıkışı, giriş sinyalinin istenen değerine kararlı bir şekilde yaklaşırken, aşırı sönümsüz sistemlerin çıkış sinyali, aşırı sönümlü sistemlerin çıkış sinyalinden daha hızlı bir şekilde istenen değere yaklaşırken, sürekli olarak salınır. Bu sistemler, aşırı sönümsüz sistemler olarak adlandırılır.

Bu sınıflandırmalar, sistem davranışının analizi için kullanışlı bir araçtır ve birim adım cevabına göre ikinci dereceden sistemlerin davranışını anlamak için kullanılabilir.


Referans ve Kaynaklar
  1. https://www.quora.com/What-are-over-damped-critically-and-under-damped-systems


31 Mart 2023 Cuma

Pointer Kavramı | C

Pointer, bir değişkenin bellekteki adresini işaret eden bir C programlama dilindeki özel bir veri türüdür. Başka bir değişkenin bellekteki adresini işaret eden bir pointer tanımlamak, bellekteki verilere erişimi ve değiştirilmesini mümkün kılar. Bu, özellikle büyük ve karmaşık veri yapılarıyla çalışırken çok yararlı olabilir.

Örneğin, bir dizideki elemanları değiştirmek istiyorsak, her elemana ayrı ayrı erişmek zorunda kalmayız. Bunun yerine, dizinin ilk elemanının adresini işaret eden bir pointer kullanabiliriz. Bu şekilde, pointer aracılığıyla bellekteki diğer elemanlara erişebilir ve değiştirebiliriz.

Pointer'ın syntax'ı ise şu şekildedir:

Bu kod parçasında, "veri_tipi" pointer tarafından işaret edilen veri tipini belirtirken, "pointer_ismi" ise pointer'ın kendisi için bir isimdir. Örneğin, bir integer tipinde bir pointer tanımlamak istiyorsak şu şekilde yapabiliriz:


Bu kod parçasında, "ptr" bir integer tipinde bir pointer olarak tanımlanır. Bu pointer, bellekteki bir integer değişkenin adresini işaret edebilir. Pointer'lar, işaret ettikleri bellek adresindeki veriye erişmek için dereference (yıldız) operatörü (*) kullanılır. Bu işlem, pointer'ın adresini izleyen bellek bölgesindeki veriyi gösterir. Örneğin, şöyle bir kod yazabiliriz:

Bu kod parçasında, "x" adlı bir integer değişken tanımlarız ve değer olarak "10" veririz. Daha sonra, "ptr" adlı bir integer pointer tanımlarız ve "x" değişkeninin bellekteki adresini işaret ederiz. Son olarak, "printf" fonksiyonunu kullanarak "ptr" pointer'ının işaret ettiği bellek adresindeki veriyi yazdırırız. Bu durumda, "10" çıktısı verir. Pointer'lar, dinamik bellek yönetimi, fonksiyon parametre geçişi ve işaretçi aritmetiği gibi daha ileri seviye programlama konularında da çok önemlidir. Ancak, temel kullanımlarını anladıktan sonra, bu konulara geçmek daha kolay olacaktır.

Basit bir gösterin olarak aşağıdaki görseli ele alalım. Burada tanımlanan pointer belleğin 2047 numaralı adresindedir. Pointer içerisinde 1001 değerini tutar. Bu noktada bir "ptr" ifadesine "*" operatörü ile eriştiğimizde "*ptr" geri dönüş değeri olarak 50 değerine ulaşırız.



STM32 HAL Kütüphanesinde Başlangıçtan Sonra IO Pinin Yönünü/Direction Değiştirme #STM32Tips

STM32 HAL kütüphanesinde, başlangıç sonrasında bir GPIO pininin yönünü kolayca değiştirebilecek bir fonksiyon doğrudan sağlanmamaktadır. Bu ...