Arduino: Ukur tegangan eksternal

10

Saya memiliki "masalah" ketika mencoba mengukur tegangan eksternal dari sel koin. Saya telah menyederhanakan sirkuit saya, tetapi pada dasarnya saya memiliki jam waktu nyata DS1307 yang ditenagai oleh output Arduino 5v, dan sel koin terhubung ke vBat untuk menjaga jam tetap hidup saat Arduino dimatikan. Ide saya adalah mengukur tingkat baterai dengan Arduino dengan menghubungkan positifnya ke input analog dan membaca level tegangan. Jadi, saya pikir, karena tegangan maks adalah 3v, saya dapat menggunakan 3v3 sebagai AREF dan mengatur referensi analog ke eksternal dan kemudian membaca hasil yang akurat. Hasilnya cukup keren dan bacaan dari Arduino sama dengan membaca tegangan baterai dari multimeter saya. Masalahnya muncul ketika saya memutuskan sumber daya dari Arduino (koneksi USB). Yang mengejutkan saya, Arduino tidak mematikan (beberapa led tetap menyala),

Mengapa ini terjadi? Bagaimana Arduino mengambil arus dari Pin Analog? Apakah rangkaian kecil ini merupakan penyimpangan elektronik?

masukkan deskripsi gambar di sini

alvarolb
sumber

Jawaban:

10

Sebagian besar, jika tidak semua, pin input pada pengontrol AVR secara internal dilindungi oleh clamping diode. Dioda ini mencegah tegangan input bisa lebih tinggi dari tegangan suplai.

Mengapa dioda internal ini ada:

Adalah penting untuk menyadari bahwa ketika sebuah input pin tidak naik di atas tegangan suplai dan dioda ini tidak ada di sana, chip mungkin bertindak sebagai SCR, kait, pendek baterai, dan chip itu sendiri mungkin akan rusak oleh arus lebih / overheating .

Mengapa Arduino Anda beroperasi dari baterai Lihatlah diagram sirkuit di bawah ini. Ketika Vcc terlepas dari sumber daya normal, ada jalur dari baterai, melalui D1, ke Vcc. Tegangan baterai hanya cukup tinggi untuk pengontrol beroperasi.

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Bagaimana mengatasinya

Solusinya sederhana, tambahkan resistor bernilai tinggi secara seri antara baterai dan input pengontrol. Sebagian besar AVR memiliki arus bocor input maksimum yang ditentukan (I IL ) 1μA, jadi Anda ingin memastikan penurunan voltase dapat diterima dengan arus itu, katakan 100kΩ.

Tapi waspadalah!

Anda harus menyadari bahwa input dapat menarik arus ini dari sel tombol Anda dan mempersingkat masa pakainya.

jippie
sumber
Saya akan mencoba 10Mohm dan melihat apa yang dibaca ADC dan menggunakannya sebagai referensi Anda untuk baterai yang terisi daya. Ini adalah pengukuran yang rumit jika Anda ingin menghindari drainase yang tidak diinginkan.
Andy alias
Itu bisa bekerja, meskipun itu ditetapkan sebagai arus input dan bukan sebagai impedansi input. Respons mungkin tidak linear, tetapi tidak selalu berguna. Mungkin perlu semacam kalibrasi dan mungkin referensi celah pita 1V1 dapat digunakan (alih-alih referensi eksternal 3V3) ketika tegangan yang diukur turun di bawah 1,1V.
jippie
Jawaban bagus!! Saya berpikir jika pembagi resistor dengan 100kΩ dan 50kΩ akan bekerja. Dalam hal ini, saya mengandaikan voltase baterai maks 3,2 volt. Ini memberikan tegangan jatuh 1,067v, yang dapat kompatibel dengan referensi analog internal 1v1. Ini bisa bekerja atau akan menghabiskan baterai terlalu cepat?
alvarolb
2
Saya tidak tahu kapasitas baterai Anda. Itu harus ditentukan dalam mAh. Indikasi kasar untuk masa adalah . Sel koin mungkin tidak bertahan lama, tetapi Anda harus memeriksa lembar data untuk memastikan. T=mAh3V×1000100kΩ+50kΩ=mAh × (100kΩ + 50kΩ)3V×1000
jippie
1
Dioda ini hadir pada sebagian besar mikrokontroler secara umum - bukan hanya AVR. Mereka tidak pernah mendengar tentang IC jenis lain juga.
Adam Lawrence