TEKNİK YAZI

ADC-Analog Digital Converter Kullanımı Üzerine

Bildiğiniz üzere tüm dünya analogtur. Bu yüzden ona ait herhangi bir şeyi dijital sistemlerimiz ile  ölçüp değerlendirmek, işlemek ve bu değerlere göre belli görevlerin komutlarını yaptırmak istersek  ADC ye yani Analog Digital Converter a ihtiyacımız vardır.

Nedir bu ADC?

adctodigit

ADC adından da anlaşılabileceği üzere analog sinyali bizim dijital sistemimizin algılayabileceği dijital veri haline dönüştürür. Piyasa da çok çeşitli ADC entegreleri bulunmakla birlikte teknolojinin gelişmesiyle bu ADC ler artık mikroişlemcilerin içerisine girmişlerdir. Mikroişlemcilerde bulunan ADC ler genel olarak 10-12 bit çözünürlüktedirler. Daha fazla çözünürlüğe ihtiyacımız varsa harici olarak entegre şeklinde 16 ve 24 bit olan modellerini de üreticilerden bulabiliriz.

ADC nin ne olduğuna daha fazla girmeden asıl konumuz olan ADC ile nasıl en iyi ölçümü yapabiliriz bundan bahsetmek istiyorum.  Fazla karmaşık ya da fazla madde olmamakla birlikte bunlara dikkat etmezseniz eğer çok saç baş yolacağınızı size garanti ederim. Anlatacağım püf noktalarının tamamını ayrıca kendi çalışmalarım da birebir tecrübe ettim. ADC kullanacaksanız bunlardan pek de kaçış yok.

Elektronikte tüm işlerde olduğu gibi ADC okumada da en büyük sıkıntı sinyal üzerindeki gürültülerdir. Bu gürültü ölçeceğimiz sinyal üzerinde olabileceği gibi kullandığımız ADC nin referans voltajında da olabilir. Referans voltajının gürültülü olması genelde gözardı edilir ve ölçtüğünüz sinyale donanımsal ve yazılımsal filtre ordusu kursanız bile ölçümünüz kararlı hale gelmez.

Bu şekilde laf lafı açıyor en iyisi madde madde ilerlemek.

1- REFERANS VOLTAJI:

Mikroişlemcide olsun harici ADC entegresinde olsun ADC ler her zaman bir referans voltajına ihtiyaç duyarlar. Genelde bu referans voltajın entegrenin ya da mikroişlemcinin besleme pininden direk olarak alınır. Öncelikle isterseniz referans voltajının ne olduğundan bahsedelim biraz.

ADC lerin 10 ,12, 16 24 vb…. bit çözünürlükte bulunduğundan bahsetmiştik. En yaygın kullanımda olan Microchip firmasının PIC mikroişlemcileri üzerinden konuşacak olursak. Pic mikroişlemcilerin ADC si 10 bit’tir. 10 bit 2^10=1024 . Tüm işlemcilerde olduğu gibi bu işlemcilerde de referans voltajı maksimum mikroişlemcinin besleme voltajı olan 5 V olarak kullanılır. Referans voltajımızı 5 V olarak belirlediğimizde, ADC modülü 1024 değerinin her birine bu voltajı eşit olarak dağıtır.  Yani ADC modülü okuduğumuzda 0 volt= 0,  5 V=1023 değeri ile bize döner. Her bir bit değerinin alacağı voltaj değerine bakarsak 5/1024=0.00488 volt olarak karşımıza çıkmaktadır. Yani diyelimki ADC modülden okuma yaptığımızda 500 değerini alıyor isek yazılımda 500*0.00488 işlemini yaparak ADC mizin girişindeki voltajın 2.44 volt olduğunu hesaplamış oluruz.

Ancak genelde bu hesaplama tutmaz. Tuttuğu tek yer proteusdaki simulasyon ortamıdır. Neden?

– Öncelikle mikroşlemcimizin besleme voltajını kontrol etmemiz gerekli. Mikroişlemcinizin besleme voltajını ölçün ve voltaj hesaplamak için gerekli çarpan olan 0.00488 değerini ona göre revize edin. Mikroişlemciyi beslemek için 5 volt adaptör olsun regüle entegresi kullanmış olsun, hiçbiri ideal olamayacağı için tüm bunların çıkışları birbirinden farklıdır. 5 volt yerine 4.90 volt ise beslemeniz çarpım değeriniz 0.00478 olmalıdır.

– Bu kadar küçük değerler benim ölçümümü nasıl etkiler ki?

Eğer 5 V ölçüyorsanız ve size 1 Voltluk bir çözünürlük yetiyor ise hiç problem değil referansı 5 V olarak varsayıp işlem yapabilirsiniz. Ancak diyelim ki 100 Volt DC voltaj ölçümü yapacaksınız ve bu voltajı ölçmek için gerilim bölücü ile 100 voltu 5 V değerine oranladınız.  Ölçüm sonucunun hatalı çıktığını görebilirsiniz. Uygulama alanına göre projenizde ihtiyacınız olan hassasiyet oranına göre bunu göz önünde bulundurmanız gerekmekte.

Referans gerilimimizi besleme voltajından almıştık. Ölçtük ve multimetremizin ekranında besleme değerini 5 V olarak görüyoruz. Her şey yolunda gibi ancak gerçekler malesef öyle değil. Kullandığımız multimetreler ölçtükleri voltajın RMS değerini bize gösterirler. Yani aslında sinyalimizde gürültüler mevcut ve biz bunları ancak osiloskop ile görebiliriz. Besleme kaynağımız kötü ise halihazırda multimetre RMS ölçmesine rağmen besleme değerimizin 4,90 ile 5 V arasında değiştiğini görebiliriz. Eğer bir ölçü aletiniz yoksa ya da kaynağınızdaki oynamaları net olarak görmek isterseniz, besleme voltajınızı gerilim bölücü ile ikiye bölüp direk olarak okuma yapacağınız pine bağlayıp görebilirsiniz.

– Besleme gerilimim uygulamam için yeterince düzgün ancak devreyi çalıştırırken arada ölçüm sonuçları kararsız bir yapıda oynamalar gösteriyor vb… Neden?

Eğer devremiz analog okuma ile birlikte bir ldc ekran çalıştırıyor, röleler açıp kapatıyor, buzzerlar ledler vb elemanları kontrol ediyorsa çalışma esnasında ADC yi takip ederseniz bu elemanların her bir hareketinde voltajınızda meydana gelebilecek dalgalanmalar nedeniyle ölçüm sonuçlarınız da dalgalanacaktır. Hele ki çok zayıf, çıkış akımı çok düşük bir beslemeniz varsa eğer örneğin seri porttan bir veri basarken bile voltajınızda oynamalar olabilir.

Çözüm: İlk olarak devrenizin voltaj girişinden başlamak üzere, mikroişlemcinizin besleme pinlerinin en yakınına ve anlık olarak mikroişlemciye göre yüksek akım çeken elemanların beslemelerine birer kondansatör koymalısınız. Bu kondansatör değerini abartıp kule gibi kondansatörler takmamanızı rica ediyorum.

Gördüğünüz gibi referans voltajını dahili beslemeden aldığımızda başlıca karşımıza çıkabilecek sorunlar bunlar olmakla birlikte uygulamanıza göre karşınıza çok daha farklı durumlar çıkabilir. Peki çözüm?

Referans voltajını referans pininden sağlayınız. Bu demek değildir ki mikroişlemcinin beslemesini direk getirip referans pinine bağlayayım. Bu şekilde yapıldığında değişen bişey olmayacaktır.

 

En basit şekilde 4.5 voltluk bir zener ile referans voltajını 4.5 volta çekip bu zener diyotu bir de kapasitör ile desteklerseniz yukarıda bahsettiğimiz sorunların %90 ını çözmüş olursunuz.

 lpf

Ancak hassas ölçüm yapmanız gereken bir proje ile karşı karşıya iseniz, bu çözüm sizin için yeterli olmayabilir. Bunun için üreticiler voltaj referans entegreleri üretmişlerdir. Piyasada çeşitli firmaların ürünlerine rastlayabilirsiniz. Kullanım içinde mutlaka veri sayfasında belirtilen kriterlere dikkat ederek kullanınız. Ben en çok Texas Instruments firmasının ürünlerinden memnun kaldım ve kullanıyorum. Bu entegreler ile yüksek çözünürlüklerde dahi son derece temiz bir referans geriliminiz olacağını rahatlıkla söyleyebilirim.

Referans gerilimi mevzusunun bu kadar uzamasının nedeni yukarda da bahsettiğim gibi ADC sonuçlarında görülen kararsızlıkların düzeltilmesi için analog sinyale müdahaleler yapılır yazılımda ekstra filtreler konulur ancak yeterince kararlı bir yapı elde edilemez. Referans voltajına gereken önem verilmez genelde. Özellikle de devremiz SMPS bir beslemeden SMPS regüle entegresinden besleniyor ise kararsızlık çok daha ciddi şekilde karşımıza çıkacaktır. SMPS ler verimli olmasına verimlidir ancak aynı zamanda bir numaralı gürültü kaynaklarıdırlar.

2- FİLTRE:

Referans gerilimi olayını çözdük. Geldik sinyalimizi ölçmeye.

İki çeşit filtreleme tipi mevcuttur. Yazılımsal filtreleme ve donanımsal filtreleme.

Donanımsal filtreleme de çeşitli filtre tipleri bulunmakla birlikte ADC ölçümünde yaygın olarak alçak geçiren filtre kullanılmaktadır. Bir direnç ve bir kapasitör gibi basit elemanlarla oluşturulabilmesinin yanı sıra bir o kadar da etkilidir.

lpf1

Alçak geçiren filtrelerle ilgili en güzel kaynak olarak Fatih Erdem in yazısını okuyabilirsiniz.

http://www.fatiherdem.net/r-ve-c-elemanlariyla-alcak-geciren-filtrelow-pass-filter-tasarlayalim/

Sinyalinizde oluşabilecek gürültülerin genellikle yüksek frekanslarda olacağını ve eğer spektrum analyzer gibi sönümlemeniz gereken sinyallerin değerlerini direk olarak göremiyorsanız benim gibi kompanent değerlerini çoğu zaman deneyerek bulacaksanız eğer kesim frekansını hesaplarken 1 Khz gibi frekanslardan başlayarak R ve C değerlerini denemenizi öneririm. Tabi bu ölçtüğünüz sinyalin frekansına göre yine değişiklik gösterecektir. DC gerilim ölçtüğünüzü ya da 50 Hz bir AC sinyal ölçtüğünüzü varsayarak 1 Khz i belirttim.

Alçak geçiren filtrede dikkat edilmesi gereken ise eğer yüksek bir direnç değeri seçerseniz ölçeceğiniz gerilimin düşeceğidir. Hesaplamalarınızda buna dikkat ederek hareket etmenizi tavsiye ederim.

Mikroişlemcilerde ADC okuma ile birlikte başka birçok işlemler yapıldığından, kesmeler meydana geldiğinden, farklı yerlere dallanmalar olabileceğinden dolayı  ADC okuma da işi olabildiğince donanım tarafında bitirip mikroişlemciye en temiz sinyali ulaştırmaya gayret edin. En basit yazılımsal filtreleme yöntemi olan belli bir sayıda örnek alıp bunların ortalamasını alma yönteminde bile bu işlemler belli bir zaman almaktadır. Örnek alırken programınız örneğin bir seri port kesmesine gidebilir ve ölçüm sonuçlarınızın yanlış olmasına neden olabilir. Son olarak bu ortalama alma tekniğinden de bahsedip yazımızı sonlandıralım. Bu filtreleme de uygulamanızda belli periyotlarda belli sayılarda örnek alıp bu örnekleri toplayıp sonra da örnek sayısına bölmek yeterli olacaktır. Uygulamanıza göre bu örnek alma sıklığını örnek alma sayısını değiştirebilirsiniz. Mikroişlemciler 2 lik sistemde çalıştıklarından dolayı alacağınız örnek sayısı da 2 nin katları şeklinde olursa daha sağlıklı bir bölme yapılmış olacaktır. Tavsiyem 64 veya 128 örnek almanız. Eğer Ti ın Tiva serisi gibi gelişmiş bir işlemci ile çalışıyorsanız buna hiç gerek kalmayacaktır. Çünkü tiva nın ADC modülünde bahsettiğimiz ortalama alma işlemi donanımsal bir modül ile yapılıp size ADC sonucu olarak direk bu ortalama değer verilmektedir.

Daha yazılabilecek çok şey var ancak yazıyı uzatıp fazla da sıkmayalım. Belki bir ikinci yazı ile devam ederiz.

Sizlerinde ADC üzerine tecrübeleriniz bildiğiniz püf noktalar var ise yorum olarak bırakırsanız hepsini bu yazıya ekleyelim.

Hepinize gürültüsüz beslemeler, kararlı ADC sonuçları diliyorum.

Selametle.

  • kasva

    verdiğiniz bilgiler için teşekkürler.bu konuyla alakalı 2. yazınızı bekliyorum

  • burak

    Yazınızı çok faydalı buldum. Ben de 2. için takipteyim.

  • murat öztürk

    programlamaya baslarken bır çok zorlukla karşılaşacağımı biliyordum ve cevremde kimse olmadığı için çekinmekteydim.
    AMA SİZLER SAYESİNDE BUNLARI AŞMAM KOLAY OLDU . PAYLAŞIMLAR İÇİN TESEKKÜR EDERİM.

    İYİ ÇALIŞMALAR…

  • vref=5/1023 olmaliydi.
    saygılar.

  • Mehmet

    Değerli arkadaşlar,
    Böyle bir siteyi yayılayarak ve değerli bilgilerinizi, değerli vakit ve zamanınızı harcayıp paylaşarak büyük bir iş yapıyorsunuz. Elektronik konusundak amatör ilgi ve heyecanımı bu bilgilerle donatıyor ve size teşekkürlerimi sunuyorum. Bu paylaşma, bilgiyi çoğaltma ve bu bilgiye değer katma vizyonunuzun artarak devam etmesi dileğimle..

  • Metin KOÇ

    Bizde değerli yorumlarınızdan mutluluk duyuyoruz, teşekkürler

  • wy

    Elinize sağlık, rica etsek Vref entegre ismini paylaşabilir misin?