Pertanyaan:
- Apakah konversi jumlah ADC ke tegangan tergantung pada tegangan sebenarnya dari +5 V pin?
- Jika ya, apa metode yang diterima untuk mendapatkan tegangan dari papan?
Latar belakang / detail:
Saya memiliki sirkuit di mana saya memiliki Arduino Nano (klon) berjalan dari konektor USB (dari hub). Tugas Arduino adalah mengukur tegangan pada baterai yang akan mendorong sirkuit kedua dinyalakan / dimatikan oleh Nano. Untuk referensi itu adalah tester baterai.
Ada layar Nokia 5110 yang menampilkan tegangan dari sketsa yang sangat sederhana di bawah ini.
void setup() {
Serial.begin(9600);
display.begin();
// Init done
// You can change the contrast around to adapt the display
// for the best viewing!
display.setContrast(50);
// Text display tests
display.setTextSize(1);
display.setTextColor(BLACK);
}
void loop() {
display.clearDisplay(); // Clears the screen and buffer
display.setCursor(0,0);
display.print("Vin=");
int rawVIN = analogRead(VIN);
float floatVin = (rawVIN*4.75)/1023.0;
display.println(floatVin);
Serial.println(rawVIN);
display.display();
delay(1000);
}
- Saya mengukur tegangan baterai menggunakan DVM dan 4,13 V, namun Nano melaporkan 4,35 V.
- Saya memiliki kesamaan antara baterai dan Arduino.
- Karena koneksi untuk menguji tegangan dapat mengambang, saya memiliki resistor pulldown untuk menghentikan fluktuasi liar (> 10 kΩ)
Setelah beberapa penyelidikan saya menemukan bahwa +5 V sebenarnya menghasilkan 4,75 V dan mengubah sketsa saya dari
float v = (rawVIN*5.0)/1024.0;
untuk
float v = (rawVIN*4.75)/1024.0;
dan pembacaan tegangan pada Arduino sekarang benar. Saya melakukan ini bukan karena saya mengerti apa yang saya lakukan, saya melakukannya karena saya punya firasat itu dapat mengubah nilai menjadi yang benar.
Jawaban:
ADC di dalam Arduino tidak mengukur voltase, melainkan rasio voltase . Yaitu rasio dari tegangan pada input analog ke tegangan pada pin Vref.
Dalam konfigurasi default, pin Vref diikat secara internal ke garis +5 V. Anda dapat memilih untuk menggunakan referensi internal sebagai Vref :
Referensi ini sekitar 1,1 V, dan cukup kebal terhadap fluktuasi pada +5 V. Masalahnya adalah Anda tidak dapat mengukur tegangan lebih tinggi dari referensi.
Untuk penguji baterai Anda, jika Anda menginginkan pengukuran "absolut", Anda dapat menggunakan referensi internal dan pembagi tegangan untuk memastikan tegangan yang diukur di bawah 1,1 V.
Mengedit : Pilihan lain yang tidak memerlukan pembagi tegangan adalah dengan menggunakan Vcc sebagai referensi untuk mengukur baik input analog dan 1.1 V “bandgap” referensi internal. Mengukur 1,1 V terhadap Vcc adalah cara tidak langsung untuk mengukur Vcc. Ini tidak didukung oleh pustaka inti Arduino, tetapi Anda bisa melakukannya dengan memprogram langsung register kontrol ADC:
Berhati-hatilah karena pembacaan pertama setelah boot mungkin palsu.
sumber
Arduino Nano yang didukung USB akan memiliki referensi tegangan ADC yang tidak dapat diandalkan, karena toleransi +/- 5% dari tegangan USB yang masuk. Selain itu, Nano memiliki MBR0520 Schottky diode (D1) yang akan turun antara 0,1 dan 0,5 V tergantung pada toleransi pabrikannya sendiri, suhu, dan daya tarik papan Anda saat ini.
Apa yang bisa kamu lakukan?
MCU yang terpasang di Arduino Nano adalah ATmega328P. ADC Nano dapat mengukur pembacaan tegangan analognya sesuai dengan beberapa referensi yang tersedia (dan Anda dapat memilih yang cocok untuk Anda). Anda dapat melakukan ini melalui
analogReference (type)
fungsi, dan memilih di antara referensi berikuttype
s:Sumber: analogReference
Ini adalah skema ADC untuk apa yang ada di dalam ATmega328 sehingga Anda dapat melihat apa yang terjadi di sana:
Sumber: lembar data ATmega328
Jadi solusi langsung adalah membangun pembagi tegangan lemah untuk mendapatkan tegangan yang ingin Anda ukur di bawah referensi INTERNAL 1.1 V, dan kemudian konfigurasikan
analogReference
sesuai.Pembagi tegangan harus lemah (nilai R tinggi) sehingga Anda tidak menarik terlalu banyak arus dari baterai, tetapi tidak terlalu lemah untuk dimuat oleh impedansi input ADC.
Bonus
Namun, jika Anda memerlukan referensi tegangan yang lebih tinggi daripada referensi celah pita internal 1,1 V dari ATmega328 Anda masih kurang beruntung. Pilihannya adalah menggunakan output regulator 3,3 V LDO dari FT232RL on-board, yang tersedia untuk Anda pada pin 14 dari header, tapi saya rasa itu juga tidak bisa diandalkan. The FT232RL datasheet menspesifikasikan itu pada 3,0-3,6 V (nominal 3,3 V)
Jadi solusi universal adalah membangun referensi tegangan eksternal berdasarkan TL431 yang murah . Itu bisa memberi Anda referensi yang dapat diandalkan hingga 4,0 - 4,25 V dengan akurasi +/- 1%.
Rangkaian referensi tegangan eksternal akan menjadi sesuatu yang semudah ini, (dan TL431 tersedia dalam paket TO-92 ramah papan tempat memotong roti!):
sumber
Saya punya halaman tentang konverter ADC pada Atmega328P . Agak turun halaman saya menggambarkan referensi tegangan. Anda dapat menggunakan chip TL431 untuk memberikan berbagai tegangan referensi, misalnya 4V:
Dengan mengubah resistor Anda bisa mendapatkan tegangan lain (sepertinya Anda ingin sekitar 4.2V).
Tegangan output tidak dipengaruhi oleh tegangan input (5V dalam kasus ini).
Halaman tertaut menjelaskan bagaimana Anda dapat memilih nilai resistor.
sumber
ya dan tidak: modul ADC peduli dengan Vref, yang dapat disediakan melalui Vdd, internal, atau eksternal.
dengan mengkonfigurasi modul ADC. datasheet perangkat harus memiliki register / bit yang perlu diatur untuk itu.
sumber