MCP3424, kanallar paralel olarak nasıl okunur?


9

Bu soru hakkında

Elektronik mühendisliği arka planım yok ve bu I2C aracılığıyla iletişim kurmak ve bir kayıt defterine yazmakla ilgili ilk zorluklarımdan biri, bu yüzden lütfen benim tarafımdan çok fazla bilgi almayın. Bir Arduino programlıyorum.

Belirli bir elektronik bileşen / çip hakkında sorurken, insanların bana doğru bir cevap vermek için deney yapamayacağını / test edemeyeceğini varsayıyorum. Ayrıca insanların bu bileşeni bile bilmeyeceklerini düşünüyorum. Bu yüzden bu soruya çok fazla bilgi eklemeye çalışacağım.

Daha fazla bilgiye ihtiyacınız varsa lütfen bana bildirin.

Bileşenin dört ADC'si var

4-Kanal bileşeni MCP3424 ( veri sayfası ) kullanıyorum. İki pakette gelir. MCP3424 E / SL, 4 kanallı SOIC sürümünü kullanıyorum, MCP3422 veya MCP3423 2 kanallı sürümünü kullanmıyorum.

Dört ADC'si olduğuna inanıyorum. RS-Online'da, E / SL sürümünde 4 ADC ( doğrudan bağlantı ) bulunurken, E / ST'de yalnızca bir ( doğrudan bağlantı ) vardır. resim açıklamasını buraya girin

Bunun birkaç kanalda aynı anda örnekleme yapabileceği anlamına geldiğini varsayıyorum. Bileşene birden fazla ADC koymak için başka bir neden göremiyorum.

Haklı mıyım?

I2C üzerinden iletişim

İletişim, bir yapılandırma baytı gönderildikten sonra bir örneklemenin bitmesini bekleyerek ve sonucu okuyarak gerçekleşir.

Yapılandırma Baytının Biçimi

resim açıklamasını buraya girin

İlginç olanlar:

  • soldan üç bit, 1'den sayma: Sürekli örnekleme
  • soldan bir ve iki bit, 1'den sayma: Adres

Yapılandırma baytı hakkında daha fazla bilgiyi burada da gösterilen veri sayfası 18 sayfasında bulabilirsiniz .

Okuma sonucunun biçimi

Örneklerim sadece 18 bit çözünürlükte (bit 5 ve 6 1 olarak ayarlanmış) olacak. Tekrar okuma sonucu dört bayt olacaktır: ilk üç değer içerir ve dördüncü yapılandırma baytını içerir.

Ancak, en soldaki bit! RDY, değerin "yeni" olup olmadığını, yani son okumadan bu yana yeni bir okuma olup olmadığını söyler. Bir sonucu ilk kez okurken, değer 0'dır ve sonraki değerler için ADC yeni bir örnek değeri ile hazır olana kadar 1'dir.

Paralel olarak örneklemeden nasıl kullanılır

Bunu nasıl yapacağımı gayet iyi biliyorum. Ve çevrimiçi bulduğum tüm örnekler, bunun için de basit. Bileşene bir yapılandırma baytı yazıp bir değeri geri okuyun.

Her kanalı otomatik olarak sürekli örnekleme ve kanal paralel olarak okuma

Sahte kod şunun gibi olabilir

setup():
    start sampling channel 1, 18bit, 0gain, continuously
    start sampling channel 2, 18bit, 0gain, continuously
    start sampling channel 3, 18bit, 4gain, continuously
    start sampling channel 1, 18bit, 2gain, continuously

readADCs():
    // Run every 500ms
    // 18 bit samples take 375ms, so must happen in parallel 
    // to get a new sample for all every 500ms
    read channel 1
    read channel 2
    read channel 3
    read channel 4

En iyi girişimim

Umarım, aşağıdakiler her ADC'yi sürekli olarak örneklemeye ayarlar. Bu Arduino kodu.

void setup() {

    Wire.write(0b00011100);
    Wire.write(0b01011100);
    Wire.write(0b10011110);
    Wire.write(0b11011101);
}

Ardından, belirli bir kanalı nasıl okurum. Bileşenden sadece sonuç için sorarsam, kanalın sonucunu kayıt defterine döndürür. Yukarıdaki kurulumla, kanal 4 için okumayı alacağım. Ama diyelim ki kanal 2'den okumayı istiyorum. Bir şekilde söylemeliyim ki kanal 2'nin sonucunu istiyorum. bir şey örneklemesini isteyin, sadece sürekli bir örnekleme yapmaya devam etmeli ve sadece otomatik örnekleme sırasında oluşturduğu en yeniden gönderilen örneği istiyorum.

Aşağıda benim en iyi tahminim

void readADCs() {

    // Channel 1
    // ...

    // Channel 2
    Wire.beginTransmission(104);
    Wire.write(0b01011100); // I hope not to affect, just to select
    Wire.endTransmission();
    Wire.requestFrom(104);
    Wire.read(); // val byte 1
    Wire.read(); // val byte 2
    Wire.read(); // val byte 3
    Wire.read(); // config byte
}

Benim en iyi tahminim. Kanal 2'yi okumak istersem, kanal 2'yi başlatmak için kullandığımla tamamen aynı olan bir yapılandırma baytı yazarım.

Ancak, bu işe yaramaz. Gerekli 375ms'den daha fazla olsa bile, hazır örnek yoktur.

Bunu nasıl başarabilirim?

İstediğim sonucu ve ne denediğimi anlatmak için elimden geleni yapmaya çalıştım, ama okumanın kolay olmadığını biliyorum.

Bana tüm ADC'lerin paralel olarak örneklemesine ve ardından müdahale etmeden okumalarına dair tavsiye verebilir misiniz?


İyi başlangıç. Eksik olan tek şey, eklediğim MCP3424 için veri sayfasına bir bağlantı.
JRE

MCP3424, sürümlerde değil iki paket halinde gelir ve her ikisi de 4 kanaldır. ST TSSOP, SL Soic. MCP3422 2 kanal, sabit adres, MCP3423, 2 kanal, ayarlanabilir adres ve MCP3424 4 kanal vardır.
Passerby

+1 Çok kapsamlı, iyi yazılmış bir soru. Ne yazık ki bu çip tek bir ADC. Bu, "Fonksiyonel Blok Diyagramı" nda veri sayfasında gösterilmiştir. ADC'ler olarak giriş kanallarını okudunuz. Birçok giriş kanalına sahip olmak, bir ADC'nin birçok farklı sinyali (sıralı olarak) örneklemek için kullanılmasına izin verir. ADC'nin yapımı, analog bir çoklayıcıdan (kanalı seçer) yapmaktan daha pahalıdır ve çoklu sinyalleri örneklemek yaygın bir gerekliliktir. Dolayısıyla ADC çipleri genellikle bu şekilde çalışır. Andy aka sorunuzu yanıtladı, ancak daha fazla bilgi alabileceğiniz için belki kabul etmeden önce bekleyin.
gbulmer

Ben RS-Online E / SL 4 vardı ve E / ST ben açıklama eklediğiniz 1. söyledi çünkü, 4 ADC vardı inanılan
Mads Skjern

2
@MadsSkjern RS, Microchip'i görmezden gelir ve veri sayfası kraldır. Bu RS'de bir hata. Distribütör sitelerindeki hatalar oldukça yaygındır.
Passerby

Yanıtlar:


11

Ben dört ADC ile ikincisi var. Bunun birkaç kanalda aynı anda örnekleme yapabileceği anlamına geldiğini varsayıyorum.

Ne yazık ki değil. Sadece bir ADC vardır ve birden fazla kanalı dönüştürmek için bu, dahili çoklayıcıya hitap ederek ve böylece başka bir kanalı "okuyarak" sırayla yapılmalıdır. Ne yazık ki eşzamanlı örnekleme yok: -

resim açıklamasını buraya girin

Giriş çoklayıcının SADECE dört kanaldan birini seçtiğini unutmayın. Bu, birden fazla kanalı okumak için kullanılan oldukça yaygın bir yöntemdir, ancak orada eşzamanlı örnekleme ADC'leri vardır. Linear tech, TI's veya ADI'nin portföylerine bakmayı deneyin.


+1, ya beni yendi :-) Bir ADC örneği çoklu kanallar için oldukça yaygın olduğu gerçeğini açıklamaya değer olabilir, çünkü farklı bir analog sinyali örnekleyebilir, bu yaygın bir durumdur.
gbulmer

Ayrıca, düşük örnekleme oranları isteniyorsa, çoğullama / serpiştirme genellikle yeterince iyidir
Scott Seidman

Büyüleyici gelişmeler, efendim.
gbulmer

@gbulmer çok kibarsınız efendim !!
Andy aka

5

MCP3424 ön ucunda bir çoklayıcı ile tek bir ADC.

Veri sayfasındaki bu diyagram bunu oldukça açık bir şekilde göstermektedir

MCP3424 Mimarlık

Veri sayfası bunu girişle destekliyor:

4.1 Genel Bakış

MCP3422 / 3/4 cihazları, I2C seri arabirimli diferansiyel çok kanallı düşük güçlü, 18 Bit Delta-Sigma A / D dönüştürücülerdir. Cihazlar bir giriş kanalı seçim çoklayıcı (mux), programlanabilir bir kazanç amplifikatörü (PGA), bir yerleşik voltaj referansı (2.048V) ve bir dahili osilatör içerir.

Bu nedenle, farklı kanalları gerçek zamanlı olarak dönüştüremezsiniz, ancak kanalları aralarında nispeten kısa bir gecikmeyle sırayla örnekleyebilirsiniz.

Cihazı kullanırken, I2C adres bitlerinin sabit olduğundan emin olmanız gerekir; veri sayfasından bir kez daha:

MCP3423 ve MCP3424'te iki harici aygıt adres pini vardır (Adr1, Adr0). Bu pinler yüksek (veya VDD'ye bağlı), düşük (veya VSS'ye bağlı) veya solda yüzen (herhangi bir şeye bağlı değil veya VDD / 2'ye bağlı) bir mantık olarak ayarlanabilir. sekiz olası adrese izin ver. Tablo 5-3, adres seçim pimlerinin mantık durumuna bağlı olarak aygıt adresini göstermektedir. Cihaz, aşağıdaki olaylarda Adr0 ve Adr1 pinlerinin mantık durumunu örnekler:

a. Cihaz açılır.

b. Genel Çağrı Sıfırlama

(Bkz. Bölüm 5.4 “Genel Çağrı”).

c. Genel Çağrı Mandalı

(Bkz. Bölüm 5.4 “Genel Çağrı”).

Aygıt, yukarıdaki olaylar sırasında mantık durumunu (adres pimleri) örnekler ve yeni bir mandal olayı oluşana kadar değerleri kilitler. Normal çalışma sırasında (adres pinleri kilitlendikten sonra), adres pinleri dahili devrenin geri kalanından dahili olarak devre dışı bırakılır.

Cihaz açıldıktan sonra bir Genel Çağrı Sıfırlama veya Genel Çağrı Mandalı komutu vermeniz önerilir. Bu, aygıtın adres pimlerini sabit bir durumda okumasını sağlar ve güç kaynağı yükselirken adres bitlerini kilitlemekten kaçınır. Bu, yanlış adres pini algılamasına neden olabilir.

Cihazla gerçekten iletişim kurduğunuzdan emin olmak için bu öneriye uymanızı öneririm.

Belirli bir kanalı okumak için Yapılandırma kaydında kanalı seçmeli ve bir dönüşüm başlatmalısınız. RDY biti, bu dönüşümün sonucu çıkış kaydında mevcut olduğunda azalır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.