STM32 ADC konusu, analog dünyadan dijital dünyaya geçişi öğretir. Mikroişlemciler laboratuvarındaki deney föyünde iki ana uygulama vardır: potansiyometreye göre 8 LED’in orantılı yanması ve LM35 sıcaklık sensörü verisinin 16×2 LCD’de gösterilmesi.
Bu yazıda ADC’nin temel mantığını, çözünürlük hesabını, LM35 formülünü ve LCD’ye sıcaklık yazdırma yaklaşımını tek bir akışta topluyoruz.
ADC nedir?
ADC, Analog to Digital Converter ifadesinin kısaltmasıdır. Görevi, süreklilik gösteren analog bir gerilimi sayısal bir değere çevirmektir. STM32F407 üzerinde ADC modülü, belirli bir referans gerilimi aralığında giriş gerilimini örnekler ve bunu sayısal koda dönüştürür.
STM32’nin 12 bit ADC’si kullanıldığında çıktı aralığı tipik olarak 0 ile 4095 arasındadır. Bu durumda her bir sayımın temsil ettiği yaklaşık gerilim adımı şöyle bulunur:
Gerilim adımı = Vref / 4096
Örneğin Vref = 3.3 V ise bir adım ≈ 3.3 / 4096 ≈ 0.000805 VTek kanallı ve çok kanallı ADC okuma
Tek kanallı okumada tek bir analog giriş pininden veri alınır. Bu, potansiyometre veya LM35 gibi tek sensörlü uygulamalar için yeterlidir. Çok kanallı okumada ise ADC sıralı biçimde birden fazla kanalı örnekler. Laboratuvar deneyinde her iki mantığı bilmek istenir; ancak uygulama tarafında çoğunlukla tek kanal kullanımı yeterlidir.
Potansiyometre ile LED bar mantığı
Föyde potansiyometre sola çevrildikçe yanan LED sayısının azalması, sağa çevrildikçe artması istenir. Ayrıca en sol konumda 1 LED, en sağ konumda 8 LED yanmalıdır. Bunu yapmak için ADC değeri 1 ile 8 arasında bir sayıya eşlenir.
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 10);
uint32_t adc = HAL_ADC_GetValue(&hadc1);
uint8_t ledCount = 1 + (adc * 7) / 4095; // 1..8 arası
for (int i = 0; i < 8; i++)
{
write_led(i, i < ledCount);
}Bu basit eşleme sayesinde potansiyometre mekanik olarak çevrildikçe LED sayısı kademeli artar veya azalır. İstenirse daha yumuşak geçiş için aralıklar yeniden düzenlenebilir.
LM35 sıcaklık sensörü nasıl yorumlanır?
LM35’in en önemli özelliği, çıkış geriliminin sıcaklıkla doğrusal değişmesidir. Tipik yaklaşım şudur: 10 mV/°C. Yani 25 °C için çıkış yaklaşık 250 mV, 30 °C için yaklaşık 300 mV olur.
STM32 ADC ile okunan sayısal değeri önce gerilime, sonra sıcaklığa çevirmek gerekir:
voltage = (adc_value * 3.3) / 4095.0;
temperature_c = voltage * 100.0;Buradaki 100 çarpanı, 10 mV/°C ilişkisinden gelir. Çünkü 1 V = 1000 mV ve her 10 mV bir dereceyi temsil eder.
16×2 LCD neden 4 bit modda kullanılır?
Föyde LCD’nin HD44780 kontrolcüsüne göre 4 bit veri iletişim modu ile bağlanması istenir. Bunun nedeni, daha az pin kullanarak aynı veriyi iki parçada iletebilmektir. Böylece STM32’nin gereksiz pin tüketimi azaltılır. LCD’nin üst satırında “ODA SICAKLIGI”, alt satırında ise örneğin 24.7 °C gösterilir.
- RS ve E kontrol hatları doğru bağlanmalıdır.
- D4-D7 veri hatları 4 bit modda kullanılır.
- RW hattı çoğu basit uygulamada yazma yönünde sabitlenebilir.
- Kontrast ayarı için potansiyometre kullanmak görüntüyü netleştirir.
HAL ile temel ADC okuma örneği
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)
{
uint32_t adc = HAL_ADC_GetValue(&hadc1);
float voltage = 3.3f * adc / 4095.0f;
float tempC = voltage * 100.0f;
}Doğruluğu etkileyen faktörler
- Referans geriliminin kararlılığı
- Giriş hattındaki gürültü
- Kablolama ve ortak topraklama hataları
- Örnekleme süresinin yanlış seçilmesi
- Analog girişin boşa bırakılması
Rapor yazarken sadece formülü vermek yerine, ölçüm hatasına neden olabilecek fiziksel sebepleri de belirtmek içerik kalitesini ciddi biçimde artırır.
Rapor için kısa sonuç
STM32 ADC modülü, analog giriş gerilimini sayısal değere dönüştürür. Potansiyometre uygulamasında ADC değeri LED sayısına eşlenerek görsel bir seviye göstergesi elde edilir. LM35 uygulamasında ise okunan ADC değeri gerilime, ardından sıcaklığa çevrilerek 16×2 LCD üzerinde gösterilir.
ADC’den sonra sıradaki mantıksal adım zamanlayıcı ve darbe üretimidir. Bunun için PWM nedir? yazısına geçebilirsin.
Bir yanıt yazın