Pemilihan alamat bus 4-bit melalui pin input analog: Simulasi Monte Carlo menunjukkan nilai alamat yang tumpang tindih

16

Saya merancang sensor PCB kecil untuk tesis master saya dengan mikrokontroler ATtiny44 . Saya membutuhkan sekitar 200 papan ini untuk aplikasi saya dan 16 selalu terhubung secara lokal ke papan pengontrol. Seluruh jaringan terlihat seperti ini:

Masukkan deskripsi gambar di sini

Untuk berkomunikasi antara pengontrol dan papan sensor, saya menulis bus 1 pin saya sendiri (berbasis waktu). Satu-satunya masalah adalah papan sensor harus memiliki alamat untuk mengetahui lokasinya di jaringan, ketika saya mengirim datanya ke papan pengontrol.

Karena saya hanya memiliki 1 pin yang tersisa pada ATtiny saya datang dengan sirkuit DAC berbasis jumper yang harus menghasilkan tegangan analog berdasarkan pengaturan empat jumper. Karena sirkuit sensor menggunakan nilai-nilai (47, 470, 1k, 3k, 4k7, 10k, 100k, dan 220k) dan saya ingin mengoptimalkan produksi saya menggunakan nilai-nilai di bawah ini untuk DAC (pada dasarnya 100k, 50k, 20k, dan 10k ). Yang seharusnya memberi saya nilai bagus antara 0 V dan 760 mV berdasarkan pengaturan jumper. Persis apa yang saya perlu baca sebagai tegangan analog dengan referensi 1,1 V internal ATtiny. Pada saat start-up ATtiny membaca voltase ini dan harus tahu posisinya.

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Secara teori ini berfungsi dengan baik. Saya bahkan melakukan analisis Monte Carlo di LTspice untuk memastikan saya tidak mendapatkan area yang tumpang tindih, ketika mempertimbangkan toleransi resistor (semuanya 1% BTW). Di bawah ini Anda dapat menemukan gambar-gambar analisis ini.

Masukkan deskripsi gambar di sini Masukkan deskripsi gambar di sini

Sekarang saya menghasilkan beberapa (untungnya bukan 200) dari papan ini dan beberapa gagal untuk mendapatkan pembacaan yang benar pada alamat mereka (khususnya di daerah alamat yang lebih tinggi di mana semua toleransi datang untuk bermain sekaligus). Saya mengukur semua solusi yang mungkin dan akhirnya menemukan masalah saya. Analisis asli saya tidak termasuk toleransi tegangan suplai 5 V, yang dihasilkan secara lokal dari 12 V dengan MC7805 pada setiap papan pengontrol. Per lembar data, MC7805 memiliki tegangan output antara 4,8 dan 5,2 V.

Setelah saya menemukan ini, saya memodifikasi analisis Monte Carlo. Sekarang terlihat seperti ini:

Masukkan deskripsi gambar di sini Masukkan deskripsi gambar di sini

Seperti yang Anda lihat ada daerah tumpang tindih yang bagus, di mana saya tidak bisa mengatakan tegangan ini hanya bisa berarti alamat ini. Pada dasarnya semua alamat dimulai dengan no. 8 bisa mendapatkan pembacaan yang salah (dengan kemungkinan lebih tinggi untuk pembacaan yang salah untuk alamat yang lebih tinggi).

Saya tidak ingin menambahkan nilai resistor yang berbeda dari yang sudah digunakan di papan tulis (seperti untuk tesis saya ingin mengoptimalkan untuk produksi).

Saya tidak ingin menambahkan referensi tegangan (misalnya, Zener diode) untuk memberi makan jaringan resistor DAC.

Saya tidak dapat memodifikasi papan pengontrol lagi (dan menggunakan pengatur tegangan yang lebih tepat).

Saya masih bisa memodifikasi desain / skema PCB papan sensor!

Bagaimana saya bisa memastikan selalu mendapatkan pembacaan yang benar pada alamat (baik dengan program atau dengan mengubah sirkuit)?

KarlKarlsom
sumber
3
+1 pertanyaan yang bagus. Bisakah Anda memberikan file asc LTspice terakhir di pastebin di suatu tempat? Jadi kita bisa menguji kombinasi lain?
redup
2
Pertanyaan bagus, pekerjaan bagus untuk mencari tahu apa yang sebenarnya menyebabkannya sebelum meminta panduan di sini. Sekarang pertanyaan dan jawabannya adalah bacaan yang bagus untuk siapa saja yang lewat, bukan hanya Anda :-)
Mast

Jawaban:

19

Menurut simulasi Anda, skema pengalamatan Anda berfungsi dengan baik selama hanya ketidakpastian dalam nilai resistor yang dipertimbangkan. Ketidakpastian pada voltase yang membuatnya gagal.

Saran saya adalah untuk membatalkan fluktuasi pada VCC dengan menggunakannya sebagai referensi ke ADC. Anda dapat melakukannya dengan memprogram REFSbit dalam ADMUXregister, seperti yang dijelaskan dalam lembar data :

masukkan deskripsi gambar di sini

Setelah Anda beralih ke VCC sebagai tegangan referensi untuk ADC, Anda tidak akan mengukur tegangan lagi, tetapi rasio antara nilai-nilai resistor, dan itu tepat untuk 1%. Tidak ada perubahan yang diperlukan dalam skema (meskipun Anda mungkin ingin meningkatkan nilai R7 untuk mendapatkan pengukuran Anda di tengah rentang konversi ADC), hanya firmware Attiny yang harus diperbarui.

Jika Anda masih ingin memperbaiki papan sensor, Anda dapat mengganti skematis Anda dengan tangga R-2R seperti yang disarankan Cano64:

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Ini akan mengoptimalkan resolusi dengan membuat semua langkah di tangga sama. 1% resistor cukup tepat untuk membangun tangga monoton hingga 5 bit.

Dmitry Grigoryev
sumber
Doh! Saya tidak melihat forrest untuk pohon-pohon. Saya sangat terpaku pada 1.1V itu ... Terima kasih banyak! Saya akan mencobanya.
KarlKarlsom
1
Mengujinya dan berhasil. Bagus!
KarlKarlsom
Saya mengujinya dengan VCC sebagai AREF dan resistor 220k untuk R7. Saya mungkin kemudian mencoba dan mensimulasikan 100k, 220k R-2R tangga dan melihat apakah itu memberi saya hasil yang lebih baik. Terima kasih lagi!
KarlKarlsom
3

Saya harus memecahkan masalah yang sama sekali. Saya perlu menghubungkan 4 tombol ke satu pin analog pada Arduino, namun saya harus mengenali penekanan simultan (semua kombinasi). Saya datang dengan sirkuit yang sama seperti Anda, kemudian saya menulis sebuah program untuk mencari semua kombinasi nilai resistor yang mungkin sehingga nilai akhir ketika Anda menekan tombol, terpisah sejauh mungkin. Tebak apa? Kami kacau, itu tidak bisa dilakukan. Itu saja, semoga harimu menyenangkan.

Saya belajar bahwa nilai resistor optimal untuk sakelar dekat dengan R, 2R, 4R, 8R dan bagian bawah pembagi memiliki nilai R. Sirkuit Anda sudah dekat dengan yang optimal, Anda hanya perlu mengganti R7 dengan 10k penghambat.

Tapi ada kabar baik untukmu. Karena Anda hanya perlu menetapkan alamat (Anda tidak akan mengoperasikan sakelar saat perangkat sedang berjalan) saya sarankan untuk menggunakan sakelar SPDT dan tangga R2R sebagai gantinya.

Cano64
sumber
Mengapa itu tidak bisa dilakukan? Apa yang terjadi ketika Anda menghubungkan sakelar ke resistor (R, 2R, 4R, 8R)? Kombinasi apa yang tidak berfungsi?
Dmitry Grigoryev
Omong-omong, tangga R-2R adalah saran yang bagus!
Dmitry Grigoryev
+ Dmitry Maksud saya sama dengan tegangan output terlalu dekat untuk membedakan mereka dengan andal.
Cano64