一、多轴跟随系统架构:从主从到虚拟主轴
多轴跟随系统,说白了就是让多个电机轴「跟着同一个节拍跳舞」。我做了十几年运动控制,见过太多轴之间「打架」的场面——有的轴跑快了,有的轴跑慢了,最后整个设备乱成一锅粥。
今天咱们聊聊最常见的三种架构:主从架构、虚拟主轴架构,以及它们背后的分布式时钟同步和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