第二章 数控系统基础:CNC系统架构、运动控制卡原理、伺服驱动接口
各位同学,咱们今天聊聊数控系统的基础。说实话,很多做FPGA加速的工程师,一上来就扎进插补算法里,结果连CNC系统长什么样都没搞清楚。我个人觉得,这就像盖房子不看地基——迟早要出问题。
我在做第一个运动控制项目时,就犯过这个错。当时只顾着优化插补速度,结果发现伺服驱动器根本不响应我的脉冲指令。后来一查,原来是接口时序没对上。嗯,从那以后,我养成了一个习惯:先搞懂系统架构,再动手写代码。
2.1 CNC系统整体架构
一个典型的CNC系统,说白了就是三个层次:
- 上位机层:负责G代码解析、人机交互、路径规划。通常是PC或者嵌入式工控机。
- 运动控制层:这是咱们FPGA工程师的主战场。负责插补计算、位置控制、速度规划。
- 伺服驱动层:把控制信号转换成电机转动。包括伺服驱动器、编码器反馈。
你想想看,这三个层次之间是怎么通信的?上位机通过PCIe或以太网把G代码发给运动控制卡,控制卡算好插补点,再通过脉冲或总线发给伺服驱动器。驱动器带着电机转,编码器再把实际位置反馈回来。
核心要点:FPGA在运动控制层扮演的角色,就是做那个"算得快"的引擎。CPU算插补太慢,FPGA刚好补上这个短板。
下面这张图是我自己画的系统架构图,你可以看到数据流的走向:
2.2 运动控制卡原理
运动控制卡,其实就是一块专门干"算位置"活儿的板卡。我见过很多方案,有基于DSP的,有基于ARM的,但真正要跑高速插补,还得是FPGA。
为什么?因为插补算法本质上是个迭代计算过程。CPU做一次迭代可能要几十个时钟周期,FPGA用流水线做,一个时钟周期就能出一个结果。你想想看,在100MHz的时钟下,这差距有多大。
我的经验:在项目中,我习惯把运动控制卡分成三个模块:
- 通信模块:接收上位机的指令,解析G代码参数
- 插补引擎:这是FPGA的核心,做直线、圆弧、样条插补
- 脉冲输出模块:把插补结果转换成伺服驱动器能识别的脉冲信号
这里有个关键点——插补周期。一般运动控制卡的插补周期在1ms到10ms之间。但用FPGA做,我可以把周期压到微秒级。我曾经在一个五轴联动项目中,把插补周期做到了500ns,加工出来的曲面光洁度明显好了一个等级。
2.3 伺服驱动接口
伺服驱动接口,说白了就是运动控制卡和伺服驱动器之间的"翻译官"。常见的接口类型有:
| 接口类型 | 信号形式 | 最高频率 | 适用场景 |
|---|---|---|---|
| 脉冲+方向 | 差分/单端 | 4MHz | 通用伺服、步进电机 |
| ABZ编码器 | 差分 | 10MHz | 位置反馈 |
| EtherCAT | 差分 | 100Mbps | 高速多轴联动 |
| Mechatrolink | 差分 | 50Mbps | 工业机器人 |
避坑指南:我曾经在一个项目中,直接用单端信号连伺服驱动器,结果现场干扰大得离谱,电机一直在抖。后来换成差分信号,问题就解决了。记住:工业现场,能用差分就别用单端。
脉冲接口的时序,是FPGA工程师必须掌握的。以最常见的脉冲+方向接口为例:
// 脉冲输出时序要求
// 脉冲宽度:最小2.5us
// 方向建立时间:脉冲上升沿前至少5us
// 方向保持时间:脉冲下降沿后至少5us
always @(posedge clk) begin
if (pulse_en) begin
pulse_out <= 1'b1;
#2.5us; // 保持高电平
pulse_out <= 1'b0;
#2.5us; // 保持低电平
end
end
嗯,这里要注意:不同品牌的伺服驱动器,对脉冲宽度的要求可能不一样。我建议你在选型时,先查一下驱动器的数据手册,把时序参数记下来。别像我第一次那样,拿着通用的参数去配,结果死活调不通。
2.4 编码器反馈接口
编码器反馈,是闭环控制的关键。没有反馈,你都不知道电机实际转到了哪里。常见的编码器类型有:
- 增量式编码器:输出A、B、Z三相信号。A和B相差90度,用来判断方向。Z相是零位信号。
- 绝对式编码器:通过SSI或BiSS协议输出绝对位置。掉电不丢失。
- 正余弦编码器:输出模拟信号,精度更高,但需要ADC采样。
我个人比较喜欢用增量式编码器,因为接口简单,FPGA处理起来也快。但要注意:增量式编码器上电后需要找零位,否则位置是未知的。
核心技巧:在FPGA中处理编码器信号,一定要做去抖处理。我曾经见过一个案例,因为没去抖,一个脉冲被采样成两个,位置误差越积越大。去抖的方法很简单:连续采样三次,取多数值。
好了,这一章的内容就到这里。数控系统的基础,说白了就是搞清楚"谁在干什么"。上位机负责动脑子(解析G代码),运动控制卡负责算得快(插补),伺服驱动器负责干得准(执行)。FPGA在中间这个环节,刚好发挥它的并行计算优势。
下一章,我们会深入插补算法的数学原理。到时候我会带着大家,从直线插补开始,一步步把算法搬到FPGA上。嗯,那才是真正有意思的部分。