- Gerekli Bileşenler
- MCP4725 DAC Modülü (Dijital - Analog Dönüştürücü)
- MCP4725'te I2C İletişimi
- Devre Şeması ve Açıklama
- Dijitalden Analoğa Dönüştürme için STM32F103C8 Programlama
- DAC'yi STM32 ile test etme
Mikrodenetleyicilerin yalnızca dijital değerlerle çalıştığını hepimiz biliyoruz, ancak gerçek dünyada analog sinyallerle uğraşmak zorundayız. Bu nedenle ADC (Analogdan Dijitale Dönüştürücüler), gerçek dünyadaki Analog değerleri Dijital forma dönüştürmek için vardır, böylece mikro denetleyiciler sinyalleri işleyebilir. Ama ya dijital değerlerden Analog sinyallere ihtiyacımız olursa, işte DAC (Dijitalden Analog Dönüştürücü) geliyor.
Dijitalden Analoğa dönüştürücü için basit bir örnek, bir şarkıcının mikrofonu kullandığı ve bir şarkı söylediği stüdyoda bir şarkıyı kaydetmektir. Bu analog ses dalgaları dijital forma dönüştürülür ve daha sonra bir dijital format dosyasında saklanır ve şarkı, depolanan dijital dosya kullanılarak çalındığında, bu dijital değerler, hoparlör çıkışı için analog sinyallere dönüştürülür. Yani bu sistemde DAC kullanılmaktadır.
DAC, Motor kontrolü, LED Işıkların Kontrol Parlaklığı, Ses Amplifikatörü, Video Kodlayıcılar, Veri Toplama Sistemleri vb . Birçok uygulamada kullanılabilir.
MCP4725 DAC Modülünü Arduino ile zaten arayüzledik. Bugün , STM32F103C8 Mikrodenetleyiciyi kullanarak bir Dijital-Analog dönüştürücü tasarlamak için aynı MCP4725 DAC IC'yi kullanacağız .
Gerekli Bileşenler
- STM32F103C8
- MCP4725 DAC IC
- 10k Potansiyometre
- 16x2 LCD ekran
- Breadboard
- Kabloların Bağlanması
MCP4725 DAC Modülü (Dijital - Analog Dönüştürücü)
MCP4725 IC, (0'dan 5V'a) çıkış analog voltajları üretmek için kullanılan ve I2C iletişimi kullanılarak kontrol edilen 12 Bit Dijital-Analog Dönüştürücü Modülüdür. Ayrıca yerleşik kalıcı bellek EEPROM ile birlikte gelir.
Bu IC, 12-Bit çözünürlüğe sahiptir. Bu, referans voltajına göre voltaj çıkışı sağlamak için girdi olarak (0 ila 4096) kullandığımız anlamına gelir. Maksimum referans voltajı 5V'tur.
Çıkış Voltajını hesaplamak için formül
O / P Voltajı = (Referans Voltaj / Çözünürlük) x Dijital Değer
Örneğin referans voltajı olarak 5V kullanırsak ve dijital değerin 2048 olduğunu varsayalım. Yani DAC çıkışını hesaplamak için.
O / P Voltajı = (5/4096) x 2048 = 2.5V
MCP4725'in pin çıkışıAşağıda, pim adlarını açıkça belirten MCP4725 resmi bulunmaktadır.
MCP4725'in Pinleri |
Kullanım |
DIŞARI |
Çıkışlar Analog Gerilim |
GND |
Çıkış için GND |
SCL |
I2C Seri Saat hattı |
SDA |
I2C Seri Veri hattı |
VCC |
Giriş Referans Voltajı 5V veya 3.3V |
GND |
Giriş için GND |
MCP4725'te I2C İletişimi
Bu DAC IC, I2C iletişimini kullanan herhangi bir mikro denetleyici ile arayüzlenebilir. I2C iletişimi yalnızca iki kablolu SCL ve SDA gerektirir. Varsayılan olarak, MCP4725 için I2C adresi 0x60'tır. STM32F103C8'deki I2C iletişimi hakkında daha fazla bilgi edinmek için bağlantıyı takip edin.
STM32F103C8'deki I2C pimleri:
SDA: PB7 veya PB9, PB11.
SCL: PB6 veya PB8, PB10.
Devre Şeması ve Açıklama
STM32F103C8 ve 16x2 LCD arasındaki bağlantılar
LCD Pin Hayır |
LCD Pin Adı |
STM32 Pin Adı |
1 |
Zemin (Gnd) |
Zemin (G) |
2 |
VCC |
5V |
3 |
VEE |
Kontrast için Potansiyometre Merkezi'nden 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) |
MCP4725 DAC IC ve STM32F103C8 arasındaki bağlantı
MCP4725 |
STM32F103C8 |
Multimetre |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
DIŞARI |
PA1 |
Pozitif Prob |
GND |
GND |
Negatif Prob |
VCC |
3.3V |
NC |
STM32F10C8'in PA1 analog girişine (ADC) bağlı merkez pimi, GND'ye bağlı Sol Pim ve 3,3V STM32F103C8'e bağlı çoğu pim ile bir potansiyometre de bağlanmıştır.
Bu eğitimde , STM32 ile bir MCP4725 DAC IC bağlayacağız ve STM32 ADC pin PA0'a analog giriş değeri sağlamak için bir 10k potansiyometre kullanacağız. Ve sonra analog değeri dijital forma dönüştürmek için ADC'yi kullanın. Bundan sonra bu dijital değerleri I2C veri yolu üzerinden MCP4725'e gönderin. Daha sonra DAC MCP4725 IC'yi kullanarak bu dijital değerleri analoga dönüştürün ve sonra MCP4725'in analog çıkışını pin OUT'dan kontrol etmek için STM32'nin başka bir ADC pin PA1'i kullanın. Son olarak, 16x2 LCD ekranda hem ADC hem de DAC değerlerini voltajlarla görüntüleyin.
Dijitalden Analoğa Dönüştürme için STM32F103C8 Programlama
STM32F103C8'e kod yüklemek için artık bir FTDI programcısına gerek yoktur. STM32'nin USB portu üzerinden PC'ye bağlayın ve ARDUINO IDE ile programlamaya başlayın. STM32'nizi Arduino IDE'de Programlama hakkında daha fazla bilgi edinmek için bu bağlantıyı ziyaret edin. Bu STM32 DAC öğreticisinin tam programı sonunda verilmiştir.
İlk olarak, wire.h, SoftWire.h ve liquidcrystal.h kitaplığını kullanarak I2C ve LCD için kitaplığı dahil edin. STM32 Mikrodenetleyicideki I2C hakkında daha fazla bilgiyi buradan edinebilirsiniz.
#Dahil etmek
Daha sonra, STM32F103C8 ile bağlanan LCD pinlerine göre LCD pinlerini tanımlayın ve başlatın
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Ardından MCP4725 DAC IC'nin I2C adresini tanımlayın. MCP4725 DAC varsayılan I2C adresi 0x60'tır
#define MCP4725 0x60
Geçersiz kurulumda ()
Önce STM32F103C8'in PB7 (SDA) ve PB6 (SCL) pinlerinde I2C iletişimine başlayın.
Wire.begin (); // I2C iletişimini başlatır
Daha sonra LCD ekranı 16x2 moduna ayarlayın ve bir karşılama mesajı görüntüleyin.
lcd.begin (16,2); lcd.print ("DEVRE DIGEST"); gecikme (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("MCP4725 ile DAC"); gecikme (2000); lcd.clear ();
Boşluk döngüsünde ()
1. Önce tampona kontrol bayt değerini (0b01000000) koyun.
(010-MCP4725'i Yazma modunda ayarlar) arabellek = 0b01000000;
2. Aşağıdaki ifade, analog değeri PA0 pininden okur ve ADC 12-bit çözünürlük olduğundan ve adc değişkeninde sakladığından bunu 0 ile 4096 arasında değişen dijital değere dönüştürür.
adc = analogRead (PA0);
3. Bu aşağıdaki ifade, 3.3V referans voltajı ile ADC giriş değerinden (0 - 4096) gelen voltajı hesaplamak için kullanılan bir formüldür.
float ipvolt = (3.3 / 4096.0) * adc;
4. ADC değişkeninde 4 biti sağa kaydırarak En önemli bit değerlerini arabelleğe ve adc değişkeninde 4 biti sola kaydırarak arabellekte en az önemli bit değerlerini yerleştirin.
tampon = adc >> 4; tampon = adc << 4;
5. Aşağıdaki ifade, DAC çıkışı olan STM32'nin ADC pini PA1'den (MCP4725 DAC IC'nin OUTPUT pini) analog değeri okur. Bu pin, çıkış voltajını kontrol etmek için multimetreye de bağlanabilir.
işaretsiz int analogread = analogRead (PA1);
6. Ayrıca, değişken analogdan gelen voltaj değeri, aşağıdaki ifadeye sahip formül kullanılarak hesaplanır.
float opvolt = (3.3 / 4096.0) * analogread;
7. Aynı boşluk döngüsünde () aşağıda açıklanan birkaç başka ifade vardır
İletime MCP4725 ile başlar:
Wire.beginTransmission (MCP4725);
Kontrol baytını I2C'ye gönderir
Wire.write (arabellek);
MSB'yi I2C'ye gönderir
Wire.write (arabellek);
LSB'yi I2C'ye gönderir
Wire.write (arabellek);
İletimi bitirir
Wire.endTransmission ();
Şimdi bu sonuçları lcd.print () kullanarak LCD 16x2 ekranda görüntüleyin
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); gecikme (500); lcd.clear ();
DAC'yi STM32 ile test etme
Potansiyometreyi döndürerek giriş ADC değerini ve voltajını değiştirdiğimizde, çıkış DAC değeri ve voltajı da değişir. Burada LCD ekranın ilk satırında giriş değerleri ve ikinci satırda çıkış değerleri gösterilir. Analog voltajı doğrulamak için MCP4725 Çıkış Pinine bir multimetre de bağlanır.
Tanıtım Videosu ile kodun tamamı aşağıda verilmiştir.