สายพันธุ์“ PB” ใหม่ของ ATmega มีข้อบกพร่องในตัวตรวจจับสีน้ำตาลหรือไม่?


9

เราใช้ไมโครคอนโทรลเลอร์ ATmega48 / 88/168/328 เป็นเวลาหลายปีในผลิตภัณฑ์ของเรา ขณะนี้เราได้พิจารณาเปลี่ยนจากตัวแปร A และ PA เป็นตัวแปร PB ใหม่ (เพราะเราจะต้องใช้พินเสริมตัวจับเวลาและ UART ในผลิตภัณฑ์ใหม่เนื่องจากราคาถูกกว่าและเนื่องจากดูเหมือนว่าตัวแปรเก่าจะถูกยกเลิก) ดังนั้นเราจึงเปลี่ยน ATmega328A เป็น ATmega328PB มันดูเหมือนว่าจะไปยุ่งเหยิงมากมักจะหลังจากที่หยุดชะงักอำนาจ ปัญหาดังกล่าวไม่เคยเกิดขึ้นกับตัวแปรรุ่นเก่า

การขัดจังหวะพลังงานอย่างสม่ำเสมอเป็นเรื่องปกติสำหรับ usecase ของผลิตภัณฑ์ของเรา เราใช้แหล่งจ่ายไฟแบบสวิตช์ (เช่นนี้ ) ตั้งไว้ที่ 5V และมีตัวเก็บประจุในช่วง 220µF บน Vm ของ ATmega เพื่อให้ SRAM มีชีวิตอยู่เพื่อการหยุดชะงักของพลังงานในช่วงหลายนาทีเพื่อเก็บสถานะภายในซึ่งไม่ใช่ภารกิจ สำคัญ แต่เพิ่มประสบการณ์ผู้ใช้อย่างมากด้วยการพร้อมใช้งานทันทีเมื่อรีสตาร์ท (สถานะเหล่านี้เปลี่ยนบ่อยพอที่จะทำให้ EEPROM ไม่เหมาะสม) สิ่งนี้ได้ผลเสมอ

อย่างไรก็ตามด้วย ATmega328PB ใหม่หลังจากการขัดจังหวะพลังงานชิปจะถูกรีเซ็ตโดยไม่มีเงื่อนไขการรีเซ็ตใน MCUSR และดูเหมือนว่านาฬิกาจะยุ่งเหยิง

  • เครื่องตรวจจับสีน้ำตาลถูกตั้งค่าต่อฟิวส์ เราลองทุกระดับที่มีอยู่ข้อผิดพลาดเกิดขึ้นกับพวกเขาทั้งหมด
  • เราใช้ภายนอก 20 MHz ตั้งค่าต่อฟิวส์ได้อย่างถูกต้อง
  • เราลองใช้ 3 ชิปที่แตกต่างกันดังนั้นจึงไม่ใช่การบัดกรีเดียวหรือความล้มเหลวของฮาร์ดแวร์อื่น ๆ

หลังจากที่เกิดข้อผิดพลาดนาฬิกามักจะตั้งค่าความเร็วที่ช้าลง 2.5x เพื่อระบุว่า mcu นั้นถูกโอเวอร์คล็อกโดย 8 MHz ภายในออสซิลเลเตอร์ อย่างไรก็ตามบางครั้งการชะลอตัวอยู่ที่ประมาณ 6x ซึ่งหมายความว่ามันไม่สามารถเป็นข้อบกพร่องของซอฟต์แวร์ที่เปลี่ยนตัวแบ่งสัญญาณนาฬิกาได้เนื่องจากฉันไม่สามารถตั้งค่าฟิวส์จากซอฟต์แวร์ได้และตัวแบ่งสัญญาณนาฬิกาไม่สามารถแบ่งนาฬิกาได้ 2.5 หรือ 6

ดังนั้นผู้ต้องสงสัยคนแรกของฉันคือฟิวส์ฟิวส์ตรวจสอบความล้มเหลวใหม่ อย่างไรก็ตามไม่ว่าจะเปิดหรือปิดก็ตามพฤติกรรมจะยังคงเหมือนเดิม

ในการแยกแยะลักษณะเฉพาะของซอฟต์แวร์ฉันเขียนโปรแกรมทดสอบอย่างง่ายตั้งแต่เริ่มต้นซึ่งไม่ทำอะไรเลยนอกจากสลับสัญญาณที่มี 100 Hz จากตัวจับเวลาขัดจังหวะและระบุด้วย LED หลังจากเริ่มการทำงานใหม่ทุกครั้งซึ่งมีการเปิดใช้งานเงื่อนไขการรีเซ็ต ส่วนที่เหลือของฮาร์ดแวร์ก็ถูกลบออกมีเพียง mcu และตัวควบคุมเท่านั้นที่มี (และไฟแสดงสถานะที่มีตัวต้านทานแบบอนุกรม)

ผลที่ได้

ประมาณ 2/3 ของเวลาไม่มีอะไรน่าสนใจเกิดขึ้น หลังจากไฟดับ mcu จะทำงานต่อทั้งไฟแสดงสถานะรีเซ็ตเป็นสีน้ำตาลและไฟแสดงการเปิด / ปิดเครื่องสว่างขึ้น

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

มันรีสตาร์ทได้ดี

ประมาณ 1/3 ของเวลาข้อผิดพลาดดังกล่าวเกิดขึ้นและเมื่อพลังงานกลับมาอีกครั้งไม่มีตัวบ่งชี้การรีเซ็ตสีน้ำตาลหมดและไฟแสดงการรีเซ็ตเมื่อเปิดเครื่องจะสว่างขึ้น! เอาท์พุทจะแตกต่างกันราวกับว่า MCU ถูกฟ้องด้วยนาฬิกาแปลก ๆ มันไม่วุ่นวาย แต่มันยังคงติตต่อกับความถี่เท่าเดิม

มันเริ่มต้นใหม่ในสถานะที่บ้า

ที่น่าสนใจในสถานการณ์เช่นนี้เครื่องตรวจจับสีน้ำตาลดูเหมือนว่าจะไม่ทำงานอย่างสมบูรณ์เพราะหลังจากการขัดจังหวะพลังงานครั้งต่อไป (ซึ่งบางครั้งนาฬิกาที่ถูกต้องถูกเรียกคืนบางครั้งก็ไม่ทำงาน) จะเห็นได้อย่างชัดเจนว่า ผ่านระดับออกแล้ว ในสถานการณ์เช่นนี้บางครั้งนาฬิกาก็จะเร็วขึ้นและบางครั้งมันก็จะช้าลง:

นาฬิกาไม่มีสีออกหมดเร็วขึ้น ไม่มีสีน้ำตาล, นาฬิกาช้าลง

ระหว่างการทดสอบเหล่านี้ฉันใช้ 16K CK / 14CK + 4.1 ms สำหรับความล่าช้าในการเริ่มต้นระบบ (แต่ความล่าช้า 65 ms ไม่ได้ช่วยแก้ปัญหา)

นี่คือรูปภาพที่ซูมเข้าซึ่งคุณสามารถเห็นได้อย่างชัดเจนว่า VCC ถึงสถานะเสถียรที่ 5 V ในเวลาไม่เกิน 2 ms:

ประสบความสำเร็จในการเริ่มซูมเข้า

ในภาพด้านบน mcu เริ่มต้นอย่างถูกต้อง

ที่น่าสนใจเมื่อมันไม่แรงดันไฟฟ้าเพิ่มขึ้นถึง 5 โวลต์ที่เสถียรแม้เร็ว (ดูเหมือนว่าหลายส่วนของ mcu ไม่เปิดดังนั้นจึงดึงกระแสน้อยลงในช่วงเริ่มต้น)

ด้านล่างนี้เป็นภาพจากจุดเริ่มต้นที่ไม่สำเร็จ:

เริ่มต้นไม่สำเร็จซูมเข้า

โปรดทราบว่าซอฟต์แวร์จะเริ่มทำงานหลังจากเกิน 85 ms หลังจากแรงดันไฟฟ้าคงที่แทนที่จะเป็น 10.5 ms ที่ต้องการเป็นอย่างอื่น ฟิวส์สำหรับความล่าช้าในการเริ่มต้นยังคงเหมือนเดิม 16K CK / 14CK + 4.1 ms

สิ่งที่น่าสนใจที่จะต้องทราบก็คือหลังจากที่อุปทานถูกปิด VCC มีเสถียรภาพที่ประมาณ 1.1 ถึง 1.2 โวลต์ (เก่าตัวแปร ATmega328A ลดลงไปประมาณ 0.6 - 0.7 V) มันเก็บไว้หลายนาที ถ้าฉันรอนานพอ (ตามคำสั่งครึ่งชั่วโมงหรือมากกว่านั้น) mcu จะเริ่มต้นอย่างถูกต้องเสมอ! ดังนั้นดูเหมือนว่าปัญหาคือมี 1.1 โวลต์รอบ ๆ ซึ่งตามแผ่นข้อมูลไม่รับประกันว่าจะเพียงพอสำหรับการเปิดเครื่องใหม่ แต่ควรจะเพียงพอสำหรับการรีเซ็ตเป็นสีน้ำตาล!

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

ฉันพลาดอะไรบางอย่างที่ชัดเจนหรือ ATmega328PB มีข้อบกพร่องร้ายแรงในตัวตรวจจับสีน้ำตาลหรือไม่

แก้ไข:

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

แก้ไข 2

ฉันลองใช้กับ 16 MHz แทน 20 MHz แต่ปัญหาเดียวกันที่แน่นอนเกิดขึ้น


คุณเคยติดต่อ Atmel หรือดูที่ธุระของพวกเขา? ในวันนี้และอายุ IC ผิดพลาดการออกแบบค่อนข้างบ่อย
Edgar Brown

ฉันได้ตรวจสอบข้อผิดพลาด (ไม่พบสิ่งใดในทิศทางนี้) และเรากำลังพิจารณาที่จะติดต่อ Atmel แต่ไม่ก่อนทำการทดสอบเพิ่มเติมและดูรอบ ๆ อีกเล็กน้อย
vsz

3
จากประสบการณ์ของฉันไม่ต้องเสียเวลาก่อนติดต่อผู้ผลิตหรือใช้ฟอรัมของพวกเขา คุณได้ทำการดีบักเกินพอที่จะนำเสนอกรณีที่แข็งแกร่งมาก ด้วยจำนวนที่น้อยกว่านั้น TI ได้ส่ง errata ภายใน (ไม่ได้เผยแพร่) ให้ฉันสำหรับหนึ่งใน IC ของพวกเขาที่บันทึกปัญหาของเรา
Edgar Brown

สองเซ็นต์ของฉันมีค่า: ฉันได้เห็นปัญหากับซีพียูอื่น ๆ ถ้าพลังงานเพิ่มขึ้นเร็วเกินไป ผู้ผลิตบางรายระบุเวลาเพิ่มขึ้นสูงสุด แต่บ่อยครั้งที่สิ่งนี้ไม่ได้กล่าวถึง
Oldfart

คำตอบ:


3

ฉันไม่คิดว่ามันเป็นจุดบกพร่องของตัวตรวจจับบราวน์เอาท์ แต่คุณจะใช้ชิปอย่างไร

อย่างที่คุณพูดด้วยตัวเองว่าถึงขีด จำกัด การเปิดเครื่องเมื่อเปิด 1.1 โวลต์หากไฟถูกถอดออกและเชื่อมต่อสั้น ๆ ดังนั้นจะไม่มี POR

เครื่องตรวจจับ Brown-out ไม่สามารถช่วยได้มากที่นี่เช่นกัน คุณกำลังใช้ AVR ที่ 20 MHz และสิ่งนี้ต้องการแรงดันไฟฟ้าของอุปทานเป็น 4.5 V หรือสูงกว่าหรือคุณกำลังละเมิดข้อกำหนด และ BOD ไม่รับประกันว่ามันจะเดินทางที่ 4.5 V โดยทั่วไปจะน้อยกว่านั้นกล่าวว่า 4.3 V ดังนั้นแม้ก่อนที่ BOD จะทริกเกอร์ไม่มีการรับประกันในสภาพที่ AVR สิ้นสุดลง แต่ BOD ควรกระตุ้นยกเว้นว่ามันอาจ ไม่ทำงานเนื่องจากนาฬิกา 20 MHz ของคุณ เมื่อแรงดันไฟฟ้าเริ่มสูงขึ้นอีกครั้ง BOD จะหยุดทำงานก่อนที่จะจ่ายแรงดันไฟฟ้าที่ระดับ 4.5 V ที่ปลอดภัยอีกครั้ง ถ้ามันถูกทริกเกอร์อย่างถูกต้อง ควรตั้งเวลาหน่วงเวลาเริ่มต้นให้สูงพอที่แรงดันไฟฟ้าจะเปลี่ยนจากระดับ BOD เป็น 4.5 V ก่อนที่จะทำการรีเซ็ตภายใน

แต่ทุกอย่างอาจล้มเหลวเพราะมันต้องการอย่างน้อย 4.5 V เพื่อทำงานที่ 20 MHz แผ่นข้อมูล AVR ไม่ได้กล่าวถึงว่าหากระบบรีเซ็ตภายในไม่เหมาะสมให้ใช้ชิปรีเซ็ตภายนอกและในกรณีนี้ดูเหมือนว่าจะแก้ปัญหาของคุณในการรีเซ็ต AVR ก่อนที่แรงดันจะลดลงเหลือ 4.5 V


ฉันคิดว่า BOD ไม่ได้ใช้โปรเซสเซอร์ แต่เป็นฮาร์ดแวร์เฉพาะ พวกเขาอาจจะเปลี่ยนมันสำหรับตัวแปร PB? ฉันจะแปลกใจหากพวกเขาไม่สนับสนุน BOD อีกต่อไปสำหรับ 20 MHz bodlevel ที่สูงที่สุดคือ 4.3 V ดังนั้น 20 MHz จะต้องการ BOD ภายนอกหรือไม่ ถึงกระนั้นฉันมีข้อสงสัยเพียงอย่างเดียวนี้เป็นสาเหตุ ฉันทำการทดสอบด้วย 20 MHz, 2.7V bodlevel ตั้งค่า VCC เป็น 3V มันทำงานได้ดี เมื่อฉันลดแรงดันไฟฟ้าด้วยตนเองลงเหลือ 2.7 ด้านล่างเล็กน้อยผลลัพธ์จะหยุดลงเมื่อฉันเพิ่มมันที่ด้านบน 2.7 เอาท์พุทกลับมาทำงานต่อเสมอมันไม่เคยล้มเหลวเลยแม้แต่ครั้งเดียว มีเพียงการเริ่มต้นจาก 1.1 V ที่จะปิดใช้งาน BOD
vsz

เป็นไปได้มากว่ามันเป็นฮาร์ดแวร์เฉพาะ แต่ในช่วง undervoltage ก่อนที่ BOD จะเริ่มขึ้นคุณแน่ใจได้หรือไม่ว่าข้อมูลถูกดึงจากแฟลชเพื่อการทำงานของ CPU และ CPU ทำงานอย่างถูกต้องหรือไม่? อาจหรือเพียงแค่เขียนข้อมูลแบบสุ่มไปยังการลงทะเบียนที่สงวนไว้ซึ่งไม่ได้ระบุเนื้อหา รายละเอียดมีการเปลี่ยนแปลงสำหรับรุ่น PB และพวกเขาไม่รองรับ BOD สำหรับ 20MHz ทั้งบนชิปรุ่นเก่า ตัวแปร PB มีทั้ง BOD และ POR curves ที่แตกต่างกันอย่างแท้จริงและเตะเข้าในภายหลังด้วยแรงดันไฟฟ้าต่ำ
Justme

โปรดดูรูปที่สองของฉัน ดูเหมือนว่า BOD จะทำงานอย่างถูกต้องและรีเซ็ตชิปแล้ว มันไม่สามารถเริ่มต้นได้เมื่อเริ่มต้นครั้งถัดไป นอกจากนี้ฉันได้ขับชิปนี้ที่ 3 V และทำงานได้อย่างถูกต้องไม่เคยล้มเหลวในครั้งเดียว
vsz

ในความคิดของฉันชิไม่จำเป็นต้องทำงานนอกพื้นที่ปฏิบัติการที่ปลอดภัย แต่ขอดำเนินการต่อ BOD จะไม่รีเซ็ตเครื่องตรวจจับความล้มเหลวของนาฬิกาดังนั้นเฉพาะการรีเซ็ต Power-On และการรีเซ็ตภายนอกจะเปลี่ยนจากนาฬิกาภายใน ดังนั้นตรวจสอบการตั้งค่าฟิวส์ CFD อีกครั้ง คุณใช้คริสตัลภายนอกหรือนาฬิกาภายนอกหรือไม่ ฟิวส์ CFD อาจเคยเป็นฟิวส์แบบสวิงเต็ม และเนื่องจากไม่มีฟิวส์แบบเต็มแกว่งความถี่สูงสุดสำหรับคริสตัลคือ 16MHz และ 20MHz ต้องใช้สัญญาณนาฬิการะดับตรรกะภายนอก ดังนั้นอาจเป็นปัญหาการเริ่มต้นของคริสตัลด้วยดังนั้นควรวางขอบเขตไว้บนพินคริสตัลด้วย
Justme

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