- PWM (Modülasyonlu Darbe) nedir?
- STM32'de PWM
- Gerekli Bileşenler
- STM32 Pin Detayları
- Devre Şeması ve Bağlantılar
- STM32'nin Programlanması
Önceki makalede, STM32 kullanarak ADC dönüşümünü görmüştük. Bu eğitimde, STM32'deki PWM (Darbe Genişliği Modülasyonu) hakkında bilgi edineceğiz ve PWM tekniğini kullanarak LED'in parlaklığını veya DC fan hızını nasıl kontrol edebileceğimizi öğreneceğiz.
İki tür sinyal olduğunu biliyoruz: Analog ve Dijital. Analog sinyaller (3V, 1V… vb.) Gibi voltajlara ve dijital sinyallerde (1 've 0'lar) vardır. Sensör çıkışları analog sinyallerdendir ve bu analog sinyaller ADC kullanılarak dijitale dönüştürülür çünkü mikrodenetleyiciler yalnızca dijitali anlar. Bu ADC değerlerini işledikten sonra, analog cihazları çalıştırmak için çıkışın tekrar analog forma dönüştürülmesi gerekir. Bunun için PWM, Digital to Analog (DAC) dönüştürücüler vb. Gibi belirli yöntemler kullanıyoruz.
PWM (Modülasyonlu Darbe) nedir?
PWM, motor hızı, led parlaklığı vb. Gibi dijital değerleri kullanarak analog cihazları kontrol etmenin bir yoludur. Motor ve ledin analog sinyal üzerinde çalıştığını biliyoruz. Ancak PWM saf analog çıkış sağlamaz, PWM görev döngüsü tarafından sağlanan kısa darbelerle yapılan analog sinyale benzer.
PWM'nin görev döngüsü
PWM sinyalinin YÜKSEK (açık kalma süresi) kaldığı sürenin yüzdesi görev döngüsü olarak adlandırılır. Sinyal her zaman AÇIK ise% 100 görev döngüsündedir ve her zaman kapalıysa% 0 görev çevrimidir.
Görev Döngüsü = Açma süresi / (Açma süresi + Kapatma süresi)
STM32'de PWM
STM32F103C8'in 15 PWM pini ve 10 ADC pini vardır. 7 zamanlayıcı vardır ve her PWM çıkışı 4 zamanlayıcıya bağlı bir kanal tarafından sağlanır. 16-bit PWM çözünürlüğüne (2 16) sahiptir, yani sayaçlar ve değişkenler 65535 kadar büyük olabilir. 72MHz saat hızı ile, bir PWM çıktısının maksimum süresi yaklaşık bir milisaniye olabilir.
- Bu yüzden 65535 değeri, LED'in TAM PARLAKLIĞINI VE DC FANIN TAM HIZINI verir (% 100 Görev Döngüsü)
- Aynı şekilde 32767 değeri, LED'in YARI PARLAKLIĞINI VE DC FANIN YARIM HIZINI verir (% 50 Görev Döngüsü)
- Ve 13107 değeri (% 20) PARLAKLIK VE (% 20) HIZ (% 20 Görev Döngüsü) verir
Bu eğitimde, LED'in parlaklığını ve bir DC fanın hızını PWM tekniği ile değiştirmek için potansiyometre ve STM32 kullanıyoruz. ADC değerini (0-4095) ve çıktı olan değiştirilen değişkeni (PWM değeri) (0-65535) görüntülemek için 16x2 LCD kullanılır.
İşte diğer Mikroişlemci ile birkaç PWM örneği:
- MPLAB ve XC8 ile PIC Mikrodenetleyiciyi kullanarak PWM oluşturma
- Raspberry Pi ile Servo Motor Kontrolü
- PWM kullanarak Arduino Tabanlı LED Dimmer
- MSP430G2 kullanarak Darbe Genişliği Modülasyonu (PWM)
PWM ile ilgili tüm projeleri buradan kontrol edin.
Gerekli Bileşenler
- STM32F103C8
- DC fanı
- ULN2003 Motor Sürücüsü IC
- LED (KIRMIZI)
- LCD (16x2)
- Potansiyometre
- Breadboard
- Batarya 9V
- Atlama Telleri
DC Fan: Burada kullanılan DC fan, eski bir PC'den alınan BLDC fanıdır. Harici bir besleme gerektirdiğinden 9V dc pil kullanıyoruz.
ULN2003 Motor Sürücü IC: Motor tek yönlü olduğundan ve ayrıca fan için harici güç gerektiğinden motoru tek yönde sürmek için kullanılır. ULN2003 tabanlı Motor Sürücü Devresi hakkında daha fazla bilgiyi buradan edinebilirsiniz. ULN2003'ün resim diyagramı aşağıdadır:
Pinler (IN1'den IN7'ye) giriş pinleridir ve (OUT 1'den OUT 7'ye) karşılık gelen çıkış pinleridir. COM, çıkış cihazları için gerekli olan pozitif kaynak voltajı olarak verilir.
LED: KIRMIZI ışık yayan KIRMIZI renkli led kullanılmaktadır. Herhangi bir renk kullanılabilir.
Potansiyometreler: Biri ADC'ye analog giriş için voltaj bölücü, diğeri ledin parlaklığını kontrol etmek için iki potansiyometre kullanılır.
STM32 Pin Detayları
Gördüğümüz gibi PWM pinleri dalga formatında (~) belirtilmiştir, bu tür 15 pin vardır, ADC pinleri yeşil renkte temsil edilir, analog girişler için kullanılan 10 ADC pin vardır.
Devre Şeması ve Bağlantılar
STM32'nin çeşitli bileşenlerle bağlantıları aşağıda açıklanmıştır:
Analog Girişli (ADC) STM32
Devrenin sol tarafında bulunan potansiyometre, 3.3V pininden gelen voltajı düzenleyen voltaj regülatörü olarak kullanılır. Potansiyometreden çıkış, yani potansiyometrenin merkez pini STM32'nin ADC pinine (PA4) bağlanır.
LED'li STM32
STM32 PWM çıkış pini (PA9), bir seri direnç ve bir kapasitör aracılığıyla LED'in pozitif pinine bağlanır.
Dirençli ve Kapasitörlü LED
Seri olarak bir direnç ve paralel bir kapasitör, doğrudan PWM pininden oluşturulduğunda analog çıkış saf olmadığı için PWM çıkışından doğru Analog dalgayı oluşturmak için LED ile bağlanır.
ULN2003 ve ULN2003 ile STM32 Fanlı
STM32 PWM çıkış pini (PA8), ULN2003 IC'nin Giriş pinine (IN1) bağlanır ve ULN2003'ün ilgili çıkış pini (OUT1) DC FAN'ın negatif kablosuna bağlanır.
DC fanın pozitif pini ULN2003 IC'nin COM pinine bağlanır ve harici batarya (9V DC) ayrıca ULN2003 IC'nin aynı COM pinine bağlanır. ULN2003'ün GND pini STM32'nin GND pinine bağlanır ve akü negatifi aynı GND pinine bağlanır.
LCD'li STM32 (16x2)
LCD Pin Hayır |
LCD Pin Adı |
STM32 Pin Adı |
1 |
Zemin (Gnd) |
Zemin (G) |
2 |
VCC |
5V |
3 |
VEE |
Potansiyometre Merkezinden Pim |
4 |
Kayıt Seçimi (RS) |
PB11 |
5 |
Okuma / Yazma (RW) |
Zemin (G) |
6 |
Etkinleştir (EN) |
PB10 |
7 |
Veri Bit 0 (DB0) |
Bağlantı Yok (NC) |
8 |
Veri Bit 1 (DB1) |
Bağlantı Yok (NC) |
9 |
Veri Bit 2 (DB2) |
Bağlantı Yok (NC) |
10 |
Veri Bit 3 (DB3) |
Bağlantı Yok (NC) |
11 |
Veri Bit 4 (DB4) |
PB0 |
12 |
Veri Bit 5 (DB5) |
PB1 |
13 |
Veri Bit 6 (DB6) |
PC13 |
14 |
Veri Bit 7 (DB7) |
PC14 |
15 |
LED Pozitif |
5V |
16 |
LED Negatif |
Zemin (G) |
Sağ tarafta bir potansiyometre, LCD ekranın kontrastını kontrol etmek için kullanılır. Yukarıdaki tablo, LCD ile STM32 arasındaki bağlantıyı göstermektedir.
STM32'nin Programlanması
Önceki eğitimde olduğu gibi, STM32F103C8'i FTDI programlayıcı kullanmadan USB portu üzerinden Arduino IDE ile programladık. STM32'yi Arduino IDE ile programlamayı öğrenmek için bağlantıyı takip edin. Arduino'daki gibi programlamaya devam edebiliriz. Sonunda tam kod verilmiştir.
Bu kodlamada sol potansiyometrenin orta pinine bağlı ADC pininden (PA4) bir giriş analog değeri alacağız ve daha sonra Analog değeri (0-3.3V) sayısal veya tamsayı formata (0-4095) çevireceğiz. Bu dijital değer ayrıca, LED parlaklığını ve DC fan hızını kontrol etmek için PWM çıkışı olarak sağlanır. ADC'yi ve eşlenen değeri (PWM çıkış değeri) görüntülemek için 16x2 LCD kullanılır.
Öncelikle LCD başlık dosyasını eklememiz, LCD pinlerini beyan etmemiz ve aşağıdaki kodu kullanarak bunları başlatmamız gerekiyor. LCD ile STM32 arasında arayüz oluşturma hakkında daha fazla bilgiyi burada bulabilirsiniz.
#Dahil etmek
Ardından, STM32'nin pinini kullanarak pin adlarını açıklayın ve tanımlayın
const int analoginput = PA4; // Potansiyometreden giriş const int led = PA9; // LED çıkışı const int fan = PA8; // fan çıkışı
Şimdi kurulumun () içinde, bazı mesajları görüntülememiz ve birkaç saniye sonra bunları temizlememiz ve INPUT pinini ve PWM çıkış pinlerini belirlememiz gerekiyor
lcd.begin (16,2); // LCD'yi hazırlama lcd.clear (); // LCD lcd.setCursor (0,0); // İmleci satır0 ve column0'a ayarlar lcd.print ("CIRCUIT DIGEST"); // Devre Özeti'ni görüntüler lcd.setCursor (0,1); // İmleci sütun0 ve satır1'de ayarlar lcd.print ("PWM STM32 KULLANARAK"); // STM32 gecikmesini kullanarak PWM'yi görüntüler (2000); // Gecikme Zamanı lcd.clear (); // LCD pinMode'u (analoginput, INPUT) temizler ; // pin modu analog girişini INPUT pinMode (led, PWM) olarak ayarlayın; // pin modu ledini PWM çıkış pinMode (fan, PWM) olarak ayarlayın; // pin modu fanını PWM çıkışı olarak ayarla
Analog giriş pini (PA4) pinMode (analog giriş , GİRİŞ) tarafından GİRİŞ olarak, LED pini pinMode (led, PWM) tarafından PWM çıkışı olarak ve fan pini pinMode (fan, PWM) tarafından PWM çıkışı olarak ayarlanır. Burada PWM çıkış pinleri LED (PA9) ve Fana (PA8) bağlanır.
Ardından void loop () fonksiyonunda, ADC pininden (PA4) Analog sinyali okuyoruz ve aşağıdaki kodu kullanarak analog voltajı dijital tamsayı değerlerine (0-4095) dönüştüren bir tamsayı değişkeninde saklıyoruz int valueadc = analogRead (analoginput);
Burada dikkat edilmesi gereken önemli nokta, STM32'nin 16-Bit çözünürlüğe sahip (0-65535) kanalları olan PWM pinleridir, bu yüzden aşağıdaki gibi harita işlevini kullanarak bunu analog değerlerle eşleştirmemiz gerekir.
int sonuç = eşleme (valueadc, 0, 4095, 0, 65535).
Haritalama kullanılmazsa, potansiyometreyi değiştirerek tam fan hızı veya tam LED parlaklığı elde edemeyiz.
Daha sonra pwmWrite (led, result) kullanarak LED'e PWM çıkışı ve pwmWrite (fan, result ) fonksiyonlarını kullanarak PWM çıkışını fana yazıyoruz .
Son olarak Analog giriş değerini (ADC değeri) ve çıkış değerlerini (PWM değerleri) aşağıdaki komutları kullanarak LCD ekranda görüntülüyoruz.
lcd.setCursor (0,0); // İmleci satır0 ve column0'da ayarlar lcd.print ("ADC değeri ="); // “” lcd.print (valueadc) sözcüklerini yazdırır ; // valueadc lcd.setCursor (0,1) 'i görüntüler; // İmleci sütun0 ve satır1'de ayarlar lcd.print ("Output ="); // kelimeleri "" içinde yazdırır lcd.print (sonuç); // değer sonucunu gösterir
Bir tanıtım videosuyla birlikte eksiksiz kod aşağıda verilmiştir.