微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于数字积分法的插补控制器在FPGA上的设计与实现

基于数字积分法的插补控制器在FPGA上的设计与实现

时间:06-05 来源:互联网 点击:

0 引言

数控系统的核心技术是运动控制技术,随着机电一体化的深入发展,运动控制技术已经成为推动机电一体化进程的重要环节,是推动新的产业革命的关键技术码。

现代高速数控技术对运动控制器的速度和精度要求日益提高,与运用软件实现的控制器相比较,基于FPGA设计的插补控制器具有控制方便、插补速度快、精度高、通用性好、可移植性的特点,并拥有可运用硬件描述语言实现软硬结合等多种优点。为了提高伺服电机的精确度,本文设计了一个基于数字积分法并采用多轴联动技术的插补控制器,该控制器可实现三轴的直线插补和两轴的圆弧插补。

1 插补控制器的总体设计

该控制器的核心部分是DDA插补模块,整个插补模块可分成直线插补模块和圆弧插补模块两部分。每个插补模块内都由数据缓存器、插补积分器和位置计数器3个部分组成。下面分别介绍各个模块的设计及仿真。

插补控制器具备三轴直线插补及两轴圆弧插补的能力,2种插补均采用数字积分法实现。数字积分法(DDA)具有逻辑能力强、可实现多轴联动控制,且输出脉冲均匀的特点。如图1所示,插补控制器接收到外部处理器的控制信号和数据,经过译码及配置寄存器模块的译码和配置后,根据需要选择进行直线插补或圆弧插补,输出指脉冲和方向信号。脉冲用于通过伺服电机驱动控制伺服电机的转动,方向信号则控制伺服电机的转动方向。

2 基于FPGA的模块设计

该插补控制器采用Altera公司的CycloneⅢ-EP3C16Q240C8,运用Verilog HDL完成程序设计,在QuartusⅡ平台进行编译、综合及下载,运用Modeisim进行程序的仿真和调试,最终完成整个控制器的设计(如图1所示)。

2.1 译码及配置寄存器模块

译码及配置寄存器模块主要负责译码和完成各寄存器间数据的分配,并且选择需要进行的插补方式。以下为各个输入端口的定义和工作方式:cs为片选信号。

低电平有效,外部处理器选中插补控制器,使其进入待命状态;rest为复位信号。低电平有效,整个控制器处于复位状态,控制器内部各个模块做初始化操作;wr为写信号,低电平有效,向插补控制器写入需要完成插补的初始点坐标和终点坐标的数据;start为插补开始信号,高电平有效,插补控制器开始进行插补;A3~A0为4位地址信号,通过地址指针的形式,将处理器数据分配给插补模块各轴的数据缓存器。其中,高位A3具有选择插补方式的功能;A3位为“0”时,插补控制器做三轴直线插补;A3位为“1”时,做两轴圆弧插补;data为16位数据总线端口。

2.2 DDA插补模块

DDA插补模块有直线插补和圆弧插补两部分,两种插补方式在一次插补过程中,只能有一种处于工作状态。直线插补能够实现3个轴的脉冲输出,完成二维或三维的直线轨迹,而圆弧插补是实现两轴的脉冲输出,实现二维的圆弧轨迹。

2.2.1 直线插补模块

当选中直线插补模块时,该模块进入工作状态。直线插补模块由数据缓存器、插补积分器和位置计数器3个部分组成。下面分别介绍各部分的设计及其功能。

(1)数据缓存器

数据缓存器共由6个16位寄存器构成,它们分别存储x,y,z三个轴的初始点坐标值及终点坐标值。数据缓存模块将直线插补的数据进行自动加载,以便于直线插补积分器调用模块内的数据。进行缓存的目的是为了保持数据的流畅性,确保直线插补不因为数据的转变而出现中断的情况。这样大大地提高直线插补的效率,同时减少因为时序问题所带来的误差。当积分器加载缓存器中的数据完毕以后,积分器接收到start信号,积分器开始进行数字积分直线插补。当数据缓存器接收到rest信号时,缓存器中所有数据全部做复位操作。

(2)位置计数器

位置计数器有3个寄存器,分别对应于三个轴。其初始值为需要插补的脉冲数目。当积分器每输出一个脉冲,计数器便做减“1”。当位置计数器为零时,则表示到达终点坐标位置,插补结束。

(3)插补积分器

插补积分器是直线插补的核心模块,由余数寄存器和被积函数寄存器构成。被积函数寄存器中存放由数据缓存器提供的终点坐标值,每当脉冲源发出1个插补迭代脉冲时,被积函数寄存器与余数寄存器的值累加1次,并将累加结果存放余数寄存器中,当累加结果超出余数寄存器容量(216)时,溢出1个脉冲。经过N=216次累加后,每个坐标轴的溢出脉冲总数就等于该坐标的被积函数值。在余数寄存器的容量一定的情况下,其输出脉冲频率与终点坐标值的大小成正比。控制器采用三轴联动,则同时有3个积分器同时进行插补运算。在该插补控制器的设计中,采用有限状态机的原理完成直线插补的实现,如图2所示,共有3个状态存在:


(1)状态IDLE:空闲状态,等待插补信号;
(2)状态S1:剩余插补脉冲数寄存;
(3)状态S2:积分累加状态。
其工作过程为:当没有启动信号时,系统继续保持在空闲状态IDLE;当有启动信号start时,系统则从数据缓存器中读入初始数据,将插补脉冲数寄存在状态S1中,若插补脉冲数不为零则转至积分累加状态S2中,在此状态中将被积函数寄存器的值与余数寄存器的值进行累加,结果送余数寄存器,若有脉冲溢出,则转入状态S1,此时输出插补脉冲,且状态S1中剩余脉冲数减“1”;若无脉冲溢出,则状态S2继续进行积分累加。最终,状态S1中的剩余脉冲为零时,返回空闲状态,插补结束。

数字积分法直线插补运用硬件描述语言VerilogHDL进行程序编写的流程图如图3所示。

在本插补控制器中,采用了“半加载”的方式实现输出脉冲的均匀分配。半加载就是在插补运算前,在余数寄存器中预置该寄存器容量一般的值,这样可以使在插补数据远小于插补器位宽的情况下,使积分器更快地输出溢出脉冲,从而使脉冲更为均匀。

积分器做插补时,无论被积函数的大小,都必须经过216次累加才能到达终点,因此各轴输出脉冲速度受被积函数大小影响,被积函数越大,脉冲输出速度越高。为了让积分器溢出速度达到最快且均匀,在插补时,把各轴被积函数寄存器中的数据同时进行左移规格化处理,使其中一轴的最高位为“1”。左移1位,相当于各轴乘2,左移2位各轴则同时乘22,以此类推。这样,在不改变各轴数据比值的情况下,提高了各轴的脉冲溢出速度。规格化后,每累加运算2次必有1次脉冲输出,很好地解决了小进给量输出不均匀的问题,插补的效率和质量大为提高。

2.2.2 圆弧插补模块

圆弧插补模块与直线插补相同,也由数据缓存器、插补积分器和位置计数器构成。两模块的数据缓存器和位置计数器功能相同,这里不再阐述。

圆弧插补积分器与直线插补积分器同样采用状态机的设计实现,但它们之间有两点区别:一是x,y轴相应坐标值存入被积函数寄存器的对应关系与直线不同,恰好是位置互调的,即y轴的被积函数寄存器中存入x值,x轴的被积函数寄存器中存入y值;二是存入的坐标值不同,直线插补时寄存的终点坐标是常数,而圆弧插补时寄存的是动点坐标,在插补过程中根据其位置的变化应更改被积函数寄存器中所存的内容。当y轴每溢出1个脉冲,x轴的被积函数寄存器加“1”;反之,当x轴每溢出1个脉冲,y轴的被积函数寄存器减“1”,减“1”的原因是x向负方向进给,动坐标不断减少。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top