一种基于FPGA实现脉冲均匀输出的方法及装置转让专利

申请号 : CN201810383690.1

文献号 : CN108549329B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王金领卢鸥徐百里邹骞卓宏治魏威岳巍

申请人 : 海天塑机集团有限公司

摘要 :

本发明公开了一种基于FPGA实现脉冲均匀输出的方法及装置,涉及工业数控技术领域,以FPGA系统时钟为基准产生同步时钟,与CPU进行同步数据处理和多轴脉冲发送同步,本发明采用的方法通过CPU将脉冲串参数同步写入FPGA,并根据FPGA的系统时钟,通过预设的加法运算对多个脉冲串的脉冲输出进行处理,使FPGA的脉冲均匀输出,提高了输出脉冲的质量以及精度,相对于传统的除法运算,加法运算不会产生余数,降低脉冲输出的精度,同时加法运算减少了运算所需的时间,降低硬件资源消耗。

权利要求 :

1.一种基于FPGA实现脉冲均匀输出的方法,其特征在于,包括步骤:步骤一、获取插补周期及FPGA的系统时钟信息;

步骤二、根据插补周期同步时钟,读取脉冲串参数并获取所述脉冲串的初始相位值作为预设数值;

步骤三、判断FPGA的系统时钟是否触发,若是,则获取所述插补周期内的所需发送的脉冲个数以对所述预设数值进行累加;

步骤四、获取所述插补周期内输出脉冲的电平状态,判断所述电平状态是否为高电平,若是,执行步骤五,若否,则执行步骤六;

步骤五、判断所述预设数值是否大于所述插补周期内系统时钟高电平所占个数,若是,则将所述输出脉冲翻转,改变为低电平状态输出并将所述预设数值与所述系统时钟高电平所占个数的差值作为所述预设数值的初始值,转至步骤三;

步骤六、获取所述插补周期内系统时钟个数与所述插补周期内系统时钟高电平所占个数的差值作为第一差值,判断所述预设数值是否大于所述第一差值,若是,则将所述输出脉冲翻转,改变为高电平状态输出并将所述预设数值与所述第一差值的差值作为所述预设数值的初始值,转至步骤三。

2.根据权利要求1所述的一种基于FPGA实现脉冲均匀输出的方法,其特征在于,所述步骤一还包括步骤:采用FPGA系统时钟产生插补周期同步时钟,将脉冲串参数同步写入FPGA。

3.据权利要求1或2所述的一种基于FPGA实现脉冲均匀输出的方法,其特征在于,所述步骤二还包括:通过所述插补周期同步时钟,产生锁存信号以将所述脉冲串参数信息锁存至预设寄存器中。

4.权利要求1所述的一种基于FPGA实现脉冲均匀输出的方法,其特征在于,所述脉冲串参数包括插补周期所需发送的脉冲个数、插补周期内系统时钟高电平所占个数、脉冲串初始相位值。

5.根据权利要求1所述的一种基于FPGA实现脉冲均匀输出的方法,其特征在于,还包括步骤:获取所述FPGA系统时钟周期,接收插补周期时长,计算所述插补周期内系统时钟个数上式中,Clocks表示所述插补周期内系统时钟个数,SYSCLock表示系统时钟周期,T表示插补周期时长。

6.根据权利要求5所述的一种基于FPGA实现脉冲均匀输出的方法,其特征在于,还包括步骤:获取所述系统时钟的占空比,计算脉冲高电平所占个数

PulseHi=Clocks*DutyRatio

上式中,PulseHi表示系统时钟高电平所占个数,Clocks表示所述插补周期内系统时钟个数,DutyRatio表示所述系统时钟的占空比。

7.根据权利要求1所述的一种基于FPGA实现脉冲均匀输出的方法,其特征在于,所述步骤六之后还包括步骤:判断所述系统时钟的触发次数是否达到所述插补周期内的系统时钟个数,若是,则将所述插补周期内的脉冲进行输出。

8.一种基于FPGA实现脉冲均匀输出的装置,其特征在于,包括:数据存储模块:用于获取插补周期及FPGA的系统时钟信息;

数据读取模块:用于根据插补周期同步时钟,读取脉冲串参数并获取所述脉冲串的初始相位值作为预设数值;

累加模块:用于判断FPGA的系统时钟是否触发,若是,则获取所述插补周期内的所需发送的脉冲个数以对所述预设数值进行累加;

电平判断模块:用于获取所述插补周期内输出脉冲的电平状态,判断所述电平状态是否为高电平,若是,转至低电平输出模块,若否,则转至高电平输出模块;

低电平输出模块:用于判断所述预设数值是否大于所述插补周期内系统时钟高电平所占个数,若是,则将所述输出脉冲翻转,改变为低电平状态输出并将所述预设数值与所述系统时钟高电平所占个数的差值作为所述预设数值的初始值并转至累加模块;

高电平输出模块:用于获取所述插补周期内系统时钟个数与所述插补周期内系统时钟高电平所占个数的差值作为第一差值,判断所述预设数值是否大于所述第一差值,若是,则将所述输出脉冲翻转,改变为高电平状态输出并将所述预设数值与所述第一差值的差值作为所述预设数值的初始值,并转至累加模块。

说明书 :

一种基于FPGA实现脉冲均匀输出的方法及装置

技术领域

[0001] 本发明涉及工业数控技术领域,尤其涉及一种基于FPGA实现脉冲均匀输出的方法及装置。

背景技术

[0002] 在数控系统中,连接多个脉冲串类型驱动器时,一般单独使用一个FPGA进行多路脉冲串同时输出控制,实现多轴的同步运行。但是传统的FPGA实现脉冲串输出一般采用除法运算,即在每个插补周期开始时,由一次插补周期内FPGA的系统时钟数Clocks除以该周期需要输出的脉冲数Pulse,从而得到每产生一个脉冲需要间隔的时钟数Period,即:Period=Clocks/Pulse。
[0003] 如果Clocks能够被Pulse整除,则该除法算式不会产生余数,按照每Period个FPGA时钟产生一个脉冲输出,则在一个插补周期结束时,就会产生Pulse个脉冲输出。但是在Clocks不能够被整除时,则会产生余数,如果这时候仍然按照每间隔Period个时钟周期产生一个脉冲输出,则有可能在一个插补周期结束时,产生超过Pulse个脉冲的输出。
[0004] 一般解决这个算法存在的问题,是在脉冲输出部分添加一个积分电路,将每次的余数计入积分器,在积分器数值达到Period脉冲时,进行一次脉冲输出的修正,从而达到最终输出Pulse个脉冲的目的。这样虽然能够输出正确的脉冲个数,但是在脉冲修正的过程中,必然会造成输出脉冲频率的变化,从而会导致设备进给速度的变化,可能会造成设备的抖动或者刀具纹路的变化,从而降低了设备的加工精度。

发明内容

[0005] 本发明要解决的技术问题目的在于提供一种基于FPGA实现脉冲均匀输出的方法及装置,用以解决现有数控系统中脉冲串输出不均匀,导致产生精度误差的问题。
[0006] 为了实现上述目的,本发明采用的技术方案如下:
[0007] 一种基于FPGA实现脉冲均匀输出的方法,包括步骤:
[0008] 步骤一、获取插补周期及FPGA的系统时钟信息;
[0009] 步骤二、根据插补周期同步时钟,读取脉冲串参数并获取所述脉冲串的初始相位值作为预设数值;
[0010] 步骤三、判断FPGA的系统时钟是否触发,若是,则获取所述插补周期内的所需发送的脉冲个数以对所述预设数值进行累加;
[0011] 步骤四、获取所述插补周期内输出脉冲的电平状态,判断所述电平状态是否为高电平,若是,执行步骤五,若否,则执行步骤六;
[0012] 步骤五、判断所述预设数值是否大于所述插补周期内系统时钟高电平所占个数,若是,则将所述输出脉冲翻转,改变为低电平状态输出并将所述预设数值与所述系统时钟高电平所占个数的差值作为所述预设数值的初始值,转至步骤三;
[0013] 步骤六、获取所述插补周期内系统时钟个数与所述插补周期内系统时钟高电平所占个数的差值作为第一差值,判断所述预设数值是否大于所述第一差值,若是,则将所述输出脉冲翻转,改变为高电平状态输出并将所述预设数值与所述第一差值的差值作为所述预设数值的初始值,转至步骤三。
[0014] 进一步的,所述步骤一还包括步骤:
[0015] 采用FPGA系统时钟产生插补周期同步时钟,将脉冲串参数同步写入FPGA。
[0016] 进一步的,所述步骤二还包括:
[0017] 通过所述插补周期同步时钟,产生锁存信号以将所述脉冲串参数信息锁存至预设寄存器中。
[0018] 进一步的,所述脉冲串参数包括插补周期所需发送的脉冲个数、插补周期内系统时钟高电平所占个数、脉冲串初始相位值。
[0019] 进一步的,还包括步骤:
[0020] 获取所述FPGA系统时钟周期,接收插补周期时长,计算所述插补周期内系统时钟个数
[0021]
[0022] 上式中,Clocks表示所述插补周期内系统时钟个数,SYSCLock表示系统时钟周期,T表示插补周期时长。
[0023] 所述获取所述FPGA系统时钟周期,接收插补周期时长,计算所述插补周期内系统时钟个数的步骤中还包括步骤:
[0024] 获取所述系统时钟的占空比,计算脉冲高电平所占个数
[0025] PulseHi=Clocks*DutyRatio
[0026] 上式中,PulseHi表示系统时钟高电平所占个数,Clocks表示所述插补周期内系统时钟个数,DutyRatio表示所述系统时钟的占空比。
[0027] 进一步的,所述步骤六之后还包括步骤:
[0028] 判断所述系统时钟的触发次数是否达到所述插补周期内的系统时钟个数,若是,则将所述插补周期内的脉冲进行输出。
[0029] 一种基于FPGA实现脉冲均匀输出的装置,包括:
[0030] 数据存储模块:用于获取插补周期及FPGA的系统时钟信息;
[0031] 数据读取模块:用于根据插补周期同步时钟,读取脉冲串参数并获取所述脉冲串的初始相位值作为预设数值;
[0032] 累加模块:用于判断FPGA的系统时钟是否触发,若是,则获取所述插补周期内的所需发送的脉冲个数以对所述预设数值进行累加;
[0033] 电平判断模块:用于获取所述插补周期内输出脉冲的电平状态,判断所述电平状态是否为高电平,若是,转至低电平输出模块,若否,则转至高电平输出模块;
[0034] 低电平输出模块:用于判断所述预设数值是否大于所述插补周期内系统时钟高电平所占个数,若是,则将所述输出脉冲翻转,改变为低电平状态输出并将所述预设数值与所述系统时钟高电平所占个数的差值作为所述预设数值的初始值,转至累加模块;
[0035] 高电平输出模块:用于获取所述插补周期内系统时钟个数与所述插补周期内系统时钟高电平所占个数的差值作为第一差值,判断所述预设数值是否大于所述第一差值,若是,则将所述输出脉冲翻转,改变为高电平状态输出并将所述预设数值与所述第一差值的差值作为所述预设数值的初始值,转至累加模块。
[0036] 采用本发明,通过加法运算,保证了脉冲串在插补周期内的均匀输出,提高输出脉冲的精度及质量,减少了脉冲输出算法的运算所需时间,降低硬件资源消耗。

附图说明

[0037] 图1是本发明提供的一种基于FPGA实现脉冲均匀输出的方法流程图;
[0038] 图2是本发明提供的一种基于FPGA实现脉冲均匀输出的装置结构图。

具体实施方式

[0039] 以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
[0040] 实施例一
[0041] 如图1所示,本实施例提供了一种基于FPGA实现脉冲均匀输出的方法,包括步骤:
[0042] S1、获取插补周期及FPGA的系统时钟信息;
[0043] S2、根据插补周期同步时钟,读取脉冲串参数并获取所述脉冲串的初始相位值作为预设数值;
[0044] S3、判断FPGA的系统时钟是否触发,若是,则获取所述插补周期内的所需发送的脉冲个数以对所述预设数值进行累加;
[0045] S4、获取所述插补周期内输出脉冲的电平状态,判断所述电平状态是否为高电平,若是,执行步骤五,若否,则执行步骤六;
[0046] S5、判断所述预设数值是否大于所述插补周期内系统时钟高电平所占个数,若是,则将所述输出脉冲翻转,改变为低电平状态输出并将所述预设数值与所述系统时钟高电平所占个数的差值作为所述预设数值的初始值,转至步骤S3;
[0047] S6、获取所述插补周期内系统时钟个数与所述插补周期内系统时钟高电平所占个数的差值作为第一差值,判断所述预设数值是否大于所述第一差值,若是,则将所述输出脉冲翻转,改变为高电平状态输出并将所述预设数值与所述第一差值的差值作为所述预设数值的初始值,转至步骤S3。
[0048] 在数控系统中,通过脉冲串来对各种设备或刀具等进行控制,例如,在连接多个脉冲串类型驱动器时,使用一个FPGA进行多路脉冲同时输出控制,实现多轴同步运行。
[0049] 本实施例在对脉冲进行均匀输出时,首先,需要获取插补周期的时间长度信息,一般插补周期在2-4ms之间,本实施例以2ms为例,作为插补周期,同时将FPGA的系统时钟频率设定为100MHZ,插补周期及FPGA的系统时钟信息都需要使用者预先生成或设置。
[0050] 步骤S2中,脉冲串参数主要包括有Clocks、Pulse、PulseHi、Phase。其中,Clocks表示插补周期内FPGA的时钟个数,通过获取插补周期及FPGA的系统时钟信息进行计算,其计算公式为
[0051]
[0052] 上式中,SYSCLock表示系统时钟周期,T表示插补周期时长,通过计算得到Clocks的数值为200000。
[0053] Pulse表示插补周期内需要发送的脉冲个数,需要通过CPU或控制器向FPGA的双口RAM中写入,本实施例中,将Pulse的值设定为101。
[0054] PulseHi表示在插补周期内系统时钟高电平所占个数,其需要根据Clocks以及FPGA系统时钟的占空比DutyRatio进行计算,计算公式为
[0055] PulseHi=Clocks*DutyRatio
[0056] 上式中的系统时钟的占空比DutyRatio是指在一个脉冲循环内,通电时间相对于总时间所占的比例,根据步骤S1中获取的FPGA系统时钟信息,提取其中的占空比数据,本实施例中以传统算法中的50%占空比为例,作为DutyRatio,计算得到PulseHi的数值为100000。
[0057] 本申请中,为了方便描述,将步骤S2中的预设数值用字符SUM进行代替,SUM的初始值为零,在步骤S2中获取脉冲串的初始相位值作为SUM的数值,初始相位值可以输入不同的数值,本实施例中,以初始相位值为0为例,即此时SUM的值为0,在整个初始阶段,CPU或者控制器会在一个同步时钟周期中给各个脉冲串赋一次相位初始值,下一个周期之后相位初始值将保持为零。
[0058] 步骤S3中,FPGA的系统时钟每触发一次,SUM将进行一次累加,累加公式为SUM=SUM+Pulse,本实施例中,Pulse的值设定为101。
[0059] 步骤S4中,输出脉冲有高电平状态和低电平状态,当为高电平状态时,将会进入步骤S5;当为低电平状态时将会进入步骤S6。
[0060] 步骤S5中,通过判断条件SUM≥PulseHi进行判断得到判断结果,若是,则将脉冲输出翻转,将高电平状态翻转为低电平状态输出,并将SUM值通过公式
[0061] SUM=SUM-PulseHi
[0062] 进行初始化,例如,当在步骤S3中SUM累加991次后,SUM的值变为100091,减去PulseHi的值100000之后,得到SUM的初始化后的初始值为91。
[0063] 将SUM的值初始化后,将转至步骤S3以对SUM的值继续进行累加,重复循环直到整个插补周期的脉冲均匀输出。
[0064] 若判断条件SUM≥PulseHi的判断结果为否,即SUM小于PulseHi,则继续转至步骤S3进行累加。
[0065] 步骤S6中,若输出脉冲为低电平状态,则根据判断条件SUM>CLocks-PulseHi进行判断,若是,则将低电平状态翻转为高电平状态进行输出,并通过公式
[0066] SUM=SUM-(CLocks-PulseHi)
[0067] 对SUM的值进行初始化,转至步骤S3以进行累加,若否,则不对SUM的值进行初始化,直接进入步骤S3,本实施例中,以CLocks的数值为200000、PulseHi的数值为100000为例,两者得到的差值为100000,当SUM通过步骤S3累加了991次后,数值为100091,刚好大于两者差值,则会将SUM的值进行初始化,初始化后的SUM的值为100091减去两者的差值,即91。
[0068] 若SUM的值通过公式初始化两次之后,完成了一个完整的脉冲周期输出,[0069] 本实施例中,步骤S6之后还包括:
[0070] 当插补周期内的系统时钟个数全部触发完毕,以本实施例中的系统时钟个数200000个为例,当系统时钟触发200000次之后,则一个插补周期内的脉冲输出完成。
[0071] 通过不断的循环累加和上述公式的初始化,完成所有的脉冲周期输出,能够达到一个插补周期内脉冲串的均匀输出,同时在以后每一个插补周期内改变脉冲个数Pulse,也能保证脉冲串的均匀输出,通过加减法运算,有效的减少了运算负荷,降低硬件资源消耗。
[0072] 本实施例中,步骤S1还包括步骤:
[0073] 采用FPGA系统时钟产生插补周期同步时钟,将脉冲串参数同步写入FPGA。
[0074] 具体地,
[0075] FPGA的系统时钟能够保证在FPGA内部各个寄存器的时间相等,没有延时,即通过CPU或控制器能够同步将脉冲参数写入到FPGA中。
[0076] 本实施例中,步骤S2还包括步骤:
[0077] 通过所述插补周期同步时钟,产生锁存信号以将所述脉冲串参数信息锁存至预设寄存器中。
[0078] 在通过CPU或控制器同步写入脉冲参数时,FPGA产生锁存信号,将脉冲参数进一步的存储在发送寄存器中,当需要输出脉冲时,只需从发送寄存器中获取脉冲参数,输出相应的脉冲信号。
[0079] 如图2所示,本实施例还提供了一种基于FPGA实现脉冲均匀输出的装置,包括:
[0080] 数据存储模块21:用于获取插补周期及FPGA的系统时钟信息;
[0081] 数据读取模块22:用于根据插补周期同步时钟,读取脉冲串参数并获取所述脉冲串的初始相位值作为预设数值;
[0082] 累加模块23:用于判断FPGA的系统时钟是否触发,若是,则获取所述插补周期内的所需发送的脉冲个数以对所述预设数值进行累加;
[0083] 电平判断模块24:用于获取所述插补周期内输出脉冲的电平状态,判断所述电平状态是否为高电平,若是,转至低电平输出模块,若否,则转至高电平输出模块;
[0084] 低电平输出模块25:用于判断所述预设数值是否大于所述插补周期内系统时钟高电平所占个数,若是,则将所述输出脉冲翻转,改变为低电平状态输出并将所述预设数值与所述系统时钟高电平所占个数的差值作为所述预设数值的初始值;
[0085] 高电平输出模块26:用于获取所述插补周期内系统时钟个数与所述插补周期内系统时钟高电平所占个数的差值作为第一差值,判断所述预设数值是否大于所述第一差值,若是,则将所述输出脉冲翻转,改变为高电平状态输出并将所述预设数值与所述第一差值的差值作为所述预设数值的初始值,转至累加模块。
[0086] 本装置中,累加模块可以通过FPGA中的累加器对数值进行累加,FPGA中还设置有双端口RAM,包括数据存储模块和数据读取模块,接收CPU或控制器写入的脉冲参数。
[0087] 通过FPGA提供的同步时钟,保证插补周期的精确,同时根据加法算法,解决了现有算法采用除法可能有余数从而导致脉冲串输出不均匀的情况,加法运算也有效的减少了运算负荷,降低硬件资源消耗,同时,不同于传统固定的脉冲参数以及初始相位,本发明脉冲参数以及初始相位值可以进行调节,能够更加灵活运用,适用性更广泛。
[0088] 本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。