STM32 Timers#5 Timer Synchronization || Slave trigger mode

Started by tha, February 01, 2023, 11:29:21 AM

Previous topic - Next topic

tha

https://controllerstech.com/stm32-timer-synchronization-slave-trigger-mode/

ขอแปลหน่อยนะครับ ขอขอบคุณเขามา ณ ที่นี้ด้วย ท่านใดพอจะมีทรัพย์ก็บริจาคเขาด้วยนะ ฟังภาษาอังกฤษเขาในยูทูบก็ฟังง่ายดี(เปิดคำบรรยายด้วย)ครับ

Timer synchronization || Slave Trigger mode

นี้คือ the 5th tutorial ใน the STM32 Timer series, และวันนี้เราจะดูวิธีซิงโครไนส์ the Timers. Timer synchronization จะมี tutorials เพิ่มเติมและวันนี้เราจะสตาร์ทด้วย the slave trigger mode.

Trigger mode จะควบคุมการสตาร์ทของ the slave counter. ที่นี่ the master timer ปล่อยออก a trigger signal, ซึ่งจะกลับคืนมานับต่อบน the slave timer.



ดังแสดงในรูปภาพข้างบน, the TIMER 2 (Slave) counter เคยถูกหยุดที่ 45. ทันทีที่ the TIM1 (master) ปล่อยออก Update Event (UEV) signal, the TIM2 counter กลับคืนมานับต่อ.

โปรดทราบว่า the counter จะไม่รีเซ็ตเป็น 0 แต่จะกลับมาทำงานต่อจากตำแหน่งที่มันเคยถูกหยุดชั่วคราว. นอกจากนี้ the trigger mode จะควบคุมเฉพาะการสตาร์ทของ the counter, และไม่ the stop.

tha

CubeMX Setup

ข้างล่างเป็น the setup สำหรับ TIM1, the master TIMER

                           

TIM1 จะทำงานเป็น a master timer.

     •  ที่นี่ผมเปิดใช้งาน the PWM สำหรับ channel 1 ดังนั้นเราสามารถเห็น the output of TIM1
     •  ไม่มีความต้องการสำหรับ the PWM frequency, แต่ผมได้เซ็ตมันไว้ที่ 100 Hz, พร้อมด้วย a duty cycle of 30%.
                  •  คุณสามารถดูบทช่วยสอน PWM หากคุณไม่เข้าใจการตั้งค่านี้
                      https://controllerstech.com/pwm-in-stm32/
     •  ส่วนหลักในการตั้งค่านี้คือ Trigger Event Selection ซึ่งฉันได้ตั้งค่าเป็น Update Event (UEV Flag).
     •  Update Event signal นี้จะถูกใช้โดย the slave Timers, ซึ่ง counters จะสตาร์ทการนับเมื่อรับสัญญานนี้.

tha

ตาม the F4446RE Reference manual, the internal trigger connection ระหว่าง the timers ถูกแสดงไว้ข้างล่าง



ที่นี่ the RED box แทน the Slave Timers, The BLUE box แทน the master Timer, และ the GREEN box แทน the signal ที่ใช้โดย the master เพื่อควบคุม the slave.

ดังนั้น the Timers 2, 3 and 4 สามารถถูกควบคุมโดย the same master, TIM1 โดยการใช้ the signal ITR0.

โดยพื้นฐานแล้วเราจะทำ the parallel synchronization, โดยที่ 1 master จะควบคุม 3 slaves ทั้งหมดในเวลาเดียวกัน.

ข้างล่างคือการตั้งค่าสำหรับ the TIM2.

                           

TIM3 และ TIM4 มีการตั้งค่าเหมือนกันทุกประการ ดังนั้นฉันจึงแสดงเฉพาะสำหรับ TIM2

     •  ที่นี่เราจะกำหนดค่า the TIM ใน slave mode โดยใช้ the Trigger mode.
     •  The Trigger source คือ the signal ที่ใช้โดย the master เพื่อทริก slave นี้, ดังนั้นมันถูกเซ็ตเป็น ITR0
     •  ผมได้เปิดใช้งาน the PWM output ด้วย, ดังนั้นเราสามารดูได้ว่า the timer กำลังทำงานอย่างไร.
     •  ส่วนที่เหลือคือ the Frequency and Duty สำหรับ the PWM, ซึ่งคุณสามารถเซ็ตค่าอะไรก็ได้ที่คุณต้องการ.
     •  ผมใช้ the same frequency and Duty สำหรับ the TIM3 and TIM4. three slave Timers ทั้งหมดถูกต่อกับ the APB1
         bus, ดังนั้นพวกมันทั้งหมดจะรันที่ความถี่เดียวกัน.


tha

ข้างล่างคือ the pinout สำหรับทั้งหมดสำหรับ TIMERS

               

ทีนี้เราได้ต่อ the all 4 pins เข้ากับ the oscilloscope, ดังนั้นเราสามารถดู the output.

tha

Some Insight into the code

ไม่มีอะไรต้องทำมากสำหรับ the code. ใน the main function เราเพียงสตาร์ท the PWMs สำหรับทุก the timers.



ทีนี้ผมสตาร์ท the PWMs สำหรับ the slave Timers ก่อน. การหน่วงเวลา 500ms ถูกให้อย่างจงใจ, เพื่อว่าเราจะสามารถดูได้ว่า the PWM output เป็นอย่างไรจริงๆ.

การใช้การตั้งค่านี้หาก the slave trigger mode ไม่ทำงาน, ดังนั้นคุณสามารถเห็น the PWM output of TIM2 ก่อน. หลังจากนั้น 500ms, the TIM3 จะสตาร์ท the PWM. ในวิธีการนี้, the PWM of the master timer, TIM1, จะสตาร์ทหลังสุด.

tha

ข้างล่างคือ the output บน the oscilloscope.



ที่นี่ฉันได้ทำเครื่องหมาย the pints 2, 3, 4 and 1. โปรดทราบว่า the channel polarity ถูกเซ็ตเป็น LOW, ดังนั้น a HIGH output สามารถถูกเห็นเป็น LOW ที่นี่.

ส่วนที่เหลือ, ใน the PWM signal, the output ยังคง high เมื่อ the counter นับจาก 0 ถึง CCR (Pulse) value. หลังจากนั้น the output ยังคง LOW จาก the CCR value จนถึง the ARR value.

     •  The PWM สำหรับ TIM2 สตาร์ทที่เครื่องหมาย 2. The counter ถูกเริ่มต้นด้วย 0 แต่มันไม่นับขึ้น, เนื่องจากมันกำลังรอสำหรับ the
         Trigger signal.
            •  The PWM กำลังทำงาน, แต่เนื่องจาก the counter ติดอยู่ที่ 0 และดังนั้น the output ยังคง HIGH (LOW ใน the scope).
     •  The PWM สำหรับ TIM3 and TIM4 สตาร์ทในลักษณะเดียวกัน. counters ของพวกมันกำลังรอสำหรับ the Trigger signal ด้วย
     •  ที่เครื่องหมาย 1, the TIM1 ในที่สุดก็สตาร์ท. หลังจากจุดนี้ The PWM สำหรับทุก the slave timers ก็สตาร์ทแสดง the
         waveform.

ลองซูมเข้าไปที่เครื่องหมาย 1 ด้านล่างเป็นภาพที่แสดงสิ่งที่เกิดขึ้นจริงๆ ณ จุดนั้น.



ดังที่ฉันได้กล่าวถึง the Channel Polarity ถูกกลับ, ดังนั้น the signal ยังคง high เป็นเวลา 30% ของเวลาและ Low เป็น 70% ของเวลา. นี่เป็นตาม the PWM setup ที่เราทำสำหรับ the TIM1.

     •  ที่ the 0 marker, the counter of the TIM1 เกิด overflows.
     •  สิ่งนี้สร้าง the Update Event (UEV).
     •  ทันทีที่ the slave Timers รับ trigger signal นี้, counters ของพวกมันจะสตาร์ทการนับและคุณสามารถเห็น the PWM
         waveform สำหรับสาม slaves ทั้งหมด.
     •  ทั้งหมดสามของพวกมันสตาร์ทที่เวลาเดียวกันจริงๆ. นี่คือข้อดีของการใช้ the slave mode Triggering.

tha

Synchronizing in Series

จนถึงตอนนี้เราได้เห็นวิธีที่ the TIM1 ถูกใช้เพื่อประสานเวลากับ the 3 slave timers. พวกมันถูกซิงโครไนซ์ใน the parallel mode ที่มี one master และ 3 slaves.

ตอนนี้เราจะซิงโครไนซ์ timers เหล่านี้ใน the series mode, โดยที่เราจะมี 3 masters และ 3 slaves.

ดู the internal trigger connection จาก the reference manual.



     •  ทีนี้คุณสามารถเห็น the TIM2 สามารถถูกควบคุมโดย the TIM1 โดยใช้ the signal ITR0
     •  คล้ายกัน the TIM3 สามารถถูกควบคุมโดย the TIM2 โดยใช้ the signal ITR1
     •  และ TIM4 สามารถถูกควบคุมโดย the TIM3 โดยใช้ the signal ITR2

ดังนั้นเรามี 3 Master Timers, TIM1 TIM2 and TIM3, และ 3 slave timers, TIM2 TIM3 and TIM4.

tha

The cubeMX setup สำหรับพวกมันถูกแสดงข้างล่าง



The TIM1 จะมีการกำหนดค่าเหมือนกับก่อนหน้านี้, ดังนั้นฉันจึงได้แสดงมันไว้สำหรับส่วนที่เหลือของพวกมันเท่านั้น

     •  TIM2 เป็น the slave สำหรับ TIM1, ดังนั้น the slave Trigger mode ถูกเปิดใช้งานพร้อมด้วย the trigger source ITR0.
          •  มันเป็น the master สำหรับ TIM3 ด้วย, ดังนั้นฉันจึงเปิดใช้งาน the Trigger Event Selection เป็น Update event.
     •  คล้ายกัน the TIM3 เป็น the slave สำหรับr TIM2, ดังนั้น the slave mode triggering ถูกเปิดใช้งานพร้อมด้วย the trigger
         source เป็น ITR1
          •  และมันเป็น the master สำหรับ TIM4 ด้วย, ดังนั้น the Trigger Event Selection ถูกเซ็ตเป็น Update event.
     •  TIM4 เป็น the slave สำหรับ TIM3, ดังนั้น the slave mode triggering ถูกเปิดใช้งานพร้อมด้วย ITR2 เป็น the trigger
         source.

The code ยังคงเหมือนกับที่เราใช้ก่อนหน้านี้, ดังนั้นเราจะเห็น the output บน the scope.



คุณจะเห็น the output แตกต่างจากที่เราได้รับในครั้งล่าสุดเล็กน้อย.

     •  ที่นี่ marker 0 คือจุดที่ the overflow เกิดขึ้นสำหรับ the TIM1, และดังน้น the TIM2 จะสตาร์ทหลังจากนั้น.
     •  Marker 1 คือจุดที่ the TIM2's counter overflows. TIM3 สตาร์ททันทีหลังจากจุดนี้.
     •  TIM3's counter overflows ที่ the marker 2, และ TIM4 สตาร์ทหลังจากจุดนี้.