时钟
AHB总线:先进高速总线 APB1先进外设总线: APB2:
时钟源
- 系统滴答—提供时间基准(处理器内部)
- HSI高速内部时钟:无需电源,精度较低
- HSE高速外部时钟:晶振
- His、HSE最终均接入到
SYSCLK
时钟
时钟源 | 全称 | 类型 | 频率范围/值 | 用途 |
---|---|---|---|---|
HSE | High-Speed External Clock | 外部晶振 | 3 MHz 至 25 MHz | 主时钟源,高精度时钟,常用于USB等高频外设 |
HSI | High-Speed Internal Clock | 内部RC振荡器 | 16 MHz | 默认时钟源,特别适用于无外部晶振的应用 |
LSE | Low-Speed External Clock | 外部低频晶振 | 32.768 kHz | 提供低功耗时钟,通常用于RTC等低功耗应用 |
LSI | Low-Speed Internal Clock | 内部RC振荡器 | ~32 kHz | 低功耗时钟源,备份时钟源或RTC备份时钟 |
SYSCLK | System Clock | 由HSE、HSI、PLL等生成 | 根据选择的源决定 | 供CPU和大多数外设的时钟源 |
PLL | Phase-Locked Loop | 时钟倍频器 | 依赖于输入时钟(HSE/HSI) | 用于倍频,生成高频时钟,适配各种外设需求 |
BKP | Backup 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
分频⇒10000
HZ - 自动重装载寄存器设置为
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{\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. **优化信号驱动电路**:使用合适的驱动电路,减少因电流突变导致的信号毛刺。