STM32F4 Dijital Analog Çeviriciler
2(iki) adet 12-bit Dijital Analog çevirici (DAC) mevcuttur. Prensip
blok diyagram Figür 1’de gösterilmiştir.(Kaynak Fig.48, RM0090, sayfa 251).
Figür 1. Tek bir DAC için blok diyagram
Aktif DAC aşağıdaki kısımda gösterilmiştir.
Mikrodenetleyicinin sol tarafına gelen tüm pinler referans sinyali ve güç
kaynağı hatları ile bu çalışma desteklenir. DAC’ın çıkışı sağ taraftaki pindir. Kullanıcı programda analog sinyale çevrilecek olan veriyi DAC içinde
bulunan DHR register’a yazar. Buradan veri DOR isimli register içerisine
gönderilir ve aynı anda DAC ile analog sinyale çevrilir.
DAC_DHR12R1 DAC kanal 1 için sağ tarafta hizalandırılmış
12-bit register
DAC_DHR12L1 DAC kanal 1 için sol tarafa hizalandırılmış
12-bit register
DAC_DHR8R1 DAC kanal 1 sağ hizalandırılmış 8-bit register
DAC_DHR12R2 DAC kanal 2 sağ hizalandırılmış 12-bit
register’dır. Bu register yapları DHR register’da yer alırlar.
DHR register içerisine gönderilen veri otomatik olarak DOR
register içerisine taşınır. Fakat bu yazılım aracılığıyla (SWTRIGx), donanım
aracılığı ile (TIMx_TRGO) veya harici sinyaller ile (EXTI_9) Figür 1’de DHR
register’ın üst tarafında yer alan Multiplexer’ın kontrol register’ı olan
TSELx[2:0] ile tanımlanmaktadır. DHR register’ın her yarımı bir DAC için kullanılır.
Böyle bir organizasyon seçilen iki DAC üzerinden sinyalleri eş zamanlı bir
şekilde dışarı verir. Direkt hafıza erişimi (DMA Direct Memory Access)
kullanılarak veri DAC’a gönderilebilir.
Ek olarak donanımda “Control logicx box” adı verilen gürültü
üretebilen veya üçgen dalga sinyali üretebilen bir yapı vardır.
İki DAC içinde DAC-CR(DAC kontrol register), DAC_SWTRIGR
(DAC software Trigger register) ve DAC_SR(DAC durum register’ı) bit’ler tanımlanmıştır.
Detaylı bilgi için RM0090 dokümanının bölüm 12’sine bakabilirsiniz.
Örnek programımızda 2(iki) DAC kullanılarak farklı testere
dişi (saw-tooth) sinyaller oluşturulmuştur. Başlangıçta her iki DAC’ın kurulumu
yapılır ve sonsuz döngüye girilir. Döngü içerisinde testere-dişi sinyali için
veriler hesaplanır ve DAC_DHR12R1 ve DAC_DHR12R2 register’larına yazılır.
#include "stm32f4xx.h"
/*
PA4 & PA5 çıkışları -> bu pinler analog olmak zorundadır!
GPIOA->MODER |= 0x00000f00;
*/
int main () {
unsigned int j;
RCC->APB1ENR |= 0x20000000;
// DAC clock aktif edilir.
DAC->CR |= 0x00010001; // DAC kontrol register her iki kanal da açık
GPIOA->MODER |= 0x00000f00; // MODE PortA, PA4 & PA5 analog çıkış yapılır
while (1) { // sonsuz döngü
DAC->DHR12R1 = j & 0xfff; // yükselen rampa
DAC->DHR12R2 = 0xfff - (j & 0xfff); // düşen rampa
j = (j + 1) & 0x0fff; // yeni değer hesapla
};
};
Şimdilik bu kadar arkadaşlar
Sorularınız ve önerileriniz için m.hakki.kaplan@gmail.com adresinden her zaman bana ulaşabilirsiniz.
Hakkı KAPLAN
Hiç yorum yok:
Yorum Gönder