赞
踩
PWM一般指脉冲宽度调制,PWM波指脉冲宽度可调的方波。
描述pwm波特征的主要参数:
占空比 Duty : 方波高电平时间与周期的比值 (即图中的)
D
u
t
y
=
d
y
n
T
s
T
s
Duty = { d_{yn}Ts \over T_s }
Duty=TsdynTs
周期 T : 方波的周期。
频率 f :方波周期的倒数,1s内能完成几个周期。
利用stm32定时器可以输出pwm波。下面简要介绍要用到的几个参数。
计数时钟TIM_CLK经过PSC预分频,计数时钟每经过一周期,计数值CNT就增加一。假设当前处于模式1,CNT小于CCR,,引脚输出高电平,构成方波的高电平时间;CNT大于CCR时,引脚输出低电平,构成方波的低电平时间。
通过修改PSC与ARR,可以修改PWM波的周期T和频率f;修改CCR,可以调整pwm波的占空比。
T
=
(
A
R
R
+
1
)
(
P
S
C
+
1
)
T
I
M
C
L
K
T = {(ARR+1) (PSC+1) \over TIM_{CLK}}
T=TIMCLK(ARR+1)(PSC+1)
f = 1 T f = {1 \over T} f=T1
D u t y = C C R A R R Duty = {CCR \over ARR} Duty=ARRCCR
控制小灯快速亮灭,通过增大占空比,逐渐增加小灯点亮的时间,实现视觉上的小灯逐渐变亮。达到亮度峰值后,再逐渐减少占空比,制造出小灯逐渐变暗的效果。
1.定时器配置
内部时钟->选择一个通道设为PWM Generation CHx (由于通道四恰好对应开发板上的小灯,我选择了通道4)->配置PSC,ARR。
pulse/ ARR 即为占空比,此处可以不修改。
想要达到欺骗人眼的效果,小灯闪烁的频率必须足够高,我们设置pwm频率为2000hz。
此时计数时钟TIM_CLK为72Mhz.
当设置PSC 为(72-1) ARR为(500-1)时:
f
=
72000000
72
∗
500
=
2000
h
z
f = {72000000 \over 72 \ast 500 } = 2000hz
f=72∗50072000000=2000hz
故取PSC=71, ARR = 499.
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4); // 使能PWM输出
/* USER CODE END 2 */
while循环中的部分:
for(uint16_t i=1;i<500;i++) // 通过循环逐渐改变CCR,进而改变占空比。
{
htim3.Instance->CCR4 = i;
HAL_Delay(1);
}
for(uint16_t i=499;i>=1;i--)
{
htim3.Instance->CCR4 = i; // 通过htim3.Instance->CCRx直接修改CCR的值 与cubemx中pulse指的相同。
HAL_Delay(1);
}
HAL_Delay(10);
工程压缩包链接:
https://download.csdn.net/download/Nothing_To_Say_/80947402
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。