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:
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.
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.
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:
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)?
sumber
Jawaban:
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
REFS
bit dalamADMUX
register, seperti yang dijelaskan dalam lembar data :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:
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.
sumber
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.
sumber