การบูตเครื่องโดยใช้พลังงานต่ำไม่ทำงาน


9

ฉันมีบอร์ด Arduino ATMega328 ที่กำหนดเองซึ่งโดยทั่วไปทำงานที่ 5V @ 8MHz (ใช้โปรไฟล์ Arduino Pro 3.3V 8MHz และ bootloader) เหตุผลหลักที่ฉันใช้การตั้งค่านี้คือเพื่อให้ฉันสามารถวางบอร์ดเข้าสู่โหมดสลีปเมื่อไฟหลักถูกตัดการเชื่อมต่อและเริ่มทำงานโดยใช้พลังงานจากแบตเตอรี่ (3V จากเซลล์เหรียญ) แหล่งจ่ายไฟ 5V และ 3V เป็นไดโอด OR'ed เข้าด้วยกันและอินพุต 5V เชื่อมโยงกับ INT0 ในโค้ดเมื่อตรวจพบว่า INT0 ต่ำลงมันจะเริ่มต้นโหมดสลีปและทุกอย่างจะปิดตัวลงยกเว้นตัวจับเวลาจ้องจับผิดที่เก็บรอบ 1Hz เพื่อรักษาจำนวนภายในและตรวจสอบว่าชิปควรจะสำรองไว้ นี้ทำงานได้อย่างสวยงามเมื่อ 5V พลังงานถูกนำไปใช้ก่อนแล้วแบตเตอรี่จะถูกแทรกแล้ว5V ถูกตัดการเชื่อมต่อ มันเข้าสู่โหมดสลีปและเมื่อ 5V ถูกนำกลับมามันจะทำงานขึ้นและฉันจะเห็นว่ามันไม่ได้หายไปไหน

แต่ปัญหามาเมื่อ 3V ถูกนำมาใช้เป็นครั้งแรก ฉันไม่แน่ใจว่ามันเป็นบูทจริงหรือเปล่า แต่สิ่งที่ควรทำคือบู๊ตตรวจสอบว่า INT0 (Digital 2) ต่ำหรือไม่ถ้าใช่ให้เข้าสู่โหมดสลีป จากการดูการจับฉลากปัจจุบันฉันเห็นว่ามันให้พลังงานสูงถึงไม่กี่ mA เป็นเวลาสองสามวินาทีจากนั้นลดลงเหลือประมาณ 0.3mA (ยังคงสูงกว่าที่ควรจะเป็นในโหมดสลีป) แต่เมื่อผมสมัครใหม่ 5V, ไม่มีอะไร กำลังดึงกลับขึ้น แต่มันไม่ตอบสนอง (ผ่าน FTDI อนุกรม)

อาจมีบางอย่างที่ฉันขาดไปว่ามันไม่สามารถบู๊ตได้ใน 3V ... ตามทฤษฎีแล้วมันน่าจะใช้ได้ดี

อัปเดต:ฉันลด LED ไปที่ D13 และลองร่างภาพกะพริบ ทำงานได้ดีเมื่อเริ่มต้นจาก 3V หรือ 5V อย่างไรก็ตามเมื่อฉันเรียกใช้เฟิร์มแวร์ของฉันและเริ่มต้นจาก 3V LED ก็เริ่มกระพริบอย่างดุเดือด ฉันไม่รู้ว่าเกิดอะไรขึ้นเพราะฉันไม่เคยติดตั้ง D13 เป็นอะไรในรหัสของฉัน แต่มันทำให้ฉันเป็นสิ่งที่เกี่ยวข้องกับ bootloader ...


1
BOD ถูกตั้งค่าไว้เป็นอะไรและอะไรคือการวาดปัจจุบันเมื่อเริ่มต้น?
Ignacio Vazquez-Abrams

มันตั้งเป็น 2.7V วาดปัจจุบันในขณะที่ 3V ประมาณ 4mA ในช่วงสองสามวินาทีแรกจากนั้นหยดและ LED จะบ้า
Adam Haile

คุณเคยลองใช้ bootloader หรือไม่เช่นผ่าน ISP?
Ignacio Vazquez-Abrams

ไม่ฉันยังไม่ได้ลอง สิ่งที่แปลกคือไม่เป็นไรเมื่อใช้ร่างร่างกะพริบตา
Adam Haile

2
คุณสามารถเพิ่มไดอะแกรมเพื่อแสดงการเชื่อมต่อสายไฟของคุณได้อย่างถูกต้องรวมถึงเซ็นเซอร์ใด ๆ และทุก ๆ ตัวหรือโหลดบนแบตเตอรี่ คุณใช้เซลล์เหรียญแบบไหนเป็นลิเธียมไอออน (ชาร์จใหม่ได้) หรืออัลคาไลน์
Ron J.

คำตอบ:


6

ดังนั้น ... กลับกลายเป็นว่าเกิดอะไรขึ้นในรหัส ปรากฎว่าฉันเริ่มต้นการขัดจังหวะใน INT0 เมื่อมันต่ำในตอนเริ่มต้นของรหัสของฉัน ปัญหาคือเมื่อมันเริ่มต้นด้วยพลังงานสำรอง 3V, INT0 ต่ำเสมอเพราะ INT0 เชื่อมโยงกับสาย 5V (มันเป็นวิธีที่มันรู้ว่าจะเข้าสู่โหมดสลีป) เนื่องจาก INT0 อยู่ในระดับต่ำและอินเทอร์รัปต์ถูกเปิดใช้งานในระดับต่ำมันทำให้เกิดการขัดจังหวะอย่างต่อเนื่องที่จะเกิดขึ้นอย่าให้โปรแกรมที่เหลือทำงานตลอดเวลา เปลี่ยนเป็นการเปิดใช้งานการขัดจังหวะเมื่อฉันได้เข้าสู่โหมดการปลุกเต็มแล้วเท่านั้น


4

สิ่งที่เกิดขึ้นและทำไมไม่สามารถกำหนดได้ตามปริมาณข้อมูลที่ให้ไว้ อย่างไรก็ตามฉันเห็นปัญหาที่อาจเกิดขึ้นอย่างน้อยหนึ่งอย่างซึ่งจะอธิบายอาการที่อธิบายไว้อย่างน้อยบางส่วน

คุณบอกว่าคุณใช้ไดโอดเพื่อเลือกแหล่งจ่ายแรงดันและแหล่งจ่ายหนึ่งอันคือแบตเตอรี่ 3V หากคุณใช้ไดโอดมาตรฐานที่ลดลง ~ 0.6V แรงดันไฟฟ้าที่จ่ายให้กับ MCU นั้นมีเพียง ~ 2.4V หากคุณกำลังใช้ไดโอด Schottky ที่มีแรงดันตกระหว่าง 0.15-0.45 แสดงว่าแรงดันไฟฟ้าอาจต่ำถึง 2.5V คุณตั้งค่าแรงดัน BOD ไว้ที่ 2.7 โวลต์ดังนั้นในทางทฤษฎีแล้ว MCU จะไม่บู๊ตด้วยแบตเตอรี่

สำหรับสาเหตุที่คุณสามารถเริ่มต้นที่ 5v ลดลงถึง 3v และนำกลับมาอีกครั้ง - ฉันไม่แน่ใจ คุณอาจปิดการใช้งาน BOD ในรหัส ... อาจจะ ... ไม่แน่ใจว่าทำไมมันถึงได้ผล แต่มันอาจจะไม่รับประกันว่าจะทำงาน

ฉันตั้งค่าวงจรสวิทช์ไดโอดด้วย 5v และ 3.3v เพื่อดูว่ามันคล้ายกับออสซิลโลสโคปของฉันเมื่อสวิตช์แรงดันไฟฟ้า เมื่ออยู่ที่ 3.3v เปลี่ยนเป็น 5v แรงดันจะแกว่งไปมาเล็กน้อย นี่อาจเป็นสาเหตุของปัญหาเมื่อ MCU พยายามออกจากโหมดสลีป การใส่หมวกระหว่าง VCC และ GND ทำให้สัญญาณราบรื่นขึ้นอย่างมาก เมื่อเปลี่ยนจาก 5v เป็น 3.3v ไม่มีการสั่นใด ๆ เลยเพียงแค่หยดที่สะอาด

จากข้อมูลนี้ดูเหมือนว่าคุณควรลดเกณฑ์ BOD หรือปิด BOD และปิดฝา decoupling ระหว่าง VCC และ GND คุณควรตรวจสอบให้แน่ใจว่าคุณมีตัวต้านทานแบบดึงลงบน INT0 และอ่านส่วนแผ่นข้อมูล MCU ที่อธิบายโหมดนอนหลับที่หลากหลายข้อควรพิจารณาทั้งหมดสำหรับการนอนหลับและตื่น - มันค่อนข้างเกี่ยวข้อง ไชโย


2

ฉันคิดว่าปัญหาเกิดขึ้นกับ bootloader ของคุณ แต่ไม่ใช่ในแบบที่คุณคิด

เมื่อ Arduino เริ่มทำงานตัวโหลดแอพจะทำหน้าที่หลายอย่างเช่นการค้นหาซีเรียลโฮสต์หรือการโหลดข้อมูลโปรแกรมจากแฟลชจะต้องใช้พลังงานมากกว่า Arduino นอน

ฉันคิดว่าเหตุผลที่ Arduino ของคุณไม่เริ่มทำงานเพราะ bootloader ต้องการแหล่งสัญญาณนาฬิกาที่แม่นยำ แต่การใช้ 3v เพื่อทำให้นาฬิกาเกิดความยุ่งเหยิงและมันอาจจะพังหรือรอ 3.3v เพื่อใช้กับแหล่งเสถียร

ดูแผ่นข้อมูล:

ลิขสิทธิ์ ATMEL

เราจะเห็นว่าวาดปัจจุบันในขณะที่ตื่นขึ้นมา (ทำงานบูต) อาจจะเป็นรอบ 2mA ขณะที่ปัจจุบันการนอนหลับเป็นเรื่องเกี่ยวกับ0.8 microamps สิ่งนี้อาจนำไปสู่ความมืดมนในการเริ่มต้นโดยไม่มีกระแสไฟฟ้าที่เหมาะสม

บางทีคุณควรเปิดเครื่องด้วยกำลังไฟ 5v หรือคุณอาจต้องการแบตเตอรี่แรงดันไฟฟ้าที่สูงกว่าในปัจจุบัน


นี่ไม่ได้หมายความว่า Blink จะไม่ทำงานด้วยหรือ นอกจากนี้ฉันใช้มากกว่า Arduino ไม่กี่จากเซลล์เหรียญไม่มีปัญหา พวกเขาสามารถให้กระแสมากในเวลาอันสั้น
Cybergibbons

-5

ลองบูตอาร์ดิโนโหลดอีกครั้งโดยไปที่เครื่องมือ> เขียน Bootloader


1
คุณช่วยเพิ่มรายละเอียดเกี่ยวกับวิธีการทำสิ่งนี้ได้ไหม มันไม่เจาะจงมาก: คุณสามารถเชื่อมต่อกับ Arduino ได้อย่างไร? มีความเสี่ยงหรือไม่? ขอบคุณ!
เพนกวินที่ไม่เปิดเผยตัว

ฉันจะถอดปลั๊กทุกอย่างเพื่อให้ปลอดภัย แต่ไม่ควรมีความเสี่ยงใด ๆ
DeveloperACE

นี่คือวิธีการที่จะเผาไหม้บูต: arduino.stackexchange.com/a/474/37 คำตอบของคุณไม่ได้อธิบายวิธีการทั้งหมด
The Guy with The Hat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.