用加法器实现T型曲线的理论分析
// 2017年12月28日 建立 by cofin
T型加速曲线公式:如下所示:
Vt = v0+at (1)
S = 1/2at2 + v0*t (2)
举例,如果我们要在5MHz下产生一个1Khz的方波,那么我们需要用5M/1K = 5000 来得到计数数值,然后用计数器设计,当计数到5000-1时即完成了发送一个脉冲的任务,这样的设计肯定需要用除法, 就算不会综合成除法器,但是当我们的1K改成变量时,肯定会综合出来除法器的,由此会占用大量的资源,如果这种模块并列几个的话,fpga的大量资源就会被浪费了。
改进算法:基于以上原因,我们提出了改进的算法,对上式进行变换5M = 1K * x,这里X的值很显然是常量,然后我们接着变换,5Mhz = V0 * x,这样,不同的V0就会对应不同的x值,现假设我不知道x的值,但是我已知V0的值,那么我对V0进行累计,每进行一次累计,就和5Mhz做比较,当累加的数值大于或者等于5MHz时,此时去得到累加的次数,也就是x的值了。这样的话,我设计一个基于V0的累计器就可以不用除法器了,从资源上来说,占用加法器的位数会比较多,所占加法器资源会增加,但是却省略了除法器,这样从一定程度上回节约很多资源,二来由于是大于等于式的设计,那么必定存在误差,当恰好等于5Mhz时,此时没有误差,当大于5Mhz时,必定会有误差,此时可以减1来改变误差。。。
基于以上理论,我们讨论如何进行T型加速。
设现在运行的速度时Vw,则当前速度运行一步所需要数的脉冲:5Mhz / Vw,其值乘以1/5Mhz(在5Mhz时钟下产生的)就是步进电机运行该速度的时间,而该值在公式中也就是一个脉冲,所以我们不用式(2),然后我们将上述式子进行变换,如下:
Y MHz = Vw * X;
其中Y和Vw已知,通过累加Vw(每个脉冲的上升沿来到之后),然后每次累计完毕都和Y比较,当大于等于Y时,也就说明一个脉冲发送完毕了,其累加次数X就是要数多少下。
同样的速度的变化量怎么得到呢?同样的,我对式(1)进行变换,Vt = V0 + ?V,其中?V = aT,a已知,T等于什么呢?T在该系统中是运行一步的时间,即?V = a * (5Mhz/Vw ) * (1/5Mhz),化简一下,?V = a * (1/Vw);再次化简?V * Vw = a;解释:只要对Vw进行计数,同时每计一次数就和a(加速度)进行比较,如果大于等于加速度,此时当前的计数累加值就是速度变化量?V,也就是下次速度的变化量 ,误差分析,当刚好等于时,速度的变化量就是标准正确值,当大于a时,存在微小的误差。
综上所述,我们只要对Vw(当前的速度)进行一定的累加就可以得到位移的变化和速度的变化,但与其比较的值会带来误差,经过分析,提高时钟频率可以减小误差,也就是说合理的提高一点时钟频率会影响电机的加减速运行。这样做的优点:省资源,存在一定的误差,也就是速度可能比实际设置的速度大一点,二来减速过程最终的速度可能和初速度不相等。
原文地址:https://www.cnblogs.com/cofin/p/9979685.html