Membuat baterai bertahan lama di sirkuit mikrokontroler

26

Saya berharap untuk menyalakan ATtiny85V untuk waktu yang lama pada baterai kecil, mungkin sel koin.

Saya telah melihat ke sisi perangkat lunak, dan kode saya didorong oleh pengawas waktu, memiliki konverter analog dan digital yang tidak digunakan dimatikan, chip berjalan pada 1MHz dll. Tentu saja sibuk dan baru dalam hal ini, saya tidak yakin persis berapa banyak arus itu menggambar, tapi aku berharap pada dasarnya aku telah meminimalkannya.

Setiap beberapa detik ia bangun, apakah level tegangannya memeriksa ADC, merekamnya menjadi ram, dan kembali tidur. Jika mendeteksi garis serial terhubung, itu memuntahkan data.

Namun, sekarang saya melihat sirkuit secara keseluruhan dan bertanya-tanya apakah ada hal yang harus saya lakukan untuk membuat sirkuit secara keseluruhan lebih ramah baterai?

Apa dos dasar dan tidak boleh dilakukan ketika datang untuk merancang sirkuit tahan lama (sederhana) di mana satu komponen (mikrokontroler) memiliki pengulangan arus variabel tetapi berulang?

Contohnya:

  • Apakah LED indikator merupakan masalah besar? Apakah baterai habis saat cerah? Haruskah saya meletakkan resistor raksasa di atasnya untuk membuatnya redup, atau apakah itu hanya membuat resistor menggunakan baterai?
  • Haruskah saya menggunakan kapasitor bypass / decoupling untuk meratakan penarikan arus dari baterai, atau akankah kapasitor hanya menghabiskan daya baterai?
  • Mikrokontroler hanya membutuhkan 1.8V, tapi saya tidak punya baterai 1.8V. Haruskah saya menggunakan dua baterai 1.x dan mengirim terlalu banyak tegangan? Bisakah saya memperpanjang usia baterai dengan "tidak menggunakan volt sebanyak"? Bagaimana aku melakukan itu?
  • Apakah diperlukan daya ekstra untuk memeriksa apakah pinnya TINGGI atau RENDAH? Seperti dibandingkan dengan no-op atau aritmatika, apakah ada banyak penggunaan daya tambahan dalam memeriksa salah satu pin I / O GP untuk keadaannya?

Samar-samar saya tahu bagaimana menghitung (dan lebih samar-samar bagaimana mengukur) arus, tegangan, daya, tapi saya tidak benar-benar yakin yang mana yang setara dengan usia baterai. Apakah pengukuran penting masa pakai baterai di Coulombs?

Saya memiliki gagasan yang kabur bahwa baterai penuh dengan hal-hal seperti:

  • mengisi daya, seperti dalam amp-jam
  • energi, seperti dalam watt-jam
  • daya, seperti dalam watt

tapi saya tidak begitu jelas apa sirkuit saya "makan" ketika itu berjalan. Saya sudah membaca cukup banyak buku teks EE101 dan fisika, tapi saya tidak benar-benar memiliki pengalaman lab. Dengan kata lain, saya sudah membaca banyak tentang baterai, tetapi saya tidak begitu yakin apa arti sebagian besar artinya dalam praktik.

Apakah resistor menghabiskan masa pakai baterai? Apakah kapasitor? Lakukan dioda? Saya curiga mereka semua melakukannya, tetapi yang mana yang paling penting? Impedansi? Disipasi daya? Arus? Tegangan?

Apakah ada cara untuk menurunkan tegangan tanpa membuang-buang baterai? Apakah ada cara untuk menurunkan tegangan sambil meningkatkan masa pakai baterai?

Jack Schmidt
sumber
6
Ini pertanyaan yang sangat luas. Anda hampir perlu mengajukan beberapa pertanyaan. Saya bisa memberikan pertanyaan lengkap untuk pertanyaan daya LED.
Kortuk
1
Keren, aku akan membaginya setelah jam kantor. Mungkin yang ini hanya dos dan tidak boleh dilakukan. Saya pikir jawaban seperti itu akan membantu orang yang hanya mencoba untuk mendapatkan lebih banyak dari baterai, tetapi saya kira memberikan segala jenis jawaban otoritatif atau pendidikan memerlukan pertanyaan yang lebih sempit.
Jack Schmidt
Ya, saya sadar saya harus membagi jawaban saya dengan pertanyaan Anda dan akan memakan waktu satu jam.
Kortuk
BTW istri saya menemukan makezine.com/makeitlast yang pada akhirnya mungkin berguna, karena pada dasarnya merupakan kontes untuk membuat hal semacam ini. Saya pikir ini dimulai hari ini, jadi mereka tidak memiliki petunjuk yang diposting tentang bagaimana melakukannya. Bagaimanapun, proyek saya independen, dan saya ragu saya akan punya waktu untuk masuk, jangan ragu untuk menunggu sampai kontes selesai jika Anda tidak menyukai hal-hal seperti itu.
Jack Schmidt

Jawaban:

20

Hanya daftar acak, jika Anda memposting skema Anda mungkin akan lebih mudah:

1.8V lithium Coin cell sangat mudah ditemukan, tetapi lebih mungkin antarmuka serial Anda membutuhkan 3.3V? Kecuali jika sisi penerima Anda akan berurusan dengan 1.8V.

Kebocoran saat ini biasanya naik karena tegangan Anda meningkat, jadi biasanya lebih rendah lebih baik. Juga pertimbangkan titik keluar berwarna coklat untuk sistem vs karakteristik baterai. Karakteristik 'kematian' baterai akan ditentukan oleh kimia baterai yang Anda gunakan. Misalnya, jika UC Anda berwarna kecoklatan pada 1.7V, Anda mungkin sebenarnya ingin menggunakan baterai bertegangan lebih tinggi karena pada beberapa baterai, tegangan keluaran akan turun secara perlahan saat baterai mati. Anda akan mendapatkan lebih banyak masa pakai baterai 3.3V karena ketika baterai mulai mati, outputnya akan turun secara perlahan dan Anda dapat beroperasi hingga 1.8V. Jika Anda menggunakan baterai 1.8V, Anda akan dimatikan dengan cepat karena baterai mati. Ini semua mengasumsikan antarmuka serial Anda atau komponen lain dapat menangani rentang tegangan lebar (saya tahu AVR bisa).

LED menggunakan banyak daya, kecuali jika Anda menggunakan LED daya yang sangat rendah dan mengendalikan penarikan arusnya, LED mungkin menarik lebih banyak arus daripada AVR. Jika hanya ada untuk debug, jangan isi untuk produksi atau hanya perlu berkedip sesekali atau sesuatu untuk meminimalkan waktu, dan pasti mengontrol penarikan saat ini.

Jika Anda bisa, pilih polaritas / keadaan diam antarmuka serial Anda untuk menarik daya sesedikit mungkin, keadaan istirahat itu seharusnya tidak menarik daya. Jika pull up diperlukan, gunakan resistor terbesar yang mungkin untuk mempertahankan integritas sinyal tetapi meminimalkan penggunaan saat ini. Jika daya adalah masalah besar gunakan skema yang menguntungkan bit yang tidak menarik daya. Sebagai contoh jika Anda memiliki pull up, menggunakan protokol yang menghasilkan banyak 1 dalam sinyal akan meninggalkan antarmuka serial dalam keadaan yang tidak menarik banyak daya sepanjang waktu. Optimalisasi semacam itu hanya bermanfaat jika Anda menggunakan banyak bus serial. Jika penggunaannya sangat ringan, pastikan kondisi diamnya tidak menarik daya.

Secara umum Anda dapat mengasumsikan semua instruksi (membaca GPIO, dll) membutuhkan jumlah daya yang sama. Itu tidak benar tetapi perbedaan kekuatan minimal.

Penggunaan daya jauh lebih tergantung pada jumlah / jenis periferal yang telah Anda aktifkan, dan jumlah waktu yang dihabiskan mikro vs tidur. Jadi ADC menggunakan lebih banyak kekuatan, EEPROM menulis menggunakan kekuatan yang cukup besar. Khususnya sesuatu seperti EEPROM menulis biasanya dilakukan dalam 'potongan' yang cukup besar sehingga Anda harus mengumpulkan informasi sebanyak yang Anda bisa sebelum melakukan menulis ke EEPROM (jika Anda menggunakannya tentu saja). Untuk ADC yang didukung mikro saat membaca ADC selama 2 status tidurnya, karena konversi ADC membutuhkan waktu yang relatif lama, ini adalah waktu yang baik untuk tidur.

Anda mungkin harus membaca saja bagian tentang manajemen daya, kondisi tidur dan meminimalkan penggunaan daya dalam lembar data mikrokontroler: linky page 35 on. Jaga AVR dalam kondisi tidur paling dalam selama mungkin. Satu-satunya pengecualian untuk ini adalah Anda harus mempertimbangkan waktu start up dan shutdown. Itu tidak layak untuk tidur selama 10 siklus jika bangun kembali membutuhkan waktu 25, dll.

Apakah resistor menghabiskan masa pakai baterai? Apakah kapasitor? Lakukan dioda?

Mereka semua melakukan sampai batas tertentu. Resistor menghilangkan paling banyak di sebagian besar aplikasi:

P = V * I

P = V ^ 2 / R atau P = I ^ 2 * R (di mana V adalah drop tegangan melintasi resistor)

Dioda memiliki penurunan voltase yang relatif (tetap), sehingga disipasi daya hampir secara eksklusif terkait dengan arus yang melewati dioda. Misalnya dioda dengan penurunan tegangan maju 0,7 V, P = 0,7 * I jika arus bergerak maju melalui dioda. Ini adalah penyederhanaan saja dan Anda harus memeriksa mode operasi berdasarkan karakteristik IV dioda.

Kapasitor secara teoritis seharusnya tidak menghilangkan daya apa pun, tetapi dalam kenyataannya mereka memiliki resistansi seri yang terbatas dan arus bocor yang tidak nol yang berarti mereka menghilangkan sebagian daya, umumnya bukan sesuatu yang harus Anda khawatirkan dengan voltase rendah tersebut. Itu dikatakan memilih kapasitor dengan arus bocor minimal dan ESR adalah kekuatan menang.

Sejauh menggunakannya untuk memperlancar penarikan baterai, ini tidak terlalu membantu untuk penggunaan daya, ini lebih untuk penyaringan. Juga kimia baterai ikut berperan di sini, beberapa kimia akan lebih bahagia dengan hasil imbang konstan, beberapa lebih baik menangani imbang arus runcing.

Menandai
sumber
1
bagian penting dari P = V ^ 2 / R adalah ketika R naik dengan tegangan tetap, penggunaan daya berkurang.
Kortuk
Keren, jadi untuk menggunakan lebih banyak baterai, saya mungkin perlu tegangan lebih tinggi (mungkin menggunakan regulator yang disarankan oleh Andrew). Saya akan melakukan beberapa percobaan untuk melihat seberapa rendah tegangan pada saluran serial. Saya juga akan memastikan untuk mengatur pin yang tidak digunakan ke output. Serial hanya digunakan sesekali, jadi saya hanya akan memeriksa keadaan sisanya. Saya sudah pasti mencoba mematikan semua perangkat yang saya bisa.
Jack Schmidt
Untuk kapasitor: jadi mungkin saya tidak perlu kapasitor untuk membantu baterai keluar. Periksa kimia baterai, tetapi dengan asumsi itu dapat menangani pola pembuangan saat ini yang saya miliki, maka tidak perlu mencoba untuk menyesuaikannya, kan?
Jack Schmidt
Terima kasih untuk hal P. Saya pikir saya sekarang mengerti. P = I * V di mana V adalah drop tegangan, jadi saya bisa mengukur menguras baterai di P atau I (atau P-jam atau I-jam) selama tegangan tidak dapat diubah. Saya masih tidak yakin apakah saya dapat mengubah V "gratis".
Jack Schmidt
1
Regulator andrew buck-boost disebutkan benar-benar solusi terbaik. Saya tidak menyebutkannya karena tata letak sirkuit seperti itu biasanya kritis. Mereka sulit untuk papan tempat memotong roti tanpa kinerja yang funky atau memancarkan banyak EMI. Baca lembar data dengan seksama, rekomendasi untuk tata letak dan identifikasi jalur kritis biasanya disertakan. Akan ada batasan yang lebih ketat pada beberapa bagian yang digunakan. Kapasitor ESR rendah dan semacamnya.
Mark
12

Mark memberikan jawaban yang paling baik dan menemukan banyak poin yang akan saya buat. Ada beberapa yang ingin saya sumbangkan juga.

Gunakan osiloskop dengan resistor ohm rendah secara seri dengan pengembalian ke baterai yang umum untuk melakukan pengukuran saat ini. Gambar saat ini dengan mikrokontroler tidak mudah dan sebagai aturan umum, meter JAUH terlalu lambat untuk memberi Anda ide yang baik tentang apa yang terjadi. Apa artinya "rendah ohm" tergantung pada undian yang diharapkan saat ini. resistor 1 ohm akan mengembangkan 100mV untuk setiap 100mA yang ditarik, dan itu mungkin terlalu banyak untuk Anda. Saya akan mencoba 10 ohm 1% atau 0,5% resistor; Anda akan melihat 100mV untuk setiap 10mA undian saat ini. 18 ohm akan memberi Anda 100mV untuk setiap 5.5mA. Jika Anda BENAR-BENAR menggunakan daya rendah, Anda mungkin bisa lolos dengan 1rb; I = V / R: Anda akan melihat 100mV untuk setiap 100uA saat ini ditarik. Hati-hati; jika Anda menggambar arus yang cukup Anda akan berakhir jatuh terlalu banyak melintasi shunt dan pengukuran Anda akan mati, belum lagi rangkaian mungkin tidak akan berfungsi. :-)

Dengan lingkup terhubung, coba beberapa frekuensi operasi yang berbeda untuk mikrokontroler. Anda mungkin terkejut mengetahui bahwa Anda mengonsumsi lebih sedikit daya dengan kecepatan clock yang lebih tinggi karena Anda menghabiskan lebih sedikit waktu "bangun."

Hilangkan pull-up / down sebanyak mungkin. Anda tidak boleh memiliki apa pun pada output apa pun, karena Anda dapat mengarahkan mereka ke status siaga dalam banyak kasus. Input harus dikaitkan dengan apa yang masuk akal, menggunakan nilai setinggi mungkin, seperti kata Mark.

Pastikan mikrokontroler Anda telah mematikan sebanyak mungkin. Ubah pin yang tidak digunakan menjadi output dan arahkan ke status (tinggi atau rendah, tidak masalah). Jangan biarkan LED menyala. Jika Anda dapat mematikan komponen lain atau menghentikan jamnya, lakukanlah. Memori SPI Flash, misalnya, sering kali memiliki perintah 'power down' yang akan mengambil daya yang sudah rendah dan mendorongnya lebih rendah.

Yang lain menyentuh aspek voltase, dan saya ingin mengomentarinya juga. Anda mungkin akan berakhir dengan penggunaan baterai yang JAUH lebih baik jika Anda menggunakan regulator buck / boost efisiensi tinggi antara baterai dan sirkuit Anda. Regulator akan berada dalam mode buck (pengurangan tegangan) ketika level baterai lebih tinggi dari 1.8V yang Anda butuhkan, dan beralih ke mode boost (peningkatan tegangan) ketika level baterai turun di bawah 1.8V. Ini akan memungkinkan Anda untuk menjalankan sirkuit sampai baterai baik dan benar-benar mati, yang layak kehilangan beberapa persen efisiensi yang akan Anda dapatkan saat menggunakannya. Pastikan untuk memilih regulator berdasarkan efisiensinya pada seluruh rentang yang ingin Anda gunakan, dan ukur regulator dengan tepat; regulator yang dapat menghasilkan 1A pada efisiensi 98% mungkin pada efisiensi 60% menghasilkan 50mA. Baca lembar data dengan cermat.

akohlsmith
sumber
Keren. Saya belum pernah menggunakan ruang lingkup sebelumnya, tapi saya curiga lab lokal kami akan dengan senang hati menunjukkan ini kepada saya (saat ini saya sebenarnya menggunakan seri multi-meter untuk mengukur arus; tidak terlalu baik). - Juga, akankah Anda merekomendasikan regulator bahkan jika saya hanya menggunakan 1-10mA, dengan asumsi saya dapat menemukan bagian yang sesuai? Apakah efisiensi 90% cukup baik (saya ingat menemukan yang murah di kisaran itu), atau menggunakan lebih banyak arus daripada menghemat?
Jack Schmidt
1
titik yang sangat baik tentang bermain dengan frekuensi, mengingatkan saya tentang bagaimana radio wifi di ponsel saya menggunakan lebih banyak daya daripada modem seluler tetapi wifi jauh lebih cepat sehingga bisa tidur lebih banyak dan akhirnya menjadi lebih baik secara keseluruhan pada daya karena itu.
Tandai
2
Trik lain untuk memperkirakan waktu penggunaan mikrokontroler rata-rata saat ini dalam skenario di mana penarikan saat ini akan "meledak" adalah untuk mengisi kapasitor yang sangat besar dan memilikinya memberi makan regulator arus rendah diam untuk mensimulasikan tegangan baterai. Kapasitor 100.000uF akan turun 0,01 volt per miliamp-detik. Jika turun 0,3 volt dalam lima menit (300 detik), rata-rata undian Anda saat ini adalah 100uA.
supercat
Poin efisiensi regulator sangat penting. Jadi, Anda harus memperkirakan kisaran konsumsi saat ini untuk memilih regulator yang sesuai dalam rentang itu
gustavovelascoh
4

Dengan sirkuit Anda, saya akan merekomendasikan menggunakan multimeter pada kisaran microamps untuk mengukur konsumsi saat ini. Kemudian, mengingat karakteristik baterai Anda dapat menghitung umur panjang. Ini belum tentu amp-jam / arus, karena baterai akan memiliki karakteristik debit yang berbeda untuk beban yang berbeda. Tapi, ini bisa berguna sebagai perkiraan.

Pada 1 MHz saya pikir Anda akan menyedot sedikit daya - setidaknya 100μA, jika PIC mikro apa pun untuk dibandingkan. Tapi ini akan kewalahan oleh 5mA hingga 20mA melalui LED Anda, jadi Anda harus menyingkirkan itu dulu.

Thomas O
sumber
Keren, LED terhapus. Kesulitan mendapatkan pengukuran yang akurat. Sepertinya 0.9mA sekarang, jadi mungkin perangkat lunak saya tidak mati seperti yang saya kira. Dengan Arduino (dan LED detak jantung) terlibat, ini lebih seperti 8-9mA, jadi setidaknya yang kecil membantu.
Jack Schmidt
1

Saat ini ada kit pengembangan yang tersedia dan papan breakout yang sangat berguna untuk membuat pengukuran arus yang tepat, dalam beberapa kasus ke kisaran nA. Jika Anda belum benar-benar memeriksa µCurrent Gold . Ini bagus untuk pengukuran statis tetapi kurang untuk pengukuran logging dari waktu ke waktu.

Salah satu cara Anda masih dapat menggunakan µCurrent adalah untuk menghubungkan perbedaan amp ke output. Kemudian Anda bisa mengumpankannya ke oscilliscope atau penganalisis logika dengan input analog. Saya menulis tutorial penuh mur dan baut tentang itu saya merasa seperti itu dapat membantu orang-orang dengan anggaran terbatas yang tidak memiliki alat yang tepat.

Sungguh menakjubkan apa yang dapat Anda pelajari tidak hanya dari apa yang dilakukan tegangan di dalam sirkuit Anda, tetapi juga bagaimana ia bereaksi terhadap setiap lonjakan kecil dalam arus. Ini menghemat pantat saya beberapa kali ketika memilih teknologi baterai dan pengujian validasi. 😎

jaredwolff
sumber
0

Semua jawaban sudah memiliki poin penting. Saya akan menambahkan satu dari pengalaman saya.

Ketika saya mengembangkan perangkat dengan konsumsi kurang dari 10uA, bahkan kurang dari 1uA dalam mode tidur nyenyak, pembersihan papan membuat perbedaan. Pernah saya memiliki 7 dari 10 papan dengan konsumsi saat ini yang diharapkan. Semua sama dan semua bekerja dengan baik. Setelah membersihkannya dengan pembersih ultrasonik, semua papan menuju ke hasil yang diharapkan.

Dan akhirnya, perkirakan konsumsi yang diharapkan / ditargetkan Anda dengan memeriksa lembar data semua elemen Anda. Jika Anda menanganinya ok, Anda akan mencapai estimasi Anda. Ini termasuk semua pin yang tidak digunakan dalam mikrokontroler. Bahkan jika Anda mematikan ADC Anda, pastikan konfigurasi pin saat dimatikan adalah yang terbaik tergantung pada koneksi eksternal Anda.

gustavovelascoh
sumber