11 Ağustos 2022 Perşembe

Circular Buffer (Dairesel Buffer)

Gömülü sistemlerde veri toplama, kaydetme veya depolama için çeşitli veri yapıları kullanmak gerekir. Bu uygulamanın tipine göre farklılık gösterebilir. Özellikle gateway ve benzeri projelerde circular buffer tercih edilebilir. RAM kaynağı sınırlı olduğu için en verimli yöntem ile bu kaynağı kullanmak gerekir. FIFO, LIFO şeklinde davranış gösteren farklı veri yapıları vardır. Bu yazı, circular buffer nedir, nasıl çalışır, hangi durumlarda kullanılmalı gibi konular üzerine olacak.

Circular buffer adından da anlaşılacağı gibi hafızayı dairesel bir formatta kabul ederek/soyutlaştırarak hafıza alanını kullanmaya imkan sunan bir veri yapısıdır. Dairesel bufferın özelliklerinden biri veri yazma ile veri okuma indexlerinin bağımsız kontrolüdür. Tüm bufferın boyutu sabittir.

Görsel üzerindeki end()/item n yazma pointerını ifade eder. begin()/item 1 okuma pointerını ifade eder. Okuma ve yazma pointerları birbirine eşit olduğunda buffer empty flagi set olur. Bu bufferın tamamen boş olduğunu ifade eder. Yazma pointerı okuma pointerının bir eksiğine eşit olduğunda ise buffer full flagı set olur. Bu bufferın tamamen dolu olduğunu ifade eder. Bu yapının kullanıldığı yerin gereksinimlerine göre half full gibi farklı seviyeler için de flag tanımlanabilir.

Circular buffer rutin bir çalışma durumunda full durumuna gelmeyecek şekilde kurgulanmalıdır. Bunun için okuma hızı/sıklığı her zaman yazma okuma hızı/sıklığından daha yüksek olmalıdır. Böylece bufferda saklanan verinin belli bir değeri geçmeyeceği garanti edilir. Yine de beklenmedik durumlar ortaya çıkabilir. Bu durumlarda circular bufferlarda farklı stratejiler uygulanabilir. Birincisi üzerine yazma, ikincisi ise bloklama yaklaşımıdır.

Üzerine yazma yaklaşımında circular buffer full olsa bile yeni gelen veri bir sonraki yazma adresine yazılır. Bu durumda bir önceki data kayıp olmuş olur.

İkinci yöntem olan bloklama yaklaşımında da eğer circular buffer full ise yeni gelen veri olsa bile en sondaki veri okunmadan yeni bir yazmaya geçilmez.

Örnek bir repository olarak https://github.com/Roen-Ro/CircularBuffer incelenebilir.

Referanslar:

  1. https://www.boost.org/doc/libs/1_78_0/doc/html/circular_buffer.html

3 Ağustos 2022 Çarşamba

Otomotivde ECU Nedir?

Electronic Control Unit/Elektronik Kontrol Ünitesi (ECU) araçlar üzerindeki çeşitli görevleri/fonksiyonları gerçekleştirmek üzere geliştirilmiş sistemlerdir. ECU genel bir isimlendirmedir. VCU, BMS, BCM gibi ünitelerin elektronik kontrol birimleri de ECU olarak anılır.

Araç üzerindeki ECU'lar görevlerine göre farklı tip, özellik ve boyutlarda olabilir. Örneğin bir VCU genel olarak yatay ve ince bir metal yuvaya sığarken, EDS/MCU/Inverter gibi güç süren sistemler daha hacimli ve geniş soğutucu bloklu yuvalara ihtiyaç duyar.

Örnek Bir VCU Görseli


Örnek Bir EDS/MCU/Inverter Görseli


Günümüzde araçlar 100 civarında farklı ECU içerebilir. Örneğin 4 kapı camı elektrikli bir araçta sadece bu camların aç/kapa fonksiyonundan sorumlu 4 farklı motor ve bu motorları süren ECU'lar vardır. Bu ECU'lar tek bir ana fonksiyonu (cam aç/kapat) gerçekleştirse bile araç networkü ile haberleşen akıllı sistemlerdir. Araç networkü üzerinde bir fonksiyon bir veya birden fazla elemanın entegrasyonu ile gerçekleşebilir. İlgili sistemler her zaman birbiri ile konuşarak senkron bir şekilde çalışacak topolojide tasarlanır.

Her ECU genel olarak kendisinden sorumlu bir işlemci barındırır. Bu işlemciler çoğunlukla otomotiv sektörü için özelleşmiş, kendi üzerinde 12 V regülatörü, haberleşme alıcı/vericileri gibi önemli yapıları entegre edilmiş bir şekilde barındırırlar. Böylece birim maliyet, yer kaplama, hata yapma gibi konularda avantaj sağlanır.

Referanslar:

  1.  https://www.aptiv.com/en/insights/article/what-is-an-electronic-control-unit
  2. https://www.bosch-mobility-solutions.com/en/solutions/vehicle-computer/vehicle-control-unit/
  3. https://automotivepowertraintechnologyinternational.com/news/electric-powertrain-technologies/mclaren-applied-targets-automotive-with-800v-sic-inverter.html



15 Temmuz 2022 Cuma

HAL Library Bir Milisaniyelik Sayaç #STM32Tips

STM32 HAL Library ile bir proje derlendiği zaman System tick timer üzerinden çalıştırılan, varsayılan olarak bir milisaniye çözünürlükte bir sayaç başlatır. Bu sayaç değerine HAL_GetTick fonksiyonu ile ulaşabiliriz. Bu fonksiyon 32 bit işaretsiz tamsayı (uint32_t) tipinde bir değer döndürür. Siz bu değeri yazdığınız programın herhangi bir yerinde zaman tutmak için kullanabilirsiniz.

Bu sayaç SysTick_Handler interruptı içerisinde HAL_IncTick fonksiyonu ile her bir interrupta girişte bir arttırılır. Sistem arka planda uwTick global değişkenini kullanır.

HAL_GetTick fonksiyonunun arka planda tuttuğu uwTick değişkeni 32 bitlik olduğu için 1 milisaniyede 1 artarak tam olarak 32 bitlik sayıyı doldurması 49,7 gün sürecektir. Bu süre, çok özel bir proje olmadığı sürece bir çok uygulama için zaman tutma, işlemleri sıralama, timeout tutma gibi işlemler için fazlası ile yeterlidir.

Örnek olarak ana döngü içerisinde bir veya bir kaç fonksiyonu periyodik olarak çalıştırmak istersek aşağıdaki gibi bir kod parçası işimizi görecektir. Aşağıda görünen kod parçası 1 saniyede 1 defa çalışır. 999 olan değer 99 olursa 100 milisaniyede bir çalışır.

if ( ( HAL_GetTick ( ) - timeStamp ) > 999 )
{
    timeStamp = HAL_GetTick ( );

    fnc1 ( );
    fnc2 ( );
}

Bu yapıda timeStamp = HAL_GetTick ( ); satırı if bloğunun başında olursa her 1 saniyede 1 defa bu koşul işletilir. Eğer bu ifade if bloğunun en sonuna konursa bu sefer fnc1 fonksiyonu 1 sn+fnc1+fnc2 kadar sürede bir tekrar çağrılır. Bu yaklaşım fonksiyon dallanmalarına göre değişkenlik göstereceği için tercih edilmez.

İkinci bir örnek olarak RTCsi olmayan bir işlemcide gerçek zaman bir haberleşme kanalı üzerinden alınır ve işlemci içerisindeki HAL_GetTick ( ); ile eşleştirilir. Böylece işlemci kapanıp açılana kadar işlemci kristali ile gerçek zamanı tutabilirsiniz.

Bu zaman referansı başka bir çok noktada işinize yarayabilir.



26 Haziran 2022 Pazar

Kapasitör Dolum Eğrisi ve Ölçüm Metodu

Kondansatör (capacitor) üzerinde elektrik depolayabilen bir pasif elektronik elemandır. Kondansatörün kapasite değeri Farad birimi üzerinden değerlendirilir.

Kondansatörün dolum eğrisi aşağıdaki gibidir. Kontansatör herhangi bir t anında bir R1 direnci üzerinden enerjilendirildiğinde (step input) üzerindeki voltaj değişimi Vout gibi davranır. Vout'un herhangi bir andaki değerini hesaplamak için aşağıdaki görselde verilen ilk formül kullanılır. Bu formülde belli bir zamandaki voltajı hesaplarken Vin, e, R, C ve t sait olacağı için ilgili zamandaki voltaj değeri bulunabilir.

Aynı formülde t ifadesini çekerek kutu içerisindeki ifade elde edilir. Bu ifade bize şunu söyler. R, Vin sabit ve Vout belirlenen bir değer ise, dolum eğrisinin Vout değerine ne kadar sürede geldiğini ölçebilirsek gömülü bir sistem üzerinde kapasitör ölçümü yapılabilir. Vout değeri Vin/2 veya Vin/e seçilebilir. Çok yüksek veya düşük Vin değerleri ölçüm açısından sağlıklı olmayabilir.


Osiloskop üzerinden alınmış bir kapasitör dolum görseli aşağıdaki gibidir. Bu görselde;

  • Sarı: Kapasitör dolumunu tetikleyen sinyal.
  • Turkuaz: Kapasitör dolum voltaj grafiği.
  • Pembe: Kapasitör ile 1.65 V luk sabit bir değer üzerinden kurulan karşılaştırıcı devresinin çıkışı.
Algoritma tarafında tetikleme sinyalini verdikten sonra karşılaştırıcının düşen kenarına kadar geçen süre bize kapasitör değerini hesaplamak için gereken zaman bilgisini verir. Aşağıda görseli verilen testte R=1kOhm, C=470nF seçilmiştir. Bu durumda kapasitör voltajının 1.65 V'a gelmesi 325us sürecektir. Aynı süreyi osiloskop görselinden de görebilirsiniz. (Cursorlar ile işaretlememek eksiklik olmuş)


Son söz olarak, kondansatör ölçümü için daha farklı ölçüm yöntemleri de mevcuttur. Bu yöntemlere örnek olarak kondansatörlere belirli frekans değerlerinde sinyal uygulanır. Bu sinyallerin değişimi üzerinden kondansatör değerine karar verilir. Ölçüm yöntemlerinin tamamında zaman tabanlı işlemler olduğu için kondansatör ölçümü zamana bağımlıdır ve direnç ölçümüne nispeten uzun sürer.

Kaynaklar:

  • https://www.elektrikde.com/kondansator-ve-cesitleri-nelerdir/

25 Haziran 2022 Cumartesi

STM32F Mikrodenetleyicilerinde İşlemci Benzersiz ID Değerini Okuma #STM32Tips

STM32F mikrodeneyleyicileri içerisinde 96 bit benzersiz bir ID vardır. Bu bilgi her bir işlemciye özeldir. Bu değer aşağıdaki üç fonksiyon ile okunur. Bu fonksiyonlar sırasıyla benzersiz ID'yi oluşturan 32 bitlik grupları bize verir.







23 Nisan 2022 Cumartesi

Gömülü Sistemlerde RAM Organizasyonu

Günümüzde gelişmiş işlemcilerde farklı tipte RAM organizasyonları bulunsa da genel ve yaygın olan yaklaşıma göre bu yazı hazırlanmıştır.

Gömülü sistemlerde RAM organizasyonunda 3 temel alan bulunur. Bunlar statik, stack ve heap alanlarıdır.

9 Şubat 2022 Çarşamba

Safety ve Security Kavramları

Bu yazıda safety ve security kavramlarını inceleyeceğiz. Türkçede emniyet ve güvenlik şeklinde yer yer ifade edilse de net bir karşılık olmadığı için bu yazıda ingilizce terimler kullanılacaktır.

Safety, emniyette olma ve potansiyel tehlikelerden korunma durumudur. Safety, kabul edilebilir bir risk düzeyine ulaşmak için bilinen tehlikelerin kontrolünü de ifade eder. Safety, genellikle sistemlerin kendileri kaynaklı oluşabilecek tehlikeli durumlarını ve bu durumlardan kaçınmayı ifade eder.

Security, sistemin dışından gelecek, sistemin doğal işleyişini bozmak veya sistem içerisinde tutulması gereken her türlü bilginin, sistemin izni haricinde alınması/erişilmesi durumudur. Security açısından sistemler değerlendirilirken riskler, tehdit modelleri ve saldırı yöntemleri analiz edilir. Sonrasında sistem security açısından da güvenli bir noktaya gelmesi gereken aksiyonlar planlanır ve devreye alınır.

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 ...