数控机床的基础知识
机床每个轴的伺服电机,期望输入的是步进信号:一个脉冲信号和一个方向信号。
因此,机床的运动控制器,需要将程序中的移动指令,转换为多个轴的步进信号。
例如一个分辨率为 0.001mm 的机床,控制器每发送一个脉冲信号,电机就旋转一个小角度,通过传动系统后,体现为主轴移动了 0.001mm。
对多轴联动机床来说,程序中的移动指令,要被控制器分解为多个轴的移动。然后控制器需要精确的控制每个轴的步进信号,使得多个轴可以协调运动,完成所谓的多轴联动。
例如程序指令是将主轴从 (0,0,0) 坐标移动到 (0.1,0.2,0.3)。那么控制器需要在 X 轴发送 100 个脉冲,Y 轴发送 200 个脉冲,Z 轴发送 300 个脉冲。
不仅仅是要发送这几个脉冲,而且要确保,这几个脉冲的间隔时间正好是 3:2:1 , 于是 X 轴发送 100 个脉冲,Y 轴发送 200 个脉冲,Z 轴发送 300 个脉冲 花费的时间恰好相等,这样,机床主轴在伺服电机的驱动下,就可以让主轴沿着直线从 (0,0,0) 坐标移动到 (0.1,0.2,0.3)。
过去,数控机床只能实现两轴联动。例如 将主轴从 (0,0,0) 坐标移动到 (0.1,0.2,0.3),机床需要分解成2个步骤执行。 首先抬起主轴,也就是 将主轴从 (0,0,0) 坐标移动到 (0,0,0.3)。 接着移动主轴到 (0.1,0.2,0.3)。无法实现三个轴同时运动。
这种机床,现在已经非常罕见了。人们形象的称呼其为 2.5轴机床。因为物理上有三个轴,但是只能2个轴实现联动。
不过控制器限制下的 2.5 轴机床虽然少见,但是将3轴机床当 2.5轴使用却还是主流。比如 3D 打印,就几乎只需要两轴联动。虽然实际上它的控制器是完全支持3轴联动的。
为了加工复杂曲面,机床会额外引入 3个旋转轴中的2个。三个旋转轴记为是 A B C 轴,分别对应在 X Y Z 轴上的旋转。由于主轴的刀具自身就在旋转,因此通常 主轴所在的轴是无意义。因此只需要2个旋转轴。通常主轴是在 Z 轴上,因此一般而言立式加工是 A B 两个旋转轴,而卧式加工的主轴是水平放置的,因此通常会使用 A C 轴 或者 B C 轴。
旋转轴的目的,就是让 刀具的转轴,不再平行于机床的 Z 轴承(对于立式机床而言) 或者 X 轴承(对于卧式机床而言)。
凡引入了2个旋转轴而构成的5轴机床,必然,一定,是要实现五轴联动的。
前面说过,联动的意思,就是在 程序中给出 的多个 坐标,要控制器给出的多个轴的脉冲步进信号相互同步,实现多个轴 同时到达。不仅仅是要同时到达,还得匀速同时到达。这样起点到终点之间,才是一条直线。因为程序给出的,就是直线运动指令。
关于旋转刀具中心 (RTCP)
传统上,机床的控制程序,是直接针对5个轴的坐标的。所谓五轴联动,是程序里会直接给出每段运动轨迹的 X Y Z A B C 六个坐标轴 ( ABC 三个坐标里有一个会永远为 0 ,具体看机床类型)。控制器协调5个轴同时到达程序给定位置,即可实现 五轴联动。
但是,这意味着加工程序必须知道
- 旋转轴是主轴旋转,还是工件转。
- 机床的旋转轴的位置(2个旋转轴的在 XYZ 上的位置)。
- 旋转轴中心点的位置和夹持的工件原点的偏移
- 刀具的具体长度
这无疑会增加加工程序和特定机床和刀具的耦合程度。
因此,就有了所谓的 RTCP 功能的机床。 RTCP 功能的机床,实质上是一种虚拟机床。
程序给定的位置,不再直接表达机床的轴的坐标,而是表达 刀尖 的坐标。因此,在五轴联动+RTCP的组合下,所有的机床就都是一种机床:XYZAB 立式机床。并且旋转的不是主轴,而是刀具。程序给出 A 轴旋转,不是让 机床的 主轴直接绕 A 轴旋转,而是在 绕 A 轴旋转的时候,同时按圆形轨迹移动 YZ 轴。也就是说,程序是直接对 刀尖进行轨迹编程,而不是对机床的5个轴进行编程。
至于刀具轨迹,如何转换为机床5个轴的运动,就是机床的控制器需要操心的事情了。
这样,程序就通用化了。在编程的时候,程序只需要考虑 刀路和刀具的半径,不再需要考虑机床的具体结构。连刀具长度都不需要考虑了。
这样在加工的时候,一线操作人员可以更换长度不同的刀具,也可以使用原来的加工程序(其实在加工的时候,是刀具磨损后长度有轻微差异,可以在夹刀具的时候输入刀具准确的长度而无需修改加工程序,而不是真的换不同类型刀)。
由于五轴机床必须支持五轴联动,因此俗称的真五轴和假五轴,其实就是指是否支持 RTCP 功能。
加工指令和插补
在机床的控制中,运动指令主要分直线运动,和圆形运动。 由于加工程序中,只给出了刀具路径的位置参数,而没有给出中间的每个点的位置(无数个点啊,也给不出来)。所谓位置参数,指直线的时候,给出的是目的地址。机床要从当前位置以直线运动到给定位置。如果是圆形,则给的是圆心位置和圆弧角度。机床要以当前位置和给出的圆心位置做圆周运动。
对每段轨迹来说,中间的位置,就需要机床的控制器进行“插补”。
因此,机床的插补,主要就分为直线插补 \& 圆形插补。
直线插补的方式很好理解。就是计算每轴需要插补多少个脉冲,然后控制器输出多个轴在相同的时间里正好输出这么多个脉冲。
那么圆形的插补呢?
简谐运动
弹簧的震动,钟摆的摆动,在大自然都被称为“简谐运动”。因为他们的运动位移和运动速度,在时间上看,都是 正弦波。
而圆周运动,恰好就是简谐运动在多个轴上的叠加。
一个圆周运动,在三维坐标系上,分解成3个坐标轴上的运动。我们会发现,每个轴上的运动,都是正弦的。
因此,对机床进行圆周的联动插补,本质上就是让三轴进入同周期的简谐运动。
因此,机床的控制代码,在读取加工程序的时候,可以将多轴运动插补,首先分解为多个轴上自身的 位移-时间 曲线。 而这条曲线,只需要 直线和三角函数 两种方程即可描述。
而且 RTCP 是可以转换的。RTCP 让直线运动被补偿为圆周运动,让圆周运动被补偿为另一个圆周运动或者直线运动。
运动插补的中间描述
因此,最终,送入插补器的代码,就是 5 条或者3条,同步的 位置-时间 曲线。 几条曲线,又各以相同的 “时间” 分片进行分段描述。
在每个时间段内,要么是直线,要么是正弦曲线。
而后插补器,就可以根据这个数据生成 脉冲信号。
为啥要这么设计呢? 因为插补器需要输出非常高精度的脉冲信号。
而插补器进行插补的时候,就只需要进行最简单的直线或者正弦的插补。比如步进驱动器一般使用 500khz 的信号。意味着插补器最快每 2us 输出一个脉冲。 但是插补器却不能工作在 500khz .因为如果需要输出一个 300khz 的脉冲,让主轴以 300mm/s 的速度移动起来,那么工作在 500khz 的插补器,只能要么输出 500khz 的脉冲要么输出 250khz 的脉冲。二者交替出现。这会导致机床抖动。所以插补器会以 5Mhz 的频率工作,但是限制每 2us 最多输出一个脉冲。只有简单的直线和正弦,才可以满足这个计算时间要求。 同时,插补器必然,也只能是一个独立的硬件。最好是 FPGA 或者 ASIC。 因为高阶的伺服驱动,可以接受 5Mhz 的步进信号。这意味着插补器需要以 50Mhz 工作。也就是每 20ns 就要完成一次计算。而且是雷打不动的每20ns完成一次计算。这样的时间要求,只能使用独立的硬件才能完成。
廉价插补器的设计
当然,如果对精度要求放宽,也是可以使用单片机而不是FPGA输出步进脉冲的。例如很多廉价3D打印机,其机床主控就是一个单片机。
如果使用单片机,则需要双核单片机。独立划一个核用来跑插补,生成高精度脉冲,另一个核用来进行运动解算。通常单片机运行插补,其插补频率很难突破 100khz。这导致其输出分辨率很难突破 1万步/s。对于一个桌面机床来说,其每步步进通常不会低到 1um ,而是在 0.05mm 。因此 1万步/s 的最大脉冲输出,基本上也能满足 500mm/s 的运动速度。其实机床的加工基本上是以 3000mm-6000mm每分钟进行的。主要这里的时间单位秒和分的区别。每分钟 6米其实也就每秒10厘米。
需要更高的插补速度,是因为有很多高端机床,每脉冲的分辨率是 100纳米。然后还要能做到每分钟 6米的进给速度。
当然,另一个廉价做法是,将插补曲线序列化为 PCM 编码的脉冲。然后使用 DMA 传输给 GPIO 硬件。由于 DMA 的速度是恒定的,因此可以以极高的速度输出一个非常稳定的步进信号。这样使用单核单片机即可完成工作。
例如,在 72Mhz 总线频率下,DMA 能以 72M/s 的速度向 GPIO 写入数据。
那么就把待输出的信号,看成是 72Mhz 采样率的 PCM 声音。每秒就是 72MB 的数据。以 20us 为时间分片,每个分片为 1440字节。每次 DMA 中断,就生成 1440 个新的数据交给 DMA 引擎。
因为DMA传输一个1再传输一个0才能完成一个脉冲输出。实际上驱动器对脉冲宽度是又要求的。因此需要生成连续多个 1 满足驱动器的要求。
但是这就等于意味着,插补器能在 1/72000000 s 为时间分辨率上控制脉冲的上升沿和下降沿时间。这几乎就等同于插补器以 72Mhz 运行。
从这个逻辑上来说。其实要输出高精度的脉冲,其实就只需要一个高采样率的6声道声卡。声卡能支持的采样率上限,就是插补器的时间精度上限。
Comments