其中,CurrentGMidCode是预定义的结构体变量,用于保存每行G代码提取出来的指令及其操作数,结构如下:
提取到每行G代码的关键信息后进行相关处理,计算出每行代码的运动起止坐标,将其通过SPI总线发送至NC控制芯片,控制电机运动。
1.3.2 插补进给
电机的插补运算、加减速和进给控制,由一个独立STM32微控制器完成,并称为NC运动控制芯片。
目前市场上的运动控制芯片主要是日本和欧美公司的专用ASIC和各数控厂家自行开发的FPGA芯片,虽然性能优越,但价格不低。相对于使用ASIC芯片或FPGA芯片,完成同样的任务使用MCU方案,硬件生产成本和开发成本均具有明显优势,当STM32微控制器运行在其最高频率为72 MHz下时,性能完全可以满足中低端数控系统应用的要求。
在三轴数控铣系统中,NC运动控制芯片需要实现三轴快速定位、二轴直线插补、二轴圆弧插补、三轴直线插补的功能。
插补是在组成轨迹的直线段或曲线段的起点和终点之间,按一定的算法进行数据点的密化工作,以确定一些中间点,从而为轨迹控制的每一步提供逼近目标。在本控制器中,选用逐点比较法作为基本的插补算法,具有算法简单高效、进给速度均匀的特点,同时支持三轴的直线插补[1],满足本控制器对插补算法的要求。
逐点比较直线插补,就是执行机构每走一步都要和给定运动轨迹上相应的坐标值相比较,比较的结果称为偏差函数F,根据偏差的正、负决定下一步的进给方向。实质上这是一种用阶梯折线来逼近直线的一种算法,它与规定运动轨迹之间的最大误差为1个脉冲当量(每走1步移动的距离)。因此,只要把脉冲当量设计得足够小,就可以达到运动精度的要求[2]。
1.4 Modbus-RTU协议的实现
Modbus-RTU是Modicon公司开发的一种通信协议。它采用主从应答方式工作,其规范已公布在互联网上,是一种在工业领域被广为应用的真正开放的标准网络通信协议。由于它具有免收许可费用,易于集成不同的设备、简单易用、开发成本低、有着广泛的知识资源支持等特点,已经成为一种公认的通用工业标准。有了这个标准,不同厂商生产的控制设备可以连成工业网络,进行集中监控。Modbus PTU协议有2种传输模式:RTU模式和ASCII模式。其中RTU模式信息帧中的8 bit数据包括2个4 bit十六进制字符,相对于ASCII模式,RTU模式表达相同的信息需要较少的位数,且在相同通信速率下具有更大的数据流量。因此通常情况下,一般工业智能仪器仪表都是采用RTU模式的Modbus规约。
Modbus-RTU协议以帧为通信的基本单位,帧格式为:地址码1 B;功能码1 B;数据区N B;错误校验2 B CRC码。
本运动控制器在其RS-485接口上实现了Modbus-RTU协议,使用了当今流行的免费开源协议栈FreeModbus-RTU,从而保证了可靠的通信、节约了开发成本。
FreeModbus是针对通用的Modbus协议栈在嵌入式系统中应用的实现,其遵循BSD开放源代码协议,并可以免费用于商业用途,成熟可靠。移植FreeModbus到STM32处理器只需要少量资源,除了1个双工USART外,只需要配置1个定时器进行超时判断即可。