T型加速演算法fpga實現思想研究
用加法器實現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(當前的速度)進行一定的累加就可以得到位移的變化和速度的變化,但與其比較的值會帶來誤差,經過分析,提高時鐘頻率可以減小誤差,也就是說合理的提高一點時鐘頻率會影響電機的加減速執行。這樣做的優點:省資源,存在一定的誤差,也就是速度可能比實際設定的速度大一點,二來減速過程最終的速度可能和初速度不相等。