應學弟們的要求特意將步進電機的速度控制函數完善。
重點: 這裏只是速度控制函數, 沒有加減速曲線! 沒有記錄步數! 只是簡單的把步進電機當成直流電機用! 很初級的一個程序!
程序的下載鏈接在 這裏 開發平臺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 + 定時器 一定是有解決方案的! 剩下更高級的代碼 看情況 在研究吧!
生命不息,折騰不止!