基于FPGA精插补方法改进
2018-06-02王金领
王金领 卢 鸥
(海天塑机集团有限公司技术中心,浙江 宁波 315800)
在数控系统中,各个运动轴的插补算法是运动控制的核心之一,良好的插补算法是设备加工精度、运行平稳的关键因素。
数控系统的插补实现一般有两种方式:(1)“一次插补法”,又被称为“基准脉冲插补”。这种插补算法实现比较简单,所有的插补运算全部由一个CPU实现,在每次插补运算中每个进给轴只能产生一个脉冲,所以无论怎样改进插补算法,其产生的脉冲频率都会受到CPU频率的限制。并且因为采用单CPU工作方式,如果CPU占用率过高,任务调度开销严重,还会出现脉冲频率波动现象。(2)“二次插补法”现代中高档数控系统基本采用了二次插补方式,该算法采用两块CPU分别进行粗插补和精插补,粗插补CPU一般由ARM或DSP担任,实现加工代码译码、速度控制、粗插补等运算;而精插补一般是采用FPGA实现,这是利用了FPGA超强的并行运算能力,可以同时处理多个运算。
由于二次插补方式的这些优点,所以现代系统基本都是采用该方式实现运动插补。
1 传统FPGA精插补实现方法
传统的FPGA精插补方式一般采用除法运算,在每个插补周期开始时,由一次插补周期内FPGA的时钟数Clocks除以该周期需要输出的脉冲数Pulse,从而得到每产生一个脉冲需要间隔的时钟数Period,即:
Period=Clocks÷Pulse
(1)
如果Clocks能够被Pulse整除,则该除法算式不会产生余数,按照每Period个FPGA时钟产生一个脉冲输出,则在一个插补周期结束时,就会产生Pulse个脉冲输出。但是在Clocks不能够被整除时,则会产生余数,如果这时候仍然按照每间隔Period个时钟周期产生一个脉冲输出,则有可能在一个插补周期结束时,产生超过Pulse个脉冲的输出。
若要解决这个算法存在的问题,一般是在脉冲输出部分添加一个积分电路,将每次的余数计入积分器,在积分器数值达到Period脉冲时,进行一次脉冲输出的修正,从而达到最终输出Pulse个脉冲的目的。
虽然能够输出正确的脉冲个数,但是在脉冲修正的过程中,必然会造成输出脉冲频率的变化,从而会导致设备进给速度的变化,可能会造成设备的抖动或者刀具纹路的变化,从而降低了设备的加工精度。
2 FPGA精插补算法的改进
为了解决传统FPGA精插补算法的缺陷,产生理论上完全均匀化的脉冲输出,对传统精插补算法进行了改进。在每个插补周期开始时,利用同步时钟将脉冲累加器Sum清零,在以后的每个FPGA时钟将累加器的值加上插补周期需要输出的脉冲数Pulse,然后判断累加器的值是否超出插补周期内FPGA的时钟周期数Clocks/ 2,若是则产生一个脉冲的上升沿,如果累加器的值超出Clocks,则产生一个下降沿输出,同时将Sum值减去Clocks。这样在一个插补周期内累加器的累加值每次累加Pulse,共计累加了Clocks次,在不考虑溢出的情况下总的累加值为
Sum=Pulse×Clocks
(2)
由此可以算出,累加器一共溢出了Sum/Clocks次,也就是Pulse次,也就产生了一个占空比为50%,脉冲数为Pulse的脉冲。并且是误差值在一个FPGA时钟周期之内的理论上最佳均匀化的脉冲输出。
该算法只采用了加法运算,并且不需要前置处理,仅仅利用加法产生的Sum值与Clocks比较作为脉冲的输出信号,就产生了均匀化的脉冲输出。大大提高了FPGA的执行效率和算法的简便性。
3 新插补算法的功能扩展
除了良好地实现了均匀化脉冲输出的目的,该算法还可以灵活地进行一些功能扩展。
3.1 波形相位移动
有时要求输出波形的起始脉冲为高电平输出或低电平输出,或者要求首脉冲要进行相位移动以满足驱动设备的要求。
若要实现以上要求,只需要根据不同的要求设置脉冲累加器Sum的初始值,初始值越大,则波形的相位向左移动,初始值变小,则波形的相位向右移动。只要设置合适的初始值就可以得到不同相位的输出脉冲,并且产生的仍然是准确的、均匀化的脉冲输出。
3.2 波形倍频输出
当需要精插补产生N倍的输出脉冲时,只需要将累加器每次的累加值乘以N就可以产生N倍Pulse的脉冲输出。并且产生的仍然是准确的、均匀化的脉冲输出。
3.3 可调占空比PWM输出
在数控系统的模拟输出方式或者一些需要DA输出的场合,可以将PWM波输出端加滤波电容,产生模拟量的输出。模拟电压的高低可以由PWM的占空比控制,PWM的占空比越高,则滤波产生的电压越高;PWM的占空比越低,则滤波产生的电压越低。
模拟输出电压值Vo、和脉冲输出高电平的电压VDD以及PWM占空比R之间的关系为:
Vo=VDD×R
(3)
若要产生可调占空比的PWM波形输出,首先计算出需要进行上升沿输出的累加器值PP:
PP=Clocks×(1-R)
(4)
与产生占空比50%脉冲的相比,累加器仍然在每个FPGA时钟累加Pulse,只是不再判断累加器的值是否大于等于Clocks/ 2,而是判断累加器的值是否大于等于PP,若是则产生一个脉冲的上升沿,如果累加器的值超出Clocks,则产生一个下降沿输出,同时将Sum值减去Clocks。这样就会产生一个占空比为R,每个插补周期内输出脉冲个数为Pulse的PWM波形。
这种PWM波不仅可以调频,而且可以调整输出的占空比,具有非常广泛的应用范围。
4 结语
本文介绍了一种FPGA精插补的实现算法,在实现了理论上的均匀化脉冲输出外,并且显著降低了FPGA代码的复杂度。并且该算法还可以方便地进行输出脉冲的相位平移、输出脉冲的倍频输出以及输出可调占空比的PWM波,具有非常广泛的应用范围。
[1]闫莎莎.基于DPS+CPLD的多轴运动控制器平台设计及单轴伺服运动控制算法研究[D].杭州:浙江大学,2010.
[2]徐霞棋 .基于 DSP 的多轴运动控制系统设计[D].上海:上海交通大学,2007.
[3]徐志军 . CPLD/FPGA的开发与应用[M]. 北京:电子工业出版社,2002.