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.



24 Ağustos 2022 Çarşamba

Unit Step Response (Birim Adım Cevabı)

Birim adım cevabı (step response), kontrol sistemlerinin dinamik performansını analiz etmek için önemli bir araçtır. Bu cevap, bir kontrol sistemi için birim adım girdisi (step input) uygulandığında, çıkışın nasıl davrandığını tanımlar. Birim adım girdisi, zamanda sıfır olan bir girdi sinyalidir ve zaman sıfırından sonra aniden bir değer alır. Bu nedenle, birim adım cevabı, kontrol sistemi çıkışının zamana bağlı olarak nasıl değiştiğini gösterir.

Birim adım cevabı, bir kontrol sistemi tasarlarken veya bir kontrol sistemi için performans değerlendirmesi yaparken çok önemlidir. Birim adım cevabı, kontrol sistemi çıkışının kararlılık, hız ve doğruluk gibi özelliklerini analiz etmek için kullanılır.

Birim adım cevabının analizi, bir dizi anahtar kelimeyi içerir. Bunlar arasında, kararlılık (stability), hız (speed), doğruluk (accuracy), yükselme zamanı (rise time), kararlı durum hatası (steady-state error), durulma süresi (settling time), aşım (overshoot) ve zirve zamanı (peak time) yer alır.

Kararlılık, bir kontrol sisteminin istikrarlı olup olmadığını ifade eder. Birim adım cevabı, bir kontrol sisteminin kararlılık özelliğini analiz etmek için kullanılır. Eğer birim adım cevabı kararlı bir çıkış sağlıyorsa, kontrol sistemi kararlıdır.

Hız, bir kontrol sisteminin ne kadar hızlı cevap verdiğini ifade eder. Birim adım cevabı, bir kontrol sisteminin hız özelliğini analiz etmek için kullanılır. Yükselme zamanı, bir kontrol sisteminin belirli bir yüzde değerindeki çıkışa ne kadar sürede ulaştığını ifade eder. Birim adım cevabı, yükselme zamanını belirlemek için kullanılır.

Doğruluk, bir kontrol sisteminin ne kadar doğru çalıştığını ifade eder. Birim adım cevabı, bir kontrol sisteminin doğruluk özelliğini analiz etmek için kullanılır. Kararlı durum hatası, bir kontrol sisteminin belirli bir yüzde değerindeki istenen çıkışa ulaşamama derecesini ifade eder. Birim adım cevabı, kararlı durum hatasını belirlemek için kullanılır.

Durulma süresi, bir kontrol sisteminin belirli bir yüzde değerindeki çıkışın istenen değere ulaşması için ne kadar süre gerektiğini ifade eder. Birim adım cevabı, durulma süresini belirlemek için kullanılır.

Aşım, bir kontrol sisteminin istenendeğerden fazla çıkmasıdır. Aşım, birim adım cevabı grafiği üzerinde zirve zamanı ve zirve değeri ile belirtilir.

Zirve zamanı, bir kontrol sistemi çıkışının en yüksek değere ne kadar sürede ulaştığını ifade eder. Birim adım cevabı grafiği üzerinde, zirve zamanı aşımın gerçekleştiği zamana denk gelir.

Birim adım cevabı, bir kontrol sistemi tasarlarken veya performansını değerlendirirken kullanılan bir araçtır. Birim adım girdisi uygulandığında, çıkışın nasıl değiştiğini gösterir ve kararlılık, hız ve doğruluk gibi özellikleri analiz etmek için kullanılır.

Kontrol sistemleri tasarımında ve performans analizinde kullanılan diğer anahtar kelimeler arasında frekans cevabı (frequency response), kök-ünite çevrimi (root locus), kutup-günüm gösterimi (pole-zero plot) ve Bode diyagramı yer alır.

Frekans cevabı, bir kontrol sistemi için girdiye verilen belirli bir frekansta çıkışın nasıl tepki verdiğini ifade eder. Frekans cevabı analizi, bir kontrol sisteminin frekans aralığında nasıl davrandığını analiz etmek için kullanılır.

Kök-ünite çevrimi, bir kontrol sisteminin kararlılık özelliğini analiz etmek için kullanılan bir yöntemdir. Kök-ünite çevrimi, köklerin (poles) ve kutupların (zeros) birim çember üzerinde nasıl yerleştiğini analiz eder.

Kutup-günüm gösterimi, bir kontrol sisteminin transfer fonksiyonunu kutuplar ve sıfırların yerlerini kullanarak gösteren bir yöntemdir. Kutup-günüm gösterimi, bir kontrol sisteminin kararlılık ve performans özelliklerini analiz etmek için kullanılır.

Bode diyagramı, bir kontrol sistemi için frekans cevabının bir grafiksel gösterimidir. Bode diyagramı, bir kontrol sisteminin frekans tepkisini analiz etmek için kullanılır.

Sonuç olarak, birim adım cevabı, kontrol sistemleri tasarımı ve performans analizinde önemli bir araçtır. Kararlılık, hız ve doğruluk gibi kontrol sistemleri özelliklerinin analizi için kullanılan bir dizi anahtar kelimeyi içerir. Frekans cevabı, kök-ünite çevrimi, kutup-günüm gösterimi ve Bode diyagramı gibi diğer yöntemler de kontrol sistemleri analizinde kullanılan önemli araçlardır.

İkinci dereceden bir sistemin birim adım cevabı aşağıdaki grafiğe benzer şekilde davranır. Bu grafik bir underdamped sisteme aittir. İkinci dereceden olan sistemler undamped, underdamped, critically dapmed ve overdamped şeklinde dört ayrı sınıfa ayrılabilir.



Bu grafikte işaretlenen ifadeler;
  • Max. Overshoot: Sistem çıkışının çıktığı maximum değer.
  • Rise Time: Sisteme step input uygulandıktan sonra, sistem çıkışının %10 dan %90 a kadar ulaşması için geçen süre. Burada ifade edilen yüzde değeri set pointi %100 kabul ederek hesaplanır.
  • Peak Time: Sisteme step input uygulandıktan sonra, sistemin max. overshoot noktasına ulaşma süresi.
  • Settling Time: Sisteme step input uygulandıktan sonra, sistemin set pointe +-%2 hata ile ulaşma süresi. %2 değeri genel kabuldur. Farklı bir değer de kabul edilebilir.
  • Steady State Error: Sistemin osilasyona girdiği, set pointe yakınsadığı alanda % kaç hata ile salındığını ifade eder. Örnek olarak sıcaklık 50 dereceye ayarlanmış olsun ve sistem çıkışı 45-55 derece arasında salınırsa steady state error +-%10 olarak ifade edilir.

Referanslar

  • https://lpsa.swarthmore.edu/Transient/TransInputs/TransStep.html
  • https://www.researchgate.net/figure/Unit-step-response-of-the-2nd-order-system_fig2_221347190

CAN Bus Frame Tipleri

Yazıya başlamadan önce CAN Bus temelleri ve mesaj yapısının temellerini incelemek için bu linkte yer alan blog yazısını inceleyebilirisiniz ...