Peripherals etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Peripherals etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Mayıs 2024 Cuma

Diyot Tipleri, Kullanım Alanları

Bu yazıda diyot tipleri ve ana kullanım alanları listelenmiştir.

  • P-N Junction-General Purpose Diode: Akımın tek yönde iletilmesini sağlar. İletim yönünde üzerine ~0.7V gerilim düşer. Genellikle doğrultucu olarak kullanılır. Aynı zamanda devre güç girişlerinde ters kutuplamadan/polariteden korunmak için de kullanılır.


  • Schottky Diode: Genel kullanım diyot ile benzer özelliklerdedir. Farklı kılan kısmı İletim yönünde üzerine daha düşük gerilim düşer. Bu sayede yüksek hızlı anahtarlama devrelerinde hızlı geri toparlama özelliği sayesinde sıklıkla kullanılır. Bu uygulamalarda üzerinde harcanan güç daha düşük olduğu için verimi daha yüksektir.

  • Zener Diyot: Belirli bir ters gerilimde iletime geçer ve gerilimi sabitlemeye yarar. Bu özelliği sayesinde gerilim regülatör devrelerinde, referans gerilim üreteçlerinde ve aşırı gerilim koruma devrelerinde kullanılır.

  • Transient Voltage Suppression Diode (TVS): Ani ve yüksek gerilim yükselmelerine karşı koruma sağlar. Elektronik cihazları yıldırım düşmesi, elektrostatik deşarj veya endüktif yüklerin sebep olduğu ani gerilim yükselmelerinden korur.


  • Light-Emitting Diode (LED): İleri yönde akım geçtiğinde ışık yayan yarı iletken diyottur. Farklı yarı iletken malzemeler kullanılarak farklı dalga boylarında (renklerde) ışık üretebilir. Aydınlatma, gösterge, sinyalizasyon ve haberleşme gibi birçok alanda kullanılır.


  • Fotodiyot: Üzerine düşen ışık miktarına bağlı olarak akım üreten diyottur. Işığı elektrik sinyaline dönüştürdüğü için ışık sensörleri, otomatik aydınlatma sistemleri, kamera pozometreleri ve tıbbi görüntüleme cihazlarında kullanılır.


  • Varaktör Diyot (Varikap): Uygulanan ters gerilime bağlı olarak kapasitans değeri değişen diyottur. Bu özelliği sayesinde radyo ve televizyon alıcılarında frekans ayarlama, osilatör devrelerinde frekans kontrolü ve parametrik yükselteçlerde kullanılır.


  • Tünel Diyot: Kuantum tünelleme etkisiyle çalışan özel bir diyot türüdür. Çok hızlı anahtarlama özelliği sayesinde yüksek frekanslı osilatör ve yükselteç devrelerinde kullanılır.


  • Lazer Diyot: Uyarılmış ışık emisyonu ile ışık üreten özel bir diyot türüdür. Ürettiği ışık, tek renkli, tutarlı ve yönlüdür. Optik fiber iletişim sistemleri, barkod okuyucular, lazer yazıcılar, lazer işaretleyiciler ve tıp alanında kullanılır.



Kaynaklar

  • https://www.globalspec.com/learnmore/semiconductors/discrete/diodes/general_purpose_diodes
  • https://www.build-electronic-circuits.com/schottky-diode/
  • https://www.build-electronic-circuits.com/zener-diode/
  • https://uk.rs-online.com/web/content/discovery/ideas-and-advice/tvs-diodes-guide
  • https://www.electrical4u.com/led-or-light-emitting-diode/
  • https://elektrikbilim.com/1009-fotodiyotlar.html
  • https://diyot.net/diyot-cesitleri-1/
  • https://www.derstagram.com/tunnel-diyot-nedir-nasil-calisir/
  • https://tekfaz.com/lazer-diyot-nedir-yapisi-ve-calisma-prensibi.html

19 Mart 2024 Salı

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.

CAN Bus hattında kullanılan 4 tip frame (çerçeve, yapı) vardır.

  • Data Frame: Data framei, temelde data/veri taşımak için kullanılan ana yapıdır. CAN Bus sistemleri arasında veri transferi için kullanılır. Tek bir data framei üzerinden minimum 1 maksimum 8 byte veri transferi tek seferde gerçekleştirilebilir.
  • Remote Frame: Remote frame, veri talep etme frameidir. Remote framede tanımlanan ID CAN Bus ağına basılır. İlgili mesaj paketini barındıran sistem bu ağa ilgili data frameini basar. Remote frame, bir sistemin, bir veriye özellikle ihtiyaç duyduğu zamanda kullanılır.
  • Error Frame: SOF ile CRC arasında 6 veya 12 bit boyunca aynı seviye (High/Low, Recessive/Dominant) veri gönderilmesiyle error framei tanımlanmış olur ve hattaki sistemler ilgili framei error frame olarak işaretler. Error frame istemli gönderilen bir frame değildir. Bir sistem bir paketi göndermeye başladıktan sonra bir hata tespit edilirse ilgili frame error frameine çevrilir.
  • Overload Frame: CAN Bus peripheralı meşgul olduğu durumlarda hattı meşgul tutmak için overload frame hatta basar. Bu bilgi hattın durdurulması için kullanılır. Günümüzde genellikle kod üzerinden kontrol edilmez. CAN Bus peripheralları bu durumu kendisi tespit eder ve gerektiği kadar hattı meşgulde tutar, sonrasında bırakır.



Kaynaklar
  1. https://medium.com/@mohammednumeir13/can-protocol-types-of-can-frames-51c8444176bb
  2. https://www.researchgate.net/publication/340883976_Cyberattacks_and_Countermeasures_For_In-Vehicle_Networks/figures?lo=1

1 Mart 2024 Cuma

CAN Bus Fiziksel Katmanı

CAN (Controller Area Network) Bus CANH, CANL şeklinde isimlendirilen ikili hat üzerinden birden çok sistemin konuşabildiği, aynı anda tek bir sistemin konuştuğu (half-dublex), yüksek hızlı uygulamalara izin veren bir ağ yapısıdır.

Haberleşme yapılarında farklı seviye katmanlar ve uygulama tipleri vardır. Bu kapsamda CAN Bus'ın fiziksel katmanı üzerine detaylı bir inceleme gerçekleştirilmiştir.

Bu konuya giriş yaparken donanım seviyesinden işi ele alıp elektriksel seviyeye ilerlemek mantıklı olacaktır.

Öncelikle yazı  kapsamında kullanılacak tanımlardan bahsetmek gerekirse, sistem ifadesini CAN Bus hattına bağlanabilen ve haberleşebilen her şey olarak düşünebiliriz. Otomotiv üzerinden örnek verecek olursak VCU, BMS, Inverter gibi CAN Bus ile haberleşen yapılara sistem diyebiliriz.

Bir CAN Bus hattı CANH ve CANL hatlarının burulmuş çifti (twisted pair) ile birbirine bağlanır. Bu yapı ethernet kablolarında da benzer şekilde kullanılır. Bu bağlantı elektromanyetik yayılıma karşı hattın güçlü olmasını sağlar. Bu yapıda hat üzerinde indüklenen gürültü akımları her iki hatta neredeyse ortak seviyede etkileyeceği için CANH, CANL arasındaki fark neredeyse sabit kalır. 

Örnek bir burulmuş çift (twisted pair) görseli aşağıda görebilirsiniz.

CANH, CANL twisted pair kablo üzerinden iletildikten sonra elektronik devre üzerindeki yapılar ile karşılaşıyoruz. Burada temel yapıyı anlamak için CAN Bus dönüştürücüler ile anlatıma devam etmek faydalı olacaktır. Sektörde de sıklıkla kullanılan SN65HVD1050 entegresini örnek olarak ele alabiliriz. Bu yapılar mikrodenetleyicilerden çıkan CANTX, CANRX pinlerini CANH, CANL seviyesine dönüştürür. CAN Bus dönüştürücü entegrelerinin ana görevi budur. Tamamen analog yapılar bu dönüşüm için yeterlidir. Bununla birlikte hat ile ilgili temel elektriksel kontrolleri yapabilir. Entegre özelinde sıcaklık kontrolü ve koruması yapabilir. ESD korumaları sağlayabilir. Bublar zorunlu fonksiyonlar değildir.

SN65HVD1050'nin iç yapısı aşağıdaki gibidir.

CAN Bus dönüştürücüleri giriş tarafında CANH, CANL değerlerinin elektriksel farkına göre RXD ucuna 1/0 bilgisi gönderir. CANH, CANL aynı değerlerde ise lojik 1, aradaki fark 2.5 V ise lojik değer 0'dır.


Gönderici taraftan bakacak olursak TXD pini üzerinden bir sürücü kısım aktifleşir ve çıkış anahtarlarını sürer. Bu anahtarlar TXD lojik 0 iken aktif çalışır ve CANH, CANL hattını 2.5 V farka çeker. Aksi durumda aynı değerde tutar.

CAN Bus'ın özelliklerinden biri hattı sürerken aynı zamanda aktif olarak okumaya devam etmesi ve CAN mesaj paketi içerisinde belli bitleri takip ederek karşı alıcının mesajı sağlıklı bir şekilde alıp almadığını doğrulamasıdır. Bu sayede gönderilen mesajların en az bir alıcıya ulaşıp ulaşmadığından gönderici taraf emin olur.

Ek ve büyük bir katkısı da veri gönderirken okumaya devam etmesi sayesidne herhangi bir durumda önceliği yüksek bir mesaj paketi başka bir sistem üzerinden gönderilirse, hattı her sistem sürekli okuyarak çalışmaya devam ettiği için ilgili yüksek öncelikli mesaja diğer tüm sistemler izin/öncelik verir.

Kaynaklar:

  1. https://www.ti.com/lit/an/sloa101b/sloa101b.pdf

26 Şubat 2024 Pazartesi

ESP32 ile Kristal veya Osilatör Kullanmadan RMII Üzerinden Ethernet Haberleşmesi ve İpuçları

İnternette gördüğüm ESP32 ve ethernet uygulamalarının çoğunda ethernet chipine kristal takarak uygulama çalıştırılmış. Bunun sinyal kalitesi açısından faydası olabilir ancak tek çözüm bu değil. ESP32 modüllerinden de ethernet için gerekli clock çıkışını alabilirsiniz.

Bunun için örnek devrede de gösterildiği gibi ESP32 ile ethernet chipinin clock uçlarını birleştirmek yeterli. Burada frekans 50 MHz mertebesinde olduğu için mümkün oldukça yakın olması önemli.

Benim yaptığım uygulamadan hat boyu yaklaşık 44 mm ve 2 adet via kullanılıyor. Buna rağmen sorunsuz bir şekilde sistemin çalıştığını gördüm.



ESP32 clock çıkışı için GPIO0, GPIO16, GPIO17 pinleri kullanılabilir.


Arduino arayüzünde varsayılan olarak clock ESP32'ye girecek şekilde tanımlanmıştır. Ethernet clock çıkışını tanımlamak için aşağıdaki satır kullanılabilir. Bu begin fonksiyonu üzerinden ethernet chipi, clock yönü ve pini seçilebilir.

ETH.begin(0,-1,23,18,ETH_PHY_LAN8720,ETH_CLOCK_GPIO17_OUT);

Kaynaklar;

  • https://docs.espressif.com/projects/esp-idf/en/release-v3.1/api-reference/ethernet/esp_eth.html
  • https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf

10 Ocak 2024 Çarşamba

STM32F103 Mikrodenetleyici Çevre Birimlerinde Karşılaştığım Bir Problem #STM32Tips

Konunun hikayesinden başlamak gerekirse, STM32F0 ve STM32F1 serisi işlemcilerden oluşan ve CAN Bus üzerinden birbirleri ile haberleşen bir tasarım üzerine çalışıyordum. Her bir kart için CAN Bus bağlantısının yanında bilgisayar bağlantısını da kurmak için USB bağlantısını sisteme dahil etmiştim. Bu tasarım STM32F0 serisi işlemcide CAN Bus ve USB sorunsuz çalıştı.

STM32F1 serisi işlemciyi kullanırken aynı yazılıp mimarisi üzerinden devam ediyordum ancak bir sorun ile karşılaştım. Bir şekilde CAN Bus hattını kullanamıyordum. Problemi araştırmaya başladığımda USB ve CAN Bus'ın birlikte kullanımı ile ilgili başka problem yaşayanların da olduğunu gördüm. Sonrasında kullandığım işlemci olan STM32F103CB'nin datasheetini (Reference Manual RM0008 Rev 21) inceledim. CAN Bus kısmında aşağıdaki gibi bir not olduğunu gördüm.

"In low, medium-, high- and XL-density devices the USB and CAN share a dedicated 512-

byte SRAM memory for data transmission and reception, and so they cannot be used concurrently (the shared SRAM is accessed through CAN and USB exclusively). The USB and CAN can be used in the same application but not at the same time."

Buradan anladığımız CAN Bus ve USB işlemci üzerinde aynı SRAM alanlarını kullanıyor ve bu yüzden her iki çevre birimi birlikte kullanılamıyor. USB'yi kapatıp CAN Bus'ı çalıştırmak veya tam tersi mümkün ancak her ikisi aynı anda asla çalıştırılamıyor. Bu yüzden örnek vermek gerekirse CAN Bus üzerinden alınan bir veriyi USB üzerinden gerçek zamanlı alıp işlemek mümkün değil.

Ek olarak STM32F0 serisi ile bir çok uygulama yapmıştım ve bu yüzden USPDP, USPDM hatlarını direkt konnektöre bağlamıştım. STM32F103CB işlemci kullanırken USBDP hattına 3.3 V'a 1.5 kR pull-up resistor gerekiyormuş.

STM32 USB kullanılan uygulamalarda donanım tasarımı hakkında aşağıdaki doküman yayınlamış. Donanım tarafında yapılması gereken işler tek bir dokümanda bütün işlemci ailesi için verilmiş. Gelecek tasarımlar için işe yarar gibi görünüyor.


Link: https://www.st.com/resource/en/application_note/an4879-introduction-to-usb-hardware-and-pcb-guidelines-using-stm32-mcus-stmicroelectronics.pdf (10.01.2024)

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.

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.



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.

24 Ocak 2022 Pazartesi

C dilinde, İyi Yazılmış, Taşınabilir Bir Sensör Sürücü Paketi İncelemesi

Bu yazıda gömülü sistemlere düşük seviyede sürücü geliştiren kişilere referans niteliğinde olan, BOSCH'un  sıcaklık, nem ve basınç sensörü BME280 için geliştirdiği, github üzerinden yayınladığı açık kaynak kütüphaneyi [1] inceleyeceğiz. Başlıkta da belirttiğim gibi kütüphane gerçekten çok modüler bir şekilde oluşturulmuş. Geliştirilen kütüphane platform-bağımsız olduğu için herhangi bir altyapıya adapte edilebilir. Bu yapıyı herhangi bir mikrodenetleyicide veya OS ile çalışan bir gömülü yapıya entegre edebilirsiniz.



Kütüphane geliştirilirken low-coupling, high-coherence kavramlarını başarılı bir şekilde uygulamış. Kütüphane içerisinde herhangi bir dış bağımlılık olmadığı gibi kendi içerisindeki fonksiyon ve veri setleri de tam olarak amaca yöneliktir.

Öncelikle kütüphanenin güzel bir README.md dosyası var. İçerisinde bu kütüphanenin nasıl kullanılabileceği detaylı bir şekilde anlatılmıştır.

Bu yazıda, ilgili kütüphaneyi SPI üzerinden nasıl kendi sisteminize entegre edeceğinizi yine README.md deki örnek üzerinden ele alacağız.

Kütüphane bme280_dev structure'ı üzerinden çalışıyor. Bu yapı aşağıda verilmiştir.

Bu yapıda öncelikle ilgili sensörün hangi arayüz ile hangi modda kullanılacağı çeşitli değişkenlerle seçilir. Bu seçimler değişken isimleri ve gerekli yorumlarla desteklenmiş ve açık bir şekilde belirtilmiştir.

Bunun haricinde taşınabilirlik açısında bizim en çok işimize yarayan kısım fonksiyon pointer yapılarıdır. SPI örneği üzerinden devam edecek olursak bme280_dev yapısı içerisinde okuma yazma fonksiyonları için dev.read ve dev.write fonksiyon pointerlarına ilgili platforma ait SPI yazma okuma fonksiyonları atanır. SPI okuma ve yazma fonksiyonları kendi içerisinde CS operasyonunu gerçekleştirmelidir. Fonksiyonel olarak yazılmış sensör sürücüsü soyutlanmış okuma, yazma fonksiyonları üzerinden çalışır. Bu iki fonksiyona ek olarak kütüphane içerisinde kullanmak üzere 1 ms çözünürlüklü bir delay fonksiyonunun da pointerı structure'a atanır.

Bu noktada önemli bir parantez olarak ilgili fonksiyon pointerları mevcut altyapınızla birebir uyumlu olmayabilir. Hatta muhtemelen farklıdır. Bu noktada sizin altyapınız ile kütüphane arasına bir adaptör katmanı yazmanız gerekebilir. Örnek olarak aşağıdaki fonksiyon incelenebilir. myusleep fonksiyonu platform tabanlı bir fonksiyondur. Örnek olarak ms gecikmesi için STM32 altyapısında HAL_Delay fonksiyonunu düşünebilirsiniz. Arduino altyapısında buna delay fonksiyonu karşılık gelir. Biz her iki platformda da mevcut fonksiyonun adresini aşağıdaki gibi bir adaptör vasıtasıyla bme280_dev yapısına atanır. Böylece kütüphane fonksiyonları platform bağımsız çalışır.

Bu kütüphane kullanılarak oluşturulmuş tam bir örneğe aşağıdaki linkten erişebilirsiniz. En başta da ifade ettiğim gibi gömülü sistemlerde sürücü seviyesinde yazılım geliştiriyorsanız bu kütüphaneleri hiç bir zaman başka bir platformda kullanmayacaksanız bile bu yaklaşımla geliştirmenizi öneririm. Kodun okunabilirliği, güncellenebilirliği ve bakım yapılabilirşliği açısından da oldukça faydalı olacaktır.

https://github.com/BoschSensortec/BME280_driver/blob/master/examples/bsd_userspace.c

Referanslar

[1] https://github.com/BoschSensortec/BME280_driver/

7 Nisan 2021 Çarşamba

ADC Nedir? Analog to Digital Çevrim İşleminde Karşılaşılan Hatalar Nelerdir?

 ADC (Analog-to-digital converter, Analogtan Dijitale Çevirici) analog verileri dijital verilere çeviren çevre birimleridir. ADC yapıları gerçek dünyadan dijital dünyaya veri almanın en bilinen yöntemidir. ADC yapıları sinyalleri tanımlanmış zaman aralıklarında alır ve ADC çözünürlüğü ölçüsünde quantize eder. Böylece ADC yapıları, dijital hesaplamalar için zamanda ve genlikte quantalanmış/ayrılmış veriler sağlar.



ADC işlemine örnek olarak ses verisinin dijitale çevrilmesi verilebilir. Ses sinyali ile mikrofon üzerindeki gerilim değişir. Bu gerilim değeri ADC tarafından okunarak ses sinyali dijitalleştirilmiş olur. İşlemciler üzerinde bu dijital veri işlenerek anlamlı bir bilgiye çevrilir.


ADC farklı tiplerde tasarlanabilir. Mikrodenetleyicilerde en yaygın kullanılan ADC tipleri SAR ve ΔΣ ADC tipleridir.

Farklı ADC çözünürlük ve ölçüm frekanslarına ait tablo aşağıdaki gibidir.ADC'nin çözünürlüğü Vcc/(2^bit) formülü ile bulunur. Örneğin 5 V ile çalışan 12 bitlik bir ADC'nin çözünürlüğü;

5 V/(2^12) = 5 V/4096 = 1,22 mV'dur.

Kısa bilgi olarak ADC'nin tersi yönde çalışan DAC yapıları da vardır. DAC yapıları işlemciler içerisindeki dijital verilerin analog verilere döndürülmesi için kullanılır. Bu iki yönlü dönüşüm aşağıdaki görselde verilmiştir.

ADC Hata Tipleri

ADC ölçümlerinde, ölçüm yapılan ADC yapısına göre çeşitli hata tipleri oluşabilir. Bu hatalar 3 ana başlıkta toplanabilir.

Doğrusallık Hatası

İdeal durumda ADC'nin normalde gerilime göre oransal bir çıkış vermesi gerekir. ADC'nin iç yapısına ve çevresel etkilere göre ADC üzerinde farklı aralıklarda farklı oranlar ortaya çıkabilir. Bu durumda doğrusallık hatası ortaya çıkar. Bu etkinin grafiksel gösterimi aşağıdaki gibidir.

Kazanç Hatası

ADC üzerinde kazanca bağlı değişen bir kazanç hatası ortaya çıkabilir. Bu ADC'nin o anki değerine göre oransal olarak artan bir hata tipidir. Bu durumda kazanç hatası ortaya çıkar. Bu etkinin grafiksel gösterimi aşağıdaki gibidir. Bunu kompanze etmek için ADC ölçümü bir katsayı ile çarpılabilir.

Dengeleme Hatası

ADC üzerinde belli bir dengeleme/ofset hatası ortaya çıkabilir. Bu ADC'nin herhangi bir andaki değerine göre sabit bir değer ekler. Bu durumda dengeleme hatası ortaya çıkar. Bu etkinin grafiksel gösterimi aşağıdaki gibidir. Bunu kompanze etmek için ADC değerine belli bir sabit değer eklenebilir.

Referanslar:

[1] https://en.wikipedia.org/wiki/Analog-to-digital_converter

6 Şubat 2021 Cumartesi

Accuracy, Precision & Resolution Kavramları (Doğruluk, Hassasiyet, Çözünürlük)

Accuracy, Precision ve Resolution kavramları ölçüm sistemlerinde sıklıkla karşımıza çıkan ifadelerdendir. Aynı zamanda bu sistemler için kullanılan sensörlerde de benzer ifadelere rastlayabilirsiniz.

[1]


Bir ölçüm sisteminin performansı sistemin aynı şartlarda aynı sonucu vermesi ile ölçülebilir. Bu durumu başlıkta yer alan kavramlarla açıklayabiliriz.

Accuracy, doğru ölçüme ne kadar yakın olduğunuzu ifade eder.

Precision, arka arkaya alınan ölçümlerde ne kadar tutarlı olduğunu, aynı veya yakın değeri verdiğini ifade eder.

Resolution, ölçümün adım aralığıdır. Örnek olarak 3.3V bir sistemde 12 bit ölçüm alacaksanız çözünürlüğünüz (3.3/4095)V kadardır.

Bu kavramların anlatımını güçlendirmek için aşağıdaki görsel oldukça faydalıdır. Görselde hedefin orta noktası olması gereken ölçüm değeridir. Etrafındaki yıldızlar ise ölçüm değerleridir. Bu 4 görseli sınıflandıracak olursak;

  • Sol Üst: Yüksek accuracy, düşük precision. (Tolere edilebilir)
  • Sağ Üst: Yüksek accuracy, yüksek precision. (En iyi durum)
  • Sol Alt: Düşük accuracy, düşük precision. (En kötü durum)
  • Sağ Alt: Düşük accuracy, yüksek precision. (Tolere edilebilir)



Biz tasarladığımız ölçüm sistemlerinde yüksek accuracy ve precision bekleriz. Bu ölçüm sistemimizin performansını yüksek seviyede tutmamızı sağlar ancak bunun mümkün olmadığı durumlarda çeşitli tolerans metotları geliştirmek gerekir. Çünkü geliştirilecek uygulamaya uygun ölçüm sistemini tasarlamak için fiyat/performans kriterinden dolayı en iyi durumu oluşturacağınız sistemi oluşturamayabilirsiniz.

Bu durumda accuracy durumunu tolere etmek için sistem karakteristiğine uygun bir offset değeri veya dinamik bir sistem için offset fonksiyonu oluşturulur. Böylece ölçüm istenilen noktaya çekilebilir.

Precision konusunda bir iyileştirme yapmak için de dijital ve analog filtreler yardımı ile bu kriter arttırılabilir.

Resolution değeri sistemin karakteristiği ile direkt ilgilidir ve üzerinde herhangi bir işlem yapamayız. Precision iyileştirme için yapılacak filtreleme fonksiyonları resolutiondan oluşacak kayıpları da bir ölçüde iyileştirebilir.

Referanslar:
[1] https://keydifferences.com/difference-between-accuracy-and-precision.html

6 Ocak 2021 Çarşamba

Lineer/Proportional/Oransal Çıkışlı Bir Analog Sensörün Okunması, Sensör Okuma ile ilgili Temel Mantıklar

 Sensör verilerinin okunması ve anlamlandırılması kontrol sistemleri için en temel girdiyi oluşturur. Sensör bilgileri, sensörün tipine, iç yapısına, ölçtüğü fiziksel niteliğin davranışına göre farklılık gösterebilir. Sensör çıkışları lineer veya bir polinoma bağlı olabilir.

Bu yazı kapsamında lineer çıkışlı sensörler hakkında detaylı bir açıklama yaptıktan sonra polinomsal çıkışlı bir sensör hakkında da kısa bir yorum yapıp bitireceğim.

Lineer çıkışlı analog bir sensöre örnek olarak SS495B ve LM35 üzerinden ilerleyeceğiz. Aşağıda gördüğünüz görselde SS495B'nin gauss/çıkış voltaj grafiği verilmiştir. Bu sensörün ölçüm yaptığı fiziksel nitelik ile çıkış voltajının lineer olduğu grafikten bellidir. Çıkış gerilimi gauss değerine göre lineer olarak artıp azalır.

SS495B Çıkış Karakteristiği
Bu şekilde çıkış veren sensörler çok basit bir matematiksel formülle tanımlanır. ADC değerini okuyup voltaja çevirdikten sonra, gerilim değerinden ilgili fiziksel değere geçilir. Bu örnekte o değer gauss'tur.

Grafikten görüldüğü gibi sensör 0.5V-4.5V arasıda tanımlıdır. Aralık dışıda bir değer okunması halinde uygulamanın çeşidine göre bir senaryo planlanır. Bu aralıkta da direkt bir eğik doğru formülü ile tanımlanır. Bu formül;

Gauss = ( Vout - 2.5 ) * ( 640 / 4.5 )

şeklindedir. Bu formüldeki ( 640 / 4.5 ) ifadesi grafiğin eğimidir. Bu değer sayısal olarak sadeleştirilip sadece bir çarpım ifadesi şeklinde de yazılabilir.

LM35 sensörü de sıcaklığa bağlı lineer çıkış veren bir sensördür. Bu sensörün datasheetinde çıkış aşağıdaki şekilde ifade edilmiştir. Sensör 2°C-150°C aralığında her bir derece için 10mV çıkış verir.
LM35 Çıkış Karakteristiği

Bu bilgilerden hareketle bu sensörün çıkışını santigrat derece şeklinde ifade etmek için aşağıdaki formül kullanılır.

Temperature = 2 + ( Vout / 0.01 ) = 2 + ( Vout * 100 )

İki ayrı sensör değerinin nasıl dijital veriye çevrildiğini bu iki örnekle özetlemiş olduk. Bir de polinomsal çıkış veren sensörler vardır. Bunlar için en yaygın örnekler NTC tipi sıcaklık sensörleri olabilir. Bu sensörlerin direnç değerleri sıcaklığa bağlı değişir ve en basit şekilde başka bir direnç ile seri bağlanarak orta noktanın gerilimi üzerinden bir dönüşüm yapılır. Burada ilk olarak basit gerilim bölücü mantığından sıcaklık sensörünün direnç değeri bulunur ve bu direnç değeri -nispeten- kopleks bir matematik denkleminden geçerek sıcaklık elde edilir. Bu denklem "Steinhart and Hart Equation" olarak adlandırılır. Burada yer alan A, B ve C sabitleri ilgili sensörün datasheetinde verilir. R değeri ise NTC'nin o anki direnç değeridir.


Bir NTC'nin direnç değerinin sıcaklığa bağlı değişimini gösteren grafikte aşağıdaki gibidir. Grafikte görünen PTC, NTC ile ters çalışan ama aynı amaçla kullanılan bir sensör türüdür.




Bu yazı kapsamında sensör okuma ve okunan değerleri fiziksel değere çevirme hakkında genel bilgiler vermeye çalıştım. Umarım faydalı olur. Çalışmalarınızda başarılar.



7 Aralık 2020 Pazartesi

Cooperative Multitasking

 Bu yazıda cooperative multitasking (CM olarak anılacak) kavramı üzerine bildiklerimi ve gömülü sistemler üzerinde bu yapıya benzer bir çalışma metodolojisi ile nasıl geliştirme yaptığımdan bahsedeceğim.

CM kavramı non-preemptive multitasking olarakta bilinir. Temel olarak görevi taskları sıralı bir şekilde işletmektir. Bilinen modern multitasking yapılarından farkı ise önceliğe göre aktif bir task switching yapmamasıdır. CM yapısında, işlemci aynı anda bir task ile ilgilenir ve o task tamamlanana kadar diğer taskların çalışmasına izin vermez. Bu yapı Windows 3.1x'te kullanılmıştır.[1]

CM yapısı ile çalışacak bir sistemde taskların zamanları önemlidir. Bu yüzden yazılacak taskların süreleri ve gereksinim durumu iyi analiz edilmelidir. Vakit alan bir task önemli bir taskı engellerse bu sistemi verimsiz/anlamsız/zararlı hale getirebilir.

CM kavramını görselleştirmek için aşağıdaki görseli kullanalım. Burada örnek olarak Task A 20ms de bir çalışır ve task aktif olduktan sonra 3 ms boyunca iş yapar. Diğer tasklarda da benzer şekilde çalışma periyotları ve çalışma süreleri tanımlanmıştır.

İlk ve en basit kural çalışma süresi, çalışma periyodundan büyük olmalıdır. Bu ikisi arasındaki fark ne kadar yüksek olursa ilgili taskın işlemciye yükü o kadar düşük olur.



Görselde CM metodu içe çalışan bir yapı verilmiş ve Task A, B, C tanımlanmıştır. Her bir taskın çalışma sürelerine göre işlemler grafikteki gibi verilir. Burada zamanları tek tek inceleyeceğiz.
  • @10. ms Task C çalışır ve 11. ms'de biter.
  • @15. ms Task B çalışır ve 17. ms'de biter.
  • @20. ms Task A çalışır ve 23. ms'de biter. Bu esnada Task A'nın da çalışma periyodu gelir ancak Task A bitmediği için sırasını bekler. Task A biter bitmez 23. ms'de Task C başlar. 24. ms'de biter. Bu kaymadan dolayı Task C'nin bir sonraki başlama zamanı kayar ve Task C 33. ms'de çalışır.
  • @30. ms Task B çalışır ve 32. ms'de biter.
  • @33. ms Task C çalışır ve 34. ms'de biter.
  • @40. ms Task A çalışır ve 43. ms'de biter.
  • @43. ms Task C çalışır ve 44. ms'de biter.
  • @45. ms Task B çalışır ve 47. ms'de biter.
Bu yapıda en önemli konu 20. ms'de yaşanan kaymaların olabileceğidir. Bu yüzden doğru bir düzen içerisinde tasarlanmalıdır. Çok daha uzun sürecek tasklar da olabilir. Bu durumda diğer taskların kritik görevlerinin olmaması önemlidir.

Bu yapıyı kurarken genelde tüm tasklar tek bir zaman sayacı üzerine kurulur ve ilgili zaman sayacını referans alark her bir task çalışma başlangıcını belirler.

Gömülü sistemlerde çalışırken, RTOS kullanmadan geliştirilecek uygulamlarda oldukça faydalı bir yöntemdir. RTOS'lara göre eksik kaldığı bir nokta normalde delay koyarak geliştirilebilecek basit akış diyagramlarını oluşturmak için switch case yapılarının gerekmesi olabilir ancak alışkanlık sağladığınızda fazlasıyla kolaylık sağlayacaktır.

Bu yazı kapsamında interruptsız bir program üzerine konuyu anlattım. Ek ve özet bilgi olarak bu yapılar çalışırken çalıştıracağınız interruptlar ile de tam gerçek zamanlı tasklar çalıştırabilirsiniz. Kurgulanacak bu yapıda yukarıda verilen tasklar interruptlar tarafından bölünür ve sizin hem interrupt yapınız hem de ana döngü yapınız sağlıklı bir şekilde çalışabilir.

Ana döngü içerisinde yavaş toplanacak veriler, haberleşme değerlendirme algoritmaları, dosya okuma/yazma yapıları vs. geliştirilebilir. Interruptlar içerisinde ise hızlı tepki verilmesi gereken giriş/çıkış yapıları, kontrol algoritmaları, periyoda bağımlı algoritmalar vs. çalıştırılabilir.

Umarım faydalı olur.

Referanslar

[1]. https://en.wikipedia.org/wiki/Cooperative_multitasking

30 Temmuz 2020 Perşembe

I2C Nedir?

Giriş


Inter-Integrated Circuit (Entegre Devreler Arası Haberleşme) genel olarak devre üzeri haberleşme yapılarında kullanılır. Sensör, işlemciler arası haberleşme veya çeşitli haberleşme arayüz entegreleri ile I2C hattı üzerinden iletişim kurulabilir. Bir master birden fazla slavein bulunduğu hattı sürebilir. Böylece master tarafında 2 pin ile bir çok çevresel birim kontrol edilebilir. Bununla birlikte tasarlanacak topolojiye göre aynı hatta birden çok master da bulunabilir.

Kıyaslayacak olursak genelde alternatifi olarak görülen SPI’a göre yavaştır. Daha az pin kullandığı için avantajlıdır. Düşük hızlarda yönetilecek çevre birimleri için mikrodenetleyicinin pin kullanımını optimize etmek için idealdir.

Örnek bağlantı yapısı aşağıdaki gibidir.


Temeller


Temel yapı olarak birimler arasında I2C hattı SDA ve SCL pinlerinden oluşur. Her iki pin normalde HIGH konumundadır. SDA Data hattının LOW a düşmesi ile haberleşme hattı iletime başlar. Yapılar SCL clock sinyali ile senkron olarak çalışır.
  • SDA: Data. Verinin o anki yönüne göre Master’dan Slave’e veya tam tersi olabilir.
  • SCL: Clock. Her zaman Master’dan Slave’lere doğrudur.


I2C hattı ile birlikte hat üzerindeki çiplerin de -özel bir izolasyon vs. yoksa- ground hatları birleştirilmelidir.

SCL sinyaline göre öncelikle masterdan hatta konuşacağı enterenin adres bilgisi ve yazma/okuma modu hatta basılır. Sonrasında ilgili çiptemn gelecek acknowlage sinyaline göre haberleşme devam ettirilir.Konuşulacak entegrenin I2C protokol yapısına göre haberleşme half duplex olarak devam eder.



I2C hattında hız değerine göre genellikle 2.2KR-10KR aralığında pull-up direnç kullanılır. Bu değere, kullanılan işlemci ve entegrelerin datasheet dokümanlarında verilen bilgilere göre karar verilir.


Kavramlar


  • Master: I2C hattını süren ana yapıdır. Genellikle miroişlemci/mikrodenetleyicidir.
  • Slave: I2C hattında bulunan slave entegrelerdir. Bir çok alternatif IC vardır. EEPROM, DAC, ADC, sensör, ekran sürücü, motor sürücü gibi çevre birimleri, CAN, Ethernet, Wifi gibi haberleşme arayüzü sağlayan entegreler I2C hattı ile çalıştırılır.
  • Başlatma Koşulu: SCL hattı HIGH’dan LOW’a geçmeden önce SDA hattı HIGH’dan LOW’a geçer.
  • Durdurma Koşulu: SCL hattı LOW’dan HIGH’a değiştikten sonra SDA hattı LOW’dan HIGH’a geçer.
  • Adres Paketi: Her bir SLAVE’e özgü, MASTER ile konuşmak istediğinde SLAVE’i tanımlayan 7 veya 10 bitlik bir veri.
  • Okuma / Yazma Biti: MASTER’ın SLAVE’e (LOW) veri gönderip göndermediğini veya ondan veri istediğini (HIGH) belirten tek bir bit.
  • ACK / NACK Bit: Mesajdaki her byteı bir onaylama/onaylama biti izler. Bir adres paketi veya veri paketi başarıyla alındıysa, alıcı cihazdan gönderene bir ACK biti döndürülür.



Görsel Kaynakları:
  • https://en.wikipedia.org/wiki/I%C2%B2C
  • https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

Diyot Tipleri, Kullanım Alanları

Bu yazıda diyot tipleri ve ana kullanım alanları listelenmiştir. P-N Junction-General Purpose Diode: Akımın tek yönde iletilmesini sağlar. ...