基於Stm32F407的多路(6路)步進電機速度控制函數

應學弟們的要求特意將步進電機的速度控制函數完善。

重點:  這裏只是速度控制函數, 沒有加減速曲線! 沒有記錄步數!  只是簡單的把步進電機當成直流電機用! 很初級的一個程序!

程序的下載鏈接在      這裏 開發平臺Keil5 單片機 Stm32F407

接下來 我就程序的實現過程給大家進行分享   

第一部分是實現的機制介紹  詳細鏈接 在這裏!   主要就是通過修改 PSC和ARR寄存器的值,我們可以修改 定時器的溢出頻率!而我們的定時器模式設置成 PWM輸出模式, CCR寄存器 我們設置一個較小的值*(我們要控制脈衝的頻率 ,所以單個脈衝的寬度是我們不關心的!)   修改了 PSC 和ARR值之後 我們就可以實現對步進電機的速度進行控制了!    詳細的請看介紹!

這是測試部分的代碼,只是簡單的初始化和  對每一個 步進電機的速度進行賦值操作(需要加減速曲線的只需要自己去擬合就好了)

這是宏定義部分,  電機的方向控制引腳沒有設置  讀者需要自行設定

步進電機 的初始化部分 包含三個大類的東西 :1 方向引腳 初始化 2.速度信息對應於PSC 和ARR的關係 生成(

    Steps_Creat(Step_Speed,Step_Speed_Max);  這個函數

3.定時器的初始化, 定時器初始化部分我們不需要考慮太多 ,PSC和ARR 都是需要後期修改的

以上是步數信息的初始化部分,注意:步進電機不能完全停止,(此時 PSC ARR 應該是無窮大,但是實際達不到,這裏只是近似停止)  速度 和 ARR之間的關係是一個反比例函數,通過計算 我們可以將速度 展開,對於低速段,我們需要像如上程序一樣 手動配置,(如果不手動配置 ARR值會非常大,(反比例函數)) 這是第二部分的代碼  速度生成 

通過修改這個 最大速速可以控制生成的速度數量,但是在高速段 速度有失真的風險!!!!(此時 ARR值非常小,可能速度值差的比較大 而 ARR值 不變 我測試過 Step_Spees_Max取 400  還是可以用的)

這是速度賦值函數 大致分爲以下幾個部分1 驗證速度是否安全(超出內存邊界會 產生 hard fault)2. 判斷速度方向信息  控制對應的 方向 I O   3 通過查表,將 速度信息 對應的 ARR 和 PSC 寫入到對應的 定時器 寄存器中

以下是一個定時器的配置過程 

配置過程沒有任何的新意 ,只是簡單的配置成 PWM輸出模式, 選好對應的 IO  設置 對應的寄存器  六路的配置基本相似。

自己測試的是步進電機可以轉動, 剩下的 要提升的部分暫時還是懶得寫,就是  一個速度曲線的擬合過程。

這裏提一下 我的步進電機程序其實也可以半閉環的,只需要講  脈衝引腳接到定時器的 計數引腳 通過對輸出脈衝進行計數還是可以實現半閉環的, 但是這樣一來 又會涉及到 步數的規劃以及加減速的設計   比較複雜,我用不到,暫且就不去做這一部分了,這一份代碼在我看來還是初級部分的代碼,遠遠沒有達到我所期望的 高效率。  在我的設想中 DMA + 定時器 一定是有解決方案的!   剩下更高級的代碼   看情況 在研究吧!

生命不息,折騰不止!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章