通过定时器timer方式实现时间精准控制
通过定时器timer方式实现时间精准控制
本文将详细介绍如何使用STM32微控制器的定时器(timer)功能实现PWM(脉冲宽度调制)信号的生成,通过具体的项目搭建和代码实现,帮助读者掌握PWM技术在实际应用中的控制方法。
一、PWM技术基础
PWM的概念: PWM,即脉冲宽度调制,是一种技术,它利用数字输出信号来操控模拟电路。这种模拟控制手段通过调整晶体管或MOS管的导通时间,从而改变开关稳压电源的输出。
PWM的工作原理: PWM技术通过控制逆变电路中开关器件的开关动作,生成一系列等幅的脉冲,用以模拟所需的波形,如正弦波。可以将其视为一种将模拟信号电平进行数字编码的方法,通过调节方波的占空比来实现。
PWM的优势与使用场景: PWM因其控制简便、适应性强和良好的动态响应等特点而广泛应用于电力电子技术。它的应用场景包括功率控制、电机调控、照明调节、电源管理以及在音频放大器等领域,因此,掌握PWM技术具有极其重要的实际意义。
PWM的关键参数:
- 占空比:指一个周期内信号保持高电平状态的时间比例。
- 频率:PWM信号的频率决定了其周期性变化的速率。
PWM信号的生成: 在STM32微控制器中,除了TIM6和TIM7之外的其他定时器均能生成PWM信号。高级定时器TIM1和TIM8能够提供多达7路的PWM输出,而通用定时器也能提供多达4路的输出,使得STM32能够同时产生多达30路的PWM信号。
PWM的实现机制: 在STM32的定时器结构中,涉及到的部分包括时钟源的选择、时基单元以及PWM输出通道。通常建议使用专门的PWM端口进行输出,以避免使用普通IO口模拟PWM时可能出现的控制精度问题和系统稳定性风险。
- PWM输出模式的差异:
- PWM模式1:在计数递增过程中,当TIMx_CNT的值小于TIMx_CCR1时,通道1输出有效电平,反之则输出无效电平;在计数递减过程中,当TIMx_CNT的值超过TIMx_CCR1时,通道1输出无效电平,否则输出有效电平。
- PWM模式2:在计数递增阶段,当TIMx_CNT的值小于TIMx_CCR1时,通道1输出无效电平,一旦TIMx_CNT的值达到或超过TIMx_CCR1,则输出有效电平;在计数递减阶段,当TIMx_CNT的值大于TIMx_CCR1时,通道1输出有效电平,反之则输出无效电平。
注意:PWM模式的不同主要体现在确定有效电平的时机,而不涉及有效电平是高电平还是低电平。有效电平的极性由CCER寄存器的CCxP位来设定。
例如:在PWM模式1下,如果CCER寄存器的CCxP位设置为0,那么当TIMx_CNT小于TIMx_CCR1时,输出的是高电平;相反,如果CCxP位设置为1,那么在同样的条件下,输出的将是低电平。
- PWM的计数方式:
- 向上计数模式: 以PWM模式1为例,当TIMx_CNT的值小于TIMx_CCRx时,PWM信号的参考输出OCxREF为高电平,否则为低电平。如果TIMx_CCRx中的比较值大于定时器的自动重装载值(TIMx_ARR),则OCxREF将持续为高电平。若比较值为0,则OCxREF将持续为低电平。
二、项目搭建
目标:利用TIM3和TIM4定时器,分别生成PWM波形,以驱动外部LED和开发板上固定的LED(位于PC13 GPIO端口),实现两个LED灯的呼吸效果。
- 启动新工程: 在STMCubeMX的界面中,开始一个新项目,点击“ACCESS TO MCU SELECTOR”按钮。
选择微控制器: 在“Part Number”栏中搜索并选择所需的微控制器型号,本文使用STM32F103C8T6,确认芯片信息后,点击“Start Project”。
设置RCC: 进入“System Core”并选择“RCC”,在右侧的配置菜单中选择“Crystal/Ceramic Resonator”作为时钟源。
配置系统: 选择调试接口,进入“System Core”并选择“SYS”,在右侧的配置菜单中选择“Serial Wire”作为调试接口。
定时器3和定时器4的配置: 为了实现定时功能,我们配置定时器3和定时器4。设置预分频器为71,采用向上计数模式,设置计数周期为1000,并启用自动重载功能。对于通道1,选择“PWM Generation CH1”以生成PWM输出。预设分频系数为71,计数周期为1000,其他选项保持默认。初始占空比设为10%,虽然这一步不是必须的,因为我们可以在代码中对其进行调整。
时钟源配置: 按照所示修改时钟配置。
项目设置: 进行项目相关的配置。
生成项目代码: 完成上述步骤后,生成项目代码。
三、代码编写
(代码部分略)
四、结果演示
(结果演示部分略)
五、实验心得
通过本次实验,对PWM(脉冲宽度调制)的原理有了更深入的理解。实验中,注意到一个有趣的现象:PWM信号不仅可以用于传统的PWM输出引脚,也可以通过复用引脚来实现控制功能,比如点亮LED灯。这表明,PWM的应用并不局限于特定的输出端口,而是可以根据实际需求灵活配置。
在尝试实现呼吸灯效果的过程中,进行了一系列测试,并观察到了PWM周期对灯光效果的影响。当PWM周期较长时,呼吸灯的效果并不明显。从PWM的工作原理来看,这是因为PWM波主要调整的是高电平的持续时间,即占空比。如果PWM周期过大,即使占空比发生变化,由于低电平的持续时间较长,人眼仍然能够感知到LED灯的亮灭变化,从而无法形成平滑的渐变效果。
相反,当提高PWM的频率,即缩短PWM周期时,人眼就无法分辨出低电平时的间隙。这是因为人眼的视觉暂留效应,当闪烁频率超过一定阈值时,人眼无法分别单独的闪烁,而是将其视为连续的光线。因此,随着PWM频率的提高,LED灯的亮度变化看起来更加平滑,从而实现了从亮到暗的自然过渡,形成了呼吸灯的效果。
这一发现让我们更加深刻地认识到PWM技术在模拟信号控制中的重要性。通过精确控制PWM的周期和占空比,可以实现对LED灯亮度、电机转速、扬声器音量等模拟量的精细调节。在实际应用中,选择合适的PWM参数对于实现期望的控制效果至关重要。