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 库的相关文档和示例代码。