使用單片機做步進電機控制的時候,經常碰到一些非常傷腦筋的問題,一是寫步進電機控制時許確實很麻煩,正轉反轉,加速減速,得研究很長時間數學公式,特別是S加減速運動;二是單片機的計算速度不行,要求脈沖速度快的話,加減速需要計算變化的脈沖頻率,計算不過來,特別是兩個或多個電機要聯動控制或者插補基本上就不行了,兩個電機運動會出現明顯的偏差。
所以能不能有其他簡單快速的方案了?
經過很長時間研究后,我發現常規的運動控制完全可以使用單片機+一個專用運動控制芯片HMC80xx來實現,這樣的話,復雜的加減速控制程序,多個步進高精度聯動都由專用運動芯片來完成,單片機只需要通過通信接口寫入控制命令就可以了。
話不多說,我們來看看具體的實現方案:
O1CN01kxEHhH1TEnoNcsNd1_!!1087172351.png (51.44 KB, 下載次數: 87)
下載附件
2021-3-7 12:13 上傳
O1CN01hneeQ01TEnimt97Co_!!1087172351.jpg (174.16 KB, 下載次數: 62)
下載附件
2021-3-7 12:13 上傳
由上述的系統框圖和單片機與運動控制專用芯片接線圖可以看出,使用一個stm32或者C51等單片機+運動芯片控制步進或伺服電機,只要使用單片機的IO口連接運動芯片的總線,然后通過IO寫入指令就可以。芯片本身提供了單片機可以直接調用的API函數,實現基本的定長加減速運動,多軸直線插補,圓弧插補運動的函數,單片機程序只要按說明直接調用函數,指定參數值就可以了。
下載.png (30.86 KB, 下載次數: 78)
下載附件
2021-3-7 12:13 上傳
比如定長加減速運動控制函數:
q 定長運動 功能:指定一個運動軸及曲線類型、運動方向、脈沖輸出模式、初始速度、運行速度、定長運動距離、開始減速位置、加速時間、減速時間,以初始速度開始加速,在指定的加速時間到時加速到運行速度恒速運行,直到脈沖輸出個數大于等于減速位置設定的個數時,開始減速,在指定的減速時間到達時減速到初始速度,并在完成運動距離時停止,如果SD減速開關從OFF->ON 轉換并且沒有到達設定的減速位置,并且SD_EN使能,將立即開始減速,然后以低速運行完成運動距離后停止。 函數:int DeltMov(int dev,unsigned int Axs,unsigned intcurve,unsigned int Dir,unsigned char Outmod,unsigned int Vo,unsigned intVt,unsigned int Length,unsigned int StartDec,unsigned long Acctime,unsignedlong Dectime,unsigned int SD_EN,unsigned int WaitSYNC);
下載 (1).png (87.93 KB, 下載次數: 93)
下載附件
2021-3-7 12:13 上傳
|