一、多轴跟随系统架构:从主从到虚拟主轴

多轴跟随系统,说白了就是让多个电机轴「跟着同一个节拍跳舞」。我做了十几年运动控制,见过太多轴之间「打架」的场面——有的轴跑快了,有的轴跑慢了,最后整个设备乱成一锅粥。

今天咱们聊聊最常见的三种架构:主从架构、虚拟主轴架构,以及它们背后的分布式时钟同步和EtherCAT总线。

1.1 主从架构:最朴素的跟随方式

主从架构是最容易理解的方式。一个轴当「老大」,其他轴当「小弟」。老大怎么走,小弟就怎么跟。

核心逻辑:主轴输出位置/速度指令,从轴通过电子齿轮比跟随。

我在项目中遇到过这样一个案例:一台三轴贴片机,X轴是主轴,Y1和Y2是从轴。主轴每走1mm,从轴必须走0.5mm。代码实现起来其实很简单:

// 主从跟随 - 电子齿轮模式
void MasterSlave_Follow(void)
{
    // 主轴当前位置
    int32_t master_pos = GetMasterPosition();
    
    // 从轴目标位置 = 主轴位置 * 齿轮比
    // 齿轮比 = 0.5
    int32_t slave_target = master_pos * 0.5;
    
    // 发送给从轴驱动器
    SetSlavePosition(slave_target);
}

嗯,这里要注意:主从架构有个致命弱点——如果主轴突然急停,从轴会「追尾」。我曾经调试一台包装机,主轴刹车时从轴没反应过来,直接把机械结构撞变形了。从那以后,我每次做主从架构都会加上「跟随误差超限保护」。

避坑指南:主从架构的跟随误差会累积。我曾经遇到过从轴跟随误差超过1mm的情况,原因是主轴加减速太快,从轴响应跟不上。解决办法是加一个「前馈补偿」。

1.2 虚拟主轴架构:没有物理主轴的「虚拟老大」

虚拟主轴架构,说白了就是「无中生有」。系统里没有一个真实的物理主轴,而是用软件生成一个虚拟的「主轴信号」。所有真实轴都去跟随这个虚拟信号。

你想想看,这样做的好处是什么?

  • 没有物理限制:虚拟主轴可以任意加减速,不会磨损
  • 同步性更好:所有轴同时收到指令,没有主从之间的延迟
  • 容错性强:某个轴出故障,不影响其他轴继续运行

我个人习惯用虚拟主轴做电子凸轮。比如一台印刷机,需要多个轴按照特定的曲线同步运动。虚拟主轴发出一个「虚拟角度」,每个轴根据这个角度查表得到自己的位置:

// 虚拟主轴架构 - 电子凸轮跟随
void VirtualMaster_Follow(void)
{
    // 虚拟主轴角度(0-360度循环)
    float virtual_angle = GetVirtualMasterAngle();
    
    // 每个轴根据凸轮表计算位置
    // 轴1:正弦运动
    float pos1 = sin(virtual_angle * PI / 180) * 100;
    
    // 轴2:余弦运动(相位差90度)
    float pos2 = cos(virtual_angle * PI / 180) * 100;
    
    // 轴3:线性跟随
    float pos3 = virtual_angle / 360 * 200;
    
    // 同时发送给所有轴
    SetAxisPosition(1, pos1);
    SetAxisPosition(2, pos2);
    SetAxisPosition(3, pos3);
}

我的经验:虚拟主轴的更新频率至少要达到驱动器控制周期的10倍。比如驱动器是1kHz,虚拟主轴更新频率最好在10kHz以上。否则你会看到轴在「抖动」。

1.3 分布式时钟同步:让所有轴「看同一个表」

不管是主从架构还是虚拟主轴架构,都面临同一个问题:各个轴之间的时间基准不一致。

为什么会这样?因为每个驱动器都有自己的晶振,晶振之间会有微小的频率偏差。刚开始可能只有几微秒的差异,但运行几分钟后,差异就会累积到毫秒级。对于高速跟随来说,毫秒级的偏差足以让产品报废。

分布式时钟同步(DC,Distributed Clock)就是解决这个问题的。它让所有驱动器共享同一个时钟基准,误差控制在纳秒级。

同步方式 精度 适用场景
软件同步 毫秒级 低速、低精度应用
硬件同步(脉冲) 微秒级 中速、中等精度
分布式时钟(DC) 纳秒级 高速、高精度多轴跟随

我记得有一次调试一台6轴机器人,用软件同步时,末端执行器的轨迹总是有「锯齿」。后来换成EtherCAT的分布式时钟,锯齿立刻消失了。这就是纳秒级同步和毫秒级同步的差距。

1.4 EtherCAT总线:为多轴跟随而生

说到分布式时钟,就不得不提EtherCAT。EtherCAT不是普通的以太网,它有几个「绝活」:

  • 「飞读飞写」技术:数据帧经过每个从站时,从站可以在几纳秒内读取或写入数据,然后继续转发
  • 分布式时钟:内置IEEE 1588精确时间协议,同步精度可达100纳秒以内
  • 低延迟:100个轴的数据刷新周期可以做到100微秒以内

我做过一个对比测试:同样的跟随算法,用脉冲接口实现时,100个轴的同步误差在500微秒左右;换成EtherCAT后,同步误差降到了50纳秒。差了整整一万倍。

EtherCAT在跟随中的典型配置:

// EtherCAT DC同步配置
void EtherCAT_DC_Config(void)
{
    // 设置参考时钟(通常选第一个从站)
    SetReferenceClock(Slave_1);
    
    // 计算传输延迟
    CalcTransmissionDelay();
    
    // 启用DC同步模式
    EnableDCMode(SYNC_EVENT_1);
    
    // 设置同步周期(100微秒)
    SetSyncCycleTime(100);  // 单位:微秒
}

注意:EtherCAT的分布式时钟虽然精度高,但配置起来比较麻烦。我曾经因为忘记校准传输延迟,导致所有轴的同步误差反而比不用DC还大。记住:一定要做「传输延迟补偿」。

1.5 三种架构怎么选?

说了这么多,到底该用哪种架构?我个人的建议是:

  • 2-3个轴,精度要求不高:用主从架构,简单可靠
  • 4个轴以上,需要灵活调整:用虚拟主轴架构,配合EtherCAT
  • 高速高精度,轴数多:必须上EtherCAT+分布式时钟

最后说一句:架构选型没有绝对的对错,只有合不合适。我见过有人用主从架构做了20个轴的跟随,也见过有人用虚拟主轴只带2个轴。关键是你对系统的理解有多深。


公众号:蓝海资料掘金营,微信deep3321