Analog giriş pimi ile 4 bit veri yolu adresi seçimi: Monte Carlo simülasyonu çakışan adres değerlerini gösterir


16

ATtiny44 mikrodenetleyici ile yüksek lisans tezim için küçük bir sensör PCB tasarladım . Uygulamam için bu kartların yaklaşık 200'üne ihtiyacım var ve 16'sı her zaman yerel olarak denetleyici anakartına bağlı. Tüm ağ şöyle görünür:

Resim açıklamasını buraya girin

Kontrolör ve sensör kartları arasında iletişim kurmak için kendi 1 pinli veri yolumu yazdım (zamanlama tabanlı). Tek sorun, verisini denetleyici anakartına gönderdiğimde, sensör kartının ağdaki yerini bilmek için bir adresi olması gerektiğidir.

ATtiny'de sadece 1 pim kaldığından, dört jumper ayarına dayalı bir analog voltaj üretmesi gereken bir jumper tabanlı DAC devresi buldum. Sensör devresi değerleri (47, 470, 1k, 3k, 4k7, 10k, 100k ve 220k) kullandığından ve üretim için optimize etmek istedim DAC için aşağıdaki değerleri kullandım (temel olarak 100k, 50k, 20k ve 10k ). Jumper ayarına göre bana 0 V ve 760 mV arasında güzel bir değer vermelidir. ATtiny'nin dahili 1.1 V referansı ile analog voltaj olarak okumam gereken şey. Başlangıçta ATtiny bu voltajı okur ve konumunu bilmelidir.

şematik

bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik

Teorik olarak bu iyi çalışıyor. Dirençlerin toleransı düşünüldüğünde (hepsi% 1 BTW) üst üste binen alan almadığımı doğrulamak için LTspice'de bir Monte Carlo analizi bile yaptım . Aşağıda bu analizin resimlerini bulabilirsiniz.

Resim açıklamasını buraya girin Resim açıklamasını buraya girin

Şimdi bu panoların birkaçını (neyse ki 200 değil) ürettim ve bazıları adreslerinde doğru okumalar yapamadı (özellikle tüm toleransların aynı anda oynandığı yüksek adres bölgelerinde). Tüm olası çözümleri ölçtüm ve sonunda sorunumu çözdüm. Orijinal analizim , her bir kontrolör kartında bir MC7805 ile 12 V'den yerel olarak üretilen 5 V besleme voltajının toleransını içermiyordu . Veri sayfası başına MC7805, 4.8 ila 5.2 V arasında bir çıkış voltajına sahiptir.

Bunu anladıktan sonra Monte Carlo analizini değiştirdim. Şimdi şöyle görünüyor:

Resim açıklamasını buraya girin Resim açıklamasını buraya girin

Gördüğünüz gibi, bu voltajın sadece bu adres anlamına gelebileceğini söyleyemediğim güzel örtüşen alanlar var. Temelde hayır ile başlayan tüm adresler. 8 yanlış okuma alabilir (yüksek adresler için yanlış okuma olasılıkları daha yüksektir).

Ben ediyorum değil zaten (I üretim için optimize istediğiniz tez gibi) gemide kullanılan olandan farklı direnç değerleri eklemek için gibi.

Ben ediyorum değil DAC direnç ağını besleyecek bir voltaj referansı (örneğin Zener diyodu) eklemek ister.

Ben olamaz daha fazla kontrol panelinin değiştirme (ve orada daha hassas bir voltaj regülatörü kullanmaktır).

Ben yapabilirsiniz hala PCB tasarımı / sensör kurulu şematik değiştirmek!

Adresle ilgili her zaman doğru değerleri aldığınızdan nasıl emin olabilirim (programla veya devreyi değiştirerek)?


3
+1 Güzel bir soru. Son LTspice asc dosyasını bir yerde bir macun içinde sağlayabilir misiniz? Yani diğer kombinasyonları test edebilir miyiz?
dim SE

2
Harika bir soru, burada rehberlik sormadan önce aslında neyin sebep olduğunu bulmak için güzel bir çalışma. Şimdi soru ve cevap sadece sen yerine geçen herkes için iyi bir okuma :-)
Mast

Yanıtlar:


19

Simülasyonlarınıza göre, adresleme şemanız yalnızca direnç değerlerindeki belirsizlikler dikkate alındığı sürece iyi çalışır. Gerilimi, başarısızlığa uğratan belirsizliktir.

Benim tavsiyem, VCC'deki dalgalanmaları ADC'ye referans olarak kullanarak iptal etmektir. Bunu , veri sayfasında açıklandığı gibi kayıttaki REFSbitleri programlayarak yapabilirsiniz :ADMUX

resim açıklamasını buraya girin

ADC için referans voltajı olarak VCC'ye geçtiğinizde, artık voltajı ölçmeyeceksiniz, ancak direnç değerleri arasındaki bir oran ve bunlar% 1'e kadar hassastır. Şemada herhangi bir değişiklik gerekmez (ölçümlerinizi ADC'nin dönüşüm aralığının ortasında almak için R7'nin değerini artırmak isteyebilirsiniz), sadece Attiny ürün yazılımı güncellenmelidir.

Hala sensör kartını yeniden işlemeye hazırsanız, şematiğinizi Cano64'ün önerdiği gibi bir R-2R merdiveni ile değiştirebilirsiniz:

şematik

bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik

Bu, merdivendeki tüm adımları eşitleyerek çözünürlüğü optimize eder. % 1 direnç, 5 bite kadar monotonik merdivenler inşa etmek için yeterince hassastır .


Doh! Ağaçlar için ormanı görmedim. Bu 1.1V'de çok sabitlendim ... Çok teşekkürler! Onu deneyeceğim.
KarlKarlsom

1
Test edildi ve işe yarıyor. Harika!
KarlKarlsom

AREF olarak VCC ve R7 için 220k direnç ile test ettim. Daha sonra 100k, 220k R-2R merdiveni simüle edebilir ve bana daha iyi sonuçlar verip vermediğini görebilirim. Tekrar teşekkürler!
KarlKarlsom

3

Benzer bir sorunu bir kez çözmek zorunda kaldım. Arduino'daki bir analog pime 4 düğme bağlamam gerekiyordu, ancak aynı anda presleri (tüm kombinasyonlar) tanımam gerekiyordu. Sizinle aynı devreyi buldum, sonra tüm olası direnç değeri kombinasyonlarını aramak için bir program yazdım, böylece düğmelere bastığınızda son değerler mümkün olduğunca ayrı. Bil bakalım ne oldu? Vidalıyız, yapılamaz. Hepsi bu, iyi günler.

Anahtarlar için optimum direnç değerlerinin R, 2R, 4R, 8R'ye yakın olduğunu ve bölücünün alt kısmının R değerine sahip olduğunu öğrendim. Devreniz zaten optimal olana yakın, sadece R7'yi 10k ile değiştirmeniz gerekiyor direnç.

Ama senin için iyi bir haber var. Sadece bir adres ayarlamanız gerektiğinden (cihaz çalışırken anahtarı kullanmazsınız) Bunun yerine SPDT anahtarları ve R2R merdiveni kullanmanızı öneririm .


Neden yapılamadı? Anahtarlarınızı (R, 2R, 4R, 8R) dirençlere bağladığınızda ne oldu? Hangi kombinasyonlar işe yaramadı?
Dmitry Grigoryev

R-2R merdiveni bu arada mükemmel bir öneri!
Dmitry Grigoryev

+ Dmitry Yani aynı çıkış voltajları onları güvenilir bir şekilde ayırt etmek için çok yakın.
Cano64
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.