第一讲:PWM基础概念——什么是PWM、占空比、频率、周期,以及它们在按摩仪中的作用
各位同学好,我是你们这门课的主讲工程师。今天咱们开始第一讲,聊聊PWM最基础的东西。
说实话,我刚开始接触嵌入式那会儿,觉得PWM就是个简单的方波,没什么好学的。直到有一次做按摩仪项目,客户反馈说“力度忽大忽小,体验很差”,我才意识到——PWM这东西,看似简单,但真要玩明白,里面的门道可不少。
好,咱们正式开始。
1.1 什么是PWM?
PWM,全称Pulse Width Modulation,中文叫脉冲宽度调制。说白了,就是通过调节脉冲的宽度来控制输出功率。
你想想看,一个开关,要么开要么关。但如果你开一会儿、关一会儿,而且开关的速度特别快,那负载感受到的就不是“全有”或“全无”,而是介于两者之间的某个值。这就是PWM的核心思想——用数字信号模拟模拟量。
核心理解: PWM不是真的改变了电压大小,而是通过快速切换,让负载“平均”感受到一个较低的电压。
我在项目中遇到过一位刚入行的同事,他以为PWM就是降低电压,结果用万用表去量PWM输出脚,发现电压要么是0V要么是3.3V,把他搞懵了。嗯,这里要注意:万用表测PWM,测的是平均值,不是瞬时值。
1.2 占空比(Duty Cycle)
占空比,是PWM里最重要的概念,没有之一。
定义很简单:高电平时间占整个周期的百分比。
公式:
占空比 = (高电平时间 / 周期时间) × 100%
举个例子:
- 如果占空比是0%,那就是一直低电平,输出0V
- 如果占空比是50%,那就是一半时间高、一半时间低
- 如果占空比是100%,那就是一直高电平,输出满电压
在按摩仪里,占空比直接决定了电机转速和振动强度。占空比越大,电机转得越快,按摩力度就越强。
我的经验: 做按摩仪时,我习惯把占空比范围设在10%~90%之间。为什么?因为0%和100%其实没有PWM效果,而且极端占空比下,电机启动会有问题。我曾经试过用2%的占空比驱动电机,结果电机嗡嗡响就是不转——这就是占空比太小,能量不够克服静摩擦力。
1.3 频率(Frequency)和周期(Period)
频率和周期是倒数关系:
频率 = 1 / 周期
周期 = 1 / 频率
频率的单位是赫兹(Hz),周期的单位是秒(s)。
举个例子:
- 1kHz的频率,周期就是1ms
- 20kHz的频率,周期就是50μs
在按摩仪里,频率的选择非常关键。我给大家列个表:
| 频率范围 | 特点 | 按摩仪中的应用 |
|---|---|---|
| 20Hz ~ 200Hz | 人耳可听到,电机有明显顿挫感 | 低频敲击模式,模拟人手拍打 |
| 200Hz ~ 1kHz | 电机运转平稳,噪音较小 | 常规按摩模式,揉捏、推拿 |
| 1kHz ~ 20kHz | 电机响应快,但可能产生啸叫 | 高频振动模式,用于深层放松 |
| > 20kHz | 人耳听不到,但驱动电路要求高 | 超声波按摩(特殊应用) |
避坑指南: 我曾经在一个项目中,把PWM频率设成了15kHz,结果电机没响,倒是听到了刺耳的尖叫声。后来才发现,那是电机线圈在振动,频率刚好落在人耳最敏感的范围内。所以,做按摩仪,频率最好避开1kHz~5kHz这个区间,不然用户会投诉“有噪音”。
1.4 PWM在按摩仪中的具体作用
好了,前面讲了概念,现在咱们说说实际应用。按摩仪里,PWM主要干三件事:
- 控制电机转速:通过调节占空比,控制直流电机的转速,从而实现不同的按摩力度。
- 控制振动强度:对于振动电机,PWM占空比直接决定振幅大小。
- 实现多种按摩模式:通过动态改变占空比,可以做出“强-弱-强”的波浪模式,或者“快-慢-快”的节奏模式。
我给大家看一段简单的代码,演示如何用STM32生成PWM:
// 以STM32F103为例,配置TIM2输出PWM
// 目标:20kHz频率,50%占空比
void PWM_Init(void) {
// 1. 使能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 2. 配置定时器
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_InitStruct.TIM_Prescaler = 72 - 1; // 72MHz / 72 = 1MHz
TIM_InitStruct.TIM_Period = 50 - 1; // 1MHz / 50 = 20kHz
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_InitStruct);
// 3. 配置PWM通道
TIM_OCInitTypeDef OC_InitStruct;
OC_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
OC_InitStruct.TIM_Pulse = 25; // 50%占空比:25/50
OC_InitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &OC_InitStruct);
// 4. 使能定时器
TIM_Cmd(TIM2, ENABLE);
}
这段代码里,TIM_Period决定了频率,TIM_Pulse决定了占空比。你只要改这两个值,就能控制按摩仪的力度和节奏。
关键点: 在按摩仪里,频率决定了“手感”,占空比决定了“力度”。两者配合,才能调出舒服的按摩体验。
1.5 小结
这一讲咱们讲了:
- PWM的本质:快速开关,模拟模拟量
- 占空比:决定输出功率,控制按摩力度
- 频率和周期:决定电机响应特性,影响噪音和手感
- 实际应用:电机调速、振动控制、模式切换
下一讲,咱们会深入聊聊如何根据按摩仪的不同模式,选择合适的PWM参数。到时候我会拿出我当年踩过的坑,给大家做反面教材。
好,今天就到这儿。记住一句话:PWM不难,难的是调出让人舒服的波形。
我是你们的工程师朋友,咱们下节课见。