Watchdog timer ตัวช่วยในการป้องกันไมโครคอนโทรเลอร์ค้าง หรือ แฮงค์
Watchdog แปลแบบไทย ๆ ก็คือ สุนัขเฝ้าบ้าน น้องจะคอยตรวจสอบความผิดปกติและเห่าเตือนภัยให้เรารู้ตัว ในแง่ของโลกอิเล็กทรอนิกส์ก็มีอุปกรณ์ที่ช่วยตรวจสอบการทำงานของหน่วยประมวลผลเมื่อมีอาการค้างเช่นกัน ที่มีชื่อว่า “Watchdog Timer” … ลุยกันเลย
หลักการทำงาน Watchdog
- ภายใน Watchdog จะประกอบไปด้วย Oscillator และ Timer การทำงานของตัว Timer จะเริ่มนับไปเรื่อย ๆ ตั้งแต่จ่ายไฟให้กับวงจร เมื่อนับไปถึงค่าสูงสุดของมัน มันก็ส่งสัญญาณไป Reset ไมโครคอนโทรเลอร์ แต่ถ้า ไมโครคอนโทรลเลอร์ส่งสัญญาณไป Clear Timer ของ Watchdog ก่อนที่ Watchdog จะนับถึงค่าสูงสุด Watchdog ก็จะไม่ Reset ไมโครคอนโทรลเลอร์
- ฉะนั้นในการทำงานปกติ ไมโครคอนโทรลเลอร์ต้อง Clear Timer ของ Watchdog ภายในเวลาที่กำหนดอยู่ตลอดเวลา ถ้า ไมโครคอนโทรลเลอร์แฮงค์ ไม่ทำงานก็จะไม่มีการ Clear Timer ของ Watchdog ทำให้ตัว Watchdog ส่งสัญญาณมา Reset ไมโครคอนโทรลเลอร์
ทำไมต้องมี Watchdog
ในงานบางระบบต้องทำงานตลอด 24 ชม. เช่นระบบ IoT ต่าง ๆ ระบบที่ต้องอ่านค่าจากเซนเซอร์ตลอดเวลา ถ้าเกิดการผิดพลาดหรือมี Noise เข้ามากวนทำให้ ไมโครคอนโทรลเลอร์ค้างได้ เมื่ออาการดังกล่าว Watchdog จะทำการ Reset ไมโครคอนโทรลเลอร์ขึ้นมาทำงานใหม่
ไมโครคอนโทรลเลอร์มี Watchdog อยู่แล้วหรือไม่
ไมโครคอนโทรลเลอร์ตระกูลใหม่ ๆ เช่น ESP32, PIC, AVR มี Watchdog อยู่ในตัวอยู่แล้ว จึงไม่ต้องต่อ Watchdog ภายนอก แต่ถ้าไมโครคอนโทรลเลอร์ตัวนั้นไม่มีก็สามารถต่อ Watchdog ภายนอกได้เช่นเบอร์ MCP1320
ตัวอย่างการทำงานของเจ้า Watchdog Timer
ผมหา Watchdog มารีวิวเพื่อให้ทุกท่านได้เข้าใจการทำงานของมันมากยิ่งขึ้น ซึ่งผมเลือกเบอร์ MCP1320–29 ของ Microchip ที่ราคาถูกมาก ๆ
การทำงานของ Watchdog Timer แต่ละตัวมีความแตกต่างกันออกไป ขึ้นอยู่กับลักษณะการออกแบบวงจรและ การนำไปใช้งาน ข้อดีของเจ้าเบอร์นี้คือ นอกจากจะมี Watchdog Timer แล้วยังมี Voltage Supervisor ไว้คอยตรวจสอบระดับแรงดันที่เปลี่ยนแปลง
ทดสอบการทำงานของ Voltage Supervisor
- เส้นสีเหลือง = สัญญาณรีเซต RST
- เส้นสีฟ้า = แรงดัน VCC ที่จ่ายให้กับ Watchdog
จากภาพโดยปกติจ่ายแรงดัน 3V แล้วทำการปรับลดแรงดันลงเรื่อย ๆ เมื่อแรงดันต่ำกว่าประมาณ 2.9V ตัว Watchdog จะทำการ ส่งลอจิก “0” ไปที่ขา RST ทำให้บอร์ด Reset ตลอดเวลาจนกว่าระดับแรงดันจะกลับมาปกติ หรือมากกว่า 2.9V นั่นเอง
ทดสอบการทำงานของ Watchdog Timer
- เส้นสีเหลือง = สัญญาณรีเซต RST
- เส้นสีฟ้า = สัญญาณ Clock ที่ป้อนให้กับ Watchdog Timer
จากภาพทำการป้อนสัญญาณ Clock เป็นลูกคลื่นสี่เหลี่ยม (Square Wave) ที่ความถี่ 0.5Hz จำนวน 2 ลูกคลื่น แล้วค้างไว้ที่ Low ลอจิก “0” เจ้าตัว Watchdog ส่งสัญญาณรีเซตออกมา
จากภาพทำการป้อนสัญญาณ Clock เป็นลูกคลื่นสี่เหลี่ยม (Square Wave) ที่ความถี่ 0.5Hz จำนวน 2 ลูกคลื่น แล้วค้างไว้ที่ HIGH ลอจิก “1” เจ้าตัว Watchdog ส่งสัญญาณรีเซตออกมาเช่นกัน
ทดสอบการทำงานของ Watchdog Timer เชื่อมต่อกับ Nano32
- เส้นสีเหลือง = สัญญาณรีเซต RST ต่อกับขา EN ของบอร์ด Nano32
- เส้นสีฟ้า = สัญญาณ Clock ที่ป้อนให้กับ Watchdog Timer
จากภาพทำการป้อนสัญญาณ Clock เป็นลูกคลื่นสี่เหลี่ยม (Square Wave) ที่ความถี่ 0.5Hz หลังจากลูกคลื่นที่ 3 มีช่วงเวลาที่สัญญาณ Clock ขาดหายไปเกิน 1.6 วินาที ทำให้ตัว Watchdog Timer มองว่า บอร์ด Nano32 ค้างเลยส่งสัญญาณ Reset 200ms Active Low ให้บอร์ด Nano32 เริ่มต้นทำงานใหม่อีกครั้งนั่นเอง
ลิงค์ DataSheet ของตัว Watchdog Timer >>> คลิกที่นี่
Watchdog Timer เป็นเพียงตัวช่วยในการ ตรวจสอบการทำงานของไมโครคอนโทรเลอร์ที่ทำงานผิดปกติ แล้วทำการรีเซตให้เริ่มทำงานใหม่ แต่การเขียนโปรแกรมที่ดี บางทีอาจจะไม่จำเป็นต้องพึ่ง Watchdog Timer อีกเลย