【STM32F723E-DISCO开发板试用体验】+PWM

  • SingleYork
  • LV5工程师
  • |      2017-07-05 17:31:25
  • 浏览量 971
  • 回复:1
bg1.png

PWM即脉冲宽度调制,是英文“Pulse Width Modulation”的缩写,简称脉宽调试。是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。

例如,下图中,图b)是微处理器输出的数字信号,实际上他接到电机等功率设备上时,效果相当于图a),这就是PWM调制。例如,输出占空比为50%,频率为10HZ的脉冲,高电平为3.3V,其输出的模拟效果相当于输出一个1.65V的高电平。脉冲调制有两个重要的参数,第一个就是输出频率,频率越高,则模拟的效果越好。第二个就是占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。

下面,我们用一个具体的例程来介绍一下PWM是如何使用的。本例中,我们是通过定时器TIM3的通道4,即PB1口输出PWM来控制LED的亮度。

首先,还是跟之前一样,新建一个STM32CubeMX的工程,芯片选择STM32F732IEKx,选择外部高速晶振(HSE)。LD6即PB1配置为定时器TIM3的通道4输出。同时TIM3的通道4配置为PWM。

脉冲宽度调制模式可以生成一个信号,该信号频率由自动重载寄存器(TIMx_ARR)寄存器值决定,其占空比则由捕获/比较寄存器(TIMx_CCRx) 寄存器值决定。

在 PWM 模式下,计数器寄存器(TIMx_CNT )总是与捕获/比较寄存器(TIMx_CCRx )进行比较,以确定是TIMx_CCRxTIMx_CNT 还是 TIMx_CNTTIMx_CCRx(取决于计数器计数方向)。

下图为PWM边沿对齐模式(递增计数配置)。图中CCRx为捕获/比较寄存器,OCxREF为输出比较信号,CCxIF为中断状态标识位。当CCRX=4时,当捕获/比较寄存器(TIMx_CCRx)比计数器小时,输出高电平,反之则输出低电平。

下图为PWM中心对齐模式:

配置系统时钟为216MHz。由上一章可知,定时挂载到APB1,时钟频率为108MHz。此处设置为1080分频。经过分频后的时钟频率为100000Hz,若要设置PWM周期为20ms,则计数器的值为2000-1。其他参数为默认不用修改。其中Pulse的为设置脉宽,即为捕获/比较寄存器(TIMx_CCRx),通过修改它的值可以修改占空比。

生成报告,以及生成代码,编译程序。接下来我们就需要添加我们自己需要实现功能的应用程序了。

在stm32f7xx_hal_tim.c文件中我们找到刚才的定时器初始化函数:

前面有提到,设置Pulse的值可以修改脉宽,这里我们在main.c文件中添加一个用户PWM设置函数,函数的参数为修改的值。

在把main()函数中添加HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4)开启定时器PWM输出。在while循环中不断修改脉宽,实现LED亮度渐变。Pulse的值最大为2000,从0开始,每100ms增加100,当增加到2000时,又逐渐递减到0。

在main.c函数前面声明pwm_value,step变量,user_pwm_setvalue()函数.编译程序下载。按复位后可以看到LD6亮度渐变闪烁。

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
xiefy21 2017-07-12
不错,这个用来驱动蜂鸣器,电机都蛮好……
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子