您现在正在浏览:首页 > 职教文章 > 职教论文 > 基于FPGA多轴差补控制器设计与实现

基于FPGA多轴差补控制器设计与实现

日期: 2010-2-21 0:57:49 浏览: 6 来源: 学海网收集整理 作者: 佚名

摘要: 介绍了一种基于FPGA实现多轴联动插补控制器的设计方案。通过将多种互不重叠的基脉冲叠加,实现速度的连续可调;采用累加器的半加载、被积函数的左移规格化以及空间矢量速度的调速再分解等方式,使得插补运算速度更快,脉冲分配更均匀,定位更准确。该系统达到了新型分光测色平台对步进电机高速高精度的控制要求。
   关键词: FPGA;速度控制;插补运算;多轴联动
   Design and Implementation of Multi-axis Interpolation Controller Bassed on FPGA
   MA Gang, ZENG Ping, WU Zi-li
   (Research Inst. of computer Peripherals, Xidian University, Xi’an 710071)
   Abstract: A design plan for multi-axis synchronization interpolation controller based on FPGA is introduced. The continuous adjustment of speed can be realized through various overlapping of non-overlapping basic pulses; Measures of semi-loading for the accumulator, left-shift normalization for the integrand function and decomposition of the adjusted spatial speed vector were taken to make calculation faster, impulse distribution more uniform and location more precise.This system has achieved the new-type spectrophotometer platform’s control requirement on high-speed and high precision of stepping motor.
   key words: FPGA;speed control;interpolation;computation;multi-axis synchronization
   1 引言
   众所周知在连续轨迹控制中,我们不仅关心测量头到达目标点的精度,而且必须保证测量头能沿着我们所希望的轨迹,按规定的速度实现平稳而正确的运动。连续轨迹控制比较复杂,它需要通过插补运算,进行多轴脉冲的同时分配,进行协调控制,才能实现精确的空间轨迹跟踪。插补控制器的作用是完成运动轨迹的拟合,是一种计算机数控系统的基本单元。目前的数控系统中多采用软件插补器,虽然软件插补器具有很多的优点,但是由于其插补运算的串行性,使得运算速度较低,相比于硬件插补器的并行运算速度,有很大的局限性。特别是难以满足高速度、高精度控制系统的要求。传统上多采用单片机来控制步进电机,由于单片机资源有限,通常会采用查表法来实现脉冲间隔的调配,以达到变速控制的目的。查表法虽然控制简单,但是缺乏灵活性,每次速度和加速度的变化都要修改表中的延迟时间,难以满足用户对速度实时控制的要求。
   本系统是基于FPGA(Field Programmable Gate Array)用硬件描述语言Verilog实现的多轴联动数字积分(DDA)直线插补器。克服了单片机控制中,串行运算速度慢,修改延时表的灵活性差等不足。但是在数字插补控制系统中,对于速度的调节,往往采用计数器或锁相环技术进行脉冲频率的控制。 其不足是只能进行整数倍分之一的分频,不能进行任意连续的分频控制。为此笔者通过设置多路不相重叠的基脉冲,并根据所需要的速度选择合适的几路脉冲进行叠加,得到任意频率的速度脉冲,提高了灵活性。在DDA直线插补器部分,采用累加器的的“半加载”、电机运行步数的“左移规格化”、引进“虚轴”对空间矢量速度进行调速再分解等措施, 对现有的硬件实现多轴联动的方式进行了优化, 从而进一步提高了插补精度、运算速度及有效的降低了噪声。
   2 插补控制器的结构
   本系统主要包括三部分见图1:输入输出端口模块、电机的速度控制模块和多轴插补控制模块。
   系统的输入端口信息包括系统时钟(clock)、复位信号(reset)、初始速度(initial_speed)、加速度(accelerator)等简单控制信息以及经上层软件处理后的信息,如 L 轴(虚轴)电机的步数(l_steps)、X 轴电机的步数(x_steps)、Y 轴电机的步数(y_steps)及数字积分器(DDA)所需要的积分器位宽(length_reg)。输出端口信息包括 X 轴电机进给脉冲和 Y 轴电机进给脉冲。
   速度控制模块主要完成将用户实时输入的初始速度、加速度及步进电机控制参数叠加后输出。主要由22种基脉冲产生模块、脉冲叠加模块及总脉冲输出控制模块三部分构成。
   多轴差补控制模块主要是通过以 L 轴的速度波形为基准,以DDA算法产生的脉冲进给序列为依据,对“虚轴”L上的空间矢量速度进行调速,然后分解到 X 轴、Y 轴上,最终达到多轴联动的目的。
   3 速度控制模块的设计
   步进电机的加减速控制是步进电机位置系统中的典型应用。步进电机在启动的时候需要控制其加速度,因为步进电机的 图1 插补控制器的总体结构
   最高频率会受限制,一般为几百HZ到三 Fig.1 Block Diagram of Interpolation Controller
   四千HZ,这样电机以太高的频率启动会出现“失步”,甚至不转。一种比较好的启动与定位控制方式是加减速定位控制,就是通过加速、恒定高速、减速的过程使电机从一个位置运行到另一个位置。本模块主要分三部分实现步进电机的速度控制,下面对每一部分进行详述。
   3.1 基脉冲产生
   通常在数字电路设计中采用分频的方法得到需要的脉冲信号,但是这种方法不能实现非整数倍分之一的分频,图1中基脉冲产生模块(PULSE_OUT_22)采用不同频率的基脉冲叠加方式,以实现步进电机进给速度连续可调。本设计采用ALTERA公司的Cyclone 系列EP1C12Q240C8 FPGA,所采用的晶振频率为32MHZ,所以该模块首先要对晶振频率分频,设置3位宽的累加器,每个系统脉冲到来累加一次,将累加器的最高位作为新的分频时钟进行输出,则得到4MHZ的时钟,其输出的脉冲频率范围是0 4194303pps。再设置一个22位宽的计数器,利用其每一位作为一路基脉冲,就得到了22种不同频率且互相不重叠的基脉冲信号。
   3.2 基脉冲叠加
   脉冲叠加模块(PULSE_SUM)就是根据每秒钟的脉冲个数来控制脉冲的输出,其实质是根据每秒钟的脉冲个数,将22种频率不同且互相不重叠的脉冲信号叠加后输出。这样的脉冲不仅包含了速度、加速度等控制步进电机运行的参数信息,还实现了频率在允许的范围内的连续可调。其叠加原理见以下公式: 。
   由方程式可以知道,最终输出的脉冲实质是由1/2CLK、1/4CLK、1/8CLK……1/4194304CLK这22种基脉冲中的某些合成的。该模块的实现如下:首先,就是对每秒钟脉冲个数的更新,当加速度不为“0”的时候,每秒钟要输出的脉冲个数等于前一秒钟输出的脉冲个数再加或减加速度信息的低16位。模块中速度信息的位宽是16位,而加速度accelerator位宽为17位,所以最高位用来表示加减速控制,若最高位为“1”,表示加速,若为 “0”表示减速。其次,就是基脉冲的叠加。每一路基脉冲的输出,是由上一步中得到的每秒钟脉冲个数控制的。例如若每秒钟输出73个脉冲,则对应的二进制是0000000001001001。所以只需将两路信号做与运算,则为“1”的基脉冲打开,为“0”的关闭。
   3.3 脉冲输出控制
   “虚轴”的脉冲输出控制模块L_OUT_WAVE是根据步进电机的位置信息,输出步进电机的走步距离(走的总步数)。其实现是通过设置24位宽的计数器对该模块的输入脉冲pulse_sum进行计数,然后将计数结果与数据预处理中得到的 L 轴电机步数值l_steps进行比较。当计数值小于l_steps时,一直输出脉冲;当计数值等于l_steps时,控制不再输出脉冲。
   4 插补模块的设计
   平面直线插补器由两个数字积分器组成,每个坐标的积分器由累加器和被积函数寄存器组成。被积函数寄存器存放终点坐标值,每隔一个时间间隔△t,将被积函数值向各自的累加器中累加。X轴累加器溢出的脉冲驱动X轴电机,Y轴累加器溢出脉冲驱动Y轴电机。积分器内还设置一个脉冲计数器,用来做脉冲个数的统计,进行终点判断。本设计在以下三方面做了优化,与传统实现方式相比,步进电机运行更平稳,噪声更小并且还达到了系统的高速高精度的设计要求。
   首先,为了实现高精度的要求以及加快插补运算速度,对累加器 “半加载”。即在累加器运算之前,累加器初始化不是为0,而是设置为累加器容量的一半。本设计的累加器为24位,所以初始值为800000H。
   其次,为了提高进给脉冲的均匀性,降低噪声以及加快插补运算速度,设计了“左移规格化”模块。即在终点坐标送入被积函数寄存器前,先同时进行左移,直到某一个轴的最高位出现“1”,则左移结束并将左移结果送入被积函数寄存器。经过上述处理后,各轴的脉冲进给频率扩大同样的倍数,但是它们之间的比值不变,所以运动轨迹不会变。只是脉冲序列的“0”和“1”更均匀,这样电机运行更加平稳,噪声更小。被积函数的增加,使得每累加两次必有一次溢出,加快了插补运算速度,也有利于实现高速度。
   最后,为了进一步提高电机运行的精度,提出了“虚轴”的概念。传统的实现方式中,平面直线插补是对X、Y中的长轴进行调速,然后合成空间矢量速度,这种方式无法达到对合成矢量速度进行精确控制的目的。为了提高精度,本设计直接对空间矢量速度进行调速,然后将速度分解到各个“实轴”上去。所以整个插补模块的输入端不仅要有“实轴”X、Y的信息,还增加了“虚轴”L的信息。对于X、Y 两轴联动有: ;对于X、Y、Z三轴联动有: ;这里算出的矢量长度 ,就作为DDA插补算法的绝对长轴。其中,x_steps、y_steps及l_steps的计算是在数据预处理中完成的,前两个数据主要是由源点到目标点的相对距离除以各轴的脉冲当量得到的步数值,而虚轴L电机的步数l_steps, 表1 脉冲序列比较表
   是由长度 除以两实轴电机的脉冲当量最小 Table.1 Contrastive Table of pulse list
   X 向电机脉冲序列 Y向电机脉冲序列
   方式改变前 00010010100100101 00001000100010001
   方式改变后0110111101 010101010值得到的。以 X 轴方向电机运行6步,Y轴方向电机运行4步,累加器容量为16 为例,方式改变前后的脉冲进给序列比较见表1,很明显方式改变后,累加次数锐减,脉冲序列中的“0”和“1”更加均匀。
   5 实验结果及结论
   笔者采用Altera 公司的Quartus II 6.0作为集成开发的软环境,设计采用Verilog Fig.2 Emulation Result
   硬件描述语言,仿真采用ModelSimSE 6.0。芯片选用Cyclone EP1C12Q240C8FPGA,共用去5326个逻辑单元,133个管脚。图2是经数据预处理后得到的相对坐标原点(0,0)到点(44,48)的仿真波形。图2最后两行波形是X轴、Y轴电机对应的进给脉冲波形,首先经过了10步加速,然后分别高速匀速24步、28步,最后是10步减速。验证结果完全符合预期效果,能够很好的控制平面内的两轴步进电机实现精确的轨迹跟踪。并且达到了高速度、高精度的性能要求,实现了对速度实时调节的目标。
   运动插补技术日新月异,高速度、高精度和开放性好将是运动控制器的发展趋势。本设计不仅改变了软件实现中的不足,还通过对传统硬件实现方式的优化,在速度、精度等方面进行了改进。由于开发时间比较紧,所以FPGA的程序还存在很大的优化空间,相信在保证功能和性能的前提下,经过代码的优化可以大大减少逻辑单元的使用量。
   参考文献
   [1] 王诚,吴继华,范丽珍. Alera FPGA/CPLD设计[M]. 人民邮电出版社. 2005
   [2] 冼进,戴仙金,潘懿萱. Verilog-HDL数字控制系统设计实例[M]. 中国水利水电出版社. 2007
   [3] 蒋志东,丁庆生. 基于FPGA实现的多轴数控雕刻机系统[J]. 机电产品开发与创薪. 2006(19):129-131
   [4] 马志栋,闫建国. 动态分光侧色仪硬件系统的研制[M]. 西北工业大学出版社. 2003.
   [5] 闫永志,王宏,杨志家.一种高精度运动控制IP核设计与实现[J].微计算机信息, 2006(22):45-47

返回顶部