☰
PWM与NVH:电机噪声振动分析与产线检测全链路
2026/10/21 23:08:49 网站建设 项目流程

1. 从 PWM 到 NVH:一条完整的测试链路

很多做电机驱动、泵阀控制或车载部件开发的工程师,都会遇到同一个场景:产品在实验室里跑得好好的,一上产线,或者一装到整机上,就出现异响、振动偏大、转速不稳的问题。你打开示波器看 PWM 波形,占空比正常、频率正确,电机也能转,但噪声就是超标。这时候,问题往往不在“能不能转”,而在“转得是否平稳、安静、一致”。

本文要聊的,是一条从 PWM 信号出发,经过转速测量,再到 NVH 声学分析,最后落到产线检测的完整技术链路。它不只是讲 PWM 怎么输出,也不只是讲噪声怎么测,而是把几件事串起来:

  • PWM 信号如何驱动电机,为什么同样的占空比会产生不同的振动噪声;
  • 转速与振动、噪声之间的关系,FFT 和阶次分析如何在 NVH 中起作用;
  • 产线检测如何利用声学信号做快速判定,而不是靠人耳听;
  • 嵌入式端需要采集什么、怎么采集,数据如何与上位机配合。

如果你从事的是 MCU 开发、电机控制、自动化测试设备设计或者产线工艺相关的工作,这篇文章可以给你一个相对完整的框架。即使你目前只负责其中一个环节,也能从链路视角发现自己岗位上下游的数据流和关键参数。

2. PWM 信号的基础概念与关键参数

2.1 PWM 是什么

PWM(Pulse Width Modulation,脉冲宽度调制)是一种通过调节脉冲宽度来改变有效功率输出的技术。简单说,就是输出一串高低电平,高电平持续时间占整个周期的比例,叫占空比(Duty Cycle)。

占空比 = 高电平时间 / 周期 有效电压 ≈ 供电电压 × 占空比

举个例子:一个 24V 电源,PWM 占空比 50%,电机得到的有效电压约 12V。这里说的是“约”,因为实际还有 MOS 管压降、死区时间、寄生参数等因素。

2.2 PWM 的关键参数

参数说明典型值对 NVH 的影响
频率每秒钟 PWM 脉冲个数1kHz ~ 40kHz 常见低于 20kHz 可能被人耳听到,产生“啸叫”
占空比高电平时间的比例0% ~ 100%决定电机平均电压,影响转速
死区时间互补输出时上下管同时关断的时间数百 ns ~ 数 us死区不合理会导致电流畸变、换相噪声
分辨率占空比调节的最小步进8bit、16bit分辨率不足会导致低速转速抖动

2.3 PWM 为什么会影响 NVH

很多初学者以为 PWM 频率只要超出人耳范围就不会有噪声。但实际项目里,20kHz 以上的 PWM 依然可能引发噪声,原因有几个:

  • 电机绕组的电磁力波:PWM 的开关动作在电机绕组中产生高频电流纹波,引发电磁力波动,进而激励定子或壳体振动;
  • 载波频率与机械固有频率耦合:如果 PWM 频率的倍频落在电机结构或安装支架的固有频率上,会放大振动;
  • 换相转矩脉动:BLDC 或 PMSM 在换相时,如果 PWM 策略不当,转矩脉动会激励结构传播,产生阶次噪声;
  • 压电/磁致伸缩效应:部分铁芯材料在 PWM 频率下会产生微小形变,形成高频“咝咝”声。

所以在做 NVH 排查时,不要只看 PWM 频率本身,还要看它的谐波分量,以及这些分量与机械结构的耦合关系。

3. 转速测量与 PWM 的联动

3.1 转速是 NVH 分析的重要基准

NVH 分析里有一个绕不开的概念:阶次(Order)。阶次是指振动或噪声频率与转频(转速/60)的比值。比如转频是 30Hz(对应 1800rpm),那么 2 阶就是 60Hz,3 阶就是 90Hz。

转频(Hz) = 转速(rpm) / 60

为什么转速这么重要?因为很多机械噪声和振动都与旋转频率成整数倍关系。比如:

  • 转子动平衡不良,通常在 1 阶有明显振动;
  • 联轴器不对中,可能在 1 阶和 2 阶同时出现;
  • 齿轮啮合噪声,一般出现在啮合频率(齿数 × 转频)及其谐波上;
  • 电机换相噪声,与极对数和转频相关。

如果不知道转速,你只能看到一堆频率峰,却无法判断它们来自转子、齿轮还是轴承。所以,转速信号是 NVH 分析的地图。

3.2 用 PWM 信号推算转速

在部分低成本方案中,PWM 本身可以间接反映转速。比如恒压调速的直流电机,给定不同的占空比,电机的稳态转速大致遵循:

转速 ≈ K × (占空比 × 供电电压 - 电压降)

但这种方式只适合粗略估算,不能作为 NVH 阶次分析的准确基准,原因有三:

  • 不同负载下,转速与占空比并非线性关系;
  • 电机温升会影响绕组电阻和反电动势系数;
  • PWM 频率和占空比相同的情况下,控制算法(如是否带电流环)不同,瞬时转速波动差异很大。

3.3 更准确的转速获取方式

工程上更常用的是:

  • 编码器:增量式或绝对值编码器,输出 AB 相脉冲或 SSI 协议数据;
  • 霍尔传感器:BLDC 电机内置霍尔,可得到电角度和换相信息;
  • 光电转速传感器:在转轴贴反光纸,光电探头输出脉冲;
  • 电流信号频谱分析:通过电流 FFT 提取转子频率相关边带,但算法复杂。

在产线检测场景下,如果被测产品本身没有编码器输出口,但你能拿到它的驱动 PWM 和电流波形,可以通过电流谐波分析来判断转速是否平稳,再结合麦克风或加速度计做 NVH 判定。

下面是一个基于 STM32 的 PWM 输出与霍尔测速的经典配合思路:

// 定时器 PWM 输出配置(以 TIM1 为例),同时用外部中断采集霍尔脉冲 void Motor_PWM_Init(void) { GPIO_InitTypeDef gpio_init = {0}; TIM_OC_InitTypeDef oc_init = {0}; TIM_HandleTypeDef htim1 = {0}; __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); gpio_init.Pin = GPIO_PIN_8; // PA8 输出 PWM gpio_init.Mode = GPIO_MODE_AF_PP; gpio_init.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &gpio_init); htim1.Instance = TIM1; htim1.Init.Prescaler = 72 - 1; // 72MHz / 72 = 1MHz htim1.Init.Period = 1000 - 1; // PWM 频率 = 1MHz / 1000 = 1kHz htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; HAL_TIM_PWM_Init(&htim1); oc_init.OCMode = TIM_OCMODE_PWM1; oc_init.Pulse = 500; // 初始占空比 50% oc_init.OCPolarity = TIM_OCPOLARITY_HIGH; oc_init.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim1, &oc_init, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); }

这里有一个重点项目中的常见取舍:PWM 频率选 1kHz 还是 20kHz,对 NVH 结果影响很大。如果选 20kHz,MCU 的定时器频率、功率器件的开关损耗、驱动芯片的栅极驱动能力都要重新核算。低频 PWM 扭矩脉动大,但开关损耗低;高频 PWM 噪音小,但驱动设计要求高。产线检测时,必须给每台产品固定同一组 PWM 参数,否则 NVH 数据不具备可比性。

4. NVH 声学分析的核心方法

4.1 NVH 是什么

NVH 是 Noise(噪声)、Vibration(振动)、Harshness(声振粗糙度)三个英文单词的缩写。它研究的是机械系统在工作过程中产生的振动与噪声,以及人对这种振动噪声的主观感受。

  • Noise:通过空气传播,能被麦克风采集到的声压信号;
  • Vibration:通过结构和固体传播,能被加速度计采集到的振动信号;
  • Harshness:主观评价,指噪声振动的“品质”。

在产线检测中,NVH 最直接的体现是:产品运转时,麦克风听到的声音是否在允许范围内,振动传感器测得的加速度值是否超标。

4.2 声学分析有哪些常用指标

指标计算方式用途
声压级 SPL20 × log10(P/Pref)总噪声大小
A 计权声压级对声压频谱按 A 曲线加权模拟人耳感知
频谱FFT 将时域信号转为频域定位特征频率
阶次谱将频率对齐到转速阶次判断振动来源
响度基于 Bark 或 ERB 频带计算主观响度感知
尖锐度高频能量占比较高的程度声音品质评估

产线检测中计算能力有限,一般不会跑完整的声品质分析,但频谱和声压级是必做的。如果要判断“嗡嗡声”是来自 50Hz 工频干扰,还是来自电机换相,就需要看 FFT 结果。

4.3 数据采集与 FFT 的基础流程

要在产线上做声学检测,首先得有声音数据。常见方案是 MEMS 麦克风加上 MCU 或 FPGA 采集,也可以使用 PC 加 USB 声卡。关键是采样率的选择:

  • 人耳可听范围是 20Hz ~ 20kHz,根据奈奎斯特定理,采样率至少要 40kHz;
  • 工程上常用 48kHz 或 51.2kHz,留出抗混叠滤波器的过渡带;
  • 如果还要分析超声波段(如 20kHz ~ 40kHz 的某些结构噪声),采样率建议 96kHz 以上。

下面是一个用 Python 做 FFT 的简单示例,适合在 PC 上位机中对采集到的音频文件做离线分析:

import numpy as np import wave def analyze_audio(filename, target_freq=None): with wave.open(filename, 'rb') as wf: sample_rate = wf.getframerate() n_frames = wf.getnframes() data = wf.readframes(n_frames) dtype = np.int16 if wf.getsampwidth() == 2 else np.int8 audio = np.frombuffer(data, dtype=dtype).astype(np.float32) # 取单通道 if wf.getnchannels() > 1: audio = audio[0::wf.getnchannels()] # FFT n = len(audio) window = np.hanning(n) spectrum = np.fft.rfft(audio * window) freqs = np.fft.rfftfreq(n, d=1.0/sample_rate) mag = np.abs(spectrum) * 2.0 / n if target_freq: idx = np.argmin(np.abs(freqs - target_freq)) print(f"target_freq={target_freq}Hz, magnitude={mag[idx]:.4f}") return freqs, mag

这段代码的思路,是把音频文件读取出来,加汉宁窗后做 FFT。为什么要加窗?因为截断的音频帧首尾不是连续的,直接做 FFT 会产生频谱泄漏。汉宁窗可以缓解这个问题。产线检测中,最好使用采集到的周期信号整周期截断,这样不需要加窗也不会泄漏。

4.4 从噪声频谱倒推故障

在产线 NVH 检测中,最实用的能力是把声学频谱和已知故障对应起来。下面是一些典型的频率特征:

故障类型频谱特征
轴承磨损高频宽带噪声,通常在 1kHz ~ 10kHz 出现多个峰
齿轮啮合不良啮合频率及其倍频处有明显峰值,边带密集
电机换相噪声与极对数和转频相关的阶次频率,常见奇数倍频
转子不平衡1 阶(1 倍转频)幅值突出
松动出现大量高次谐波,且时域有冲击成分

有一个容易踩的坑:麦克风测到的“低频振动声”不一定来自机械故障,可能是风噪或气流声。所以在产线检测中,通常建议麦克风和加速度计配合使用,用加速度计确认振动源是否真实存在,用麦克风确认人耳主观感受。

5. 产线检测中的应用与落地

5.1 产线 NVH 检测的目标

产线检测与实验室 NVH 分析有一个本质区别:实验室追求“诊断得准”,产线追求“判得快、判得稳、不误杀”。

产线检测通常要完成三件事:

  • 筛选出不合格品:存在异响、振动超标的产品下线返修;
  • 发现工艺漂移:比如轴承压装力不够、齿轮中心距偏差,可以通过 NVH 特征提前发现;
  • 辅助追溯:将声学指纹数据与产品序列号绑定,后续客诉时反向分析。

5.2 产线检测系统的基本架构

一个典型的产线 NVH 检测工位包括:

被测电机/总成 ├── 麦克风(近场测量) ├── 加速度计(可选) └── 转速信号(编码器/霍尔/电流) │ 数据采集卡或嵌入式采集终端 │ 上位机软件 ├── FFT 频谱计算 ├── 特征提取 ├── 合格/不合格判定 └── 数据上传 MES

需要注意的是,被测件必须在固定工况下运转,转速、负载、供电电压、PWM 参数都要保持同一标准。否则采集到的声学信号千差万别,根本没法对比。

5.3 嵌入式采集端的 MCU 选择

产线检测的采集前端,可以使用 STM32 系列 MCU 来做 ADC 采集和简单处理,也可以直接使用 USB 数据采集卡。如果数据量不大、采样率控制在 48kHz 且只做单通道声学采集,STM32F103 级别的 MCU 够用;如果要采集多通道麦克风阵列或同时采集振动加速度信号,建议使用 STM32H7 或更高性能的处理器。

下面是一个 STM32 ADC 连续采集麦克风信号的思路:

#define ADC_BUF_SIZE 2048 uint16_t adc_buf[ADC_BUF_SIZE]; volatile uint8_t adc_complete_flag = 0; void Microphone_ADC_DMA_Init(void) { // 启用 ADC1、DMA1 时钟 __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_DMA1_CLK_ENABLE(); // 配置 DMA,将 ADC 数据自动搬运到 adc_buf // DMA1 Channel1 对应 ADC1 // 方向:外设到内存,循环模式,半字宽度 } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { adc_complete_flag = 1; // 此时 adc_buf 中已经采集满一组数据 // 可在此处启动音频特征粗判,或通知上位机取数据 }

上面的代码只是结构示意,实际工程中要完成 DMA 通道初始化和 ADC 参数配置。重点是理解思路:ADC 采样结果通过 DMA 自动搬运到内存数组,不需要 CPU 逐点搬移,这样 CPU 可以集中精力做 FFT 或特征判断。

5.4 上位机判定逻辑

产线判定最忌讳的是“只设一个总声压阈值”。因为总声压受环境噪声影响太大,走廊里一辆叉车经过,不合格率就会飙升。工程上更稳妥的方式是:

  1. 先做背景噪声估计:在设备不运转时测量底噪,作为参考;
  2. 提取特征频段能量:比如提取 500Hz ~ 2kHz 区间合计能量,作为主要特征;
  3. 结合转速阶次:在转速已知的情况下,对比特定阶次幅值是否超标;
  4. 做相对比较:同一批次产品,按统计方法计算均值、标准差,超出均值 + n×标准差的产品列为异常。
判定公式(示意): 合格条件: (特征频段声压级 - 背景噪声声压级) < 阈值 且 指定阶次幅值 < 阶次阈值 且 总声压级 < 安全阈值

5.5 一个简化的产线检测判定示例

下面的 Python 示例模拟了一个产线检测判定过程:根据音频文件计算 1 阶和 2 阶幅值(假设输入了转速),并据此判断合格与否。

import numpy as np import wave def calculate_order_magnitude(filename, rpm, sample_rate=None, order=1): # 读取音频 with wave.open(filename, 'rb') as wf: rate = wf.getframerate() data = wf.readframes(wf.getnframes()) audio = np.frombuffer(data, dtype=np.int16).astype(np.float32) if sample_rate is None: sample_rate = rate # 计算转频和阶次频率 rotate_freq = rpm / 60.0 target_freq = rotate_freq * order # FFT 计算目标频率附近幅值 n = len(audio) window = np.hanning(n) spectrum = np.fft.rfft(audio * window) freqs = np.fft.rfftfreq(n, d=1.0/sample_rate) mag = np.abs(spectrum) * 2.0 / n # 取目标频率附近 ±0.5Hz 的最大幅值 mask = (freqs >= target_freq - 0.5) & (freqs <= target_freq + 0.5) return np.max(mag[mask]) if np.any(mask) else 0.0 def production_judge(filename, rpm, order1_th=0.05, order2_th=0.03): o1 = calculate_order_magnitude(filename, rpm, order=1) o2 = calculate_order_magnitude(filename, rpm, order=2) ok = (o1 < order1_th) and (o2 < order2_th) print(f"1阶幅值={o1:.4f}, 2阶幅值={o2:.4f}") print("判定: 合格" if ok else "判定: 不合格") return ok

这里的阈值需要结合实际产品标定,不能照抄。有一个常见的工程经验:先从大量合格品数据中采集特征值分布,再根据分布确定阈值,而不是拍脑袋定数值。如果数据量够大,甚至可以用机器学习做更灵活的判别,但产线环境更看重解释性,频谱阈值法在很长一段时间内仍然是主流。

5.6 PWM 参数与产线检测的配合

回到 PWM 主题:产线检测时必须固定 PWM 参数,否则声学特征会混淆。比如同一台电机,载波频率 10kHz 和 20kHz 时,电磁噪声频谱差异巨大。如果产线上一台用默认配置、另一台因为固件版本不同用了另一种配置,检测结果就没有可比性。

具体建议如下:

  • 产线检测程序中,将 PWM 频率、占空比、加减速时间统一写死,不允许操作员修改;
  • 每次检测前自动读取固件版本和参数校验码,不匹配就禁止测试;
  • 如果产品本身有多个工作档位,每个档位都要建立单独的 NVH 限值,不能用一个全局限值覆盖所有档位。

6. 常见问题与排查思路

6.1 噪声只在部分产品中出现

问题现象常见原因解决思路
同批次部分产品高频啸叫MOSFET 驱动电阻不一致,开关振荡检查驱动电路器件一致性
特定转速区间出现共振转子固有频率与 PWM 倍频重叠扫频测试,调整 PWM 频率避开共振
检测结果忽好忽坏麦克风位置偏移或固定松动加固工装,定期校准传感器位置
低速时异响明显低速下电流纹波增大,力矩脉动显著检查控制算法,低速段提高 PWM 频率或改变调制方式

6.2 产线检测误判率高

误判通常分两种情况:把合格品判为不合格(误杀),或者把不合格品判为合格(漏放)。

误杀常见原因:

  • 背景噪声波动大,未做底噪扣除;
  • 产品未达到稳定转速就开始采集数据;
  • 麦克风线缆屏蔽不良,引入电磁干扰;
  • 检测工位周围有设备启停,声场瞬态变化。

漏放常见原因:

  • 阈值设置过宽;
  • 麦克风离声源太远,信噪比不足;
  • 检测时间过短,未覆盖异常出现的时段;
  • 只看了总声压,没有分析特征阶次。

排查时建议按照“先硬件后软件、先时域后频域、先单台后批量”的顺序推进。先确认传感器安装可靠,再检查采集数据是否存在削顶或饱和,最后再怀疑算法问题。

6.3 PWM 触发 ADC 采样时的干扰

在嵌入式采集端,有一类典型问题:PWM 信号与 ADC 采样共用电源或地线时,开关噪声会被 ADC 采到,导致频谱中出现 PWM 频率及其谐波。

解决方法:

  • ADC 采样避开 PWM 开关瞬间:使用定时器触发 ADC,让采样点落在 PWM 高电平稳定区间;
  • 地线隔离:模拟地与功率地单点连接或使用磁珠隔离;
  • 平均多次采样:在软件上做多次采样取平均,抑制随机噪声;
  • 检查参考电压:确保 VREF+ 稳定,必要时加去耦电容。
PWM 开关时刻:高电平开始、高电平结束、死区切换 推荐采样点:PWM 高电平中间点,避开边沿跳变

7. 最佳实践与工程建议

7.1 传感器与采集端

  • 麦克风推荐使用 IEPE 传感器或 MEMS 麦克风。IEPE 适合实验室,MEMS 适合产线低成本方案;
  • 麦克风与产品之间的距离要固定,通常 5cm ~ 20cm,太近受风噪影响大,太远信噪比低;
  • 加速度计安装面要平整,使用高强度胶或磁吸座,不能用双面胶;
  • 采集通道和产品供电回路必须隔离,避免地环路干扰;
  • 每次检测前做一次标准声源自检,比如用 94dB 标准声源校准麦克风增益。

7.2 数据处理与判定

  • 频谱分辨率要足够。两个相邻故障频率至少差 2 个频率分辨率才能分辨;
  • 检测时长至少包含足够多的转数。比如 600rpm 时,转频 10Hz,若要求 0.1Hz 分辨率,理论上需要至少 10 秒数据;
  • 产线节拍不允许 10 秒?那就优先用窄带特征峰,而不是全频段谱;
  • 强烈建议记录原始音频或特征向量,不只看判定结果,方便后续质量追溯;
  • 阈值参数保存到配置文件中,不要写死在代码里,方便工艺人员调整。

7.3 参数管理的安全边界

产线检测系统涉及参数修改时,要注意安全边界:

  • 修改采集增益、阈值、PWM 参数需要操作权限,防止误操作影响所有产品判定;
  • 参数变更前先备份原始配置,变更后先用已知合格品和已知不合格品验证;
  • 检测系统保存的数据建议加密或加校验,防止产线数据被篡改;
  • 涉及数据库写入时,使用事务和唯一序列号,避免重复检测产生脏数据。

7.4 嵌入式端的 PWM 配置建议

回到 MCU 端,PWM 配置有几个细节直接影响 NVH:

  1. 死区时间不要随便给,按驱动芯片手册计算,留出 20%~50% 的余量;
  2. PWM 频率尽量避开机械结构的固有频率,可以通过简单扫频测试摸底;
  3. 使用互补 PWM 时,建议在定时器初始化时配置刹车功能,出现短路或过流时快速关断;
  4. 如果 MCU 支持高分辨率定时器(如 STM32G4 的 HRTIM、STM32F334 的 HRTIM),可以用更高 PWM 频率降低噪声,但成本也会上升;
  5. 不要在运行过程中频繁跳变 PWM 频率,这会导致电机瞬时力矩突变,产生阶次噪声。

8. 总结与学习路线

顺着本文的链路走下来,你已经掌握了几个关键点:

  • PWM 不仅是“调电压”,它的频率、死区、调制策略都会影响最终的 NVH 表现;
  • 转速是 NVH 分析的重要基准,没有转速的频谱分析很难定位噪声来源;
  • NVH 声学分析的核心是 FFT、阶次分析和特征提取,产线检测要的不是复杂算法,而是稳定可重复的判定逻辑;
  • 产线检测系统要从传感器选型、采集硬件、上位机算法、数据管理四个层面综合考虑,任何一个环节出问题都会反映到误判率上。

如果你是嵌入式方向的工程师,下一步可以重点研究:

  • STM32 定时器 PWM 输出和死区配置;
  • ADC 与 DMA 的配合,实现高速连续采样;
  • 如何在 MCU 上做轻量级 FFT(比如 ARM CMSIS-DSP 库);
  • 如何把采集到的数据实时挂到上位机做更详细的频谱分析。

如果你是负责产线检测设备或质量的工程师,下一步可以关注:

  • 声学传感器的校准方法;
  • 不同类型故障的频谱特征库建立;
  • 结合 MES 系统做数据追溯;
  • 用统计过程控制方法监控产线 NVH 特征的稳定性。

技术与技术之间从来不是孤立的。PWM 背后是功率变换与电磁兼容,转速背后是传感与控制,NVH 背后是结构动力学与声学,产线检测背后是测量系统分析和数据管理。能把这些串起来的人,往往是项目中最难被替代的人。

建议你动手做一个小实验:找一块 STM32 开发板、一个直流电机、一个驻极体麦克风模块,先固定 PWM 频率输出,用串口把 ADC 采集数据发到 Python 上位机,画出频谱,再改变 PWM 频率对比频谱差异。这个过程并不复杂,但会把本文讲到的每个概念都串成真实的工程经验。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询