betway88必威体育
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32H7S78-DKPWM驱动

共5条 1/1 1 跳转至

STM32H7S78-DKPWM驱动

助工
2024-08-16 20:30:04   被打赏 10 分(兑奖)     打赏

【PWM简介】

PWMPulse-width modulation)是脉冲宽度调制的缩写。脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值和频率的波形。实现模拟电路的数字化控制可显著降低系统成本和功耗。许多微控制器和数字信号处理器 (DSP) 已包括了 PWM控制器芯片,因此可以更轻松地实施数字化控制。PWM信号是通过调节占空比的变化来调节信号、能量等的变化。

在STM32中,他的定时器可以方便的输出PWM。此篇使用stm32cubeMX对TIM进行配置。

【stm32cubeMX配置】

从原理图上看出Arduino的接口,给出了TIM4的输出通道:

image.png 

打开配置界面,使能PWM4CH4CH2通道为普通PWM输出:

 image.png

一个用于驱动蜂鸣器输出警告,另一个输出制冷信号,用于驱动MOS管或者继电器对半导。

修改GPIO对应的PWM通道:

image.png

【输出频率配置】

STM32H7S的时钟看出,TIM4接在APB1总线上。

 image.png

STM32CUBEMX上看到我们配置的APB1时钟频率为300MHz

image.png 

为了产生1HzPWM输出信号,我这里配置PSC3000-1 Output Period100000-1,输出点空比为50000,则为50%的占空比信号。

image.png 

TIM4的溢出频率=300M / ( Counter Period + 1 ) / ( Prescaler + 1 ),如下图所示,TIM8的溢出频率 = 300M / 3000 / 100000 = 1Hz。 周期T = 1 / f = 1 / 1 = 1s。

【工程测试】

在主函数中添加

if (HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2) != HAL_OK)

  {

    /* PWM Generation Error */

  //  Error_Handler();

printf("tim3_channel2 start erro\r\n");

  }

if (HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4) != HAL_OK)

  {

    /* PWM Generation Error */

  //  Error_Handler();

printf("tim3_channel2 start erro\r\n");

  }


下载工程到开发板,用示波器测试得到波形如下:

image.png 

接上蜂鸣器,可以扣到0.5秒的鸣响。

【总结】

在stm32pwm的输出配置中,需要使用到的参数有TIM挂载所在的总线的速率,TIM的分频系数Prescaler,溢出计数Counter Period ,点空比计数值Pluse。了解他几个参数计算出pwm频率、占空比就可以初步的使用pwm了。

当然在具体的使用中需要用到开启定时器 HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4),

修改占空比:__HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_2, pwmval);    //修改占空比

 





关键词: STM32H7S     STM32CubeMAX     TIM    

专家
2024-08-17 00:00:56     打赏
2楼

感谢分享


专家
2024-08-17 00:02:41     打赏
3楼

感谢分享


专家
2024-08-17 00:04:50     打赏
4楼

感谢感谢,


院士
2024-08-17 12:52:09     打赏
5楼

PWM波产生可以应用到好多场景。

前阵子的DIY,PWM甚至可以用来模拟音频输出


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]