Sebagian besar mikrokontroler (mis. AVR, MSP430s, PICs, dll) mendukung sejumlah mode tidur yang berbeda. Mode tidur "terdalam" adalah mode yang mengklaim penarikan daya terendah (mis. "Daya Turun", "Matikan"), tetapi semua sistem jam biasanya terhenti dalam mode ini dan bagi saya sepertinya satu-satunya cara untuk " bangun "dari mereka adalah melalui stimulus eksternal (mis. pin change interrupts, reset chip). Apakah saya melewatkan sesuatu? Apakah ada metode daya sangat rendah menghasilkan sinyal bangun berkala untuk MCU?
Dengan asumsi tujuan saya adalah untuk meminimalkan konsumsi daya (yaitu tidur nyenyak selama mungkin, tetap terjaga sesingkat mungkin), sementara secara berkala bangun untuk menjalankan suatu fungsi, apa cara umum untuk mencapai perilaku seperti ini? Untuk lebih menyederhanakan masalah, mari kita asumsikan bahwa fungsi saya adalah stateless (saya tidak harus mengingat apa pun dari masa lalu untuk melakukannya).
Saya sudah cukup sukses menggunakan WDT pada MSP430 untuk mendapatkan efek ini. Saya baru saja menjadikan rutinitas utama saya menjadi fungsi saya, dengan baris terakhir memungkinkan pengawas waktu untuk berakhir setelah periode tertentu dan masuk ke LPM4.5 atau apa pun yang disebut mode "deep sleep". Hasil akhirnya adalah fungsi dijalankan, MCU tidur, WDT kedaluwarsa, dan chip reset, ad nauseum. Tampaknya bekerja, hanya ingin tahu apakah ada cara "lebih baik" atau "lebih elegan" atau "lebih hemat daya" untuk mendapatkan perilaku seperti ini?
Saya belum mencoba pendekatan ini dengan AVR, tapi saya pikir WDT lebih "lapar daya" dalam AVR daripada pada MSP430 sehingga mungkin kurang menarik untuk pekerjaan berdaya rendah. Mungkin tidak ada pendekatan "universal" untuk daya rendah, dan Anda harus menggunakan alat yang diberikan oleh lini produk tertentu? Saya tahu lini picoPower baru memiliki banyak fitur jagoan seperti Event System dan Sleep Walking yang dalam beberapa kasus hampir tidak memerlukan CPU sama sekali jika Anda dapat membuat aplikasi Anda masuk ke dalam struktur itu ...
Cukup oke dari pengembaraan saya, mari kita lihat apa yang akan Anda katakan :)
Edit contoh nyata yang menggambarkan teknik juga akan keren!
sumber
Jawaban:
Kebanyakan micros mendukung osilator kristal arloji 32.768 kHz daya rendah dengan semacam prescaler dan pengatur waktu. Atur prescaler sehingga penghitung waktu menghitung perlahan dan interupsi terjadi pada periode yang Anda inginkan.
Beberapa micros juga memiliki timer RC daya rendah built-in jika waktu yang tepat tidak kritis.
Lembar data untuk mikro berdaya rendah apa pun akan mencantumkan daya dengan osilator 32.768 (dan tidak ada yang lain) yang berjalan. Cukup dekat dengan nol. Anda dapat melakukan perhitungan untuk melihat apakah ini dapat diterima, dan membandingkannya dengan yang saat ini ditarik oleh pengawas.
OK, misalnya pada msp430f2013, mari kita lihat kekuatan di datasheet.
0,5 μA hampir nol, meskipun lima kali mode OFF sejati.
Untuk lebih detail, kita bisa melihat ke dalam lembar data.
Beralih dari LPM4 (semuanya mati) ke LPM3 (menjalankan osilator) adalah perbedaan antara 0,5 μA dan 1 μA.
Misalkan baterainya CR2032 dengan kapasitas 225 mAh. Maka siaga di LPM4 adalah sekitar 50 tahun dan di LPM3 adalah sekitar 25 tahun. 25 tahun cukup lama untuk banyak aplikasi, karena arus ON (selama pengukuran itu sendiri) mendominasi konsumsi.
sumber
Beberapa bagian memiliki osilator berdaya rendah (beberapa uA) untuk bangun, dan beberapa PIC juga memiliki perangkat keras untuk memungkinkan kenaikan tegangan yang sangat lambat pada pin untuk bangun - ini bisa dari kapasitor eksternal yang dipasang sebelum tidur untuk mengisi daya selama diperlukan periode bangun.
sumber
PIC dengan RTC dapat membuat RTC diatur ke status alarm, sehingga akan membangunkan MCU pada waktu tertentu, dengan kristal 32.768kHz eksternal. Mereka menarik ~ 450nA IIRC dalam mode tidur RTC +, tetapi hanya 20nA dengan mematikan RTC.
sumber
Pengukur waktu pengawas AVR tidak seburuk yang Anda kira. Menurut lembar data ATTiny13A, penarikan saat ini dalam mode power-down @ 3V adalah 2μA tanpa WDT diaktifkan, dan 4μA dengan. Tentu, ini 2x lebih banyak, tetapi arusnya sendiri cukup kecil untuk sekitar 6,2 tahun beroperasi, yaitu sekitar jumlah waktu yang sama dengan waktu yang dibutuhkan baterai untuk terdegradasi dengan sendirinya (sumber: tanggal terbaik sebelum tanggal).
Selain itu, praktis hal lain yang Anda kaitkan di sekitar μC akan menarik lebih banyak. Faktanya, bagian tersulit dalam mendesain rangkaian daya rendah seperti ini adalah mematikan semua arus dalam sisa skema selama periode tidur.
Penundaan bangun juga dapat dikonfigurasi dengan baik, dari ~ 12ms hingga 8s, jika memori berfungsi. Frekuensi yang sebenarnya tidak membuat perbedaan yang nyata jika rutinitas interupsi pendek digunakan: Saya lolos dengan menyalakan ADC, mengambil sampel pot 1K, menghitung beberapa hal dari hasil dan kembali tidur tanpa perubahan nyata dalam konsumsi keseluruhan ( dihaluskan dengan kapasitor besar untuk mengimbangi kelesuan multimeter saya).
Perhatikan bahwa WDT bukan alat ketepatan waktu yang akurat, jadi Anda mungkin ingin menghubungkan RTC eksternal. Mereka dapat mengkonsumsi nanoamps belaka, jadi itu harus pasangan yang baik. Bahkan, jika RTC yang dimaksud dapat menghasilkan pulsa reguler, Anda dapat menggunakannya sebagai sumber bangun Anda alih-alih WDT dengan biaya menggunakan pin.
sumber