返回主站|网站地图|手机浏览
普通会员

如皋市思晶源电子有限公司

新闻中心
产品分类
  • 暂无分类
STM32—PWM 通过控制脉冲的宽度实现

脉宽调制(PWM)

脉宽调制(PWM)是一种利用微处理器的数字输出对模拟电路进行控制的高效技术,通过控制脉冲的宽度实现。

除了TIM6和TIM7,STM32的定时器可以用于产生PWM输出。高级定时器TIM1和TIM8可以同时产生最多7路的PWM输出,通用定时器也可以同时产生最多4路的PWM输出。因此,STM32最多可以同时产生30路PWM输出!

STM32F03C8T6可用PWM资源:

高级定时器(TIM1):7路

通用定时器(TIM2至TIM4):各4路

PWM输出模式

PWM输出模式1:向上计数时,当CNT<CCRx时输出有效电平,否则为无效电平;向下计数时,当CNT>CCRx时输出无效电平,否则为有效电平

PWM输出模式2:向上计数时,当CNT<CCRx时输出无效电平,否则为有效电平;向下计数时,当CNT>CCRx时输出有效电平,否则为无效电平

有效电平(并非单指高电平或低电平,具体取决于设置的情况)

PWM周期与频率

周期和频率是相互倒数的关系

TimeOut = ((Prescaler + 1) * (Period + 1)) / TimeClockFren

公式参数的解释:

TimeOut:定时器溢出时间(单位为us),即TIM中断触发的时间间隔。

Prescaler:TIM时钟的预分频器值。

Period(ARR):计数重载值,当TIM计数超过此值时重新计数。

TimeClockFren:定时器的输入时钟频率(单位为MHZ),即当前使用的TIM所用的时钟频率。如不清楚,可通过相关参数查询获得。

PWM实验

需求:使用PWM点亮LED,实现呼吸灯效果。

问:为什么LED可以越来越亮、越来越暗?

答:这是由占空比决定的(占空比是指有效电平所占整个信号周期的百分比)。

问:如何计算周期/频率?

答:假设频率为2kHz,则PSC=71,ARR=499。

问:LED连接到哪个定时器的哪一路?

答:可从原理图中找到LED连接到哪个IO口,然后在产品手册中查询相关信息。

如下图所示:

使用CubeMX构建工程:

1. 修改debug设置

2. 设置时钟

3. 设置TIM4

主要设置如下:

关于TIM4设置的自动生成代码:

启动PWM:

HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);

修改比较值,修改占空比:

__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,pwmVal);

完整代码如下:

int main(void){ uint16_t pwmVal = 0;uint8_t dir = 1;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM4_Init();HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);while(1){ HAL_Delay(1);if(dir == 1){ pwmVal++;}else{ pwmVal--;}if(pwmVal > 500){ dir = 0;}if(pwmVal == 0){ dir = 1;}__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,pwmVal);}}

STM32—PWM 有效建议和应对措施

1、......

2、......

3、......