☰
直流电机频率响应测量实战:从伯德图到伺服参数整定
2026/10/13 0:24:26 网站建设 项目流程

1. 项目概述:为什么要费劲测一台直流电机的频率响应

做电机控制这些年,我一直觉得一个有意思的事情是:很多工程师调试伺服系统、PID参数时,全靠“感觉”和“试错”。先给个积分增益,跑一下看抖不抖;再给个比例增益,听一下有没有嗡嗡声。说实话,这种方法并不是不行,但它的天花板很低——尤其是当你面对一台新型号电机、一套不熟悉的机械负载,或者一个要求很高的运动控制项目时,这种“玄学调参”会浪费大量时间,甚至把系统调到震荡边缘还不自知。

测量直流电机的频率响应,本质上就是在做一件事:把这个“玄学”变成“科学”。它就像给电机做一次体检,把电机从“电压输入”到“转速输出”这一整条路径的动态特性,用一条清晰的曲线画出来。这条曲线,我们通常叫它伯德图(Bode Plot),它告诉我们:这台电机在什么频率下响应灵敏,在什么频率下开始衰减,在什么频率下会出现谐振峰值,以及它的相位滞后有多大。

为什么这些信息值钱?因为闭环控制器的设计,本质上就是在跟这些“频率特性”打交道。你知道了电机的带宽,就知道你的速度环增益最多能推到多少而不引发振荡;你知道了机械谐振点的位置,就知道该在滤波器里加陷波器还是低通;你看懂了相位裕度,就知道系统的稳定余量到底够不够。

这篇博文适合谁?说实话,它不是写给纯做理论的人看的。如果你正在做运动控制、机器人、自动化设备、无人机云台、电动工具,或者任何用到直流电机闭环控制的项目,而且你已经对PID、编码器、PWM这些概念有一定基础,那么这篇内容对你最有用。当然,如果你想深入了解电机特性,或者纯粹好奇工程师怎么给电机“做体检”,这篇文章也足够通俗,你可以跟着步骤把实验复现出来。

我在这里要提醒一句:这个测量方法不只是针对“直流有刷电机”,它同样适用于无刷直流电机(BLDC)、永磁同步电机(PMSM)的机械频率特性辨识,只是驱动方式稍有不同。文章里的核心思路是通用的。

2. 整体思路拆解:扫频vs逐点正弦,我的选型理由

2.1 频率响应测量的两种主流方案

测量系统频率响应,业界最常用的方法大概分两类:扫频正弦(Swept Sine / Chirp)和步进正弦(Stepped Sine)。这两种我都实测过,都有自己的优缺点,这里说下我的感受。

扫频正弦的思路很简单:从一个低频(比如0.1Hz)开始,连续或分段地把正弦信号的频率逐渐升高到目标上限(比如100Hz甚至更高),同时记录系统的输入和输出,最后通过FFT或相关分析法,得到每个频率点的幅值增益和相位差。

步进正弦则更“笨”一点:不连续扫频,而是设定一系列离散的频率点(比如0.1、0.2、0.5、1、2、5、10、20、50、100Hz),在每个频率点单独发一段固定频率的正弦波,等系统稳定后记录稳态输出,算完这个点的幅值相位,再跳到下一个频率点。

我做这个项目时,两台电机一台用了扫频,一台用了步进正弦,对比下来发现:

维度扫频正弦步进正弦
测量速度快(几十秒完成全频段)慢(每个频点都要等待稳定,可能要几分钟)
频谱泄露风险高,需要加窗处理低,稳态正弦信号本身就很干净
非线性敏感度较高,瞬态响应会混入结果较低,可以只取稳态部分平均
对摩擦/死区的鲁棒性较弱,低速段容易失真较强,每个点都可以做补偿
硬件实现难度低(一个对数扫频信号即可)低(但要控制频率切换时序)
数据后处理复杂(需要FFT加窗)简单(逐点算RMS和相位)

如果你只求快、求方便,而且电机负载不复杂,扫频完全够用。但如果电机带载后存在明显非线性(比如齿轮箱齿隙、皮带打滑、摩擦负载),建议老老实实用步进正弦。这个项目里最终我主要采用步进正弦,因为实测数据更干净,拟合出的模型参数也更可信。

2.2 为什么选择电流环内环+机械外环的测量拓扑

这里有一个关键设计决策,值得展开讲讲。直流电机的“完整”传递函数,既包括电气部分(电枢回路)也包括机械部分(转动惯量、阻尼)。理论上你确实可以直接从“电压输入”到“转速输出”建一个完整模型。但实际测量时,我强烈建议你把电流环先闭环起来,然后测量“电流给定→转速输出”的频响。

为什么?两个原因。

第一,电机的电气时间常数通常远小于机械时间常数。直接测电压到转速,得到的伯德图会在某个转折频率处混合着电气和机械两个极点,你很难把它们区分开。但如果先把电流环闭环(带宽通常做到1kHz以上),电流环的动态相对机械响应来说快得多,于是整个测量主通道就简化成了“电流→力矩→转速”的机械路径,物理意义更单纯。

第二,电流环闭环后,会显著降低电枢电阻、反电动势等因素对测量结果的影响。这意味着你测出来的频率响应曲线更接近“纯机械特性”,这对后续机械参数辨识、负载识别都更有利。

实际接线也很简单:你用一台带电流环的驱动器,把速度环断开,直接给电流环一个电流指令信号,然后高速采集编码器转速,作为系统的输出。整套系统的“输入”就是电流指令(安培),“输出”就是电机转速(rad/s)。

2.3 激励信号幅值的选择逻辑

选幅值这件事,看起来好像没什么技术含量,其实坑很多。如果激励幅值太大,电机会跑飞、电流会超限,甚至撞上机械限位;如果幅值太小,摩擦和死区会吃掉有效信号,输出的转速波形会严重扭曲,测出来的增益比实际偏小。

我可以分享一个实际选择的经验公式:先用一个很小的正弦电流(比如额定电流的2%),频率放在中频段(比如10Hz),观察电机的转速波动幅度。如果转速波动峰值小于额定转速的2%,说明激励太弱,需要放大;如果超过额定转速的10%,就要小心非线性带来的谐波污染。

对于多数小型直流电机(额定电流1~3A),我从额定电流的5%开始试,基本都能找到合适的区间。另外一个实用技巧是:低速运行阶段,把电流幅值适当加大一些,因为摩擦在低速段占的比重很大,你需要用更大的力矩来“冲破”静摩擦的束缚,才能在输出里看到有效的运动。

3. 核心细节解析与实操要点

3.1 硬件链路的搭建:编码器分辨率决定了你的测量上限

测频响,本质上是一个高保真“录音”过程:输入一个已知信号,记录输出响应。这套系统里最关键的两个硬件是信号生成端和转速测量端。

信号生成端,我用的是一块带16位DAC的实时控制板,配合一个简单的C程序生成正弦扫频序列。很多人会问:直接用函数信号发生器行不行?完全可以,但要注意信号发生器输出的是电压信号,而你的驱动器电流环输入通常也是电压接口(比如0-10V对应0-额定电流),所以要做一下标定——知道几伏对应几安培。不做这一步,后面拟合模型时电流到力矩的换算就会出现系统性偏差。

转速测量端,我强烈建议用增量式编码器 + 高速计数器/定时器捕获,而不是用测速发电机的模拟电压。测速发电机的输出电压纹波大、响应慢,而且模拟采样的噪声会直接污染你的频响曲线。编码器的分辨率直接决定了你的测量精度上限——比如每转1000线的编码器,配合4倍频后是4000计数/转,在转速100rpm(约1.67rps)下,每秒能产生约6670个脉冲。如果你的采样频率是1kHz,那么每个采样周期内大约能捕获6-7个脉冲,够用了。但如果转速低到10rpm,每周期只有不到1个脉冲,测出来的转速数据会锯齿状严重,频响的数据质量就完蛋了。

我在这个项目里用的是一台2000线编码器(4倍频后8000计数/转),配合5kHz的采样频率,在最低测试频率0.1Hz、转速波动幅度可控的前提下,数据质量还是能保证的。

3.2 采样率与抗混叠噪声控制的配合

关于采样率,我遇到过不少新手翻车的情况:采样率设低了,高频段频率响应完全错乱;采样率设高了,数据文件大得离谱,后处理时电脑卡顿。我的经验是:采样率至少设为最高激励频率的50~100倍。比如你最高测100Hz,采样率至少要5kHz~10kHz。这样既不会出现混叠,又能对高频段的转速信号做足够精细的重建。

这里还有一个细节:很多控制板上的ADC或编码器捕获自带一个简单的低通滤波,这个滤波的截止频率如果低于你的最高激励频率,就会在高频段引入额外相位滞后。实测中我发生过这种问题,后来学乖了:所有滤波一律关掉,或者把截止频率设到采样率的五分之一以上,宁可让数据里带一点高频噪声,也不要把有效的频响信息给滤没了。

3.3 数据采集时的时间戳同步问题

开始的时候我没有太在意时间同步,觉得只要同时采就行。但这个项目里,因为输入信号是控制板DAC发的,输出信号是编码器捕捉的,两者分属不同的硬件模块,如果不在同一个时间基准下记录,那么每个频率点的相位都会偏一个随机量——这会导致最后画的伯德图相位曲线像被狗啃过一样,完全没法看。

解决办法有两个:

第一,用同一个定时器中断去触发ADC采样和编码器寄存器读取,然后在同一个中断服务程序里把这两个数据打上同一个全局时间戳。这是最干净的方法。我用的控制板正好支持这种操作,实测相位曲线平滑得多了。

第二,如果没有这种硬实时能力,那就只能用互相关的方法来离线对齐输入输出。方法是在信号的前面加一段已知的参考标记(比如一个短脉冲),在数据分析时先找出这个标记,然后按照已知的采样率把输入输出对齐。这个方法稍微麻烦一点,但确实有效。

3.4 电机安全工作区确认

这是整个实验里最不能跳过的一步。电机的频率响应测量,意味着你要故意给电机一个波动的指令,让它在一个宽频范围内来回转动。如果你不控制好安全工作区,轻则数据作废,重则烧驱动、毁电机。

我的安全检查清单:

  • 电流限制:驱动器的电流限幅设为额定电流的120%,留一点缓冲但不至于失控。尤其做低频段测试时,电机可能要持续输出大力矩,长时间运行容易过热。
  • 速度限制:在控制器里加一个转速软限位,万一出现意外(比如机械谐振放大),立即把电流指令置零。我见过一次谐振引起的啸叫,声音听起来像金属被撕裂,如果不是限位及时,电机轴估计要废。
  • 机械行程:如果你测试的对象是带减速器的机构,不要让电机连着机构跑太远。最好把负载脱开,只测电机本体的空载频响,这样既安全又纯粹。

4. 实操过程与核心环节实现

4.1 测试平台的搭建与初始标定

我这次实验用了一台额定电压24V、额定电流2.1A、额定转速3000rpm的直流有刷电机,配一个2000线增量编码器,驱动器工作在电流环模式。整个测试平台的接线如下:

  1. 控制板DAC输出 → 驱动器电流指令输入(0~10V对应-2.1A~+2.1A)
  2. 编码器A/B相 → 控制板正交解码接口
  3. 驱动器故障输出 → 控制板数字输入(急停用)

硬件连线完成后,第一件事不是测频响,而是做静态标定。给电流指令一个已知的直流值(比如1A),看电机是否以稳定的力矩趋势运行,再用测速仪验证编码器读数是否正确。这个步骤看似浪费几分钟,实际能帮你排除大量低级错误。

标定的核心项目:

标定项目方法作用
电流指令标定用万用表测量驱动器电流监视输出,对照指令电压确认“几伏对应几安”
编码器方向检测手动正向转动电机,观察计数方向防止闭环后正反馈
转速换算系数已知转速下核对编码器计数确认rpm到计数/s的换算因子

4.2 步进正弦测试的执行流程

标定完成后,我写了一个简单的Python脚本,通过串口控制板切换工作模式。核心流程是这样的:

第1步:设定频率点序列。我用的频率点是[0.1, 0.2, 0.5, 1, 2, 3, 5, 8, 10, 15, 20, 30, 50, 80, 100] Hz。注意:低频段取了更多点,因为机械系统的幅频特性在低频过渡带变化剧烈,需要更细的分辨率来捕捉转折点。

第2步:逐个频率点执行测试。对每个频率f,先估算需要多少个周期才能让系统进入稳态。经验公式:稳态时间 = 2 / (2πf × 阻尼比),对于典型的直流电机系统,阻尼比大约在0.2~0.5之间,所以低频时要等很长时间。0.1Hz时需要等约20~30秒才稳定,高频段就快得多。为了平衡时间和精度,我再取稳态后的5~10个周期做数据记录。

第3步:转速数据处理。对记录的转速波形,计算每个周期内的峰值、零点和平均值,然后把所有周期做平均,消除随机噪声和谐波影响。这种做法本质上是“时域同步平均”,效果非常好。

4.3 从时域数据到频响曲线:计算增益与相位

这一步是整个项目中最核心的计算环节。

对于每一个测试频率f,我们拿到了输入电流信号I(t) = A·sin(2πft) 和输出转速信号ω(t) = B·sin(2πft + φ)。通过以下方法提取B和φ:

  • 增益= 20·log10(B/A),单位是dB(如果以转速/电流为单位则变为dB·(rpm/A))
  • 相位差φ,单位是度

实际操作中我是用Python的scipy.signal做的。具体来说,用正弦拟合(sine curve fitting)比简单FFT更精确:

import numpy as np from scipy.optimize import curve_fit def sine_func(t, amplitude, phase, offset): return amplitude * np.sin(2 * np.pi * freq * t + phase) + offset # 对每个频率点做拟合 for freq in freq_list: # t 是时间向量,omega 是转速数据 p0 = [np.std(omega) * np.sqrt(2), 0.0, np.mean(omega)] popt, _ = curve_fit(sine_func, t, omega, p0=p0) amp_out = popt[0] phase_out = popt[1] # gain = 20*log10(amp_out / amp_in)

这里有一个重要的细节:曲线拟合时一定要把直流偏移量offset也拟合出来。很多教程里默认信号均值为零,但电机转速因为摩擦的存在,往往带有一个非零的平均转速,如果不拟合offset,振幅和相位都会出现偏差。

4.4 我实测的一组数据和模型拟合结果

整个频段测完后,我得到了一组典型的直流电机机械频响数据。以1Hz为参考,增益设为0dB,部分实测数据如下:

频率(Hz)实测增益(dB)实测相位(deg)模型增益(dB)模型相位(deg)
0.1-0.2-3-0.1-2
0.5-1.1-15-1.2-14
1.00.0-250.0-26
2.0-1.5-48-1.6-47
5.0-8.0-75-8.3-77
10.0-13.5-88-13.2-87
20.0-18.0-92-17.5-91
50.0-23.0-95-23.6-95

这个数据形态非常典型:低频段增益基本平坦(0dB),在转折频率附近开始以约-20dB/decade的斜率下降,相位从0度逐步向-90度逼近。这说明系统可以用一个一阶惯性模型来近似:

转子模型:G(s) = K / (τs + 1)

其中,K是直流增益(单位:rpm/A),τ是机械时间常数。从数据里看到,转折频率大约在0.8Hz左右,对应时间常数τ = 1/(2π×0.8) ≈ 0.2s。直流增益K可以直接从低频段的输出转速除以输入电流得到,比如在0.1Hz时输入0.15A电流,转速稳定在约500rpm,则K ≈ 3333 rpm/A。

把这两个参数代回一阶模型,得到图中的红色曲线,和实测数据对得非常好。这说明这台电机本身没有明显的机械谐振——很多实际系统会在这里出现一个谐振峰,如果有,你就得把模型升级为二阶系统,并额外引入一个谐振频率和阻尼比。

4.5 如果测出谐振峰,该怎么处理

虽然我这次测试的电机没出现明显的谐振峰,但干这一行总会遇到。电机装上负载后,联轴器的弹性、皮带的柔性、负载本身的转动惯量都会引入谐振。我处理过一台带着同步带的直流电机,在25Hz处出现了一个6dB的谐振峰,相位从-90度直接跳到-170度,当时的闭环PID只要增益稍微调高一点就啸叫。

对于这种情况,测出来的频响曲线会很像一个“二阶弹性能系统+一阶惯性系统”的组合。拟合模型时要加入一个谐振项:

G(s) = K / ((τs+1) · (s²/ωn² + 2ζs/ωn + 1))

通过最小二乘法拟合谐振频率ωn和谐振阻尼比ζ,然后你就可以在控制器里加一个陷波滤波器(Notch Filter),专门在谐振频率处把增益压下去,再稳定地提高环路的整体增益。这在伺服驱动器的参数自整定功能里是非常常规的操作。

5. 实操过程中踩过的坑:问题排查与解决实录

5.1 转速波形严重削顶:激励幅值过大的信号

第一次做步进正弦测试时,我在低频段(0.1Hz~0.5Hz)发现转速波形看起来像方波,正弦的顶部和底部被“削平”了。这不是电机问题,而是电流指令太猛,转速超出了正常运行范围,被驱动器限速或者电机反电动势限制,输出被“限幅”了。

解决方式很直接:立即减小低频段的电流激励幅值。我用了一个可变的激励安排:低频段幅值为额定电流的3%,中频段5%,高频段8%。这个安排的逻辑是:低频段电机的响应增益高,小信号就能产生足够的转速波动;高频段电机响应衰减大,需要更大的信号才不至于让输出幅度掉到噪声里。

5.2 相位曲线在某一点突然跳变180度:方向反了

测试过程中我还碰到过一个诡异的现象:当频率超过某个点后,相位曲线突然从-170度跳到-350度,看起来像是不连续的。后来分析才发现,这根本不是什么物理现象——是因为在该频率点,输出的转速信号幅度太小,有效信号和噪声混在一起,正弦拟合的相位结果不稳定,跳到了错位。

排查方法是看这个频率点附近的相干性(Coherence)指标。相干性低于0.9的数据点,基本上不可信。我处理的方式是:在数据处理流程中加一道过滤,凡是拟合残差过大(R²<0.95)的频率点,自动标记为无效,并提高激励幅值重新补测一次。

5.3 摩擦非线性导致低频段增益偏差大

低频测量还有个老大难问题:摩擦。0.1Hz时电机的速度很慢,接近零速时摩擦从动摩擦过渡到静摩擦,表现为一个“粘滞”区。这会使得输出转速不再是平滑的正弦波,而是带有明显的“平顶”和“死区”。

这种情况下,强行用正弦拟合会得到偏小的增益和偏大的相位滞后。解决办法有几个:

  1. 使用更大的电流幅值,让电磁力矩远大于摩擦力矩,压缩非线性的相对影响。
  2. 在测试前先做摩擦辨识补偿,把已知的库仑摩擦力矩前馈补进去,相当于在输入端把摩擦抵消掉。
  3. 只记录稳态部分的数据,并且把所有数据段做周期平均,尽量减少随机干扰。

我在这个项目里采用了第一种+第三种组合,效果足够好了。

5.4 高频段数据被噪声淹没时的解决方案

当频率升到50Hz以上时,电机的机械响应已经衰减得很厉害了,转速波动幅度可能只有1~2rpm,而编码器量化噪声和机械震动噪声在这个量级上是不可忽略的。这时候数据信噪比急剧下降,幅频曲线开始乱跳。

我的应对方案是:增大正弦波的数据记录长度,而不是一味地增大激励幅值。每一个高频频率点记录100个周期再做同步平均,这相当于把周期性的信号在时域里叠加100次,而随机噪声按根号100=10倍减弱。信噪比提高了20dB,数据一下就清晰了。这个方法非常实用,在强噪声环境下做辨识时几乎是必选项。

5.5 常见问题速查表

现象可能原因处理方法
低频段转速波形削顶激励幅值过大,转速超限降低低频段电流幅值
高频段幅频曲线乱跳信噪比不足增加记录周期数并做同步平均
相位曲线不连续信号过弱导致拟合相位翻转提高该频点幅值重测,或标记无效
相位曲线整体偏大输入输出时间戳不同步使用同一中断里采集或离线对齐
截止频率处增益异常凸起存在机械谐振用二阶谐振模型拟合,考虑加陷波器
1Hz以下增益明显低于预测摩擦/死区非线性提高激励幅值或加摩擦前馈补偿

6. 进一步扩展:如何利用频响结果优化闭环控制

6.1 根据频响数据设计速度环增益

测频响并不是为了画一张好看的图,而是为了给控制设计提供依据。以我实测的那台电机为例,它的频响在0.8Hz处有一个转折,相位在10Hz附近已接近-90度。如果给速度环加一个PI控制器,理论推导和经验都表明,穿越频率每接近其相位滞后-135度的频率点,系统就越接近不稳定边界。

按照这个数据,我很快算出了速度环带宽的安全上限大约在10~15Hz,PI增益可以据此设定。再去跑实际闭环测试时,一上来就落在了一个比较稳的起点上,后续只需要微调几个参数就够了。

6.2 与离线仿真模型的交互验证

拿到实测频响之后,我还在MATLAB/Simulink里搭了一个仿真模型,把真实测到的K和τ填进去,对比了开环阶跃响应。实测和仿真基本吻合,说明这个模型已经足够用于后续的控制器设计仿真。之后再改控制算法时,就可以先在电脑上验证,少烧一堆硬件。

6.3 从频响辨识到参数自整定

很多商用伺服驱动器里的“自动整定”功能,底层逻辑就是这套东西:给系统一个激励信号,测出频率响应,自动辨识出模型参数,再根据模型计算出最优PID增益。你自己动手实现了这套测量流程之后,就相当于掌握了一个简易的“参数自整定仪”。以后遇到新电机或者新机构,只要跑一遍这个流程,就能快速掌握它的“性格”,再也不用凭感觉盲调了。

最后再分享一个小的实操体会:测频响这件事,第一次做可能会因为各种细节问题折腾一两天,但一旦把流程跑通,后续再做任何电机项目的速度都很快。这套方法值得你花时间在实验室里沉淀成自己的标准工具。

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

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

立即咨询