在电机产线检测中,PWM 信号、转速测量、NVH 声学分析这三件事经常被放在同一个工位完成。生产一台直流电机,从装配完成到下线,通常要验证它在给定 PWM 占空比下能否达到目标转速,同时监听它在运行过程中的振动和噪声是否超标。难点不在于某一个单一环节,而在于 PWM 信号既驱动电机旋转,又会在电流环路里产生电磁噪声,这些噪声会被振动传感器和麦克风采集到,混进 NVH 分析结果。如果信号采集、时序控制和判定逻辑设计得不好,产线一整天都在处理误判和漏检。
下面围绕电机产线检测场景,讲清楚 PWM 调速、转速测量、NVH 声学分析各自要做什么,再给出一套可落地的检测系统框架,包括硬件选型、软件实现、判定标准和排错方法。适合产线自动化工程师、电机测试工程师、刚接触 NVH 分析的开发者阅读。看完后能独立搭建一个最小可运行的电机会 NVH 在线检测方案,并知道关键参数怎么设、异常数据怎么查。
1. 先理清 PWM、转速与 NVH 之间的关系
1.1 PWM 调速的本质
PWM 的全称是 Pulse Width Modulation,即脉冲宽度调制。它用固定频率的方波,通过改变高电平持续时间占整个周期的比例,也就是占空比,来改变施加在负载上的平均电压。占空比越大,平均电压越高,电枢电流越大,电机转速通常也越高。
在直流有刷电机里,PWM 频率一般取 8kHz 到 20kHz。取 20kHz 是因为人耳对 20kHz 以上的声音敏感度急剧下降,可以减少电机啸叫。但 PWM 频率并不是越高越好,频率升高会增加驱动管的开关损耗,电流纹波虽然变小,控制器发热却会上升。这是电机驱动与 NVH 之间的第一层矛盾:想让人听不到开关噪声,就得把频率推到可听范围之外,但开关损耗和驱动成本随之上升。
PWM 信号和 PPM 信号经常被放在一起对比。PPM 是脉冲位置调制,用脉冲在周期内的位置来传递信息,主要用于航模遥控接收机通道信号。PWM 的编码信息在高电平宽度,PPM 的编码信息在脉冲相对位置,两者不是一回事。在电机控制里,主流是 PWM 加 H 桥或半桥驱动电路,产线测试上位机只需要下发目标占空比或目标转速,具体驱动由嵌入式控制器完成。
1.2 转速测量为什么是 NVH 分析的前提
NVH 是 Noise、Vibration、Harshness 的缩写,中文常译为噪声、振动与声振粗糙度。在电机这里,Harshness 通常弱化,重点落在噪声和振动上。振动信号和声学信号有一个共同点:它们都随转速变化。同一台电机,在 1000 转时可能很安静,在 5000 转时可能因为共振而发出明显噪音。
所以单纯测振动和声音不够,必须知道采样那一刻的转速是多少,才能做阶次分析。阶次分析是旋转机械声学分析中最重要的方法之一。它把频率归一化到旋转基频的倍数上,避免电机转速波动导致频谱频率漂移,从而让同一个缺陷在不同转速下都能被同一个阶次位置命中。
由此引出整个产线检测系统的数据流主线:PWM 决定电机转速,转速决定振动和噪声的特征,NVH 分析结果反过来判断电机与装配是否存在异常。三者是一条链路,不是三个独立测试项,这也是本文标题把 PWM、转速、NVH 和产线检测放在一起的原因。
1.3 产线 NVH 检测解决什么问题
产线检测和研发实验室的 NVH 测试目的完全不同。实验室追求测量精度、模态分析和优化方案,产线追求在几十秒甚至十几秒内判断这台电机有没有缺陷。产线常见缺陷包括转子不平衡、轴承损伤、换向器毛刺、电刷安装异常、磁钢位置偏移、装配松动。这些缺陷的共性表现是特定频段出现异常振动或噪声。轴承损伤会在与转速相关的阶次上出现峰值,转子不平衡会在 1 倍频上突出。产线检测的本质是:先测量频谱特征,再与合格样本建立阈值或模型,快速分类。
同样的逻辑也适用于 PWM 风扇产线。服务器风扇、笔记本散热风扇同样是 PWM 调速,产线要验证风扇在最低占空比下能否启动、转速监测是否回零、运行噪声是否超标。很多人在使用电脑监控软件时看到风扇转速为 0,其中一个原因就是 PWM 占空比过低,电机无法克服静摩擦和轴承阻力,霍尔脉冲一直不出现,转速计数值自然为 0。这个现象在产线测试中同样会出现,属于判定逻辑必须覆盖的边界情况。
2. 检测系统的硬件与环境准备
2.1 测试台架的基本组成
一个典型的电机产线 NVH 检测工位由以下部分构成:
| 组成 | 作用 | 常见选型 |
|---|---|---|
| 上位机 | 运行测试软件、控制流程、保存数据 | 工业 PC 或带 DAQ 的电脑 |
| PWM 驱动模块 | 按设定输出 PWM 给电机 | 独立驱动板、PLC 高速输出口、可编程电源 |
| 转速传感器 | 获取实时转速 | 霍尔传感器、增量式编码器、光电反射片 |
| 振动传感器 | 测量机壳振动 | IEPE 加速度计 |
| 麦克风 | 测量辐射噪声 | ICP 传声器或测量麦克风 |
| 隔音箱 | 降低环境噪声干扰 | 简易隔声罩或半消声箱 |
| 采集设备 | 同步采集转速、振动、声音 | 多通道 DAQ 数据采集卡 |
| 信号调理 | 放大、滤波、隔离 | 恒流源供电、抗混叠滤波器 |
学习环境可以简化成:一块 STM32 开发板输出 PWM,一个霍尔传感器接外部中断引脚测转速,一个 USB 声卡加驻极体麦克风采声音,再用 Python 离线分析。这样在实验室就能先把算法跑通,再考虑升级到工业级硬件。
2.2 关键传感器选型要点
选加速度计主要看量程和频率范围。电机振动加速度通常在几个 g 以内,但产线装配偶发撞击或瞬态振动可能达到 10g 以上,建议选 ±50g 量程的 IEPE 加速度计。频率响应要覆盖到最关心的最高阶次。如果电机最高转速 30000rpm,基频是 500Hz,分析到 10 阶就需要覆盖 5kHz 以上。小尺寸直流有刷电机在空载状态下转速超过 30000rpm 并不罕见,这类高速电机对传感器的高频响应和采集卡的采样率要求更高。
麦克风要注意测量距离和声压级。产线隔音箱内一般把麦克风放在电机前方或侧面 10cm 到 30cm 处。普通直流电机在近场的声压级可能在 60dB 到 90dB 之间,选量程上限 120dB 的测量麦克风比较保险。声压级是相对量,计算公式为 Lp = 20 × log10(p / p0),其中 p0 是参考声压 20 微帕。
转速传感器推荐增量式编码器或霍尔传感器。霍尔传感器简单便宜,缺点是每转脉冲数少,低速时测量延迟大。编码器每转几十到几千脉冲,低速分辨率好,适合需要快速获取转速的产线场景。如果工位要测多个转速点,建议优先考虑编码器。
2.3 声学测试环境要求
NVH 检测最怕背景噪声。产线车间里气动工具、传送带、空调风机都会产生噪声,混入麦克风后轻则抬高噪声底,重则直接掩盖电机缺陷特征。
最标准的做法是隔音箱。箱体采用多层钢板加吸音棉,内部做吸声处理,隔音箱的插入损耗至少要有 20dB 以上。也就是说,关上门之后,外部 80dB 的声音进入箱体后要降到 60dB 以下。隔音箱还有一个好处:隔离气流,阻断气流对麦克风产生的风噪。
如果现场条件有限,可以采用差分测量法:先记录背景噪声,再启动电机测量,用能量相减做背景修正。这种方法只能修正平稳噪声,对突发噪声无能为力。产线要保证可靠性,还是应该把隔音箱当成标配,背景噪声修正只作为辅助手段。
3. 用最小系统打通 PWM 调速与转速测量
这一节给一个可运行的最小闭环,代码用 Python 配合串口来演示思路。实际产线可能用 C 写在嵌入式里,也可能用 LabVIEW 采集,但核心逻辑一致:发指令、等稳定、读转速、进分析。
3.1 PWM 输出与转速开环控制
先看 PWM 与平均电压的关系。设 PWM 周期为 T,高电平时长为 t_on,占空比 D = t_on / T,驱动电源电压为 Vcc,忽略管压降时,电机端平均电压 V_avg = D × Vcc。
嵌入式端如果使用 STM32,PWM 配置的关键是定时器时钟、自动重载值和比较值的关系。下面是一段简化配置:
// 假设定时器时钟 72MHz,目标 PWM 频率 20kHz // ARR = 72000000 / 20000 - 1 = 3599 TIM_TimeBaseInitTypeDef TIM_InitStruct; TIM_InitStruct.TIM_Prescaler = 0; TIM_InitStruct.TIM_Period = 3599; // 决定 PWM 频率 TIM_OCInitTypeDef TIM_OCInitStruct; TIM_OCInitStruct.TIM_Pulse = 1800; // 占空比 50%占空比由比较值 TIM_Pulse 决定,频率由 Period 决定。修改占空比就是修改比较值,而不是重新初始化定时器,否则输出会瞬间跳变。
上位机通过串口发送占空比指令并读取转速,最小交互协议可以写成这样:
import serial import time ser = serial.Serial('COM5', 115200, timeout=1) time.sleep(1) def set_pwm(port, duty_percent): cmd = f"PWM {duty_percent:.1f}\n".encode() port.write(cmd) time.sleep(0.05) return port.readline().decode().strip() def read_speed(port): port.write(b"SPD?\n") time.sleep(0.02) line = port.readline().decode().strip() try: return float(line.split()[1]) except Exception: return None set_pwm(ser, 50) for _ in range(10): rpm = read_speed(ser) print(f"PWM=50% speed={rpm} rpm") time.sleep(0.5) ser.close()这段代码的关键是协议要简单、可解析。产线上位机与嵌入式控制器之间用文本行协议最方便,出问题能直接看串口日志。默认占空比 50% 只是演示,实际要根据额定电压和负载标定。
3.2 用霍尔脉冲计算转速
霍尔传感器或编码器输出一串脉冲。转速计算有两种常见方式:测频法,M 法;测周法,T 法。
M 法是统计固定时间内脉冲个数。设测量时间窗口为 Tc,计数为 N,每转脉冲数为 P,则转速 n = 60 × N / (P × Tc)。转速越高,窗口内脉冲越多,精度越高。
T 法是测量两个脉冲之间的时间间隔。设计时器频率为 f_clk,两次脉冲之间计数值为 M,则 n = 60 × f_clk / (P × M)。转速越低,间隔越长,精度越高。
实际产线常用 M 法和 T 法结合。下面是 M 法的 Python 实现:
def speed_by_m_method(pulse_count, duration_s, pulses_per_rev=1): freq = pulse_count / duration_s # 脉冲频率 Hz rev_per_sec = freq / pulses_per_rev # 每秒转数 rpm = rev_per_sec * 60.0 return rpm print(speed_by_m_method(50, 0.5, pulses_per_rev=1)) # 输出 6000.0如果霍尔传感器每转出 1 个脉冲,0.5 秒内数到 50 个脉冲,说明电机每秒 100 转,也就是 6000rpm。换算系数就是 60 除以每转脉冲数,这个系数写错是最常见的低级错误。采用多脉冲编码器时,比如每转 1000 脉冲,同一个 50 计数值算出来的转速只有 6rpm,完全不一样。
3.3 用 PID 闭环把转速稳定在目标值
开环 PWM 控制下,转速会随负载波动。产线 NVH 测试要求电机在稳定转速下测量,如果转速波动,频谱会变糊,阶次分析准确性下降。因此产线测试通常要加闭环。
PID 控制器的输出是 PWM 占空比,输入是目标转速与实测转速的误差。下面是常用的位置式 PID 离散形式:
class PID: def __init__(self, kp, ki, kd, dt): self.kp = kp self.ki = ki self.kd = kd self.dt = dt self.integral = 0.0 self.prev_error = 0.0 def update(self, target, current): error = target - current self.integral += error * self.dt derivative = (error - self.prev_error) / self.dt self.prev_error = error return self.kp * error + self.ki * self.integral + self.kd * derivative实际使用时要对积分项做限幅,防止长时间超调把 PWM 推到 100% 或 0%。输出也要限幅,因为占空比只能在 0 到 100% 之间。参数整定可以从 KP 先调,再加 KI,大多数电机转速闭环场景下 KD 可以先设 0。
3.4 转速测量误差来源与校准
转速测量最常见的误差来源有三个:
| 误差来源 | 现象 | 处理方式 |
|---|---|---|
| 脉冲计数丢失 | 霍尔信号幅值过小或受干扰,计数偏少 | 增加上拉电阻、RC 滤波、施密特触发器 |
| 时间窗不同步 | M 法窗口边界截断脉冲 | 使用硬件计数器,避免软件计数丢中断 |
| 每转脉冲数设错 | 转速系统偏差 | 用光电编码器或示波器校准系数 |
注意:转速测量不是只算一个数就结束。产线系统要在标定阶段用高精度转速表或光电测速仪对比确认系数,否则后续 NVH 特征值全部建立在错误转速上。
4. 把振动和声音转换成可分析的信号
4.1 振动信号的采集与预处理
加速度计输出模拟电压信号,经 IEPE 恒流源供电后由 DAQ 采集。采样率至少要达到关心最高频率的两倍以上,这是奈奎斯特采样定理。电机噪声关心的频率上限如果是 20kHz,采样率至少 51200Hz,工程上常用 51200Hz 或 65536Hz,留出裕量避免混叠。
采集到的原始信号要先做去趋势和零均值处理,再去做频谱分析。如果原始信号存在明显直流偏置,FFT 后会在 0Hz 附近出现巨大能量,影响其他频段的观察。
import numpy as np from scipy.fft import rfft, rfftfreq def analyze_vibration(signal, fs): signal = signal - np.mean(signal) # 去直流 n = len(signal) window = np.hanning(n) data = signal * window # 加窗抑制频谱泄漏 spectrum = np.abs(rfft(data)) * 2.0 / n freqs = rfftfreq(n, 1.0 / fs) return freqs, spectrum加窗是频谱分析里容易被忽略的步骤。如果截取长度不是信号周期的整数倍,FFT 结果会出现频谱泄漏,峰值变宽、旁边出现很多假峰。汉宁窗是机械振动分析的常用选择。
4.2 声压级计算
声音信号同样先做预处理,然后计算总声压级。声压级定义是 Lp = 20 × log10(p / p0),p0 = 20μPa。实际应用中,我们习惯用 A 计权模拟人耳对不同频率的敏感度。A 计权曲线在低频大幅衰减,中频相对平坦,高频适当衰减,更接近人耳对安静环境中声音的主观响应。
def spl_db(pressure_rms, ref=20e-6): if pressure_rms <= 0: return -float('inf') return 20.0 * np.log10(pressure_rms / ref)需要注意的是,麦克风灵敏度、前置放大器增益、采集卡 ADC 参考电压都会影响最终算出的声压是否准确。产线测试如果不追求绝对声压精度,更关注相对一致性,可以用标准声源或参考样件定期标定,保证每台被测电机在相同条件下比较。
4.3 频谱分析与阶次分析
频谱分析可以看到噪声和振动能量随频率的分布,但频率是绝对量,不依赖转速。同一类型的电机,测试转速不同,轴承缺陷产生的频率也不同,很难用一个固定频段做阈值判断。
阶次分析解决了这个问题。阶次定义为频率除以旋转基频。1 阶就是转一圈发生一次的事件,比如转子不平衡。轴承外圈缺陷会产生与滚动体数量相关的阶次。通过阶次分析,可以按阶次而不是绝对频率设定阈值,即使转速有偏差,判定依然可靠。
def order_spectrum(signal, fs, rpm): freq_axis, amp = analyze_vibration(signal, fs) rot_freq = rpm / 60.0 # 旋转基频 order_axis = freq_axis / rot_freq return order_axis, amp在实际产线中,转速不一定恒定,严格的做法是用转速计信号做等角度重采样,把时域信号按角度域重采样,再做 FFT,得到阶次谱而不是频率谱。LabVIEW 的 Sound and Vibration Toolkit 提供阶次跟踪模块,老牌声学分析软件也有成熟实现。如果暂时没有专业工具,也可以用转速相对稳定的假设,在固定转速段内直接做 FFT 再除以基频近似处理,但精度会打折。
4.4 一个简单的噪声异常判定示例
设定判定目标:提取 1 阶、2 阶、轴承阶次三个特征值,再与合格样本的均值加 3 倍标准差比较。
def pass_fail_by_order(order_axis, amp, feature_orders, thresholds): results = {} for order, threshold in zip(feature_orders, thresholds): idx = np.argmin(np.abs(order_axis - order)) value = amp[idx] results[order] = value if value > threshold: results['fail_order'] = order return False, results return True, results这个逻辑只是示意。真正产线判定要考虑测量重复性、传感器一致性、样品差异等因素。只靠单一阶次超限往往不够,可能需要联合多个特征,甚至用机器学习分类模型,把正常电机和缺陷电机当作两类样本训练。
5. 产线在线检测流程与判定逻辑
5.1 测试工位的工作流程
一个典型的检测工位流程可以设计成七步:
- 被测电机放入夹具,接好电源线和传感器。
- 上位机下发测试参数,包括目标转速、测试时长、采样率。
- 上位机发出启动指令,PID 闭环让电机加速并稳定到目标转速。
- 等待转速稳定 1 到 2 秒。
- 同步采集转速、振动、声音信号,时长 2 到 5 秒。
- 计算特征值,与阈值比较,输出 PASS 或 FAIL。
- 保存原始数据与判定结果,生成产线追溯记录。
这条流程的核心是同步。转速、振动、声音三个通道必须使用同一个采样时钟,否则阶次分析无法对齐。多通道 DAQ 硬件时钟同步是首选,速度计数通道和模拟输入通道共用内部时钟源。
测试参数建议用配置文件管理,不要把参数散落在代码里。下面是一个测试配方示例:
{ "test_name": "motor_nvh_eol_v1", "target_rpm": 8000, "pwm_freq_hz": 20000, "settle_time_s": 1.5, "acquire_time_s": 3.0, "sample_rate_hz": 51200, "features": [ {"name": "order1", "order": 1.0, "threshold": 0.15}, {"name": "order2", "order": 2.0, "threshold": 0.10}, {"name": "bearing", "order": 8.3, "threshold": 0.08} ] }配置文件的好处是产线换型号时只改配方,不重新编译软件。阈值字段和特征阶次要能随时调整,才能支持产线不断优化。
5.2 判定阈值怎么定
阈值不能拍脑袋。推荐流程是:
- 取 50 到 100 台已知合格的电机,在相同条件下测量特征值。
- 对每个特征值计算均值和标准差。
- 暂定阈值为均值加 3 倍标准差,作为初始边界。
- 用包含已知缺陷电机的样件验证阈值能否检出缺陷。
- 结合误判率和漏检率调整阈值。
- 定期用新样本重新校准,监测特征值分布漂移。
阈值定得太严,产线误杀严重,每天都在人工复测;定得太松,缺陷电机流到客户端,客户投诉。这两者之间的平衡要用数据说话,不能凭经验随手填一个数字。
5.3 数据追溯与统计分析
产线数据要有追溯能力。每台电机应记录序列号、测试时间、测试工位、操作员、测试参数、特征值、判定结果、原始数据文件路径。客户端发生批量投诉时,能快速回溯同一批电机,判断是装配批次问题还是测量系统异常。
SPC 统计过程控制也值得引入。把每个班次的关键特征值画控制图,观察均值是否漂移、标准差是否变大。特征值缓慢上升往往预示夹具松动、物料变化或设备老化,这些在单台阈值判定时看不出来。
6. 常见问题排查
6.1 PWM 干扰导致转速计数异常
现象:转速读数跳变,有时为 0,有时突然翻倍。
原因:PWM 切换瞬间电流突变,在电机电源线上产生很强的电磁干扰。霍尔传感器信号线如果与电源线平行走线,干扰会耦合到霍尔输出,造成误触发或漏触发。
检查方式:用示波器查看霍尔输出引脚,重点观察 PWM 开关切换瞬间是否有毛刺。把霍尔信号线单独走线或加双绞屏蔽,靠近控制器端加 RC 滤波,能有效减少误触发。
处理建议:霍尔信号线上加 10kΩ 上拉到 3.3V 或 5V,信号端与地之间并 100nF 电容滤除高频毛刺。
6.2 背景噪声导致误判
现象:同一台电机白班和夜班测试结果差别很大,白班经常误报噪声超限。
原因:白班车间设备多、背景噪声大,隔音箱门密封变差或麦克风位置偏移时,背景噪声混入测量。
检查方式:在不启动电机的情况下采集 3 秒背景噪声,看总声压级是否超过设定基线。对比隔音箱关门前后的噪声差距,检查密封条是否老化。
处理建议:每天班前做背景噪声验证,超过阈值则暂停测试或重新标定。麦克风位置用定位夹具固定,避免人工摆放改变测量距离。
6.3 阈值设置不合理导致误杀或漏杀
现象:合格电机频繁判定 FAIL,或者已知缺陷电机偶尔判定 PASS。
原因:阈值依据的样本量太小,或样本不是同一批次物料。电机换向器、轴承供应商变更后,产品特征分布平移,旧阈值失效。
检查方式:用最近一周的数据画直方图,看合格样本分布是否偏移,对比阈值线与分布位置。
处理建议:建立阈值校准流程,物料变更、工艺变更后重新取样标定。用统计控制图监控特征值漂移。
6.4 振动传感器安装方式影响数据
现象:传感器在同一个位置,两次测量差异很大,或者测试台夹具振动传递不一致。
原因:加速度计安装面没有清理,安装力矩不统一,或者传感器安装在被测电机与夹具之间,结果测到的是夹具振动而不是电机振动。
检查方式:用同一台电机重复装夹 10 次,观察特征值变异系数,超过 10% 就要检查安装方式。
处理建议:传感器用螺纹安装或强力胶固定,安装面平整干净,每次安装力矩一致。
注意:产线排错要按顺序来,先确认传感器接线和安装,再确认采样参数,最后才怀疑算法和阈值。很多问题其实是传感器层面引起的,却被误判成软件问题。
7. 最佳实践与扩展方向
7.1 产线 NVH 检测的可复用清单
交付一个产线检测系统前,按以下清单逐项检查:
- 背景噪声是否满足测试要求?隔音箱插入损耗是否达到 20dB 以上?
- 转速、振动、声音三个通道是否同步采集?
- 转速换算系数是否校准?每转脉冲数是否正确?
- PWM 频率是否避开人耳敏感频段?电磁干扰是否已经处理?
- 声压级标定是否完成?麦克风灵敏度是否写入配置?
- 特征值阈值是否由合格样本统计得出?是否覆盖不同批次?
- 原始数据和判定结果是否可追溯?
- 是否有异常数据保护机制?超过量程的数据不应自动判定 PASS。
- 是否预留数据接口给 MES 或上层管理平台?
7.2 学习环境与生产环境的差异
学习环境可以把信号源、模拟传感器和软件分析全部放在一台电脑上,失败了大不了重跑一遍。生产环境要考虑连续运行、抗干扰、抗冲击、软件崩溃恢复、数据存储容量和网络断线续传。学习代码可以设 0.5 秒一个循环,产线软件必须考虑测试节拍,尽量把耗时操作并行化或预分配。
生产环境的判定结果不能只靠打印,要写到数据库并推送可视化看板。原始波形文件要定期归档,磁盘空间不足时要报警,而不是让系统悄然停止保存。任何一次数据丢失,都可能让客户端投诉时找不到追溯依据。
7.3 下一步可以扩展的方向
如果当前系统已经稳定运行,可以往三个方向扩展。
第一个方向是机器视觉辅助。结合电机外观、引脚位置、换向器磨损等视觉信息,把多维度检测统一到一个工位,减少工序流转时间。
第二个方向是机器学习。使用大量已标注的正常和缺陷样本训练分类模型,把阶次谱、倒频谱、小波包能量作为特征,替代或辅助人工阈值。模型可以做在线推理,但要注意样本分布变化和数据漂移,定期用新数据重新训练验证。
第三个方向是预测性维护。记录每台电机的特征值随时间变化,建立老化趋势模型,从合格与不合格升级为还能工作多长时间。这对批量化电机用户的售后支持和质量改进很有价值,也是把产线检测数据从单次判定变成产品寿命资产的关键一步。