- MCP4921 DAC (Dijital - Analog Dönüştürücü)
- Gerekli Bileşenler
- Şematik
- Kod Açıklama
- PIC kullanarak Dijitalden Analoğa Dönüşümün Test Edilmesi
Dijital ve Analog, Elektroniğin ayrılmaz bir parçasıdır. Cihazların çoğunda hem ADC hem de DAC bulunur ve sinyalleri analogdan dijitale veya dijitalden analoğa dönüştürme ihtiyacı olduğunda kullanılırlar. Ayrıca, ses ve ışık gibi gerçek dünya sinyalleri doğası gereği analogdur, bu nedenle bu gerçek dünya sinyallerinin kullanılması gerektiğinde, örneğin Hoparlörler kullanarak ses üretmek veya bir ışık kaynağını kontrol etmek için dijital sinyallerin analoga dönüştürülmesi gerekir.
Diğer bir DAC türü, Darbe Genişlik Modülatörüdür (PWM). Bir PWM dijital bir kelime alır ve değişken darbe genişliğine sahip bir dijital darbe üretir. Bu sinyal bir filtreden geçtiğinde, sonuç tamamen analog olacaktır. Bir analog sinyal, bir sinyalde birden fazla veri türüne sahip olabilir.
Bu eğitimde, dijitalden analoğa dönüştürme için DAC MCP4921 ile Microchip PIC16F877A arasında arayüz oluşturacağız.
Bu eğitimde, dijital sinyali bir analog sinyale dönüştüreceğiz ve giriş dijital değerini ve çıkış analog değerini 16x2 LCD'de görüntüleyeceğiz. Sonunda verilen videoda gösterilen son analog çıkış olarak 1V, 2V, 3V, 4V ve 5V sağlayacaktır. Raspberry Pi, Arduino ve STM32 kartlarıyla DAC arayüzüne ilişkin değerli eğitimimizde DAC hakkında daha fazla bilgi edinebilirsiniz.
DAC, Motor kontrolü, LED Işıkların Kontrol Parlaklığı, Ses Amplifikatörü, Video Kodlayıcılar, Veri Toplama Sistemleri vb. Gibi birçok uygulamada kullanılabilir. Doğrudan arayüz parçasına atlamadan önce, MCP4921 hakkında bir genel bakışa sahip olmak önemlidir.
MCP4921 DAC (Dijital - Analog Dönüştürücü)
MCP4921, 12 bitlik bir DAC'dir, bu nedenle MCP4921, 12 bitlik çıktı çözünürlüğü sağlayacaktır. DAC çözünürlüğü, analog sinyale dönüştürülebilen dijital bit sayısı anlamına gelir. Bundan ne kadar değer elde edebileceğimiz formüle dayanmaktadır. 12 bit için = 4096'dır. Bu, 12 bit çözünürlüklü DAC'nin 4096 farklı çıktı üretebileceği anlamına gelir.
Bu değeri kullanarak, tek analog adım voltajı kolayca hesaplanabilir. Adımları hesaplamak için referans voltajı gereklidir. Cihazın mantık voltajı 5V olduğundan kademe voltajı 5/4095 (4096-1 çünkü dijital için başlangıç noktası 1 değil, 0) 0.00122100122 milivolttur. Yani 1 bitlik bir değişiklik analog çıkışı 0.00122100122 ile değiştirecektir.
Demek dönüşüm kısmı buydu. MCP4921 8 pimli IC. Pim diyagramı ve açıklaması aşağıda bulunabilir.
MCP4921 IC SPI protokolü tarafından mikrodenetleyici ile iletişim kurar. SPI iletişimi için, bağımlı olarak bağlanan harici cihaza veri veya komut gönderen bir cihazın ana cihaz olması gerekir. SPI iletişim sisteminde, tek bir Ana Cihaz ile birden fazla bağımlı cihaz bağlanabilir.
Verileri ve komutu göndermek için, komut yazmacını anlamak önemlidir.
Aşağıdaki resimde, komut kaydı gösterilmektedir,
Komut kaydını 16 bit registerıdır. Bit-15 ila bit-12, yapılandırma komutu için kullanılır. Veri girişi ve yapılandırma, yukarıdaki resimde açıkça gösterilmektedir. Bu projede, MCP4921 aşağıdaki konfigürasyon olarak kullanılacaktır.
Bit Numarası |
Yapılandırma |
Yapılandırma Değeri |
Bit 15 |
DAC A |
0 |
Bit 14 |
Arabelleğe alınmamış |
0 |
Bit 13 |
1x (V ÇIKIŞ * D / 4096) |
1 |
Bit 12 |
Çıkış Gücü Kapatma Kontrol Bit |
1 |
Böylece ikili, kayıt defterinin D11 ila D0 bitleri tarafından belirlenen verilerle birlikte 0011'dir. 16 bitlik veri 0011 xxxx xxxx xxxx, MSB'nin ilk 4 bitinin konfigürasyon ve geri kalanın LSB olduğu durumlarda gönderilmelidir. Yazma komutu zamanlama diyagramını görerek daha net olacaktır.
Zamanlama diyagramına ve veri sayfasına göre, CS pini MCP4921'e tüm komut yazma süresi boyunca düşüktür.
Şimdi cihaz ile donanım arasında arayüz oluşturma ve kodları yazma zamanı.
Gerekli Bileşenler
Bu proje için aşağıdaki bileşenler gereklidir:
- MCP4921
- PIC16F877A
- 20 MHz Kristal
- A Ekran 16x2 karakter LCD.
- 2k direnç -1 adet
- 33pF kapasitörler - 2 adet
- 4.7k direnç - 1 adet
- Çıkış voltajını ölçmek için çok metre
- Bir breadboard
- 5V güç kaynağı, Bir telefon şarj cihazı çalışabilir.
- Çok sayıda bağlantı kablosu veya berg kablosu
- Programlayıcı kiti ve derleyicili IDE ile mikroçip programlama ortamı
Şematik
DAC4921 ile PIC Mikroişlemci arasında arayüz oluşturmak için Devre Şeması aşağıda verilmiştir:
Devre Breadboard'da inşa edilmiştir.
Kod Açıklama
Dijital sinyalleri PIC16F877A ile analoğa dönüştürmek için tam kod makalenin sonunda verilmiştir. Her zaman olduğu gibi, öncelikle PIC mikro denetleyicide yapılandırma bitlerini ayarlamamız gerekir.
// PIC16F877A Yapılandırma Bit Ayarları // 'C' kaynak satırı yapılandırma ifadeleri // CONFIG #pragma config FOSC = HS // Osilatör Seçim bitleri (HS osilatörü) #pragma config WDTE = KAPALI // Watchdog Zamanlayıcı Etkinleştirme biti (WDT devre dışı) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT devre dışı) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR etkin) #pragma config LVP = OFF // Düşük Voltaj (Tek Kaynak) Devre İçi Seri Programlama Etkinleştirme biti (RB3 / PGM pini PGM işlevine sahiptir; düşük voltajlı programlama etkin) #pragma yapılandırması CPD = KAPALI // Veri EEPROM Bellek Kodu Koruma biti (Veri EEPROM kod koruması kapalı) #pragma config WRT = OFF // Flash Program Belleği Yazmayı Etkinleştirme bitleri (Yazma koruması kapalı; tüm program belleği EECON kontrolü ile yazılabilir) #pragma config CP = OFF // Flash Program Bellek Kodu Koruma biti (Kod koruması kapalı)
Aşağıdaki kod satırları, LCD ve SPI başlık dosyalarını entegre etmek için kullanılır, ayrıca XTAL Frekansı ve DAC'ın CS pin bağlantısı bildirilir.
PIC SPI öğreticisi ve kitaplığı verilen bağlantıda bulunabilir.
#Dahil etmek
SPI_Initialize_Master () işlevi, bu proje için gereken farklı bir yapılandırma için biraz değiştirildi. Bu durumda, SSPSTAT kaydı, veri çıkış süresinin sonunda örneklenen giriş verilerinin ve ayrıca İletim olarak yapılandırılan SPI saatinin, aktif moddan boş saat durumu moduna geçişte gerçekleşeceği şekilde yapılandırılır. Diğer aynıdır.
void SPI_Initialize_Master () { TRISC5 = 0; // Çıktı olarak ayarla SSPSTAT = 0b11000000; // pg 74/234 SSPCON = 0b00100000; // pg 75/234 TRISC3 = 0; // Slave modu için çıktı olarak ayarla }
Ayrıca, aşağıdaki işlev için SPI_Write () biraz değiştirilir. Veri iletimi, SPI üzerinden mükemmel veri iletimini sağlamak için ara bellek temizlendikten sonra gerçekleşir.
void SPI_Write (gelen karakter) { SSPBUF = gelen; // Kullanıcıya verilen veriyi arabelleğe yaz while (! SSPSTATbits.BF); }
Programın önemli kısmı MCP4921 sürücüsüdür. Komut ve dijital veriler, SPI üzerinden tam 16 bitlik veri sağlamak için bir araya getirildiği için biraz zor bir bölümdür. Ancak bu mantık, kod yorumlarında açıkça gösterilmektedir.
/ * Bu Fonksiyon, dijital değeri analoga dönüştürmek içindir. * / void convert_DAC (unsigned int value) { / * Step Size = 2 ^ n, Bu nedenle 12bit 2 ^ 12 = 4096 5V referansı için adım 5/4095 = 0.0012210012210012V veya 1mV (yaklaşık) olacaktır * / unsigned int container; imzasız int MSB; işaretsiz int LSB; / * Adım: 1, 12 bitlik veriyi konteynere depoladı Verinin 4095 olduğunu varsayalım, ikili 1111 1111 1111 * / konteyner = değer; / * Adım: 2 Kukla 8 bit oluşturma. Böylece, 256'ya bölünerek, üst 4 bit LSB LSB = 0000 1111 * / LSB = konteyner / 256; / * Adım: 3 Yapılandırmayı 4 bitlik veriyi delerek gönderme. LSB = 0011 0000 VEYA 0000 1111. Sonuç 0011 1111 * / LSB = (0x30) - LSB; / * Adım: 4 Konteyner hala 21bit değerine sahip. Alttaki 8 bitin çıkarılması. 1111 1111 VE 1111 1111 1111. Sonuç 1111 1111, MSB * / MSB = 0xFF & kapsayıcı; / * Adım: 4 16 bitlik veriyi iki bayta bölerek gönderme. * / DAC_CS = 0; // Veri aktarımı sırasında CS düşük. Veri sayfasına göre SPI_Write (LSB) gereklidir ; SPI_Write (MSB); DAC_CS = 1; }
Ana işlevde, 1V, 2V, 3V, 4V ve 5V çıkışlarını oluşturmak için dijital verilerin oluşturulduğu bir 'for döngüsü' kullanılır. Dijital değer, Çıkış voltajı / 0.0012210012210012 milivolta göre hesaplanır.
void main () { system_init (); Introduction_screen (); int sayı = 0; int volt = 0; while (1) { for (volt = 1; volt <= MAX_VOLT; volt ++) { sayı = volt / 0.0012210012210012; temiz ekran(); lcd_com (FIRST_LINE); lcd_puts ("Gönderilen VERİ: -"); lcd_print_number (sayı); lcd_com (SECOND_LINE); lcd_puts ("Çıktı: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (sayı); __delay_ms (300); } } }
PIC kullanarak Dijitalden Analoğa Dönüşümün Test Edilmesi
Dahili devre Multi-meter kullanılarak test edilir. Aşağıdaki resimlerde çıkış voltajı ve dijital veriler LCD'de gösterilmektedir. Çoklu sayaç yakın okuma gösteriyor.
Çalışan bir video ile eksiksiz Kod aşağıya eklenmiştir.