Cara yang tepat untuk melepaskan IC selama kondisi daya rendah untuk menghindari pasokan parasit / umpan balik

10

Saya sedang mengerjakan proyek berbasis AVR berbasis daya baterai rendah yang mengintegrasikan beberapa perangkat yang berbeda termasuk strip neopixel dan Adafruit pixie . Ketika keseluruhan perangkat diam, saya ingin menarik kurang dari 0,1 mA untuk memaksimalkan masa pakai baterai LiPo.

Saya mendapatkan ini semua berfungsi (diukur 0,035mA) tapi saya tidak yakin saya harus melakukannya dengan cara yang "benar" dan saya berencana untuk membangun produk berdasarkan ini sehingga ingin melakukannya dengan benar.

masukkan deskripsi gambar di sini (Tidak ditampilkan: flyback diode untuk relay)

Perhatian utama yang saya miliki adalah menyalakan "parasit" perangkat ketika VCC terputus melalui arus yang mengalir dari pin data. Misalnya, Pixie (yang berkomunikasi melalui serial), tidak memiliki mode daya mati dan bahkan ketika "mati" terkuras sekitar satu miliamp. Jadi saya menempatkan relay kecil untuk memutuskan VCC-nya, dan menemukan bahwa pin serial sebenarnya masih menyalakan Pixie. Petunjuk di tempat lain menyarankan bahwa banyak chip memiliki diode shunting pin input digital mereka ke VCC sebagai perlindungan daya. Untuk mengatasi ini, saya harus menangguhkan perpustakaan serial dan sebenarnya digitalWrite (PIN, LOW) selama tidur.

Hal yang sama dengan strip WS2812b - memutus VCC masih memungkinkan perangkat untuk didukung dari pin data. Dan dalam desain lain ketika saya memutus GND dengan N-Channel MOSFET, saya telah melihat kebalikannya - arus balik arus melalui jalur data ke ground! (Ini harus diselesaikan dengan dioda per pos pada PJRC.) WS2812b sebenarnya memakan waktu sekitar satu miliamp masing-masing bahkan ketika dinyalakan,

Jadi pertanyaannya: Apakah ada cara umum, "bersih" untuk memutuskan sambungan VCC dan GND dari bagian-bagian proyek selama sistem tidur ketika ada pin data dalam campuran. Apa praktik terbaik?

Beberapa ide:

  1. Paksa VCC ke GND (tidak yakin bagaimana? Hbridge?). (Jika saya melakukan itu, apa yang terjadi pada pin data yang tinggi?)
  2. Tempatkan buffer tri-state antara semua pin data dan perangkat ini, dan selama tidur, taruh buffer tri-state dalam status impedansi tinggi, putuskan sambungan VCC atau GND hanya dengan P atau N MOSFET
  3. Putuskan sambungan GND hanya dengan N MOSFET, dan tempatkan dioda pada semua pin data
  4. Apakah ada semacam kait daya yang memutus VCC dan GND dan menjadikannya dalam keadaan “impedansi tinggi” (seperti buffer tri-state untuk daya?) Dengan cara itu, arus tidak memiliki cara untuk mengalir keluar dari jalur data.

Dapatkah seseorang mencerahkan saya ke cara yang paling bersih dan paling berulang dalam menangani masalah “pemutusan sambungan” semacam ini? (Tak perlu dikatakan, saya telah menghabiskan berjam-jam googling masalah ini dengan sedikit keberuntungan, meskipun saya memang menemukan catatan teknologi ini pada pemindahan muatan tetapi tidak membahas back-feed dan kekuatan parasit)

Jeremy Gilbert
sumber
Ya ini sangat menjengkelkan, saya benar-benar melihat kasus di mana daya mencapai pin GPIO dapat mengaktifkan AVR (mengeksekusi kode) bahkan tanpa kekuatan mencapai pin VCC ...
vicatcu
2
Pengamatan lucu: saya melakukan lebih banyak pencarian google sejak memposting pertanyaan ini dan pertanyaan ini pada SE muncul sebagai peringkat teratas. Google mengindeks halaman ini dalam waktu kurang dari 10 menit.
Jeremy Gilbert
Hanya komentar: Sakelar isolasi yang tepat seperti yang disarankan orang lain adalah solusi terbaik ketika tegangan jarak jauh tidak dapat dihilangkan. MUNGKIN menggunakan dioda Schottky untuk memasukkan pin dengan Katoda yang umum dan biasanya di Vcc dan dijepit ke tanah saat diperlukan isolasi, akan memberikan penghapusan memadai tegangan impedansi tinggi. Jelas, Schottky menjepit saluran feed daya dengan impedansi rendah cenderung merusak hari Anda.
Russell McMahon
Mungkin Hi-Z-ing semua koneksi Anda beberapa cara (pin negara-μC, buffer tri-state, switch analog, apa pun), seperti yang disarankan Peter Smith dan CL, adalah pilihan terbaik. Mana salah satu metode yang lebih baik, saya tidak yakin. Dalam kasus apa pun: mengapa Anda menggunakan relay untuk switching, dan bukan P-MOSFET (atau N-MOSFET lowside dalam hal ini, meskipun switching lowside mungkin akan sedikit lebih sulit di sini)?
FlashCactus

Jawaban:

5

Ketika saya melakukan ini, saya biasanya menggunakan switch analog CMOS pada jalur data yang terpengaruh.

Sesuatu seperti ADG812 memiliki 4 saluran switch SPST yang mudah cocok untuk logika yang cukup cepat, dan memberikan impedansi yang sangat tinggi antara node switch ketika dalam keadaan off.

ADG812 dari kebocoran

Yang menyenangkan tentang ini adalah bahwa teknik ini berfungsi untuk jalur data searah dan dua arah.

Bagian-bagian ini juga berjalan dengan senyum cerah:

Persyaratan daya ADG812

Urutan biasa untuk mematikan daya:

  1. Matikan sakelar jalur data

  2. Matikan domain.

Power up adalah kebalikannya, tentu saja.

[Memperbarui]

Ini memang dikenal dengan nama lain, seperti gerbang pas dan gerbang transmisi .

Ini sangat berbeda dari buffer tri-state sejati (seperti yang Anda lihat pada diagram di tautan di atas), tetapi untuk logika biasa, efeknya lebih baik (ini pada dasarnya merupakan perangkat dua arah) tetapi dengan daya yang lebih rendah.

Peter Smith
sumber
Maafkan ketidaktahuan pertanyaan, tetapi apakah ini sangat berbeda dari buffer tri-state? (Dan terima kasih atas jawabannya!)
Jeremy Gilbert
Ini juga dikenal sebagai "pass gate"
vicatcu
3

Jika sinyal data terhubung ke mikrokontroler Anda, Anda dapat membuatnya impedansi tinggi dengan mengkonfigurasi pin tersebut sebagai input. (Jika chip lain menggunakan daya yang sangat kecil, Anda dapat memperlakukan Vcc-nya seperti sinyal data.)

Jika tidak, Anda dapat menggunakan sakelar analog (chip logika 74x66) untuk melepaskannya. Untuk sinyal searah, 74x125 akan berfungsi juga.

CL.
sumber
Anda sebenarnya tidak perlu membuatnya tinggi-Z, Anda hanya bisa menggerakkan garis GPIO mikro rendah.
DoxyLover
1
Itu akan lebih berbahaya jika chip lain bisa mendorong sinyal tinggi.
CL.
Jadi saya benar-benar mengerti, apakah mengganti pin ke input selalu sama dengan menempatkan mereka dalam keadaan impedansi tinggi? Apakah itu digeneralisasi untuk sebagian besar MCU atau hanya AVR? Apakah status itu sama dengan yang Anda dapatkan dari 74x125 saat OE dinonaktifkan?
Jeremy Gilbert
@JeremyGilbert Semua input CMOS memiliki impedansi tinggi (mereka adalah gerbang MOSFET, yang berperilaku seperti kapasitor yang sangat kecil). Output 125 yang dinonaktifkan tidak memiliki gerbang, tetapi perbedaannya dapat diabaikan.
CL.
1
@JeremyGilbert Input umumnya Z tinggi di sebagian besar aplikasi; setelah semua, sulit untuk merasakan apa pun ketika Anda mengendarai telepon. Yang mengatakan, dengan AVR setidaknya (dan mungkin yang lain juga, tapi saya tidak tahu secara spesifik), Anda harus berhati-hati dengan pullup internal: jika pin dalam mode input (dikonfigurasi melalui DDRx) dan Anda menulis RENDAH untuk itu (melalui PORTx), itu dalam mode Hi-Z biasa. Namun jika Anda menulis HIGH saat dalam mode input, pullup internal diaktifkan, dan dari luar pin terlihat seperti resistor ~ 50K ke VCC alih-alih garis mengambang.
FlashCactus
1

Saya tidak berpikir ada satu ukuran cocok untuk semua strategi, sayangnya. Alihkan daya ke subsistem seperti yang sudah Anda lakukan. Dalam perangkat lunak, pin drive rendah untuk kondisi daya rendah, kecuali melakukan hal itu akan menyebabkan kondisi daya tetap tinggi. Dalam hal ini, drive pin tinggi. Jangan biarkan input mengambang. Urutkan kekuatan seperlunya untuk menciptakan kondisi awal yang aman.

vicatcu
sumber
1

Masalah buruk yang dapat menyebabkan mikrokontroler melakukan hal-hal yang sangat aneh.
Solusi yang bagus adalah dengan menggunakan pull-down serial I / O likesaya2C

Anda tidak memiliki opsi itu - Anda dipaksa untuk menggunakan serial I / O asinkron. Beberapa mikrokontroler memungkinkan pendekatan yang sama seperti I2C untuk menyelesaikan masalah. Jika Anda dapat memprogram pin output serial menjadi pull-down-only daripada pull-up-for-1 yang lebih umum , pull-down-for-0 , maka Anda dapat menambahkan resistor pull-up ke switch-Vcc ke membangun logika yang tinggi.
Solusi ini tidak sekuat noise seperti pendekatan Anda saat ini, tetapi harus menyelesaikan masalah back-powering modul I / O Anda dari AVR. Ini sebenarnya bukan solusi "bersih", tetapi jauh lebih aman untuk mikrokontroler (s) dalam modul IO Anda.

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

glen_geek
sumber