การใช้งาน Timer/Counter

download all demo files: Timer.7z

บทนำ

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

นอกจากนี้สัญญาณนาฬิกายังถูกนำไปใช้ในโมดูลต่างๆ ที่อยู่ภายใน Microcontroller เช่น โมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล โมดูลการสื่อสารแบบอนุกรมต่างๆ ทั้ง Synchronous และ Asynchronous และโมดูล Timer

โมดูล Timer ใน Microcontroller สามารถนำมาประยุกต์ใช้งานได้หลากหลาย เช่นการตั้งหน่วงเวลา การสร้างสัญญาณแบบคาบเวลา เช่น PWM Output การตรวจจับสัญญาณ (Input Capture)

  • Counter register ส่วนเก็บข้อมูลชนิดจำนวนเต็มขนาด 16 บิต เมื่อมีขอบขาขึ้นของสัญญาณของ Timer หรือสัญญาณภายนอกที่ขาของ Timer เกิดขึ้น ค่าใน Counter จะมีการนับ สามารถเลือกวิธีนับได้สามแบบดังนี้
    • Up Counter จะเริ่มนับจาก 0 ไปถึง ค่าที่ตั้งไว้ หลังจากนั้นจะเริ่มนับจาก 0 อีกครั้ง
    • Down Counter จะเริ่มนับจากค่าที่ตั้งไว้ ไปถึง 0 หลังจากนั้นจะเริ่มนับจากค่าที่ตั้งไว้อีกครั้ง
    • Up-Down จะเริ่มนับจาก 0 ไปถึง ค่าที่ตั้งไว้ แล้วนับลดลงกลับที่ ค่า 0 อีกครั้ง
  • Prescaler divider ทำหน้าที่ลดความถี่ของสัญญาณนาฬิกาหลักเพื่อนำมาใช้งานให้เหมาะสมกับงาน โดยผู้ใช้งานสามารถเลือกตัวหารที่มีค่าตั้งแต่ 0 ถึง 65535 การทำงานของ Prescaler แสดงได้รูป 1‑1
  • Capture / Compare ทำหน้าที่ตรวจจับสัญญาณภายนอกที่ขาอินพุตของ Microcontroller

รูป 1 1 การทำงานของ Timer / Counter เมื่อเปลี่ยน Prescaler จาก 1 เป็น 4 [1, p. 296]

รูป 1 1 การทำงานของ Timer / Counter เมื่อเปลี่ยน Prescaler จาก 1 เป็น 4 [1, p. 296]

          ใน STM32F4DISCOVERY ประกอบด้วยโมดูลที่เกี่ยวข้องกับสัญญาณนาฬิกาทั้งหมด 17 ชุด โดยสามารถเป็นโมดูล Timer14 ชุด (TIM1 ถึง TIM14) ซึ่งแต่ละโมดูลมีคุณสมบัติดังตาราง 1‑1

คุณสมบัติของโมดูล Timer [2, p. 30]

ชนิดของ TimerTimerCounter
Resolution
ชนิดของ CounterCapture /
compare
channels
Complementary
output
Max interface
clock
(MHz)
Max timer clock
(MHz)
Advanced
-control
TIM1,
TIM8
16 บิตUp,
Down,
Up/down
4มี84168
General Propose TIM2,
TIM5
32 บิตUp,
Down,
Up/down
4ไม่มี4284
TIM3,
TIM4
16 บิตUp,
Down,
Up/down
4ไม่มี4284
TIM916 บิตUp2ไม่มี84168
TIM10,
TIM11
16 บิตUp1ไม่มี84168
TIM1216 บิตUp2ไม่มี4284
TIM13,
TIM14
16 บิตUp1ไม่มี4284
BasicTIM6,
TIM7
16 บิตUpไม่มีไม่มี4284

จากตารางจะเห็นได้ว่า โมดูล Timer ของ STM32F4DISCOVERY สามารถเลือกและตั้งค่าการใช้งานได้หลากหลาย ซึ่งผู้ใช้งานต้องศึกษา Register ที่เกี่ยวข้อง การตั้งค่า Register การกำหนดค่า Prescaler และข้อจำกัดหลายๆ อย่างของโมดูล Timer ดังนั้นการใช้ Waijung Blockset ในส่วนของ library TIM จะช่วยลดเวลาและทำให้ผู้ใช้งานสามารถพัฒนาโปรแกรมได้รวดเร็วขึ้น

การใช้งานสัญญาณ PWM

บทนำ

สัญญาณ Pulse Width Modulation (PWM) คือ สัญญาณแบบมีคาบที่มีความถี่คงที่ แต่มีการปรับความกว้างของพัลซ์หรือช่วงเวลาที่ ON ได้อย่างอิสระดังรูป 2‑1 โดยอัตราส่วนระหว่างช่วงเวลาที่ ON กับคาบของสัญญาณ เรียกว่า Duty Cycle สามารถคำนวนได้จากสมการ

Duty cycle (%) = (tON x 100) / Period หรือ

= (tON x 100) / (tON + tOFF)

รูป 2-1 ลักษณะของสัญญาณ PWM

รูป 2-1 ลักษณะของสัญญาณ PWM

สัญญาณ PWM เป็นที่นิยมนำมาใช้ควบคุมอุปกรณ์ต่างๆ เช่น ปรับความเร็วของ DC Motor หรือความสว่างของหลอดไฟ โดยมีข้อดีคือ ลดการสูญเสียพลังงาน เนื่องจากมีการกระตุ้นอย่างต่อเนื่อง และสามารถเชื่อมต่อกับ Microcontroller หรือคอมพิวเตอร์ ได้ง่าย ถ้าต้องการส่งพลังงานไปยังอุปกรณ์มาก ให้ปรับ Duty Cycle มาก หากต้องการส่งพลังงานน้อย ให้ปรับ Duty Cycle น้อย เป็นต้น นอกจากนี้ สัญญาณ PWM ถูกนำมาใช้เพื่อรับส่งคำสั่งกับอุปกรณ์ต่างๆ เช่น RC Servo motor เป็นต้น

การปรับความกว้างของพัลซ์สามารถทำได้โดยนำสัญญาณสองชุดมาเปรียบเทียบกัน โดยสัญญาณชุดแรกคือสัญญาณ สามเหลี่ยม กับสัญญาณที่ต้องการปรับความกว้างของพัลซ์ (สัญญาณอ้างอิง)

ภายใน STM32F4DISCOVERY ใช้ Counter Value ของโมดูล Timer เป็นสัญญาณสามเหลี่ยมที่มีความถี่คงที่ แล้วนำมาเปรียบเทียบกับสัญญาณอ้างอิง ถ้าค่าของ Counter น้อยกว่าสัญญาณอ้างอิง ให้สถานะของสัญญาณเอาน์พุตเป็น ON ถ้าค่าของ Counter มากกว่าสัญญาณอ้างอิง ให้ให้สถานะของสัญญาณเอาน์พุตเป็น OFF แสดงในรูป 2‑2 ซึ่งเราเรียกการปรับ Duty Cycle แบบนี้ว่า Edge aligned mode [1, p. 315]

รูป 2-2 การปรับ Duty Cycle ของสัญญาณ PWM แบบ Edge aligned mode

รูป 2-2 การปรับ Duty Cycle ของสัญญาณ PWM แบบ Edge aligned mode

นอกจากนี้ STM32F4DISCOVERY สามารถปรับ Duty Cycle ได้อีกแบบคือ Center aligned mode แสดงในรูป 2‑3 โดยเปลี่ยนรูปแบบสัญญาณสามเหลี่ยม (ใช้ Up-DownCounter)[1, p. 316]

รูป 2-3 การปรับ Duty Cycle ของสัญญาณ PWM แบบ Center aligned mode

รูป 2-3 การปรับ Duty Cycle ของสัญญาณ PWM แบบ Center aligned mode

วิธีการใช้งาน Basic PWM Block

สำหรับ Basic PWM Block อยู่ใน Simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> TIM โดยมีลักษณะและคุณสมบัติดังนี้

รูป 2-4 ลักษณะและการตั้งค่าของ Basic PWM Block

รูป 2-4 ลักษณะและการตั้งค่าของ Basic PWM Block

การทดลองปรับความสว่างของหลอด LED ด้วยสัญญาณ PWM

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถปรับค่า Duty Cycle ของสัญญาณ PWM ด้วย Potentiometer ได้
  • เพื่อให้ผู้ใช้งานสามารถปรับค่า Duty Cycle ของสัญญาณ PWM หลายช่องสัญญาณได้
  • เพื่อให้ผู้ใช้งานสามารถปรับความสว่างของหลอดไฟ LED ด้วยสัญญาณ PWM ได้
รูป 2-5 Simulink Model สำหรับการทดลองปรับ DutyCycle ของสัญญาณ PWM

รูป 2-5 Simulink Model สำหรับการทดลองปรับ DutyCycle ของสัญญาณ PWM

เมื่อ Download Model ลงในบอร์ด STM32F4DISCOVERY และเชื่อมต่อตัวต้านทานปรับค่าได้โดยให้ Vout ต่อกับขา PA5 และหลอดไฟ LED ที่ขา PA0 แสดงดังรูป 2‑6 เมื่อผู้ใช้งานหมุน Potentiometer เพื่อปรับค่า Duty Cycle ตามค่าแรงดันที่อ่านได้จากขา PA5 ความสว่างของหลอด LED จะลดลง เมื่อแรงดันไฟฟ้าที่ขา PA5 มีค่าน้อย ความสว่างของหลอด LED จะเพิ่มขึ้น เมื่อแรงดันไฟฟ้าที่ขา PA5 มีค่ามาก

เมื่อต่อหลอดไฟ LED กับขา PA1 ความสว่างของหลอด LED จะเพิ่มขึ้น จากนั้นจะดับทันทีแล้วค่อยๆ เพิ่มขึ้นอีกครั้ง และเมื่อต่อหลอดไฟ LED กับขา PA2 ความสว่างของหลอด LED จะค่อยๆ หรี่ลง จากนั้นจะกลับมาสว่างแล้วค่อยๆ ลดลงอีกครั้ง

รูป 2-6 การทดลองปรับความสว่างของหลอด LED ด้วยสัญญาณ PWM

รูป 2-6 การทดลองปรับความสว่างของหลอด LED ด้วยสัญญาณ PWM

ชวนคิด เมื่อเปลี่ยน Polarity เป็น Active Low

ตอบ ค่า Duty Cycle ที่ปรับได้ จะเป็นการปรับช่วงเวลาที่สัญญาณ LOW ดังนั้น ความสว่างของหลอด LED จะสว่าง เมื่อค่าแรงดันที่อ่านได้มีค่าน้อย

วิธีการใช้งาน Advanced PWM Block

สำหรับ Advanced PWM Block อยู่ใน simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> TIM โดยมีลักษณะและคุณสมบัติดังนี้

Block นี้ใช้สร้างสัญญาณ Complementary PWM นิยมใช้ในชุดขับกระแสแบบ Inverter สำหรับควบคุมมอเตอร์สามเฟส และมอเตอร์ไร้แปลงถ่าน (Brushless Motor)

รูป 2-7 ลักษณะและการตั้งค่าของ Advanced PWM Block

รูป 2-7 ลักษณะและการตั้งค่าของ Advanced PWM Block

การทดลองสร้างสัญญาณ Complementary PWM

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถใช้งาน Advanced PWM block ได้
  • เพื่อให้ผู้ใช้งานเปรียบเทียบลักษณะของสัญญาณ PWM และ Complementary PWM ได้
  • เพื่อให้ผู้ใช้งานสามารถเข้าใจความหมายของ Dead-time ได้
รูป 2-8 Simulink Model สำหรับการทดลองสร้างสัญญาณ Complementary PWM

รูป 2-8 Simulink Model สำหรับการทดลองสร้างสัญญาณ Complementary PWM

รูป 2‑8 แสดง Simulink Model สำหรับสร้างสัญญาณ Complementary PWM โดยเลือกใช้โมดูล Timer1 ภายใน Advanced PWM Block ตั้งค่าการทำงานในแต่ละช่องสัญญาณ มีดังนี้

  • Output Channel 1 Pulse: Polarity HIGH and SET when idle
  • Output Channel 1N Pulse: Polarity HIGH and RESET when idle
  • Output Channel 2 Pulse: Polarity HIGH and SET when idle
  • Output Channel 2N Pulse: Polarity HIGH and SET when idle
  • Output Channel 3 Pulse: Polarity HIGH and SET when idle
  • Output Channel 3N Pulse: Polarity LOW and RESET when idle

หลังจาก Download Model ลงบอร์ด STM32F4DISCOVERY เมื่อต่อขา PB12 ซึ่งเป็นสัญญาณ Break เข้ากับ GND ทุกๆ ช่องสัญญาณจะอยู่ในสถานะรอคอย (Idle) ถ้าช่องสัญญาณไหนตั้งค่าเป็น SET when idle จะมีสถานะโลจิก “1” ถ้าช่องสัญญาณไหนตั้งค่าเป็น RESET when idle จะมีสถานะโลจิก “0” เมื่อเชื่อมต่อขา PB12 กับ VDD แต่ละช่องสัญญาณจะสร้างสัญญาณ PWM และ Complementary PWM ตามที่ตั้งค่าการทำงานไว้

รูป 2‑9 แสดงคู่สัญญาณ TIM1_CH1 และ TIM1_CH1N จากเครื่อง Oscilloscope โดยวัดที่ขา PA8 และ PB13 ตามลำดับ สัญญาณทั้งคู่มีความถี่ 100 และมีจุดที่น่าสังเกตดังนี้

  • เมื่อ TIM1_CH1 มีสถานะโลจิก High TIM1_CH1N จะมีสถานะโลจิก Low
  • จะมี Dead-time 1 ไมโครวินาที เมื่อคู่สัญญาณใดสัญญาณหนึ่งเกิดการเปลี่ยนแปลงสถานะโลจิก
  • Dead-time ที่เกิดขึ้นเป็น 10% ของคาบของสัญญาณ (10 uS) ดังนั้นค่า Duty Cycle ของสัญญาณ TIM1_CH1 จะลดลงเหลือ 15%
  • ค่า Duty Cycle ของสัญญาณ TIM1_CH1N มีค่า 100 – 25 = 75% ผลของ Dead-time ทำให้ Duty Cycle ที่วัดได้ เหลือ 65%
รูป 2-9 ลักษณะสัญญาณ Complementay PWM ของ Channel 1

รูป 2-9 ลักษณะสัญญาณ Complementay PWM ของ Channel 1

รูป 2‑10 แสดงคู่สัญญาณ TIM1_CH2 และ TIM1_CH2N จากเครื่อง Oscilloscope โดยวัดที่ขา PE11 และ PB14 ตามลำดับ พบว่าสัญญาณทั้งคู่ที่ความถี่ 100kHz เช่นกัน แต่ค่า Duty Cycle จะลดลงจาก 50% เหลือ 40%

รูป 2-10 ลักษณะสัญญาณ Complementay PWM ของ Channel 2

รูป 2-10 ลักษณะสัญญาณ Complementay PWM ของ Channel 2

รูป 2‑11 แสดงคู่สัญญาณ TIM1_CH3 และ TIM1_CH3N จากเครื่อง Oscilloscope โดยวัดที่ขา PA10 และ PB15 ตามลำดับ โดยตั้งค่าการใช้งาน TIM1_CH3N มี Polarity Low

จากรูป 2‑8 ค่า Duty Cycle ของสัญญาณ TIM1_CH3 สามารถปรับได้โดยหมุน Potentiometer ที่ต่อกับขา PA5 เมื่อปรับ Duty Cycle ของสัญญาณ TIM1_CH3 เท่ากับ 70% (วัดได้ 60% เนื่องจาก Dead-time)

ค่า Duty Cycle ของสัญญาณ TIM1_CH3N มีค่า 100 – 70 = 30% ผลของ Dead-time ทำให้ Duty Cycle เหลือ 20% เมื่อกลับ Polarity จึงทำให้สัญญาณมีลักษณะดังรูป 2‑11และทำให้ Duty Cycle ที่อ่านได้มีค่าเท่ากับ 80%

รูป 2-11 ลักษณะสัญญาณ Complementay PWM ของ Channel 3

รูป 2-11 ลักษณะสัญญาณ Complementay PWM ของ Channel 3

การใช้งาน TIM IRQ

Interrupt คืออะไร

ยกตัวอย่างเช่น เรากำลังชมภาพยนตร์ที่บ้าน ระหว่างนั้นมีพนักงานไปรษณีย์กดกระดิ่งหน้าบ้านเพื่อส่งจดหมายลงทะเบียน เราต้องหยุดภาพยนตร์เพื่อเดินออกไปรับจดหมาย เมื่อรับจดหมายเรียบร้อยจึงกลับมาชมภาพยนตร์ต่อ เมื่อเปรียบเทียบกับการทำงานของ Microcontroller การชมภาพยนตร์ คือฟังก์ชั่นหลัก เสียงกระดิ่งคือ Event หรือแหล่งกำเนิด Interrupt การเดินไปหน้าบ้านเพื่อรับจดหมายคือ ฟังก์ชั่นที่ถูกเรียกใช้หลังจากเกิด Interrupt นั้น บางครั้งเราเรียกฟังก์ชั่นนี้ว่า Interrupt Service Routine (ISR)

STM32F4DISCOVERY ซึ่งใช้ Microcontroller STM32F407VGT6 มีแหล่งกำเนิด Interrupt แบบกำหนดได้ถึง 82 แหล่ง ยกตัวอย่างเช่น สัญญาณดิจิตอลอินพุต การสื่อสารแบบ I2C SPI UART และ Timer ทั้ง 16 ชุด เป็นต้น

บางครั้งการเกิด Interrupt สามารถเกิดได้ซ้ำซ้อนกัน ยกตัวอย่างเช่น โปรแกรมกำลังทำงานในฟังก์ชั่นที่ถูกเรียกหลังเกิด Interrupt ที่มาจากการสื่อสาร UART ระหว่างนั้นเกิด Interrupt อีกชุดซึ่งมาจากสัญญาณดิจิตอลอินพุต ดังนั้น Microcontroller ต้องตรวจสอบลำดับความสำคัญของ Interrupt หรือ Priority ว่า Interrupt ตัวไหนสำคัญสูงกว่า หาก Interrupt ที่มีจากสัญญาณดิจิตอลอินพุตสำคัญกว่า โปรแกรมจะเริ่มทำฟังก์ชัน

ในบทเรียนนี้ จะใช้ TIM IRQ Block ซึ่งเป็นการใช้ค่าของ Timer เพื่อทำให้เกิด Interrupt แล้วเริ่มทำฟังก์ชั่นใน Interrupt Service Routine

วิธีการใช้งาน Timer (Time base) IRQ

สำหรับ Advanced PWM Block อยู่ใน simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> TIM โดยมีลักษณะและคุณสมบัติดังนี้

รูป 3-1 ลักษณะและการตั้งค่าของ Timer (Time base) IRQ Block

รูป 3-1 ลักษณะและการตั้งค่าของ Timer (Time base) IRQ Block

เมื่อวาง Timer IRQ Block ใน Model สัญญาณ IRQ จะส่งออกทุกๆ Sample time ที่ตั้งไว้ โดยจะไป Activate การทำงานภายใน Function-Call Subsystem Block โดยผู้ใช้งานสามารถเลือกและวาง Function-Call Subsystem Block ได้จาก Library: Simulink >> Ports & Subsystems

ข้อจำกัดของการใช้ Block นี้ คือ Timer ที่ใข้สร้าง Interrupt สามารถเลือกใช้ทุก Module ยกเว้น Timer 1 และ Timer 8

ตัวอย่างการใข้งาน TIM IRQ Block

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถใช้งาน Timer IRQ Block ได้
  • เพื่อให้ผู้ใช้งานสามารถเข้าใจการทำงานของ Timer IRQ Block และ Function-Call Subsystem ได้
รูป 3-2 Simulink Model สำหรับการทดลองใช้ Time IRQ Block

รูป 3-2 Simulink Model สำหรับการทดลองใช้ Time IRQ Block

สร้าง Simulink Model ดังรูป 3‑2 ซึ่งประกอบด้วย Timer IRQ Block จำนวน 4 ชุด โดยเลือก TIM2 – TIM5 เป็นแหล่งกำเนิด Interrupt สัญญาณ IRQ จะถูกส่งไปยัง Function-Call Subsystem Block โดยภายในแสดงดังรูป 3‑3

รูป 3-3 Function-Call Subsystem Block ที่ใช้ในการทดลอง Timer IRQ Block

รูป 3-3 Function-Call Subsystem Block ที่ใช้ในการทดลอง Timer IRQ Block

เมื่อกด Ctrl+J เพื่อดู Sample Time พบว่า Function-Call Subsystem Block จะถูก Execute โดย Time IRQ Block เท่านั้น จึงไม่สามารถระบุ Sample Time ที่แน่นอนได้ (Asynchronous)

รูป 3-4 หน้าต่าง Sample Time Legend

รูป 3-4 หน้าต่าง Sample Time Legend

เมื่อ Download Model ลงในบอร์ด STM32F4DISCOVERY หลอดไฟ LED1, LED2, LED3 และ LED4 จะกระพริบทุกๆ 1, 2, 3 และ 4 วินาที ตามลำดับ

การใช้งาน PWM Capture

บทนำ

จากบทเรียนที่ผ่านมา ผู้ใช้งานสามารถสร้างสัญญาณ PWM โดยกำหนดคุณสมบัติต่างๆ เช่น Duty Cycle และความถี่ของสัญญาณได้ ในทางกลับกัน หากต้องการวัดช่วงความกว้างของพัลส์ หรือวัดคาบเวลาของสัญญาณที่ขาอินพุตของ Microcontroller โมดูล Timer มีส่วนของการตรวจจับสัญญาณและค่าการนับเวลา ซึ่งช่วยคำนวณหาช่วงเวลาที่พัลส์ ON และความถี่ของสัญญาณ เมื่อใช้โหมดการทำงานแบบ Input Capture ได้ ยกตัวอย่างใช้งาน เช่น การอ่านระยะทางด้วยโมดูลอัลตราโซนิค HC-SR04 ดังรูป 4‑1 โดยความกว้างของพัลส์แปรผันตามระยะทางที่อ่านได้

รูป 4-1 โมดูลอัลตราโซนิคและลักษณะสัญญาณเมื่อพบวัตถุ

รูป 4-1 โมดูลอัลตราโซนิคและลักษณะสัญญาณเมื่อพบวัตถุ

การทำงานของโมดูล Timer ในโหมดของ Input Capture ใช้ส่วนตรวจจับขอบของสัญญาณจำนวนสองชุด IC1 และ IC2 หากตั้งค่าให้ IC1 ตรวจจับขอบขาขึ้น IC2 จะตรวจจับขอบขาลง รูป 4‑2 แสดงตัวอย่างการทำงานของโมดูล Timer ในโหมดของ Input Capture ซึ่งช่วงเวลาที่ ON วัดได้ 3 และคาบเวลามีค่าเท่า 5 (หน่วยของการวัดขึ้นอยู่กับความถี่ของสัญญาณนาฬิกาของโมดูล Timer ที่ตั้งไว้)

รูป 4-2 การทำงานของโมดูล Timer ในโหมด Input Capture [1, p. 373]

รูป 4-2 การทำงานของโมดูล Timer ในโหมด Input Capture [1, p. 373]

วิธีการใช้งาน PWM Capture Block

สำหรับ PWM Capture Block อยู่ใน Simulink library >> Waijung Blockset >> STM32F4 target >> On Peripheral Chip >> TIM โดยมีลักษณะและคุณสมบัติดังนี้

รูป 4-3 ลักษณะและการตั้งค่าของ PWM Capture Block

รูป 4-3 ลักษณะและการตั้งค่าของ PWM Capture Block

ลักษณะของขอบสัญญาณดิจิตอลที่ต้องการตรวจจับสามารถเลือกได้ระหว่าง Rising หรือ Falling รูป 4‑4 เปรียบเทียบความกว้างของพัลส์ที่วัดได้เมื่อลักษณะของขอบสัญญาณแบบ Rising และ Falling โดยค่าความกว้างที่อ่านได้จะแตกต่างกัน

รูป 4-4 เปรียบเทียบการวัดความกว้างของพัลส์เมื่อลักษณะของขอบสัญญาณแบบ Rising และ Falling

รูป 4-4 เปรียบเทียบการวัดความกว้างของพัลส์เมื่อลักษณะของขอบสัญญาณแบบ Rising และ Falling

 การทดลองวัดความกว้างของพัลส์

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถอ่านค่าความกว้างของพัลส์ด้วย PWM Capture Block ได้
รูป 4-5 การทดลองอ่านค่าความกว้างของพัลส์

รูป 4-5 การทดลองอ่านค่าความกว้างของพัลส์

รูป 4‑5 แสดงอุปกรณ์สำหรับการทดลองอ่านค่าความกว้างของพัลส์ โดยใช้สัญญาณ PWM ที่ขา PA0 โดยปรับตัวต้านทานปรับค่าได้ (ต่อที่ขา PA5) เพื่อปรับค่า Duty Cycle จากนั้นเชื่อมต่อขา PA0 กับขา PB6 เพื่อตรวจจับความกว้างของพัลส์ ค่าที่อ่านได้จะถูกส่งผ่านบอร์ด aMG USB Converter-N ไปยังคอมพิวเตอร์

รูป 4-6 Simulink Model สำหรับการอ่านค่าความกว้างของพัลส์

รูป 4-6 Simulink Model สำหรับการอ่านค่าความกว้างของพัลส์

เมื่อ Download Model ลงในบอร์ด STM32F4DISCOVERY สัญญาณ PWM ความถี่ 50 Hz (Period 0.02 วินาที) จะถูกส่งยังขาสำหรับตรวจจับความกว้างของพัลส์ (ขาPB6) PWM Capture Block จะทำวัดค่าความกว้างของพัลส์และส่งค่าที่วัดไปยัง UART TXBlock เพื่อส่งข้อมูลทุก ๆ 0.25 วินาที

รูป 4‑7 แสดงหน้าต่าง Teraterm โดยรับค่าความกว้างของพัลส์ ค่า Duty Cycle และความถี่ของสัญญาณ ถ้าส่วนของตรวจจับสัญญาณ ไม่สามารถวัดความกว้างของพัลส์ได้ เช่น ขา PB6 ต่อเข้ากับไฟเลี้ยง หรือ GND โดยตรง เอาน์พุต READY ของ Block จะมีค่าเท่ากับศูนย์

รูป 4-7 ผลการอ่านค่าความกว้างของพัลส์จากโปรแกรม TeraTerm

รูป 4-7 ผลการอ่านค่าความกว้างของพัลส์จากโปรแกรม TeraTerm

เอกสารอ้างอิง

  1. STMicroelectronics, “RM0090: STM32F40xxx Reference Manual [Online],” 2013.
  2. STMicroelectronics, “STM32 F407xx Datasheet-production data [Online],” 2013.