Advanced timers

This tutorial shows how to generate a PWM signal with a known frequency and duty cycle from the Universal Timer (TIM3) , measure the frequency and duty cycle of this known PWM signal using the PWM input mode of the ** Advanced Timer (TIM1) , and print the relevant data via the serial port (USART1) **.

1、software-hardware

2、Brief principle

2.1、Hardware interface

image-20231122190921920

2.2、Physical connection diagram

This tutorial requires connecting the S1 signal wire (yellow terminal) and PE9 pin of the servo

image-20231122191349741

image-20231122191657973

2.3、Principle of control

TIM1:The timer PWM input mode is configured to measure the frequency and duty cycle of the known PWM signal

TIM3:The timer PWM output mode is configured to generate PWM signals with known frequency and duty cycle

Timer typesAdvanced timers
The timer nameTIM1、TIM8
Number of counter bits16
Counting modeIncrease/decrease/center alignment
Predivision coefficient1-65536
Generating DMA requestsYes
Capture/compare channels4
Complementary outputYes
Clock frequency72MHz(Max)
Mount busAPB2

Time base cell

registerFunction
The counter register(TIMx_CNT)The current value of the counter
Predivider register(TIMx_PSC)Set frequency division coefficient (1-65536)
Automatically reload registers(TIMx_ARR)The counter counts the boundary and the overloaded value
Repeat count register(TIMx_RCR)Set the repeat counter value

Timing formula

T(s)=(ARR+1)(PSC+1)TIM_CLK(Hz)
parametersmeaning
T(s)Timing time in seconds
ARRAutomatically reload the value
PSCPredivision coefficient
TIM_CLKThe timer ticks in Hz

PWM period:T = 10ms → f = 100Hz

T(s)=(ARR+1)(PSC+1)TIM_CLK(Hz)=(9999+1)(71+1)72000000(Hz)=0.01s=10ms

When PWM input mode is used, one input channel (TIx) will occupy two capture channels (ICx), and the two ICx signals are valid for edges, but with opposite polarity.

Measure pulse width and frequency

PWM is measured in PWM input mode, PWM signal input can only be input from channel 1 (CH1) or channel 2 (CH2).

Consider input channel TI1 working in PWM input mode:

The PWM signal enters through the input channel TI1, and the signal will be divided into two channels, one is TI1FP1, and the other is TI1FP2.

Choose the effective polarity of TI1FP1: effective → period on the rising edge

The effective polarity of TI1FP2 is chosen: effective → duty cycle on the falling edge

When using PWM input mode, the slave mode controller must be configured to reset mode, that is, when we start the trigger signal to start the capture, we also reset the counter CNT to zero.

PWM input mode timing

image-20231123100857336

3、Engineering configuration

3.1、Notes

Omitted project configuration: New project, chip selection, project configuration, SYS for pin configuration, RCC configuration, clock configuration, and project configuration content

The project configuration part, which is not omitted, is the key point to configure in this tutorial.

3.2、Pin configuration

You can directly select the corresponding pin number in the pin view, and the corresponding option will appear when the mouse is left clicked

image-20231122182035996

image-20231122192603798

image-20231122192811655

image-20231122192850995

The NVIC option allows you to change the priority

image-20231122192934127

image-20231122192951940

image-20231011102854602

4、Main function

For detailed code, you can open the project file provided by us and go to the Bsp folder to view the source code.

4.1、User functions

HAL_TIM_IC_CaptureCallback

Function prototypesvoid HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
Functional DescriptionThe input capture interrupt event used to process the timer
Input parametershtim:Timer handle address
Return valueNone
notesInside the function, you can write code to handle input capture events, such as reading the capture register value, calculating the pulse width, and so on

In the HAL_TIM_IC_CaptureCallback function, we read the counts of IC1 and IC2, which are multiplied by a single count plus 1 to give the period and pulse width.

4.2、HAL library functions

The HAL library functions that were covered in the previous tutorial will not be covered

function:HAL_TIM_PWM_Init

Function prototypesHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)
Functional DescriptionInitialize the timer's PWM output mode
Input parametershtim:Timer handle address
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

function:HAL_TIM_MspPostInit

Function prototypesvoid HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
Functional DescriptionPeripheral clock, GPIO, and NVIC to initialize the timer
Input parametershtim:Timer handle address
Return valueNone
notesThe function performs additional initialization on top of HAL_TIM_Base_MspInit

function:HAL_TIM_PWM_Start

Function prototypesHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
Functional DescriptionStart PWM output
Input parameters1htim:Timer handle address
Input parameters2Channel:Timer channel number
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

function:HAL_TIM_PWM_ConfigChannel

Function prototypesHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel
(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, uint32_t Channel)
Functional DescriptionSet the PWM channel for the timer
Input parameters1htim:Timer handle address
Input parameters2sConfig:The timer outputs the comparison parameters
Input parameters3Channel:Timer channel number
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

function:HAL_TIM_IC_Init

Function prototypesHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim)
Functional DescriptionInitialize the input capture function of the timer
Input parametershtim:Timer handle address
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

5、Experimental phenomenon

After downloading the program successfully, press the RESET button of the development board to open the serial debugging assistant to observe the phenomenon

Phenomenon:You can see that the data displayed by the serial port is the same as the PWM signal data generated by the universal timer (TIM3).

image-20231123105949983