ตื่นขึ้นจากโหมดหลับลึก


13

ไมโครคอนโทรลเลอร์ส่วนใหญ่ (เช่น AVR, MSP430s, PICs และอื่น ๆ ) สนับสนุนโหมดสลีปจำนวนหนึ่ง โหมดสลีป "ที่ลึกที่สุด" เป็นโหมดที่ให้พลังงานต่ำที่สุด (เช่น "ปิดเครื่อง", "ปิดเครื่อง") แต่โดยทั่วไประบบนาฬิกาจะหยุดในโหมดเหล่านี้และดูเหมือนว่าฉันจะเป็นวิธีเดียวที่จะ " ตื่นขึ้น "จากพวกเขาคือผ่านการกระตุ้นภายนอก (เช่นการขัดจังหวะการเปลี่ยนพินการรีเซ็ตชิป) ฉันพลาดอะไรไปรึเปล่า? มีวิธีพลังงานต่ำอย่างไม่น่าเชื่อในการสร้างสัญญาณปลุกเป็นระยะสำหรับ MCU หรือไม่

สมมติว่าเป้าหมายของฉันคือลดการใช้พลังงานให้น้อยที่สุด (เช่นนอนหลับให้ลึกที่สุดเท่าที่จะเป็นไปได้ตื่นตัวให้สั้นที่สุดเท่าที่จะทำได้) ในขณะที่ตื่นขึ้นมาทำงานฟังก์ชั่นเป็นระยะ ๆ เพื่อให้เรื่องต่าง ๆ ง่ายขึ้นสมมติว่าหน้าที่ของฉันไร้สัญชาติ (ฉันไม่ต้องจำอะไรจากอดีตเพื่อที่จะทำมัน)

ฉันประสบความสำเร็จในการใช้ WDT ใน MSP430 เพื่อรับผลกระทบนี้ ฉันเพิ่งทำกิจวัตรหลักของฉันเป็นหน้าที่ของฉันด้วยบรรทัดสุดท้ายที่ทำให้ตัวจับเวลาจ้องจับผิดจะหมดอายุหลังจากระยะเวลาหนึ่งและเข้าสู่ LPM4.5 หรืออะไรก็ตามที่เรียกว่าโหมด "Deep sleep" ผลลัพธ์สุทธิคือการใช้งานฟังก์ชั่น, MCU หลับ, WDT หมดอายุและชิปรีเซ็ต, คลื่นไส้โฆษณา ดูเหมือนว่าจะทำงานแค่สงสัยว่ามีวิธี "ดีกว่า" หรือ "หรูหรามากขึ้น" หรือ "ใช้พลังงานอย่างมีประสิทธิภาพ" ในการทำให้เกิดพฤติกรรมแบบนี้

ฉันยังไม่ได้ลองใช้วิธีนี้กับ AVR แต่ฉันคิดว่า WDT นั้น“ มีพลังมากขึ้น” ใน AVR มากกว่าใน MSP430 ดังนั้นมันอาจน่าสนใจน้อยกว่าสำหรับงานที่ใช้พลังงานต่ำ บางทีอาจไม่มีวิธีการ "เป็นสากล" สำหรับการใช้พลังงานต่ำและคุณต้องใช้เครื่องมือที่สายผลิตภัณฑ์กำหนดให้ ฉันรู้ว่าสาย picoPower ใหม่มีคุณสมบัติที่น่าสนใจมากมายเช่น Event System และ Sleep Walking ซึ่งในบางกรณีแทบจะไม่ต้องการให้ CPU ตื่นตัวเลยถ้าคุณสามารถทำให้แอปพลิเคชันของคุณเหมาะกับโครงสร้างนั้น ...

ตกลงพอหลงทางของฉันให้ที่นี่สิ่งที่คุณจะต้องพูด :)

แก้ไข ตัวอย่างที่เป็นรูปธรรมที่แสดงให้เห็นถึงเทคนิคที่น่าสนใจ


2
คุณเคยเห็นfocus.ti.com/lit/wp/slay015/slay015.pdfหรือไม่ บางจุดที่น่าสนใจข้างตัวเลขกำลังการนอนหลับที่สมบูรณ์
XTL

คำตอบ:


15

micros ส่วนใหญ่ใช้พลังงานต่ำ 32.768 kHz นาฬิกาคริสตัล oscillator พร้อมพรีสเกลเลอร์และตัวจับเวลาบางชนิด ตั้งค่าพรีสเกลเลอร์เพื่อให้ตัวจับเวลานับช้าๆและการขัดจังหวะจะเกิดขึ้นตามช่วงเวลาที่คุณต้องการ

ไมโครบางตัวมีตัวจับเวลา RC ในตัวที่ใช้กำลังไฟต่ำหากกำหนดเวลาไม่ถูกต้อง

แผ่นข้อมูลสำหรับไมโครพลังงานต่ำใด ๆ จะแสดงรายการพลังงานด้วย 32.768 oscillator (และไม่มีอะไรอื่น) ทำงาน มันค่อนข้างใกล้กับศูนย์ คุณสามารถทำคณิตศาสตร์เพื่อดูว่าสิ่งนี้ยอมรับได้หรือไม่และเปรียบเทียบกับค่าที่จับได้ในปัจจุบันโดยสุนัขเฝ้าบ้าน

ตกลงตัวอย่างเช่นใน msp430f2013 ลองดูที่พลังงานในแผ่นข้อมูล

0.5 μAเกือบเป็นศูนย์แม้ว่าจะเป็นโหมดปิดจริงห้าเท่า

สำหรับรายละเอียดเพิ่มเติมเราสามารถดูข้างในแผ่นข้อมูล
การเปลี่ยนจาก LPM4 (ปิดทุกอย่าง) เป็น LPM3 (เรียกใช้ oscillator) คือความแตกต่างระหว่าง 0.5 μAและ 1 μA

สมมติว่าแบตเตอรี่รุ่น CR2032 มีความจุ 225 mAh จากนั้นสแตนด์บายใน LPM4 ประมาณ 50 ปีและใน LPM3 นั้นประมาณ 25 ปี 25 ปีนั้นนานพอสำหรับการใช้งานหลายอย่างเนื่องจากกระแสไฟฟ้า (ระหว่างการวัดเอง) ครองการบริโภค

ข้อความแสดงแทน



เสร็จสิ้นสำหรับเซลล์ msp430f2013 และ cr2032
เครื่องหมาย

เราใช้ Cr2032 ในที่ทำงานของฉันกับ ACLK ที่ 32768 ตื่นทุก 2 วินาที เราใช้ตัวรับส่งสัญญาณทุก 90 วินาที เราทำการวัดอุณหภูมิทุก 10 วินาที เราสามารถอยู่ได้นานกว่า 4 ปีด้วย CR2032 ใหม่
Kortuk

3

บางส่วนมีออสซิลเลเตอร์กำลังไฟต่ำ (ไม่กี่ uA) สำหรับการปลุกและ PIC บางตัวยังมีฮาร์ดแวร์เพื่อให้แรงดันไฟฟ้าเพิ่มขึ้นอย่างช้าๆบนพินที่จะปลุก - นี่อาจมาจากตัวเก็บประจุภายนอก ระยะเวลาปลุกที่จำเป็น


3

PICs ที่มี RTC สามารถตั้งค่า RTC เป็นสถานะสัญญาณเตือนดังนั้นมันจะปลุก MCU ในเวลาที่กำหนดด้วยคริสตัล 32.768kHz ภายนอก พวกเขาวาด ~ 450nA IIRC ในโหมด RTC + sleep แต่เพียง 20nA เมื่อปิด RTC


3

ตัวนับจ้องจับสัญญาณของ AVR ไม่ได้เลวร้ายอย่างที่คุณคิด ตามแผ่นข้อมูล ATTiny13A การวาดปัจจุบันในโหมดปิดเครื่อง @ 3V คือ2μAโดยไม่เปิดใช้ WDT และ4μAด้วย แน่นอนว่ามันเพิ่มขึ้นอีก 2 เท่า แต่กระแสไฟฟ้าตัวเองมีขนาดเล็กพอสำหรับการใช้งานประมาณ 6.2 ปีซึ่งประมาณเวลาเดียวกันกับที่ใช้แบตเตอรี่ในการย่อยสลายด้วยตัวเองอยู่ดี (แหล่งที่มา: วันที่ดีที่สุดก่อน)

นอกจากนี้ในทางปฏิบัติสิ่งอื่นใดที่คุณเกี่ยวกับμCจะดึงดูดมากขึ้น ในความเป็นจริงส่วนที่ยากที่สุดของการออกแบบวงจรพลังงานต่ำกำลังปิดกระแสไฟฟ้าทั้งหมดในส่วนที่เหลือของแผนผังในช่วงระยะเวลาสลีป

ความล่าช้าในการปลุกยังสามารถกำหนดค่าได้อย่างดีตั้งแต่ ~ 12ms ถึง 8s หากหน่วยความจำทำหน้าที่ ความถี่ที่เกิดขึ้นจริงไม่ได้สร้างความแตกต่างใด ๆ ที่เห็นได้ชัดหากใช้งานอินเตอร์รัปต์ระยะสั้น: ฉันเริ่มต้นด้วยการเปิด ADC สุ่มตัวอย่างหม้อขนาด 1K คำนวณสิ่งต่าง ๆ จากผลลัพธ์และกลับไปนอนโดยไม่มีการเปลี่ยนแปลงโดยรวมที่สังเกตเห็นได้ เรียบด้วยตัวเก็บประจุขนาดใหญ่เพื่อชดเชยความเกียจคร้านของมัลติมิเตอร์ของฉัน)

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

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