บทเรียน 5.2 — วัด PWM

วัด period ความถี่ และ duty cycle ของสัญญาณ PWM ที่หรี่หลอด LED และเทียบกับค่าที่โปรแกรมสั่ง

โมดูล 5 — ออสซิลโลสโคป

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

เป้าหมาย

เมื่อจบบทเรียนนี้ คุณจะ

  1. วัดคาบเวลา (period) ความถี่ และ duty cycle ของ PWM จากรูปคลื่นได้
  2. เทียบ duty cycle ที่วัดได้กับค่าที่โปรแกรมสั่ง และอธิบายเมื่อไม่ตรงกัน
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

ก่อนเริ่ม

  • ตั้งออสซิลโลสโคปให้ภาพนิ่งได้ (บทเรียน ออสซิลโลสโคปเบื้องต้น) และใช้ logic analyzer วัดเวลาได้
  • TESAIoT Dev Kit ที่ flash QWA309 Header I/O Test, ออสซิลโลสโคปสองช่อง (หรือ logic analyzer), มัลติมิเตอร์
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

ดูของจริงก่อน

หลักสูตร AIoT in Action มีตัวอย่างที่หรี่ LED ด้วย led.brightness(pct) แล้วอ่านค่ากลับด้วย led.duty() — มีการทดลองหนึ่งที่สั่ง on() แล้วตามด้วย toggle() หลอดดับไปแล้ว แต่ duty() ยังตอบเลขเดิม

ความเห็นในโค้ดสรุปว่า "duty() = สิ่งที่สั่ง ไม่ใช่สิ่งที่วัด" — นี่คือคำถามของบทนี้ ตัวเลขที่โปรแกรมบอก กับสัญญาณที่ออกจากขาจริง ตรงกันไหม เราจะตอบด้วยเครื่องมือวัด ไม่ใช่เชื่อตัวเลขบนจอ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

แนวคิด (1) — สามตัวเลขของ PWM

25% 50% 75% period T duty D = t_high / T
PWM สามแถวมีคาบเวลาเท่ากัน ต่างกันที่สัดส่วนเวลาที่เป็น 1 (duty cycle)
T = คาบเวลา   f = 1/T   D = t_high/T   V_avg = D × V_high
ตัวอย่าง: T=2ms, t_high=0.5ms → f=500Hz, D=25%, V_avg=0.825V (บนขา 3.3V)
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

แนวคิด (2) — PWM จากฮาร์ดแวร์กับซอฟต์แวร์

ฮาร์ดแวร์ (timer) นับขึ้นด้วยนาฬิกา f_clk ครบ N ครั้งก็เริ่มใหม่

f_PWM = f_clk / N     D = compare / N     ความละเอียด = 1/N
ตัวอย่าง: f_clk=1MHz, N=1000 → PWM 1kHz, ความละเอียด duty 0.1%

ซอฟต์แวร์ โปรแกรมเขียนขา 1 หน่วง เขียน 0 หน่วง วนไป — ใช้ขาไหนก็ได้ แต่เวลาของคำสั่งอื่นปนเข้าไปในจังหวะ คาบเวลาจึงยาวกว่าที่ตั้งเล็กน้อยและแกว่งได้ (jitter)

คู่สัญญาณกลับเฟส (H-bridge) ห้ามเป็น 1 พร้อมกัน ไม่งั้นลัดวงจรแหล่งจ่าย (shoot-through) — ระบบจริงต้องเว้น dead time

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

แนวคิด (3) — ทำไมค่าที่วัดได้ไม่ตรงกับค่าที่สั่ง

สาเหตุ อาการ
ความละเอียดของตัวนับ duty ถูกปัดเป็นขั้น (N=100 สั่ง 33.3% ได้จริง 33%)
PWM จากซอฟต์แวร์ คาบเวลายาวกว่าที่ตั้ง และแกว่ง
ขั้วกลับ duty ที่วัดได้เป็น 100% ลบค่าที่สั่ง
ตัวเลขในโปรแกรมไม่ใช่การวัด โปรแกรมรายงานค่าที่สั่งครั้งล่าสุด (duty())
ขาไม่ได้ต่อกับ PWM ของฮาร์ดแวร์ ได้พัลส์สั้นแล้วหยุด

วิธีวัดให้แม่น วัดที่ระดับ 50% ของแรงดัน, เฉลี่ยหลายคาบเวลา, ความละเอียดเวลาต้องละเอียดกว่าขั้นของ duty ที่อยากตรวจ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

ตัวอย่างสมบูรณ์ — วัด PWM Out และเทียบกับค่าที่สั่ง

1. ค่าที่สั่ง   t_high=20ms, T=40ms, f=25Hz, D=50%
2. ต่อ         CH1→P13.3, CH2→P13.4, 10ms/div, 1V/div, trigger ขาขึ้น CH1@1.65V
3. วัด CH1 (เฉลี่ย 10 คาบเวลา)  T=40.10ms, t_high=20.05ms
   f = 1/40.10ms = 24.94 Hz
   D = 20.05/40.10 = 50.0%
   คาบเวลายาวกว่าที่สั่ง 0.25%
4. อธิบาย      ลักษณะของ PWM จากซอฟต์แวร์ (เวลาคำสั่งปนทุกครึ่งคาบเวลา)
5. ตรวจคู่กลับเฟส  ซูมที่ขอบ ดูว่ามีช่วงที่ทั้งสองเส้นเป็น 1 พร้อมกันไหม
6. นับรอบ      ต้องได้ 50 พัลส์บน CH1
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

ฝึกเติม / แล็บ

ฝึกเติม

  1. PWM คาบเวลา 2 ms ความกว้างพัลส์ 0.5 ms — หาความถี่ duty และแรงดันเฉลี่ยบนขา 3.3 V
  2. ตัวจับเวลาใช้นาฬิกา 10 MHz ต้องการ PWM 10 kHz ต้องนับกี่ครั้งต่อคาบเวลา ค่าเปรียบเทียบสำหรับ duty 33% คือเท่าไร

แล็บ ส่วน A PWM Out บน P13.3/P13.4 — ทำตามตัวอย่างสมบูรณ์ด้วยข้อมูลจริง

แล็บ ส่วน B PWM3 Out บน P15.2/P15.3 — วัดแบบเดียวกัน เทียบกับส่วน A

แล็บ ส่วน C มัลติมิเตอร์กับ PWM — วัด P13.3 ด้วยโหมดแรงดันไฟตรงระหว่างที่วิ่ง อธิบายว่าทำไมมันแกว่งรอบราว 1.65 V

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

เช็กความเข้าใจ

  1. PWM มีคาบเวลา 2 ms และความกว้างพัลส์ 0.5 ms ความถี่และ duty cycle เป็นเท่าไร

    • ก) 500 Hz และ 25% · ข) 2 kHz และ 25% · ค) 500 Hz และ 75% · ง) 250 Hz และ 50%
  2. ขา 3.3 V ขับ PWM duty 40% ความถี่สูง ต่อวงจรกรองที่เฉลี่ยสัญญาณ จะได้แรงดันเฉลี่ยเท่าไร

    • ก) 1.32 V · ข) 1.98 V · ค) 3.3 V · ง) 0.40 V
  3. โปรแกรมสั่ง duty 30% แต่วัดที่ขาได้ 70% ทุกค่าที่ลองสั่ง ผลรวมของค่าที่สั่งกับค่าที่วัดได้เป็น 100% เสมอ สาเหตุที่น่าจะเป็นที่สุดคืออะไร

    • ก) ความละเอียดของตัวนับไม่พอ · ข) ขั้วของสัญญาณกลับ · ค) ความถี่ของ PWM สูงเกินไป · ง) ออสซิลโลสโคปเสีย
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

ไปต่อ

โมดูลถัดไปเริ่มที่ ต่อวงจรบนเบรดบอร์ด — ต่อวงจรที่ใหญ่ขึ้นให้ถูกตั้งแต่ครั้งแรก และตรวจด้วยเครื่องมือทั้งหมดที่ใช้เป็นแล้วก่อนเสียบไฟ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

แหล่งที่มาและเครดิต

"อิเล็กทรอนิกส์และเครื่องมือวัดสำหรับนักพัฒนาระบบฝังตัว" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย
(Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program
สัญญาอนุญาต CC BY-NC 4.0

แผนภาพในบทเรียนนี้เป็นงานวาดของหลักสูตรนี้เอง (CC BY-NC 4.0)

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0