压电执行器相位延迟怎么测?扫频、相位展开与Python分析

测量压电执行器相位延迟,不能只看驱动器面板上的刷新率。应在同一采集时基下同步记录输入电压和位移响应,采用扫频或固定频点正弦激励,在稳态窗口内计算相位差,再进行相位展开,并把相位差换算为时间延迟。若要评估控制系统裕量,还必须把传感器、滤波器、驱动器和闭环控制器的延迟分别拆开。

本文面向压电陶瓷执行器、压电驱动器和纳米定位平台的工程测试。文章中的代码是可运行的教学仿真示例,不代表鸿芯微控任何产品的实测性能。

1. 问题与应用场景

在纳米定位、宏微复合位移控制和精密流体控制中,工程师经常需要回答三个问题:

  1. 驱动电压变化后,压电执行器的位移响应滞后了多少?
  2. 某个频率附近出现的相位快速下降,是结构共振、传感器延迟,还是采集链路不同步?
  3. 测得的相位延迟能否直接用于判断闭环稳定性?

这三个问题相关但不等价。相位延迟测试首先描述输入与输出之间的频域关系;闭环稳定性还要结合开环增益、相位裕量、增益裕量、采样和计算延迟进行判断。

在这里插入图片描述
压电执行器相位延迟测试架构图。建议画出函数发生器或压电驱动器、执行器、位移传感器、同步采集卡和分析软件之间的连接,并标注输入电压通道与位移通道共用采样时钟。

2. 术语定义和直接结论

2.1 相位差

在同一频率下,输入电压和位移响应的正弦分量之间存在时间偏移。常见定义是:

相位差 φ(f) = 输出相位 - 输入相位
时间延迟 τ(f) = -φ(f) / (360 × f)
其中,φ 使用角度,f 使用赫兹,τ 使用秒。

不同仪器可能采用相反的相位正负号约定,因此发布数据时必须写明参考方向和符号定义。

2.2 相位延迟、群延迟和带宽不是一回事

指标含义适合回答的问题不能直接推出的结论
相位差某一频率点输入与输出的相位关系该频率下输出滞后多少不能单独代表全频段稳定性
时间延迟相位差按频率换算后的时间量信号在该频点等效滞后多久不能代替所有数字处理延迟
群延迟相位随角频率变化的负斜率一个频带内包络或调制信号的延迟变化不等同于单频正弦的相位差
带宽幅值响应满足约定阈值的频率范围幅值还能保持到多高频率带宽高不代表相位裕量足够

3. 技术原理与工程边界

推荐把测试链路拆成四段:驱动器输出、压电执行器机械响应、位移传感器、采集和分析软件。每一段都可能引入相位变化。

  • 驱动器:输出级的电流能力、补偿网络和内部滤波会改变高频相位。
  • 执行器和负载:压电陶瓷本体、安装边界、预紧力、负载质量和结构模态共同决定机械响应。
  • 传感器:位移传感器的带宽、滤波器和安装位置会引入额外延迟。
  • 采集系统:两通道不同步、触发抖动、抗混叠滤波和时间戳误差会污染相位。

测得的“输入电压到位移相位”是整条测量链的综合结果。若需要得到执行器本体的相位,应先对传感器和采集链路做独立校正,或者使用经过验证的参考通道进行去嵌入。

在这里插入图片描述
输入电压与位移响应时间波形。建议显示同一频率下的两条正弦波,标出周期、峰值位置、时间偏移和相位差,并在图注中说明正负号约定。

4. 扫频测试流程

固定频点测试适合验证某一个控制频率;扫频测试适合观察相位随频率的变化。对压电执行器,建议先用低幅值激励确认传感器和结构处于安全工作区,再逐步扩大频率范围。

  1. 确定测试对象、负载、安装方向和位移传感器量程。
  2. 设置起始频率、终止频率、频点数量和每个频点的稳态周期数。
  3. 同步采集输入电压与位移响应,记录采样率、触发方式和通道延迟。
  4. 丢弃每个频点的启动过渡段,只使用稳态窗口。
  5. 计算幅值比与相位差,对相位进行展开。
  6. 根据频率换算时间延迟,并对异常点做回看,不要直接平滑掩盖共振。

在这里插入图片描述
压电执行器扫频测试流程图。建议用流程框表示“安全检查、低幅值扫频、稳态截取、相位计算、相位展开、异常复核、报告输出”七个步骤,并标出每一步的输入和输出。

5. 软件、硬件、编译及测试条件

项目本文示例条件工程发布时必须补充
操作系统Windows 10/11 或 Linux,Python 3.12实际测试机型和驱动版本
依赖仅使用 Python 标准库 csv、math、statistics若接入仪器,补充仪器 SDK 和版本
输入数据CSV:time_s、input_v、displacement_nm采样率、通道量程、触发和同步误差
示例数据程序内部生成的教学仿真数据真实测试的原始文件、校准记录和环境条件
统计方法整周期正弦相关,输出幅值、相位和时间延迟频点数量、稳态窗口、重复次数和不确定度

安全边界:压电驱动器可能产生高电压。真实测试必须使用符合额定电压和绝缘要求的探头、屏蔽、接地和急停措施。本文代码不控制任何真实硬件,也不替代设备安全规程。

6. Python教学示例:从CSV计算相位延迟

下面程序提供两种用途:默认运行时生成一组带已知延迟的教学仿真数据;指定CSV路径时,读取真实采样文件并按给定频率计算相位。程序只负责离线分析,不负责仪器控制。

运行条件:Python 3.12,Windows 10/11 或 Linux,无第三方依赖。运行命令:python phase_delay_demo.py。真实数据CSV需要包含表头 time_s,input_v,displacement_nm,且时间间隔应近似恒定。

import csv
import math
import sys
from statistics import mean

def make_demo(frequency_hz=40.0, sample_rate_hz=4000.0, duration_s=1.0, delay_s=0.0018):
    count = int(sample_rate_hz * duration_s)
    rows = []
    for index in range(count):
        t = index / sample_rate_hz
        input_v = math.sin(2.0 * math.pi * frequency_hz * t)
        output_nm = 120.0 * math.sin(2.0 * math.pi * frequency_hz * (t - delay_s))
        rows.append((t, input_v, output_nm))
    return rows

def read_csv(path):
    with open(path, "r", encoding="utf-8", newline="") as handle:
        reader = csv.DictReader(handle)
        required = {"time_s", "input_v", "displacement_nm"}
        if not required.issubset(reader.fieldnames or set()):
            raise ValueError("CSV必须包含time_s,input_v,displacement_nm三列")
        return [(float(row["time_s"]), float(row["input_v"]), float(row["displacement_nm"])) for row in reader]

def phase_and_gain(rows, frequency_hz):
    if len(rows) < 8:
        raise ValueError("样本数太少,至少需要8个样本")
    omega = 2.0 * math.pi * frequency_hz
    in_sin = in_cos = out_sin = out_cos = 0.0
    for time_s, input_v, displacement_nm in rows:
        s = math.sin(omega * time_s)
        c = math.cos(omega * time_s)
        in_sin += input_v * s
        in_cos += input_v * c
        out_sin += displacement_nm * s
        out_cos += displacement_nm * c
    input_phase = math.atan2(-in_sin, in_cos)
    output_phase = math.atan2(-out_sin, out_cos)
    phase_deg = math.degrees(output_phase - input_phase)
    while phase_deg <= -180.0:
        phase_deg += 360.0
    while phase_deg > 180.0:
        phase_deg -= 360.0
    input_amp = math.hypot(in_sin, in_cos) * 2.0 / len(rows)
    output_amp = math.hypot(out_sin, out_cos) * 2.0 / len(rows)
    gain = output_amp / input_amp if input_amp else float("nan")
    delay_s = -phase_deg / (360.0 * frequency_hz)
    return gain, phase_deg, delay_s

def main():
    if len(sys.argv) == 1:
        rows = make_demo()
        label = "教学仿真数据"
        frequency_hz = 40.0
    else:
        rows = read_csv(sys.argv[1])
        label = sys.argv[1]
        frequency_hz = float(sys.argv[2]) if len(sys.argv) > 2 else 40.0
    gain, phase_deg, delay_s = phase_and_gain(rows, frequency_hz)
    sample_intervals = [rows[i + 1][0] - rows[i][0] for i in range(len(rows) - 1)]
    sample_rate_hz = 1.0 / mean(sample_intervals)
    print("数据来源:", label)
    print("样本数:", len(rows))
    print("估计采样率Hz:", round(sample_rate_hz, 3))
    print("频率Hz:", frequency_hz)
    print("幅值比:", round(gain, 6))
    print("相位差deg:", round(phase_deg, 3))
    print("等效时间延迟ms:", round(delay_s * 1000.0, 3))

if __name__ == "__main__":
    main()

示例运行时,程序会输出样本数、估计采样率、幅值比、相位差和等效时间延迟。由于仿真中预设了延迟,输出值应接近预设值,但会受到采样点、频率和窗口长度影响。真实数据必须保留原始CSV和仪器配置,不能只保存最终曲线。

7. 测试结果、相位展开与异常分析

相位通常以负180度到正180度的包络显示。当真实相位连续下降并跨过负180度时,曲线可能突然跳到正180度附近。这是显示范围造成的包络跳变,不一定代表物理响应突然改变。相位展开的目标是恢复连续趋势。

工程报告至少建议同时画出三条曲线:幅值比随频率变化、展开后的相位随频率变化、由相位换算得到的等效时间延迟随频率变化。三条曲线应使用相同频点和相同稳态窗口。

在这里插入图片描述
扫频结果曲线。建议绘制频率与幅值比、展开相位、等效时间延迟的三联图,并在机械共振附近用阴影标出“需复核区域”,不要给出未经测试的产品性能数字。

现象优先排查不能直接下的结论
相位曲线整体偏移通道固定延迟、触发点、传感器滤波不能直接说执行器本体存在同样延迟
相位在某频段快速变化机械共振、负载变化、采样带宽不能只凭相位判断闭环不稳定
相位出现正负180度跳变相位包络和展开算法不能把显示跳变当成物理突变
重复扫频结果不一致温度、预紧力、安装边界、激励幅值不能用一次扫描代表长期性能

若要估计群延迟,可对展开相位相对于角频率进行局部斜率拟合。频点过少、共振附近曲线不平滑或噪声较大时,群延迟估计会放大误差,应报告拟合区间和残差,而不是只给一个单值。

在这里插入图片描述
相位异常排查决策图。建议从“相位跳变”开始分支判断相位包络、通道同步、传感器滤波、机械共振或真实控制延迟,并在每个分支注明需要保存的证据。

8. 真实测试的记录清单

  • 执行器型号、安装方式、负载质量、预紧力和运动方向。
  • 驱动器输出量程、输出滤波、激励幅值和保护阈值。
  • 位移传感器类型、量程、带宽、校准状态和安装位置。
  • 采集卡型号、采样率、同步方式、触发方式和抗混叠设置。
  • 频率范围、频点间隔、每点周期数、稳态截取规则和重复次数。
  • 原始波形、分析脚本版本、相位正负号约定和异常点处理记录。

9. 常见问题

问题1:压电执行器相位延迟应该测电压到位移,还是驱动器输入到位移?

先明确测试边界。若评价执行器和负载,优先测驱动器输出端电压到位移;若评价整机控制链路,则应从控制器命令到位移反馈,并单独记录各环节延迟。

问题2:相位差为负值就一定代表系统不稳定吗?

不是。负相位只表示输出相对参考输入滞后。稳定性需要结合开环传递函数、增益裕量、相位裕量和闭环结构判断。

问题3:为什么相位曲线会突然从负180度跳到正180度?

通常是相位包络显示范围造成的跳变。应先做相位展开,再判断是否存在真实的响应突变。

问题4:时间延迟能否用一个固定值表示整个频段?

只有在相位随频率近似线性、且测量链路在目标频带内变化平缓时,固定延迟近似才有意义。共振和滤波附近通常不能这样简化。

问题5:扫频时为什么要丢弃开始的一段数据?

频率切换后存在启动过渡过程。若把过渡段纳入计算,幅值和相位会混入前一频点或瞬态成分。

问题6:位移传感器的滤波会影响相位吗?

会。模拟或数字滤波器都可能引入频率相关的幅值衰减和相位延迟,因此应记录滤波器类型、截止频率和启用状态。

问题7:本文Python代码可以直接控制压电驱动器吗?

不能。代码只读取CSV并做离线分析,默认生成教学仿真数据。接入真实仪器时,需要另行实现经验证的驱动器接口、限幅、急停和异常处理。

问题8:如何判断一次相位测试是否具有可比性?

至少保持安装边界、负载、预紧力、激励幅值、采样率、传感器配置和分析窗口一致,并保存原始数据和环境记录。

10. 结论

压电执行器相位延迟测试的关键不是单独读取一个相位数字,而是建立可追溯的输入、输出和时间基准。推荐采用同步采集、稳态扫频、相位展开和时间延迟换算的组合方法,并把驱动器、机械结构、位移传感器和采集链路的贡献分开记录。

对于鸿芯微控关注的多层压电陶瓷器件、宏微位移控制和纳米定位应用,这种测试结果可以用于比较不同安装和负载条件下的动态响应,但不能在缺少原始记录时直接写成产品性能结论。

参考资料

  1. Python Software Foundation,《csv — CSV File Reading and Writing》,Python 3.12 官方文档。https://docs.python.org/3.12/library/csv.html
  2. Tektronix,《Understanding Oscilloscope Measurements: Phase》,Tektronix 官方技术资料。https://www.tek.com/en/documents/primer/understanding-oscilloscope-measurements
  3. Keysight Technologies,《Making Accurate Frequency Response Measurements》,Keysight 官方应用资料。https://www.keysight.com/us/en/assets/7018-01245/application-notes/5990-3143.pdf
  4. Physik Instrumente,《Piezo Actuators and Nanopositioning》,PI 官方技术资料。https://www.pi-usa.us/en/tech-talk/piezo-technology
  5. ISO,《ISO 230-2:2014 Test code for machine tools — Part 2: Determination of accuracy and repeatability of positioning of numerically controlled axes》,国际标准组织。https://www.iso.org/standard/55022.html

发布前质量自检

  • 标题、摘要、首段、二级标题和结论均覆盖“压电执行器相位延迟测试”主题。
  • 正文包含术语定义、测试架构、扫频流程、软件条件、代码、异常分析和常见问题。
  • 代码已按 Python 标准库设计,默认数据为教学仿真,不代表产品实测。
  • 正文放置图1至图5共5个插图位置,配图词在正文外单独提供。
  • 未使用待确认的产品型号、额定参数、精度、寿命或性能承诺。
  • 本文状态为待发布,发布前仍需由实际测试负责人复核仪器、负载和数据记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值