stm32 HAL库 定时器笔记之PWM

​什么是PWM

脉宽调制(Pulse-Width Modulation,PWM)是利用微处理器的数字输出,来对模拟电路进行控制的一种非常有效的技术,通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值),即通过改变导通时间占总时间的比例,也就是占空比,达到调整电压和频率的目的。

广泛应用在从测量、通信到功率控制与变换的许多领域中,用于调压调频,最突出的是针对各种类型的电机应用。

PWM的相关参数

周期T  第一个上升沿到第二个上升沿所需要的时间

占空比 高电平持续时间/T  高电平时间越长,占空比越大。占空比可以实现对电机转速的调节、舵机的转向角度,还可以使LED呈现出呼吸灯的效果。

                

PWM在51单片机和32单片机的不同

对于单片机,51单片机内部没有PWM信号产生的硬件,所以我们只能通过定时器软件模拟PWM信号。而32单片机内部集成了PWM信号产生的硬件,所以我们可以直接通过定时器产生PWM信号。

舵机的原理

舵机的控制就是通过一个固定的频率,给其不同的占空比的,来控制舵机不同的转角

舵机的频率一般为频率为50HZ,也就是一个20ms左右的时基脉冲,而脉冲的高电平部分一般为0.5ms-2.5ms范围。来控制舵机不同的转角

500-2500us的PWM高电平部分对应控制180度舵机的0-180度

以180度角度伺服为例,那么对应的控制关系是这样的:

0.5ms--------------0度;

1.0ms------------45度;

1.5ms------------90度;

2.0ms-----------135度;

2.5ms-----------180度;

呼吸灯加舵机实验

LED->PB5,舵机信号线->PB6。

配置过程

TIME3 这里把普通GPIO PB5映射为TIME3_CH2;

选择PWM Generation CH2;

预分频为7200-1;

向上计数;

计数周期为100-1  经过定时器定时时间计算 为0.0001s*100=0.01s;

自动重装载使能;

模式为:PWM1;

TIME 4配置 把普通GPIO复用为TIME4_CH1;

选择PWM Generation CH1;

预分频为7200-1;

向上计数;

计数周期为200-1  经过定时器定时时间计算 为0.0001s*200=0.02s=20ms;

自动重装载使能;

模式为:PWM1;

生成配置代码

TIM3

TIM4

相关GPIO设置

注意在配置PB5的代码中调用了 __HAL_AFIO_REMAP_TIM3_PARTIAL();这个宏,而PB6没有。这就是我什么在上面配置过程中说PB5映射、PB6复用。

__HAL_AFIO_REMAP_TIM3_PARTIAL();这个宏,通过注释可以知道,这个宏就是重映射的作用。

根据数据手册可知,PB5没有复用为TIM3_CH2的功能,但是可以映射为TIM3_CH2。

实验代码

声明变量

使能定时器

While(1)进行主要操作

代码分析

__HAL_TIM_SET_COMPARE()这个宏的使用,功能是将计数值与_COMPARE_进行比较,我们采用的是PWM1模式,这个模式是若计数值小于_COMPARE_时,被认为是高电平,高于_COMPARE_时,被认为低电平。PMW2模式与其相反,小于比较值时,被人为低电平,高于比较值时,被人为高电平。这样就形成了PWM方波。

PWM1模式:

        

__HAL_TIM_SET_COMPARE()宏的源码

刚开始没有优化代码,没有使用LED_Compare_Value,这个变量,结果是LED可以逐渐变暗,到亮灯的时候,直接就亮了,而且舵机是一直在左右小幅度摆动。经研究发现,当PWM_Compare_Value为100时,PWM_Compare_Value%100=0,那么PWM占空比为0,我的开发板的LED是低电平亮,所以灯直接亮,并不是逐渐亮的,所以我将PWM_Compare_Value%100修改为PWM_Compare_Value%200,在临界点我对PWM_Compare_Value进行分割处理,再使用一个变量LED_Compare_Value接住PWM_Compare_Value的值,这样就使临界点两边的电平升降形成对称。对于舵机摇摆问题,我发现是延时时间太短,定时器4处理太快的问题,那么可以再PWM_Compare_Value>30做一个临界点,使用定时器3,做一个延时,加上HAL_Delay(25),就延时了55ms,这样舵机就可以正常自动转动角度 0度、45度、90度、135度、180度。

STM32 HAL库中的STM32F407 TIM1是指STM32F407微控制器中的定时器1模块。定时器1是一个高级定时器,具有多种功能和配置选项。在HAL库中,可以使用HAL_TIM_PWM_Start函数来启动定时器1的PWM功能,通过调节占空比来控制LED的闪烁效果。可以使用__HAL_TIM_SetCompare函数来改变占空比的值。\[1\]\[3\] #### 引用[.reference_title] - *1* [STM32HAL库1:认识时钟树(STM32F407)](https://blog.csdn.net/weixin_52872520/article/details/129248942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32 HAL库-定时器中断](https://blog.csdn.net/m0_46577050/article/details/129036709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [8.STM32F407之HAL库——PWM笔记](https://blog.csdn.net/qq_36528377/article/details/123746230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值