时钟

AHB总线:先进高速总线 APB1先进外设总线: APB2:

时钟源

  • 系统滴答—提供时间基准(处理器内部)
  • HSI高速内部时钟:无需电源,精度较低
  • HSE高速外部时钟:晶振
  • His、HSE最终均接入到SYSCLK时钟
时钟源全称类型频率范围/值用途
HSEHigh-Speed External Clock外部晶振3 MHz 至 25 MHz主时钟源,高精度时钟,常用于USB等高频外设
HSIHigh-Speed Internal Clock内部RC振荡器16 MHz默认时钟源,特别适用于无外部晶振的应用
LSELow-Speed External Clock外部低频晶振32.768 kHz提供低功耗时钟,通常用于RTC等低功耗应用
LSILow-Speed Internal Clock内部RC振荡器~32 kHz低功耗时钟源,备份时钟源或RTC备份时钟
SYSCLKSystem Clock由HSE、HSI、PLL等生成根据选择的源决定供CPU和大多数外设的时钟源
PLLPhase-Locked Loop时钟倍频器依赖于输入时钟(HSE/HSI)用于倍频,生成高频时钟,适配各种外设需求
BKPBackup Clock备份时钟源LSE 或 LSI在低功耗模式下继续为RTC等提供时钟源

时钟树

定时器

Prescale Register

  • 预分频器(PSK)
  • n分频则将预分频器设置为n-1
  • 16bit
  • 包含预分频影子寄存器
  • 当使用__HAL_TIM_SET_PRESCALER设置新的预分频值时,会将值写入预分频寄存器;直到下一个计数周期(计数器寄存器从0开始)时更新影子寄存器的值

AutoReload Rejister

  • 自动重装载寄存器(从0开始,设置为m-1表示计时到m重置计时并触发中断)
  • 同PSK一致,也包含对应的影子寄存器

计数器

  • D触发器
  • 16bit—65535
  • 0开始计数
  • 计数具有稳定频率的方波信号实现计数

如何实现计数

  • 恒定频率的方波信号 计数器寄存器(16bit—65535)
  • 信号上升沿寄存器值加一

如何实现定时

  • 设置一个自动重装载寄存器,当与计数器寄存器值相同时,触发更新中断

示例:Stm32 实现 1 s 的定时器

  • 设置外部时钟源为晶振—提高定时精度
  • HCLK设置为72MHz
  • 选择定时器并选择时钟源Clock Source设置为内部时钟internal Clock
  • 预分频设置为PSC=7200-1实现7200分频10000HZ
  • 自动重装载寄存器设置为10000-1实现每1秒触发

定时器作用

  • 定时
  • 捕获脉冲宽度
  • 计算PWM占空比
  • 输出PWM波形
  • 编码器计数

定时器优先级不高的潜在问题

低优先级的中断可能会在高优先级中断处理完成后才得到响应。每个中断源(包括定时器)都有一个对应的优先级。

  • 延迟响应定时器中断。
  • 错过定时任务或数据采样。
  • 中断服务例程未及时执行,影响系统实时性。
  • 系统时序错误,影响信号生成或外设交互。

STM32

  • 基本定时器:TIM6 TIM7
  • 通用定时器:TIM2~TIME5
  • 高级定时器:TIM1 TIM8

PWM

一种通过控制信号波形的占空比(Duty Cycle)来调节平均电压的技术。它是嵌入式系统中非常常见且重要的技术,广泛应用于信号调制、电机控制、亮度调节、音频合成等领域。

基本原理

PWM信号是一种周期性变化的方波信号,包含一系列高电平低电平的脉冲。其基本特点是频率固定、脉冲的宽度(高电平的持续时间)可调,调节脉冲宽度即可调节输出的平均电压。

  • 频率(Frequency):PWM信号的周期,即每秒钟发生的脉冲数。频率决定了信号的周期性变化速度,通常与所驱动负载的响应时间匹配。

  • 占空比(Duty Cycle):PWM信号中高电平持续的时间与总周期的比例。占空比是控制PWM信号效果的关键参数,通常用百分比表示,公式为:

PWM因素

PWM信号的主要相关要素包括:频率、占空比、周期、死区时间、极性、输出模式、分辨率、定时器/计数器等。

频率(Frequency)

  • 定义:频率是PWM信号的周期性变化速率,即每秒钟信号重复的次数,单位为赫兹(Hz)
  • 影响:频率决定了PWM信号的切换速度。例如,高频PWM用于精细调节和高精度控制(如电机驱动),而低频PWM则适用于较慢的应用(如LED亮度调节)。
  • 与周期关系:频率与周期成反比,周期为信号的一个完整周期(高电平+低电平)的持续时间。
\text{频率} = \frac{1}{\text{周期}} ]$$ #### 占空比(Duty Cycle) - **定义**:占空比是PWM信号中**高电平**(开关信号)持续的时间与总周期时间的比值,通常以百分比表示。 - **公式**:

[ \text{占空比} = \frac{\text{高电平时间}}{\text{总周期时间}} \times 100% ]

- **影响**:占空比控制了输出信号的平均功率。例如,占空比高意味着信号的大部分时间为高电平,输出的平均电压较高;占空比低则相反。 - **常见值**: - 0%:始终为低电平; - 100%:始终为高电平; - 50%:高电平和低电平时间相等。 #### 周期(Period) - **定义**:周期是PWM信号从一个周期的开始到下一个周期开始的时间间隔,即信号的**完整循环**。 - **与频率关系**:周期是频率的倒数,即周期越长,频率越低。

[ \text{周期} = \frac{1}{\text{频率}} ]

- **作用**:周期决定了PWM信号变化的时间尺度。周期越短,信号变化越频繁;周期越长,信号变化较慢。 #### 占空比调整(Duty Cycle Adjustment) - **定义**:通过改变PWM信号的占空比,可以调节输出电压或功率。通过硬件或软件控制定时器的比较寄存器值来实现占空比调整。 - **作用**:占空比的调整直接影响负载的电力传输或控制效果。例如,调节电机的转速或LED的亮度。 #### 死区时间(Dead Time) - **定义**:在PWM信号的**上升沿**和**下降沿**之间,输出信号从**高电平到低电平**或**低电平到高电平**转换时,可能存在一个**空白时间段**,即“死区时间”。这个时间段用于避免在高电平和低电平之间发生同时导通的情况。 - **应用**:死区时间常用于**H桥电路**等双向控制电路,避免上下桥臂同时导通导致**短路**。 #### PWM信号的极性(Polarity) - **定义**:PWM信号的极性可以是**正常极性(Active High)**或**反向极性(Active Low)**。 - **影响**:极性决定了高电平和低电平在输出中出现的时刻: - **正常极性**:高电平为活动状态,低电平为非活动状态。 - **反向极性**:低电平为活动状态,高电平为非活动状态。 #### 输出模式(Output Mode) PWM信号的输出模式决定了PWM信号的切换方式。 - **标准PWM输出模式**:PWM信号在计数器值和比较值的关系下周期性变化。 - **反向PWM输出模式**:输出信号的高低电平反转。 #### 分辨率(Resolution) - **定义**:PWM的分辨率是指PWM信号能够精确调节的占空比的最小步长。它通常由定时器的计数位数决定。 - **作用**:分辨率越高,PWM信号能够精确调整的步长越小,从而提供更细腻的控制。例如,16位定时器的分辨率较8位定时器高。 #### 定时器和计数器(Timer and Counter) - **定时器**:PWM信号的生成通常由定时器模块来控制,定时器设定计数周期和频率,并通过**输出比较模块**生成PWM波形。 - **计数器**:计数器根据定时器的时钟频率进行计数,比较计数值与设定的比较值(CCR)来决定输出信号的状态。 #### 频率与占空比的关系 - **频率与占空比的独立性**:PWM的频率和占空比是两个独立的参数,频率控制信号切换的速度,而占空比控制信号高电平持续的时间。 - **调节方式**:通过改变定时器的自动重载寄存器(ARR)来调整频率,通过改变比较寄存器(CCR)来调整占空比。 #### 系统时钟和PWM时钟源(Clock Sources) - **系统时钟源**:PWM信号的生成通常依赖于系统时钟源(如HSE、HSI、PLL等),这些时钟源控制定时器的计数频率,进而决定PWM的频率。 - **时钟分频**:通过设置时钟分频器,进一步调节PWM信号的频率,以适应不同的应用需求。 ### PWM信号的作用 PWM的本质是通过调节**高电平**的*时间比例*来实现对输出功率的控制,其平均电压与占空比成正比。 - **控制电机速度**:通过调节占空比,控制电机的转速。 - **控制LED亮度**:通过调节占空比,控制LED的亮度。 - **音频调制**:通过调节PWM信号频率和占空比,生成不同频率的音频信号。 - **DC电源控制**:通过调节占空比来控制直流电源的输出电压。 ### 工作方式 PWM信号的生成通常依赖于**定时器**(Timer)模块。 - **定时器周期性计数**:定时器按照设定频率(周期)不断计数,计数值达到预设的**比较值**时输出高电平,计数值达到周期值时输出低电平。 - **占空比控制**:通过改变定时器的比较值来调节占空比。例如,如果比较值设置为周期的一半,则占空比为50%。 ### 控制方式与实现 在STM32等嵌入式平台中,PWM信号的生成通常使用定时器的**输出比较模式**。 STM32中PWM信号生成的典型工作流程: 1. **定时器配置**: - 选择一个定时器,设置计数器的时钟源和计数周期。定时器的计数值决定了PWM信号的频率(频率 = 时钟频率 / 计数周期)。 2. **输出比较模式配置**: - 配置定时器的输出比较功能。定时器将不断比较计数器的当前值与预设的比较值,决定输出信号的状态: - 当计数值小于比较值时,输出为低电平; - 当计数值大于等于比较值时,输出为高电平。 3. **占空比控制**: - 改变定时器的比较值,来调节PWM信号的高电平持续时间,从而控制占空比。 4. **定时器启用**: - 启动定时器,定时器开始按照设定的周期生成PWM信号,系统外设(如电机、LED等)根据PWM信号的占空比进行相应的工作。 ### 典型的硬件实现 以STM32为例,PWM的硬件实现流程如下: 1. **定时器配置**:选择适当的定时器(如TIM1、TIM2等),并配置为PWM输出模式。 2. **设置计数器**:定时器的计数器用于决定PWM信号的频率,通过设置定时器的预分频器(prescaler)和自动重载寄存器(ARR)来设定PWM频率。 3. **比较值设置**:通过定时器的比较寄存器(CCR)来设置占空比。例如,设置CCR的值为ARR的一半,则占空比为50%。 4. **输出通道配置**:选择定时器的输出通道(如TIMx_CH1、TIMx_CH2等)并配置为PWM模式。 5. **启动定时器**:启动定时器,PWM信号即开始输出,外设通过外部GPIO引脚获得该信号。 ### PWM解决毛刺信号的方式 在PWM中,**毛刺信号**(Glitches)通常出现在PWM波形的上升沿或下降沿,尤其是在高速切换时。解决毛刺信号的方法包括: 1. **增加死区时间(Dead Time)**:在高电平与低电平之间引入短暂的非活动时间,避免上升沿或下降沿同时切换,减少毛刺。 2. **使用硬件滤波**:通过硬件滤波器(如低通滤波器)平滑PWM信号的波形,减少噪声和毛刺。 3. **优化时钟和定时器配置**:确保时钟源稳定,避免因定时器精度不足而引起的信号毛刺。 4. **提高PWM频率**: 提高PWM信号的频率,使得毛刺变得高频且不易被外部设备检测。 5. **优化信号驱动电路**:使用合适的驱动电路,减少因电流突变导致的信号毛刺。