วิธีที่ถูกต้องในการตัดการเชื่อมต่อไอซีระหว่างสถานะพลังงานต่ำเพื่อหลีกเลี่ยงการจัดหากาฝาก / backfeed


10

ผมทำงานเกี่ยวกับพลังงานต่ำแบตเตอรี่ตามโครงการ AVR-based ที่รวมอุปกรณ์ที่แตกต่างกันไม่กี่รวมทั้งแถบ neopixel และนางฟ้า Adafruit เมื่ออุปกรณ์โดยรวมหยุดนิ่งฉันอยากให้วาดน้อยกว่า 0.1mA เพื่อยืดอายุการใช้งานแบตเตอรี่ LiPo ให้สูงสุด

ฉันได้รับสิ่งนี้ทั้งหมด (วัด 0.035mA) แต่ฉันไม่แน่ใจว่าฉันจำเป็นต้องทำในทางที่“ ถูกต้อง” และฉันวางแผนที่จะสร้างผลิตภัณฑ์ตามสิ่งนี้ดังนั้นฉันต้องการทำถูก

ป้อนคำอธิบายรูปภาพที่นี่ (ไม่แสดง: flyback diode สำหรับรีเลย์)

ความกังวลหลักที่ฉันมีคือการเปิดเครื่อง "กาฝาก" ของอุปกรณ์เมื่อ VCC ถูกตัดการเชื่อมต่อผ่านกระแสที่ไหลออกจากพินข้อมูล ตัวอย่างเช่น Pixie (ซึ่งสื่อสารผ่านพอร์ตอนุกรม) ไม่มีโหมดปิดเครื่องและแม้กระทั่งเมื่อ“ ปิด” ท่อระบายน้ำประมาณหนึ่งล้าน ดังนั้นฉันจึงวางรีเลย์ขนาดเล็กเพื่อตัดการเชื่อมต่อ VCC ของมันและค้นพบว่าพินอนุกรมนั้นยังคงให้พลังงานกับพิกซี่ คำแนะนำอื่น ๆชี้ให้เห็นว่าชิปจำนวนมากมีไดโอดสับขาอินพุตดิจิตอลของพวกเขาเพื่อ VCC เป็นการป้องกันไฟ เพื่อแก้ปัญหานี้ฉันต้องระงับไลบรารี่อนุกรมและ digitalWrite (PIN, LOW) จริง ๆ ระหว่างการนอนหลับ

สิ่งเดียวกันกับแถบ WS2812b - การตัดการเชื่อมต่อ VCC ยังอนุญาตให้อุปกรณ์ขับเคลื่อนจากพินข้อมูล และในการออกแบบอื่น ๆ เมื่อฉันตัดการเชื่อมต่อ GND ด้วย N-Channel MOSFET ฉันได้เห็นสิ่งที่ตรงกันข้าม - กระแสย้อนกลับของกระแสข้อมูลผ่านสายดาต้าลงสู่พื้น! (สิ่งนี้จะต้องได้รับการแก้ไขด้วยไดโอดต่อโพสต์บน PJRC) WS2812b ใช้เวลาประมาณพันมิลลิวินาทีแต่ละครั้งแม้ในขณะที่ไม่ส่องแสง

ดังนั้นคำถาม: มีวิธีการทั่วไปที่“ สะอาด” ในการตัดการเชื่อมต่อ VCC และ GND จากส่วนต่าง ๆ ของโครงการระหว่างสลีประบบเมื่อมีพินข้อมูลในการผสม การปฏิบัติที่ดีที่สุดคืออะไร?

ความคิดบางอย่าง:

  1. บังคับให้ VCC เป็น GND (ไม่แน่ใจว่าเป็นอย่างไร Hbridge?) (ถ้าฉันทำอย่างนั้นจะเกิดอะไรขึ้นกับพินข้อมูลที่สูง)
  2. วางบัฟเฟอร์ tri-state ระหว่างหมุดข้อมูลทั้งหมดและอุปกรณ์เหล่านี้และในระหว่างที่อยู่ในสถานะ sleep ให้บัฟเฟอร์ tri-state อยู่ในสถานะอิมพีแดนซ์สูงให้ตัดการเชื่อมต่อ VCC หรือ GND ด้วย P หรือ N mosfet เท่านั้น
  3. ตัดการเชื่อมต่อ GND เท่านั้นด้วย N mosfet และวางไดโอดในพินข้อมูลทั้งหมด
  4. มีสลักกำลังบางชนิดที่ตัดการเชื่อมต่อทั้ง VCC และ GND และทำให้พวกเขาอยู่ในสถานะ“ ความต้านทานสูง” (เช่นบัฟเฟอร์ไตรสถานะสำหรับพลังงานหรือไม่) ด้วยวิธีนี้กระแสไม่มีทางออก "ออก" จากสายข้อมูล

ใครบางคนสามารถสอนฉันถึงวิธีที่สะอาดและทำซ้ำได้มากที่สุดในการจัดการกับปัญหา "การปลดการเชื่อมต่อ" นี้หรือไม่? (ไม่จำเป็นต้องพูดว่าฉันใช้เวลาหลายชั่วโมงในการค้นหาปัญหานี้ด้วยโชคเล็กน้อยแม้ว่าฉันจะพบบันทึกเทคโนโลยีนี้เกี่ยวกับการเปลี่ยนโหลด แต่มันไม่ได้อยู่ด้านหลังฟีดและพลังงานกาฝาก)


ใช่มันน่ารำคาญสุด ๆ ฉันเคยเห็นกรณีที่กำลังใช้งานถึง GPIO pin สามารถเปิด AVR บน (รันโค้ด) แม้ว่าจะไม่มีกำลังไปถึงหมุด VCC ...
vicatcu

2
การสังเกตุตลก: ฉันทำการค้นหาด้วย google อีกครั้งตั้งแต่โพสต์คำถามนี้และคำถามนี้ของ SE ขึ้นมาเป็นอันดับต้น ๆ Google จัดทำดัชนีหน้านี้ในเวลาน้อยกว่า 10 นาที
Jeremy Gilbert

ความคิดเห็นเท่านั้น: สวิตช์แยกที่เหมาะสมอย่างที่คนอื่นแนะนำเป็นทางออกที่ดีที่สุดเมื่อไม่สามารถกำจัดแรงดันไฟฟ้าจากระยะไกลได้ อาจเป็นไปได้ว่าการใช้ Schottky diodes ในการป้อนพินที่มี Cathodes ร่วมกันและมักจะอยู่ที่ Vcc และยึดกับพื้นเมื่อต้องการแยกออกจากกันจะทำให้มีแรงดันอิมพิแดนซ์สูง เห็นได้ชัดว่า Schottky การยึดสายป้อนกำลังไฟฟ้าที่มีความต้านทานต่ำจะทำให้เสียวันของคุณ
รัสเซลแม็คมาฮอน

อาจเป็นไปได้ว่า Hi-Z-ing การเชื่อมต่อทั้งหมดของคุณบางวิธี (หมุดไตรสถานะ ,C บัฟเฟอร์ไตรสถานะสวิตช์แบบอะนาล็อกอะไรก็ตาม) ตามที่ Peter Smith และ CL แนะนำไว้เป็นทางออกที่ดีที่สุด วิธีใดวิธีหนึ่งที่ดีกว่าฉันไม่แน่ใจ ไม่ว่าในกรณีใด: ทำไมคุณถึงใช้รีเลย์สำหรับการสับเปลี่ยนไม่ใช่ P-MOSFET (หรือ N-MOSFET ที่อยู่ด้านล่างสำหรับเรื่องนั้นแม้ว่าการสลับด้านข้างอาจจะยากกว่านี้)
FlashCactus

คำตอบ:


5

เมื่อฉันทำเช่นนี้ฉันมักจะใช้สวิตช์แบบอะนาล็อกแบบ CMOSบนบรรทัดข้อมูลที่ได้รับผลกระทบ

บางอย่างเช่นADG812มีสวิตช์ SPST 4 แชนเนลที่เหมาะสำหรับตรรกะที่ค่อนข้างเร็วและให้ความต้านทานสูงระหว่างโหนดสวิตช์เมื่ออยู่ในสถานะปิด

ADG812 ปิดการรั่วไหล

สิ่งที่ดีเกี่ยวกับเรื่องนี้ก็คือเทคนิคนี้ใช้ได้กับทั้งสายข้อมูลแบบทิศทางเดียวและแบบสองทิศทาง

ส่วนเหล่านี้ยังทำงานด้วยรอยยิ้มที่สดใส:

ความต้องการพลังงานของ ADG812

ลำดับปกติสำหรับการปิดเครื่อง:

  1. ปิดสวิตช์เส้นทางข้อมูล

  2. ปิดระบบโดเมน

แน่นอนว่าการเพิ่มพลังเป็นสิ่งที่ตรงกันข้าม

[Update]

เหล่านี้เป็นที่รู้จักกันจริงโดยชื่ออื่น ๆ เช่นประตูผ่านและประตูส่ง

สิ่งเหล่านี้แตกต่างจากบัฟเฟอร์ tri-state อย่างแท้จริง (อย่างที่คุณเห็นใน diagrame ในลิงก์ด้านบน) แต่สำหรับตรรกะทั่วไปผลจะดีกว่า (นี่คืออุปกรณ์แบบสองทิศทาง) แต่มีพลังงานต่ำกว่า


ยกโทษให้ความไม่รู้ของคำถาม แต่สิ่งนี้แตกต่างอย่างชัดเจนจากบัฟเฟอร์ไตรสถานะหรือไม่? (และขอบคุณสำหรับคำตอบ!)
Jeremy Gilbert

เหล่านี้เรียกว่า "ประตูผ่าน"
vicatcu

3

หากสัญญาณข้อมูลเชื่อมต่อกับไมโครคอนโทรลเลอร์ของคุณคุณสามารถสร้างอิมพีแดนซ์สูงโดยการกำหนดค่าหมุดเหล่านั้นเป็นอินพุต (หากชิปอื่นใช้พลังงานน้อยมากคุณสามารถใช้ Vcc เหมือนสัญญาณข้อมูลได้)

มิฉะนั้นคุณสามารถใช้สวิทช์อนาล็อก (ชิปตรรกะ 74x66) เพื่อตัดการเชื่อมต่อ สำหรับสัญญาณทิศทางเดียว 74x125 ก็สามารถใช้งานได้เช่นกัน


คุณไม่จำเป็นต้องทำให้มันสูง -Z คุณเพียงแค่ขับ GPIO ของสายต่ำ
DoxyLover

1
นั่นจะเป็นอันตรายมากกว่านี้หากชิปตัวอื่นสามารถขับสัญญาณได้สูง
CL

เพียงแค่ฉันเข้าใจอย่างถ่องแท้การเปลี่ยนพินเป็นอินพุตเหมือนกับการวางไว้ในสถานะอิมพีแดนซ์สูงหรือไม่? นั่นเป็นวิธีการทั่วไปใน MCUs ส่วนใหญ่หรือเพียงแค่ AVRs? สถานะนั้นเป็นเช่นเดียวกับที่คุณได้รับจาก 74x125 เมื่อปิดใช้งาน OE หรือไม่
Jeremy Gilbert

@ JeremyGilbert อินพุต CMOS ทั้งหมดมีความต้านทานสูง (เป็น MOSFET เกตซึ่งทำหน้าที่เหมือนตัวเก็บประจุขนาดเล็กมาก) เอาต์พุต '125 ที่ปิดใช้งานนั้นไม่มีเกท แต่ความแตกต่างนั้นเล็กน้อย
CL

1
@JeremyGilbert อินพุตโดยทั่วไปมีค่าสูง Z ในแอปพลิเคชันส่วนใหญ่ ท้ายที่สุดมันยากที่จะรับรู้ทุกอย่างเมื่อคุณขับรถ อย่างที่กล่าวไว้กับ AVRs อย่างน้อย (และอาจเป็นอย่างอื่น แต่ฉันไม่รู้เฉพาะ) คุณต้องระวัง pullups ภายใน: ถ้าพินอยู่ในโหมดอินพุต (กำหนดค่าผ่าน DDRx) และคุณเขียน LOW มัน (ผ่าน PORTx) มันอยู่ในโหมด Hi-Z ปกติ อย่างไรก็ตามหากคุณเขียน HIGH ขณะอยู่ในโหมดอินพุตการดึงภายในจะเปิดใช้งานและจากภายนอกพินจะดูเหมือนตัวต้านทาน ~ 50K ไปยัง VCC แทนที่จะเป็นเส้นลอย
FlashCactus

1

ฉันไม่คิดว่ามีขนาดเดียวที่เหมาะกับกลยุทธ์ทุกอย่างน่าเสียดาย เปลี่ยนพลังงานเป็นระบบย่อยตามที่คุณทำไปแล้ว ในซอฟต์แวร์หมุดไดรฟ์ต่ำสำหรับสถานะพลังงานต่ำเว้นแต่ทำเช่นนั้นจะทำให้เกิดสภาวะพลังงานคงที่สูง ในกรณีเช่นนั้นให้ขับหมุดสูง อย่าปล่อยให้อินพุตลอย กำลังไฟต่อเนื่องตามความจำเป็นเพื่อสร้างสภาวะเริ่มต้นที่ปลอดภัย


1


I2C

คุณไม่มีตัวเลือกนั้น - คุณถูกบังคับให้ใช้ซีเรียล I / O แบบอะซิงโครนัส ไมโครคอนโทรลเลอร์บางตัวอนุญาตวิธีการคล้ายกับ I2C เพื่อแก้ปัญหา หากคุณสามารถตั้งโปรแกรมพินเอาท์พุทแบบอนุกรมให้เป็นแบบดึงลงเท่านั้นแทนที่จะเป็นแบบพูลอัพสำหรับ 1 แบบทั่วไปมากขึ้น, แบบพูลดาวน์สำหรับ 0 , จากนั้นคุณสามารถเพิ่มตัวต้านทานแบบดึงขึ้นเพื่อเปลี่ยน -Vcc เป็น สร้างตรรกะที่สูง
โซลูชันนี้ไม่รบกวนเสียงรบกวนเหมือนกับแนวทางที่คุณใช้อยู่ในปัจจุบัน แต่ควรแก้ไขปัญหาการย้อนกลับของโมดูล I / O ของคุณจาก AVR มันไม่ได้เป็นโซลูชั่นที่ "สะอาด" แต่มันปลอดภัยกว่าสำหรับไมโครคอนโทรลเลอร์ในโมดูล IO ของคุณ

แผนผัง

จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.