资讯动态

基于TMS320F035的超声波焊接电源自动追频实现

发布时间:2026/10/20 17:04:34 来源:尧图企业网站定制
去年我在实验室接手一台超声波焊接电源的控制板改造任务第一次通电试焊就碰了个硬钉子换能器空载启动一切正常可一压上塑胶件焊机立刻开始嘶叫功率表断崖式下跌焊出来的样品强度一拉就裂。拆开检查发现振子没问题问题出在驱动频率上——换能器的谐振频率早就偏离了出厂设定值。这个经历让我老老实实把自动追频这一课补了个完整也让我从零走通了基于TMS320F035这颗DSP控制器的整套实现路线。这篇文章就是这段学习之旅的完整复盘从谐振漂移的底层逻辑讲到扫频搜索、锁相跟踪、参数整定再到实际调试中踩过的几个大坑适合正在做超声波焊接电源、逆变焊机或者数字电源控制的工程师参考。很早以前我以为焊接电源只要把频率设定在换能器标称谐振点上就能一直稳定工作实际操作才发现完全不是这么回事。谐振频率是一个会移动的靶子追着它打才是焊接电源的核心工作。1. 为什么焊接电源必须追频换能器谐振漂移的底层逻辑1.1 换能器是一个高Q值谐振系统频率就是命根超声波焊接电源驱动的是压电换能器整个振子由压电陶瓷片、变幅杆和焊头组成。从电路角度看它的等效模型可以简化成一条静态电容C0并联一条动态串联支路动态支路由等效电感Lm、等效电容Cm和等效电阻Rm构成。动态支路的串联谐振频率fs由Lm和Cm共同决定fs 1 / (2π * √(Lm * Cm))在fs这个频率点上动态支路呈纯阻性阻抗最低电流最大换能器实现电能到机械振动的最高效率转换。而偏离fs之后阻抗迅速增大同样的驱动电压下电流断崖式下跌能量大部分变成换能器自身发热和噪声焊头振幅衰减焊接强度自然就崩了。这个现象用荡秋千类比特别好理解只有外力节拍跟秋千的固有频率一致每次推都能增加振幅推的时机不对秋千就一直在乱晃。超声波焊接电源就是那个负责推秋千的人它必须时刻把推的节拍对准振子当前的固有频率。可问题在于振子的固有频率从来不是一个恒定值。1.2 四种常见的谐振漂移来源我整理了一下实际测试中遇到的漂移情况主要有四类来源。温度漂移是影响最大也最普遍的因素。压电陶瓷在连续工作后温度可以升高几十度材料的压电常数、弹性刚度系数都会随温度变化大多数压电材料的谐振频率表现为负温漂特性即温度升高频率下降。我实测过一套标称20kHz的焊机冷启动时谐振频率是19.96kHz连续工作20分钟后下降到19.83kHz漂移量达到130Hz。别小看这130Hz这类换能器的半功率带宽往往只有±50Hz左右漂移130Hz意味着输出功率已经跌落到半功率以下焊接质量根本不可能保证。漂移来源典型量级主要影响阶段温升引起压电常数变化几十到几百Hz连续焊接5分钟以后负载阻抗变化焊件材质、接触面几十Hz到百Hz以上从空载切换到带载瞬间机械老化、胶层松动、螺栓松动缓慢累积可达几百Hz设备使用数月到数年焊头更换、变幅杆装配差异几十Hz每次更换工装之后负载变化是自动化产线上最头疼的。焊什么材料、压头角度、塑胶件厚度变化都会改变振子的等效机械负载使得谐振峰位置移动。更麻烦的是空载时Q值高谐振峰尖锐带载时Q值变低谐振峰变宽这个变化会让追频算法的工作状态发生切换后面我会专门讲这里面的坑。机械老化与装配差异属于长期因素。换能器内部的胶层会逐渐老化夹紧螺栓预紧力会变化这些都会改变等效刚度进而改变谐振频率。最典型的是工厂更换焊头之后忘记重新对频整台设备报故障。环境温度变化也会影响只是相对慢一些。车间从夏天到冬天温度跨度大冷机状态下的谐振频率能差出几十赫兹有些设备早上开机和下午开机最佳工作频率都不完全一样。正是因为这些漂移因素存在且不可控手工调频在生产现场完全不可行——不可能让操作工每隔几分钟去拧一次电位器。自动追频不是锦上添花的功能而是焊接电源能否稳定工作的基本前提。2. 方案选型复盘TMS320F035这类DSP强在什么地方2.1 三种追频实现思路的对比我开始时考虑过三种技术路线模拟锁相环、通用MCU、DSP。在动手画板之前我对这几条路线的优劣势做了比较最后才选定TMS320F035这条DSP路线。模拟锁相环方案是最传统的做法用鉴相器、环路滤波器和压控振荡器实现频率跟踪。优点是响应极快、成本低、没有软件复杂度缺点同样致命。它的参数由外部RC元件决定换一套换能器就得重新调一遍电阻电容调起来全靠经验。更关键的是模拟方案很难做到扫频启动——上电时不知道谐振点在哪儿直接锁相很可能锁到错误的振动模态上。此外模拟元件本身也受温度影响温度漂移问题绕不开。通用MCU方案比如常见的ARM Cortex-M内核芯片主频和Flash资源都够PWM外设也能产生高频载波。但追频算法最核心的要求是实时性与确定性。20kHz焊机的开关周期只有50微秒如果要在几个PWM周期内完成一次电流采样、相位误差计算和频率修正MCU中断响应的抖动、ADC采样的触发延迟都会成为瓶颈。不是做不了而是做到同样的控制质量付出的软件成本和后期调试成本要高出很多。专用DSP方案也就是我最终选择的F035这条路线。这类芯片生来就是干这种事情的材料。我把它的优势总结成三个词外设对齐、数学引擎、确定性中断。对比项模拟锁相环通用MCUDSPF035路线频率跟踪实时性极高中等高扫频启动能力基本不具备软件可实现软件硬件配合好实现参数可配置性差改参数换电容电阻好好抗温度漂移能力差好好开发调试友好度差靠示波器猜较好好成本最低中中偏高2.2 F035上和追频直接相关的三个外设选型完了之后我深入学习F035的参考手册重点盯住三个跟追频直接相关的外设模块。第一个是高分辨率PWM模块。焊机输出频率的调节步进直接决定追频精度。F035的PWM可以在20kHz基频附近提供亚赫兹级的细分步长这对于锁相环来说意义重大。如果频率调节步进是10Hz那么在20kHz基频上相当于相位步进0.18度可以接受但不细腻如果步进能做到1Hz以内相位分辨率和焊缝稳定性都会有明显改善。第二个是可同步触发的ADC。追频算法成败的关键在于采样电流和电压的时刻是否准确。F035的ADC可以用PWM下溢事件触发自动做到和开关周期严格对齐。这样采到的是开关周期内特定时刻的瞬时值而不是随机噪声。没有这个硬件触发机制软件上做采样对齐非常痛苦误差大且不稳定。第三个是快速中断响应和单周期数学指令。追频控制环路的周期和PWM周期绑定每个PWM周期都要完成一次完整的采样、计算和输出更新。F035这类DSP在中断响应延迟和乘加运算速度上比通用控制器有明显优势环路更新时间可以压到几十微秒量级控制带宽更有余量。我实际用下来选DSP路线还有一个隐形好处调试手段丰富。F035支持仿真器单步调试可以实时观察频率调节量、相位误差等内部变量。这在追频控制这种看不见摸不着的环路调试里价值比硬件性能本身还要大。3. 追频算法的核心设计扫频搜索与锁相跟踪的两段式实现3.1 为什么不能一上来就锁相刚开始自学追频算法时我天真地以为PLL锁相环就是全部工作采样驱动电压和换能器电流算出相位差用PI调节器把相位差压到零就完事了。但后来在调试中发现直接锁相在换能器冷态启动时根本不可靠。原因很简单上电瞬间振子处在什么状态、谐振点漂到了哪个频率、有没有相邻的振动模态干扰这些信息完全未知。锁相环是一个局部收敛的闭环结构它只能朝着最近的零相位差点收敛。如果附近恰好有一个伪谐振点它就会锁到错误频率上进而产生剧烈的噪声和连续过载报警。所以业界成熟的追频实现基本都采用两段式结构先扫频搜索找到准确谐振点附近再切入锁相跟踪实时贴住漂移后的谐振点。3.2 第一段扫频搜索找到谐振点大致位置扫频搜索的思路不复杂。在预估谐振频率的两侧各扩展一段搜索带宽比如标称20kHz的换能器从19.5kHz扫到20.5kHz以固定步长从低到高逐点扫描。每个频点驻留若干个PWM周期期间打开ADC采样换能器的负载电流有效值或者电压电流相位差把结果记录在内存里。扫描结束后根据记录结果判断真正的谐振频率。这里有一个选择上的讲究到底依据什么判据来确定谐振点我最初用的是电流最大法——哪个频点电流最大哪里就是谐振点。但实测发现电流最大法在强谐振且存在非线性效应时会有偏差因为电流峰值曲线在谐振点附近可能并不完全对称甚至会出现双峰。更可靠的判据是相位差过零在扫频过程中同时计算电压与电流的相位差找到相位差从负变正或者从正变负取决于定义方向的过零点。真正的谐振点处动态支路呈纯阻性电压电流几乎同相相位差约等于零。以相位过零判据为主、电流峰值判据为辅两者交叉确认锁定谐振点的把握大得多。扫频的步长和驻留时间需要配合着定。步长太大会降低初始频率的定位精度增加后续锁相环的收敛时间步长太小则扫完整段搜索带宽需要很长时间焊机开机时漫长的启动延迟同样不可接受。我做过的近似整定如下参数推荐值说明搜索带宽标称频率±500Hz覆盖冷态漂移和换装差异扫频步长5~10Hz20kHz下相位步进0.09~0.18度每频点驻留2~5个PWM周期100~250us保证ADC采样稳定完整扫描时间0.1~0.2秒用户可接受的启动延迟F035上的实现技巧是把扫频过程做成一个软件状态机而不是用一堆定时器嵌套。状态机在每个PWM中断里执行一次判断当前频点驻留是否结束结束后就修改下一次PWM周期的比较值跳到下一个频点同时把ADC采样结果做一次简单平均并刷新历史最优频率记录。整个扫描过程中FPU和主循环基本不参与所有实时动作都在中断里完成逻辑干净也便于调试。扫频结束以后主轴频率直接跳转到搜索到的谐振点附近扫频状态切换到锁相跟踪状态。3.3 第二段锁相跟踪实时贴住漂移后的谐振点扫频解决的只是开机时不知道频率在哪儿的问题。工作过程中温漂、负载变化带来的连续漂移必须靠锁相跟踪来解决。锁相环的物理基础是换能器的相位-频率特性。驱动频率低于谐振点时负载呈容性电流相位超前电压高于谐振点时负载呈感性电流相位滞后电压恰好等于谐振点时电压电流同相相位差为零。因此只需要实时测量电压电流的相位差用控制器把相位差调节到零输出的驱动频率就会自动跟踪谐振频率的变化。数字锁相环在F035上的实现是一个典型的比例积分调节器。每个PWM周期执行一次f_out[n] f_base Kp * e[n] Ki * accum[n]其中e[n]是当前周期测得的相位差accum[n]是相位差的累积值f_base是扫频捕获得到的频率基准f_out是实际输出到PWM模块的频率设定值。PI调节器的输出需要做限幅。我设定的限幅是±300Hz防止异常状态下频率调节量跑飞导致焊机彻底失锁。设计PI参数的时候需要注意带宽取舍。相位环带宽如果设得太高比如几十赫兹会把采样噪声和焊接过程中的负载波动直接放大表现为主轴频率来回抖动焊机声音忽高忽低。带宽太低又来不及跟随快速漂移负载突变时会有几百毫秒的功率跌落。我的整定经验是把相位环闭环带宽控制在1~10Hz范围优先稳定性。对于温漂这种慢变量1Hz带宽完全够用对于负载突变频率短时间内有几赫兹的过渡过程是可以接受的。4. 软件骨架与关键参数让追频在F035上真正跑起来的细节4.1 中断与主循环的任务划分控制软件的结构直接决定追频实时性的优劣。我在F035上的实现遵循一个原则所有实时控制任务全部放进PWM中断所有非实时任务全部放进后台主循环。PWM中断以开关频率触发。我设计的载波频率是20kHz即中断周期50微秒。中断内的任务序列是读取同步采样得到的电压和电流AD值计算相位差执行数字PI调节器更新PWM频率设定值最后清除中断标志退出。整套动作控制在几微秒到十几微秒留给主循环足够的裕量。后台主循环负责的事情包括解析按键和显示刷新、扫频状态机的慢速逻辑、过流过温保护判断、故障记录存储。这些任务允许几十毫秒级别的延迟和实时控制分开后互不干扰也方便调试。4.2 精简的软件骨架示意下面是一个精简后的骨架代码描述PWM中断里追频核心闭环的逻辑。这不是完整的工程代码去掉了寄存器初始化和保护逻辑但控制流程的先后关系是实际跑通的。// 20kHz PWM中断服务程序每50us执行一次 interrupt void pwm_isr(void) { // 1. 同步采样读取驱动电压、负载电流 uint16_t v_adc read_adc(V_SENSE_CH); uint16_t i_adc read_adc(I_SENSE_CH); // 2. 数字鉴相计算电压与电流的相位差量化值 int16_t phase_err compute_phase_difference(v_adc, i_adc); // 3. PI调节相位差 - 频率修正量 integral (int32_t)phase_err; if (integral INTEGRAL_LIMIT) integral INTEGRAL_LIMIT; if (integral -INTEGRAL_LIMIT) integral -INTEGRAL_LIMIT; int32_t freq_delta Kp * phase_err Ki * integral; // 4. 频率限幅保护防止失锁跑飞 if (freq_delta FREQ_LIMIT) freq_delta FREQ_LIMIT; if (freq_delta -FREQ_LIMIT) freq_delta -FREQ_LIMIT; // 5. 更新PWM输出频率 update_pwm_frequency(base_freq freq_delta); // 6. 清除中断标志退出 clear_pwm_int_flag(); }后台的扫频状态机则负责在启动或者失锁恢复时执行搜索流程。我用一个枚举变量表示当前状态状态机在每个主循环周期检查一次根据条件在SCAN_SEARCH、PLL_TRACK、FAULT等状态之间切换。把这个状态机放后台是因为它对实时性要求不高扫描驻留时间以毫秒计而PWM中断里只负责执行当前的频率指令分工干净。4.3 关键参数的整定记录我把一组实测有效的参数记录在这里读者拿去要根据自己的换能器特性重新整定不能照抄。这组参数对应的是一套标称20kHz、功率约1200W的超声波焊接振子。参数整定值整定时的考虑控制周期50us对应20kHz开关频率一个开关周期控制一次Kp0.05 Hz/量化单位相位差每差一个量化单位输出频率调整0.05HzKi0.002 Hz/量化单位积分项用来消除稳态相位差积分限幅累计不超过±50Hz防止长时间相位误差导致积分饱和频率限幅±300Hz失锁保护超过此范围进入故障状态相位死区相位差小于±1度时不调整避免噪声引起的频率抖动值得一提的整定技巧是相位死区。锁相环在小误差状态下如果还是每周期都动作就会把量化噪声和采样噪声转化成频率抖动。加入1度左右的死区相当于告诉控制器相位差在1度以内就算达标焊机声音立刻稳定很多对焊接强度几乎无影响。这个思路和PID控制里的死区调节是相通的。5. 实测调试避坑四个绕不开的问题与完整排查过程5.1 扫频锁错伪谐振点第一个让我挠头的问题出现在扫频搜索环节。空载测试时扫频结果显示在目标频率附近出现了两个电流峰值锁相环锁定到第一个峰值上后焊机发出了刺耳的尖叫电流远超额定值只能紧急触发过流保护。我用示波器观察驱动电流波形并逐步排查发现问题出在换能器系统的多模态特性上。压电换能器机械结构不止一种振动模态除了设计的工作模态还有装配件之间耦合产生的寄生模态。寄生模态共振时同样会形成电流峰但它不是有效焊接模态锁上去的结果就是高频振动变成发热和尖叫。解决这个问题靠的是双重判据。第一扫频过程中不仅记录电流幅值还记录每个频点的相位差真正的谐振模态在相位差上有清晰的过零特征而寄生模态往往相位变化不连续或过零点不明显。第二增加峰值宽度判断正常谐振峰的半功率带宽相对稳定过窄的尖峰在多次扫描中位置不稳定可以直接排除。我加了一个连续扫描两次、谐振频率偏差不超过3Hz才算有效的校验逻辑从那以后再也没有锁错过。5.2 温升之后锁相环追丢了设备连续工作一段时间后谐振频率随温度漂移此时锁相环偶尔会出现频率输出在原地来回震荡始终追不上真正谐振点的现象。焊机表现为间歇性掉功率声音时大时小。我把F035内部记录的频率调节量用调试器导出来看发现积分项已经顶到了限幅值但频率输出还在缓慢变化。根因是PI调节器产生了积分饱和。温度漂移是一个持续向同一方向变化的慢变量积分项需要不断拉大来消除稳态误差但如果积分限幅设置得太紧或者频率修正速度赶不上漂移速度积分项很快撞上上限调节器实际上处于失去积分的开环状态频率永远慢半拍。修复方法有两步。一是把积分限幅从±50Hz放宽到±120Hz确保温漂的累计修正量有足够空间。二是在频率修正过程中加入斜坡限幅即每次中断最多改变1Hz这个斜坡限制从软件上约束了频率调节速度避免瞬间大步长带来的冲击。斜坡限幅和积分限幅同时作用后温度漂移阶段焊机表现为一条平缓下降的频率曲线功率保持稳定。5.3 电流采样噪声导致相位差乱跳进入带载焊接调试后出现了新的症状焊接刚开始的前几百毫秒追频环路频繁修正频率焊机声音发飘。我怀疑是采样相位差数据被污染于是用仿真器实时监控phase_err变量发现原始相位差信号存在明显的尖刺最大抖动达到约8度而有效相位差信号通常只有一两度。进一步的排查锁定了噪声来源。焊接过程的电流回路里有大量开关动作互感器采样的模拟信号在开关边沿附近叠加了严重的共模尖峰干扰。虽然ADC是PWM同步触发但采样时刻如果落在开关边沿附近采到的就是干扰叠加后的值。排查确认后我调整了采样策略。一是将ADC采样点移到PWM周期的死区/续流平台阶段这个阶段开关管处于稳定状态电流回路干扰最小。二是在硬件上把采样信号线改成差分走线并增加一阶RC滤波截止频率约500kHz滤除高频开关噪声。软件侧则加了一个三取中值的数字滤波对连续三次相位差计算取中间值进一步压制偶然尖刺。三层处理下来相位差的抖动从8度降到1度以内焊接过程明显安定下来。5.4 空载与带载切换时追频振荡最后一个大坑在量产前的空载/带载交替测试中暴露。焊机空载运行稳定一压上工件就出现频率振荡松开工件又恢复稳定。这个现象的本质是空载与带载状态下换能器等效Q值差异巨大导致的控制对象突变。空载时Q值高相位-频率特性曲线斜率很陡同样的相位误差对应更小的频率偏差带载时Q值低相位曲线变缓同样的PI参数在不同Q值下会有完全不同的环路增益。我用同一套PI参数跑两种状态结果空载稳定带载过冲、带载稳定空载则收敛过慢。解决的思路是设置两套PI参数检测到负载接入后切换参数组。负载状态的判断不复杂——带载后电流幅值会明显增大用低通滤波后的电流幅值做阈值判断即可。切换时我把积分项清零做抗积分饱和处理防止切换瞬间旧状态残留的积分量造成频率跳变。这个办法在全天候连续焊接测试中表现稳定空载和带载的过渡过程都能在两三百毫秒内完成没有振荡。问题现象根因解决手段扫频锁死到错误频率寄生振动模态形成伪谐振峰相位过零峰值宽度双重判据温升后追频失速PI积分饱和放宽积分限幅频率斜坡限幅相位差抖动大采样时刻踩在开关噪声上采样时点前移差分/滤波/中值空带载切换振荡Q值突变导致环路增益失配双PI参数切换时清积分6. 调试工具与经验沉淀从波形到日志的方法论6.1 示波器应该盯哪几个点自动追频调试最忌讳的就是对着空气调参数。我习惯把示波器的四个通道这样分配CH1接驱动电压CH2接电流钳CH3接控制器输出的相位差标志CH4接PWM频率字对应的模拟输出。时基放到2秒到10秒长扫描档观察整个追频过程的宏观变化。判断追频是否正常最直观的指标是CH1和CH2的相位关系是否长期稳定在零附近。我还会把屏幕上的相位差曲线拍下来和频率曲线对比频率曲线跟随相位差变化而平滑修正说明锁相环工作正常如果频率修正量忽大忽小、毫无规律基本可以判断是采样噪声在干扰环路。6.2 频率日志是定位问题的金矿追频调试中最有价值的调试手段之一是把F035内部的目标频率实时记录导出来。软件里加一个环形缓冲区每个控制周期把当前的base_freq freq_delta值写进去利用调试器的导出功能把缓冲区内容倒出来绘成曲线。这条曲线非常有看头。冷启动阶段可以清楚看到扫频跳变后频率稳定在一个平台连续工作时可以看到频率随温度缓慢下降斜率基本固定负载接入瞬间频率会有一个小小的波动然后迅速回来。任何异常都能在这条曲线上留下特征。我拿到一份追丢的调试记录时就是靠频率曲线发现积分饱和的。现在我的建议是新项目追频调试初期频率日志打印功能必须最早做出来它产生的价值远超那点开发成本。6.3 个人体会与可以继续深挖的方向这一段完整项目做下来我最深的体会是自动追频的价值不在算法多么高深而在于对换能器物理特性的理解和对控制细节的反复校准。先扫频后锁相的顺序不能省频率环带宽宁小勿大参数要跟着实际换能器去整定而不是照搬网上任何一份配置。多给自己留日志出口现场问题八成靠数据判断不要靠耳朵听声音猜。后续我想继续做的两件事一是把追频环路的PI参数做成自适应在线辨识按Q值变化自动切换增益彻底省掉双参数维护二是在F035平台上把追频和恒功率控制联合起来让输出功率、谐振频率和驱动相位三个变量协同工作。这些方向如果有进展我会再写一篇完整的实操记录。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑