สวัสดีเพื่อนสมาชิกครับ

กระทู้ ESP32 (EP.10) วันนี้จะขอเสนอเรื่องการใช้งานประยุกต์ใช้ ESP32 เป็นตัวนับความถี่และแสดงรายละเอียดของรูปคลื่น
กระทู้เก่าทั้งหมด
🛑 EP.1 แนะนำเบื้องต้นให้รู้จัก ESP32
https://pantip.com/topic/44159372
🛑 EP.2 ใช้งาน ESP32 กับ web dashboard
https://pantip.com/topic/44161526
🛑 EP.3 ใช้งาน ESP32 กับ sensor ต่าง ๆ
https://pantip.com/topic/44163637
🛑 EP.4 ESP32 กับ dashboard + แจ้งเตือนผ่าน Line
https://pantip.com/topic/44165778
🛑 EP.5 ESP32 กับงาน PWM
https://pantip.com/topic/44167818
🛑 EP.6 ESP32 กับตัวรับ/ส่งสัญญาณ Infrared
https://pantip.com/topic/44168885
🛑 EP.7 ESP32 ในการประยุกต์ใช้วัดค่าตัว Resistor , Capacitor
https://pantip.com/topic/44171282
🛑 EP.8 ESP32 ในการประยุกต์ใช้กับการคุมอุปกรณ์ไฟฟ้าในห้อง
https://pantip.com/topic/44179887
🛑 EP.9 ESP32 ในการประยุกต์ใช้เป็นอุปกรณ์ input แบบ USB เรียกกันว่าเป็นอุปกรณ์ในกลุ่ม HID (Human Interface Device)
https://pantip.com/topic/44186946
ESP32 นั้นสามารถทำงานเป็นตัวนับความถี่และวิเคราะห์รูปคลื่นแสดง parameter ต่าง ๆ ได้อย่างแม่นยำ โดยใน ESP32 มันจะมี hardware อยู่ตัวหนึ่งที่เรียกว่า
MCPWM (Motor Control Pulse Width Modulator) ซึ่ง MCPWM จะเป็น dedicated hardware ที่แยกออกไปทำงานในฟังก์ชันนี้แบบเดี่ยวเลย มันทำงานโดยอาศัย clock ความเร็วสูง 80 MHz คือ APB (Advanced Peripheral Bus) และ MCPWM มีคุณสมบัติที่แม่นยำมากในการที่จะ capture โดยทำงานจาก MCPWM Capture Submodule ด้วยการ capture ช่วงขอบขาขึ้นหรือขอบขาลง (Rising/Falling edge) ของคลื่นสี่เหลื่ยมใด ๆ ก็ได้
ภาพ block diagram แบบเต็มของ MCPWM ในการใช้คุมมอเตอร์ BLDC แบบ 3 เฟส ....ซึ่งใน project นี้จะใช้เพียงส่วน MCPWM Capture Submodule 2 ขาเท่านั้น (CAP0 , CAP1) โดยรับคลื่นสี่เหลี่ยมเข้าทาง GPIO 11 และใช้ code สั่ง Capture Submodule + GPIO Matrix ให้เทียบเวลาของขอบขาขึ้น / ขอบขาลงของคลื่นสี่เหลี่ยมซึ่งการทำเพียงเท่านี้ก็ได้ข้อมูลครบถ้วนสมบูรณ์แล้วที่จะหาค่าของความถี่ , duty cycle , ON/OFF pulse width
ในโครงสร้างของ project นี้จะใช้ web dashboard โดยการทำงานก็จะเชื่อมต่อกันระหว่าง MCPWM Capture Submodule ส่งค่าฐานเวลาที่มัน capture ได้ไปยัง web dashboard และคำนวณออกมาเป็นค่าความถี่ , duty cycle , ON/OFF pulse width และด้วยความทรงพลังของ HTML5 canvas ก็สามารถเขียน script ให้มันวาดรูปออกมาเป็นรูปคลื่นสี่เหลี่ยม + แสดง parameter อื่น ๆ ได้เลยตามภาพตัวอย่างด้านล่างนี้ครับ

ในคลิปด้านล่างนี้จะเห็นว่าออกแบบให้ dashboard update การแสดงผล 3 ครั้งต่อ 1 วินาที (ใน code ของ ESP32 จะใช้ library ESPAsyncWebServer + WebSockets เพื่อจะได้ update ตัวเลขต่าง ๆ ได้อิสระจาก main loop) .... และเมื่อทดลองเปลี่ยนความถี่ในหน้า web dashboard ก็จะแสดงค่าความถี่ที่เปลี่ยนไปและแสดงรูปคลื่นในรูปแบบของกราฟิก โดยบอก parameter ทั้งหมดมาให้ด้วย ซึ่งก็เป็นเรื่องที่น่าทึ่งว่า HTML สมัยนี้ทำได้ขนาดนี้เลยครับ แต่ภาพของลูกคลื่นสี่เหลี่ยมที่เห็นนี้ไม่ใช่การวัดโดยตรงเหมือน Oscilloscope นะครับ แต่เป็นการแสดงค่าเฉย ๆ
(ขออภัยด้วย ลืมลบเสียง background เป็นรายการข่าว)

อุปกรณ์ที่ใช้มีเพียงเท่านี้
กระทู้ไมโครคอนโทรลเลอร์ ESP32 (EP.10) ESP32 กับการใช้วัดความถี่และแสดง parameters
กระทู้ ESP32 (EP.10) วันนี้จะขอเสนอเรื่องการใช้งานประยุกต์ใช้ ESP32 เป็นตัวนับความถี่และแสดงรายละเอียดของรูปคลื่น
กระทู้เก่าทั้งหมด
🛑 EP.1 แนะนำเบื้องต้นให้รู้จัก ESP32
https://pantip.com/topic/44159372
🛑 EP.2 ใช้งาน ESP32 กับ web dashboard
https://pantip.com/topic/44161526
🛑 EP.3 ใช้งาน ESP32 กับ sensor ต่าง ๆ
https://pantip.com/topic/44163637
🛑 EP.4 ESP32 กับ dashboard + แจ้งเตือนผ่าน Line
https://pantip.com/topic/44165778
🛑 EP.5 ESP32 กับงาน PWM
https://pantip.com/topic/44167818
🛑 EP.6 ESP32 กับตัวรับ/ส่งสัญญาณ Infrared
https://pantip.com/topic/44168885
🛑 EP.7 ESP32 ในการประยุกต์ใช้วัดค่าตัว Resistor , Capacitor
https://pantip.com/topic/44171282
🛑 EP.8 ESP32 ในการประยุกต์ใช้กับการคุมอุปกรณ์ไฟฟ้าในห้อง
https://pantip.com/topic/44179887
🛑 EP.9 ESP32 ในการประยุกต์ใช้เป็นอุปกรณ์ input แบบ USB เรียกกันว่าเป็นอุปกรณ์ในกลุ่ม HID (Human Interface Device)
https://pantip.com/topic/44186946
ESP32 นั้นสามารถทำงานเป็นตัวนับความถี่และวิเคราะห์รูปคลื่นแสดง parameter ต่าง ๆ ได้อย่างแม่นยำ โดยใน ESP32 มันจะมี hardware อยู่ตัวหนึ่งที่เรียกว่า MCPWM (Motor Control Pulse Width Modulator) ซึ่ง MCPWM จะเป็น dedicated hardware ที่แยกออกไปทำงานในฟังก์ชันนี้แบบเดี่ยวเลย มันทำงานโดยอาศัย clock ความเร็วสูง 80 MHz คือ APB (Advanced Peripheral Bus) และ MCPWM มีคุณสมบัติที่แม่นยำมากในการที่จะ capture โดยทำงานจาก MCPWM Capture Submodule ด้วยการ capture ช่วงขอบขาขึ้นหรือขอบขาลง (Rising/Falling edge) ของคลื่นสี่เหลื่ยมใด ๆ ก็ได้
ภาพ block diagram แบบเต็มของ MCPWM ในการใช้คุมมอเตอร์ BLDC แบบ 3 เฟส ....ซึ่งใน project นี้จะใช้เพียงส่วน MCPWM Capture Submodule 2 ขาเท่านั้น (CAP0 , CAP1) โดยรับคลื่นสี่เหลี่ยมเข้าทาง GPIO 11 และใช้ code สั่ง Capture Submodule + GPIO Matrix ให้เทียบเวลาของขอบขาขึ้น / ขอบขาลงของคลื่นสี่เหลี่ยมซึ่งการทำเพียงเท่านี้ก็ได้ข้อมูลครบถ้วนสมบูรณ์แล้วที่จะหาค่าของความถี่ , duty cycle , ON/OFF pulse width
ในโครงสร้างของ project นี้จะใช้ web dashboard โดยการทำงานก็จะเชื่อมต่อกันระหว่าง MCPWM Capture Submodule ส่งค่าฐานเวลาที่มัน capture ได้ไปยัง web dashboard และคำนวณออกมาเป็นค่าความถี่ , duty cycle , ON/OFF pulse width และด้วยความทรงพลังของ HTML5 canvas ก็สามารถเขียน script ให้มันวาดรูปออกมาเป็นรูปคลื่นสี่เหลี่ยม + แสดง parameter อื่น ๆ ได้เลยตามภาพตัวอย่างด้านล่างนี้ครับ
ในคลิปด้านล่างนี้จะเห็นว่าออกแบบให้ dashboard update การแสดงผล 3 ครั้งต่อ 1 วินาที (ใน code ของ ESP32 จะใช้ library ESPAsyncWebServer + WebSockets เพื่อจะได้ update ตัวเลขต่าง ๆ ได้อิสระจาก main loop) .... และเมื่อทดลองเปลี่ยนความถี่ในหน้า web dashboard ก็จะแสดงค่าความถี่ที่เปลี่ยนไปและแสดงรูปคลื่นในรูปแบบของกราฟิก โดยบอก parameter ทั้งหมดมาให้ด้วย ซึ่งก็เป็นเรื่องที่น่าทึ่งว่า HTML สมัยนี้ทำได้ขนาดนี้เลยครับ แต่ภาพของลูกคลื่นสี่เหลี่ยมที่เห็นนี้ไม่ใช่การวัดโดยตรงเหมือน Oscilloscope นะครับ แต่เป็นการแสดงค่าเฉย ๆ
(ขออภัยด้วย ลืมลบเสียง background เป็นรายการข่าว)
อุปกรณ์ที่ใช้มีเพียงเท่านี้