一、频率的计算
htim17.Instance = TIM17;
htim17.Init.Prescaler = 4000-1; //预分频系数
htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
htim17.Init.Period = 99; //ARR 自动重装载值
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim17.Init.RepetitionCounter = 0;
htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
首先,要明确两点:
-
ARR(TIM_Period)
是计数值; PSC(TIM_Prescaler)
是预分频值。- 计算公式:
Fpwm = 主频 / ((ARR+1)*(PSC+1))(单位:Hz)
1.例如:200Hz =主频 /( Prescaler +1 XPeriod + 1)=80 000 000 /(4000 X100)= 200Hz
2.周期T=1/200Hz=0.005s=5ms
二、如何更改PWM频率(周期)
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__)
用法:__HAL_TIM_SET_AUTORELOAD(&htim17,500-1);
这个函数可以改变自动重装载值,就可以改变PWM频率。
三、如何改变PWM的占空比
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)
用法: if(pa7_duty >=100) pa7_duty=10;
__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);这里就是把占空比设置为10%
四、STM32CubeMx配置级使用
1.初始化开启定时器PWM通道
2.在以下头文件中找到设置PWM频率的函数
通过F12可以跳转到这个宏的定义及函数的用法
四、设置占空比 (和设置周期频率也一样)
脉冲宽度调制模式可以生成一个信号,该信号频率由自动重装载寄存器(TIMx_ARR)寄存器值决定,其占空比则由捕获/比较寄存器(TIMx_CRx)寄存器决定。
-------------------------------------------------------------------------------------------
PWM频率:Freq = 定时器时钟主频 / [(ARR+1) * (PSC+1)]
PWM占空比: Duty = Pluse / (ARR+1)
Pulse 是 捕获/比较寄存器(CCR)的值
-------------------------------------------------------------------------------------------