1 )PWM基础知识

PWM的全称是Pulse Width Modulation,即脉冲宽度调制。它是数字信号,只有0、1两种状态,它通过一个周期中0、1所占不同的时间比例,来等效模拟信号。

假设一个数字信号源的高电平为5V、低电平为0V,如果我们在一个周期中的一半时间输出0V、另一半时间输出5V,只要信号的频率足够快,那么在外系统看来,一个整周期中电压所起的作用就相当于2.5V;同理,只要改变高低电平的时间占比,就能等效出0~5V间的任意电压。

如果要等效一个正弦波,可以如下输出PWM波形:

只要PWM的频率足够高,占空比可以分得足够细,那么理论上它可以等效出任意模拟电压波形。

在数字电路中PWM可以用很少的器件等效出模拟信号的功能,而不用配置复杂的DAC芯片,所以应用十分广泛。它可以用于LED灯调节亮度、电动调节转速、加热器调节温度等等场合。

2 )stm32的PWM使用

我们在最基本的定时器工程上修改,得到PWM的工程,如下图所示:

选择channal 1输出PWM,此时可以看到右侧的芯片引脚PA6自动设置成为定时器的CH1输出;

设置定时器分频系数为720-1,即主时钟的720分之一,分频为100kHz;

Counter Mode设置的是计数方式,有向上、向下、中心对称计数等几种方式;

计数周期设置为1000-1,即计数从0~999,由于计数频率为100kHz,所以这里设置的是一个周期为10ms;

PWM的MODE可以设为1或2,二者输出的波形是反相的,这里设置为1,即先高电平,计数值到后变为低电平;

Pulse的值设定的是脉冲宽度,这里设为100,即计数到100时翻转输出,所以占空比为100/1000,结果为10%;

生成工程代码,在keil中打开。在main函数之前,加入启动PWM功能的代码:

编译、下载,运行。

此时可以用示波器监测PA6引脚上的波形,可以看到周期为10ms,占空比为10%的方波:

3 )stm32的PWM特点

这里把stm32定时器的PWM和它的输出比较功能比较一下:

PWM功能可以输出频率、占空比可调的方波,在计数溢出和计数比较相等时输出都会翻转,如下图所示:

而输出比较功能,只能输出50%占空比的方波,定时器的周期即为方波周期,输出只在计数比较相等时翻转,计数溢出时不翻转;它可以设置输出方波的相位:

如果熟悉AVR单片机的朋友可能会有些疑惑,AVR的输出比较功能产生的波形,其频率和占空比都是可调的,与stm32的输出比较功能不同。实际上AVR单片机的输出比较功能等同于stm32的PWM功能,这里要注意一下,不同厂家的芯片对该功能的命名有点不同。

本节讲的PWM使用只是最简单的实现,stm32的PWM还有很多更强大的功能值得探索。

欢迎关注我的公众号,可留言“资料”获取相关资料和软件:

hal库 定时器 1 输出 多路脉冲宽度可变的 PWM 控制电机(中断方式) 分为以下步骤 /***************************************************************************/ 1、 stm32 cube MX 配置项目参数 2、使用sw4 stm32 软件编写代码 /***************************************************************************/ 1、 stm32 cube MX 配置项目参数 stm32 cube MX 项目的基本配置请看我的文章,下面只给出 定时器
硬件连接: PA0 ->TIM2_CH1 说明:有时候程序下载后不实现,可试着复位一下,也可在魔术棒配置中打开下载后复位。 (仅仅写了 PWM 配置部分,其余初始化以及工程配置未做说明) 1、选择 定时器 2,时钟源选择Internal Clock,Channel1(通道1)选择 PWM Generation CH1 2、选择 分频 系数 为71,计数值为
有影子寄存器的寄存器实际上对应了两个寄存器:一个是用户可以写入或读出数据的寄存器,称为preload register(预装载寄存器),另一个是用户看不见的、但在操作中真正起作用的寄存器称为shadow register(影子寄存器)。我们修改的 定时器 周期、预 分频 系数 、通道的比较值等都是修改的表面那个预装载寄存器,要让这个修改起作用,就还要把预装载寄存器的值赋给影子寄存器才行。 从ARR预装载寄存器传送到影子寄存器,有两种方式,一种是立刻更新,一种是等触发事件之后更新;这两种方式主要取决于...
3、MDK-keil软件 定时器 简介: STM32 F103ZET6 一共有8个 定时器 ,其中TIM1/TIM8为高级 定时器 ,TIM6/TIM7为基本 定时器 ,TIM2,TIM3,TIM4,TIM5为通用 定时器 。 基本 定时器 TIM6及TIM7功能: 通用 定时器 TIM2~TIM5功能:
看门狗概述 看门狗 定时器 是一个计数器,其基本功能是发生软件问题及程序跑飞后使系统重新启动。看门狗正常启动时自动计数,程序定期将其复位清零,如果系统某处跑飞或者卡死, 定时器 溢出并进入中断,在 定时器 中断中执行复位操作,使系统恢复正常工作状态。 stm32 有两个看门狗,独立看门狗和窗口看门狗,下面会较为详细地分别讲解两者。 独立看门狗 STM32 的独立看门狗由内部专门的 40Khz(因为使用的是内部RC时钟,所以并不是准确的40Khz) 低速时钟驱动,即使主时钟发生故障,它也仍然有效。其限制喂狗时间在0-x内,
可以回答这个问题。使用 HAL 库来配置 STM32 定时器 通道,可以通过以下步骤实现: 1. 初始化 定时器 :使用 HAL_TIM_Base_Init() 函数初始化 定时器 ,并设置 定时器 的时钟 分频 、计数模式等参数。 2. 配置 定时器 通道:使用 HAL_TIM_ PWM _Init() 函数初始化 定时器 通道,并设置通道的 输出 模式、极性等参数。 3. 设置 定时器 频率和占空比:使用 HAL_TIM_ PWM _ConfigChannel() 函数设置 定时器 的频率和占空比,以控制 输出 信号的频率和占空比。 4. 启动 定时器 :使用 HAL_TIM_ PWM _Start() 函数启动 定时器 ,开始 输出 PWM 信号。 以上是使用 HAL 库来配置 STM32 定时器 通道的基本步骤,具体实现可以参考 HAL 库的相关文档和示例代码。