
電機的控制方式一般分為開環控制與閉環控制兩種控制方式,其中開環控制原理框圖如下: 這種種控制方式的特點是:控制簡單、實現容易、價格較低,這種開環控制方式,負載位置對控制電路沒有反饋。
對于步進電機,控制脈沖的輸入并不依賴于轉子的位置,而是按一固定的規律發出控制脈沖,如果勵磁變化太快,電機不能移動到新的位置,那么實際負載位置與理想位置就會產生一個偏差,就有可能出現失步或者過沖現象,所以需要使用加減速算法。
梯形加減速算法,S加減速算法等就是步進電機開環控制的應用。
使用步進電機驅動器驅動步進電機。當脈沖提供給驅動器時,在過于短的時間里,控制系統發出的脈沖數太多,也就是脈沖頻率過高,將導致步進電機堵轉。要解決這個問題,一般采用加減速的辦法。
就是說,在步進電機起步時,要給逐漸升高的脈沖頻率,減速時的脈沖頻率需要逐漸降低。
加速過程,是由基礎頻率(低于步進電機的直接啟動的最高頻率)與跳變頻率(逐漸加快的頻率)組成加速曲線(降速過程反之)。跳變頻率是指步進電機在基礎頻率上逐漸提高的頻率,此頻率不能太大,否則會產生堵轉和丟步。
加減速曲線一般為直線(梯形)、指數或者S型曲線等。
直線(梯形) 定義:指按直線方式(從啟動速度到目標速度的加減速),以一定的比例進行加速/減速。
“S”型曲線定義:加速/減速開始時速度比較緩慢,然后逐漸加快。在加速/減速接近結束時速度再次減慢下來,從而使移動較為穩 定。S 字加減速的類型有 Sin 曲線、2 次曲線、循環曲線、3 次曲線。
假設選型完畢,使用步進電機驅動器驅動步進電機,細分數為32,步進電機步距角為1.8°,即200個脈沖轉動一圈。
使用定時器來產生PWM波:定時器計數器,計數小于num值時,輸出高電平,大于num值小于2*num值時,輸出低電平。這樣就產生了一個脈沖。
定時器配置模式可以選擇輸出比較模式,使用此模式輸出PWM波,簡單來說就是當計數器與捕獲/比較寄存器當前值匹配時,輸出比較功能做出不同的動作。比如:當計數器比捕獲/比較寄存當前值小時,輸出高電平,達到比較值(捕獲/比較寄存器當前值)后,翻轉電平輸出低電平。再重新設置新的比較值,如此反復,即可輸出PWM波。
為讓步進電機盡量不出現丟步和過沖情況,在電機啟動和停止過程使用加減速是非常有必要的。在加減速階段,加速度、速度、和位置對應關系所示:
加速度、速度和位置對應關系
δt是兩個脈沖之前的時間間隔,所以它的大小將決定著步進電機轉速,為讓電機轉速符合加減速曲線,一個非常重要的步驟是計算合適時間間隔δt,在加減速階段,δt可以認為是線性變化的,而在平穩速度階段δt也是平穩不變的。使用定時器的計數頻率來離散步進控制步進電機運動和處理時間間隔:
圖2 速度曲線與步進電機脈沖/速度
如果要步進電機以恒定的速度旋轉,我們就需要以固定的頻率發送脈沖,
我們通過控制器的定時器功能來實現脈沖的發送所示:
圖 3 步進電機控制脈沖
t0 為脈沖發送的起始時刻,t1 為發送第二個脈沖的時刻,t2 為發送第三個脈沖的時刻。t0 與t1 之間的時間間隔(時間延時)為 ,其中C0 為定時器在t0 與t1 這段時間的定時器計數值, 為定時器的計數周期。t1 與t2 之間的時間間隔為δt =C1tt,其中C1 為定時器在t1 與t2 這段時間的計數值,tt為定時器的計數周期。
比如說我們在程序中配置定時器預分頻器為35,那定時器時鐘頻率為72MHz/(35+1)=2MHz,那么周期值 就是1/2M,C就是以 為基本單位的一個完整步進脈沖的定時器計數值。
假定產生脈沖的定時器的計數頻率為ft,那么 = 1/ft,可以推出以下公式(中括號里邊為單位,下同):
公式 1 脈沖時間間隔公式 2 步距角、位置和速度計算方法
其中:spr:steps per round,步進電機旋轉一圈脈沖數,為與電機相關常數n:脈沖數rad:弧度單位1rad/sec = 60/2π ≈ 9.55rpmrpm:轉每分鐘(rounds per minutes),常用轉速單位
某個時刻的速度可以由加速度來求得:
公式 3 加速度求出速度
對應的電機旋轉角度(即位置)也是可以求得:
公式 4 旋轉角度(位置)計算
第 n 個步進脈沖后產生的軸偏移角度θ= nα所以前 n 個脈沖的總時間和第 n 個步進脈沖的脈沖周期時間:公式 5 第n個脈沖相關時間計算
最終,可以求得第 n 個脈沖實際需求的定時器計數值:公式 6 第n個脈沖實際需求的定時器計數值那么,第1個脈沖的定時器計數值為 :公式 7 第1和n個脈沖的定時器計數值
由于一般控制器的計算能力是有限的,連續兩次計算開方根會很費時,因此考慮使用多項式來展開來減少運算。根據泰勒公式的一個特例:麥克勞林公式:公式 8 麥克勞林公式
根據上式,可以對Cn進行一些轉換出來,以期用簡單的計算方法得出Cn:公式 9 Cn轉換計算
最后,可以得到Cn:公式 10 第n個脈沖實際需求的定時器計數值
這個公式比連續開兩次方的計算方式快很多,但是代入原式時發現當n=1時有 0.4485的偏差,我們可以將C0乘一個系數0.676來解決這個誤差。
如果需要改變加速度或者減速度,那么就要重新計算一個n值。時間tn和脈沖數n(步數)作為加速度 、速度ω和步距角α的參數,反過來我們可以得到:
公式 11 時間tn和脈沖數n
聯合上面兩個式子,可以得到:公式 12 達到最大速度需要的步數與加速度成反比
這個式子表示當達到給定的最大速度時需要的步數與加速度成反比,由于電機加速到最大時跟電機開始減速時的速度是一樣的,我們可以得到(減速過程從右往左看,建立新的坐標,也是一個加速過程):公式 13 加速到最大速度等于開始減速速度
這樣我們只需要改變n的值就可以改變加速度的值。其中n1、n2為加速步數和減速步數,加速度1和減速度w(點)2都為正值((w(點)2)為正值而非常規的負值,是因為從右往左看建立新的坐標,減速過程變成了加速過程)。公式13推導方法可以由下面的不受最大速度限制的加減速曲線得來(將加速部分和減速部分拼在一起就和不受最大速度限制的加減速曲線一樣,所以放在下面一起推導了)。公式13對應曲線圖4為:
受最大速度限制的加減速曲線
為不受最大速度限制的加減速曲線。黃線對應的為最大速度speed。圖 5 加減速斜線
其中n1為加速步數,n2為減速步數。
步進電機旋轉給定的步數,必須在適當的步數時開始減速,使其結束的時候速度為 0。
在圖5這樣的加減速曲線中,由于不受最大速度限制,總步數僅由加速步數和加減速步數,沒有勻加速步數存在。分析圖中圖像,以n1和n2為界限砍成兩個圖像,右邊的減速圖像,從右往左看建立坐標,它也是一個加速過程所以斜率標注加速度w(點)2為正值而不是常規理解的負值,需要切成兩個圖像從右往左看成加速過程。由斜率公式(K)=y/x推出y=K*x,兩個三角形高相等,對高列方程,聯立可解得:
這說明了斜率(加速度)和脈沖數(步數)的關系。等式兩邊同加
做一個變換可以得到公式14:公式 14 加速段脈沖數
此時總步數等于n1+n2,公式14是為了計算方便,列出了加速步數n1和總步數的關系。公式12計算的到達最大速度的步數n值和公式14的n1值(加速步數)作比較,可以判斷曲線是情況1:勻加速、勻速、勻減速,受到最大速度限制。
還是情況2:勻加速、勻減速,受制于減速的開始,加速階段無法到達最大速度。
結合前幾點的數學模型,控制步進電機運動,在給定步數的情況下:
速度從0開始開始加速,到達最大速度后勻速,運動到一定步數后減速,最后停下來到達指定步數。
為實現梯形加減速控制,需要四個參數來描述:
step:步數 accel:加速度 decel:減速度 speed:最大速度
算法實現主要參考主要參考《AVR446_Linear speed control of stepper motor》。該文檔代碼中把速度speed、加速度accel以及減速度decel做了放大100倍處理。accel、decel為正值,即decel為正值,不帶符號。從右往左看,減速過程也是一個加速的過程。
場景區分:
持續加速直到達到所需的速度。
未達到所需的速度就要開始減速。
場景1:持續加速直到達到所需的速度
已知參數:step、加速度accel、減速度decel 和 speed,
待求參數:max_s_lim、accel_lim、減速距離decel_val。
max_s_lim 是加速到最大速度所需步數,根據公式12可得。
accel_lim 是減速開始之前的步數(忽略最大速度限制),根據公式14可得。即前面原理分析提到過的場景區分,結合圖片更清晰。其中:‘
分母乘以100是為了保持放大倍數平衡。
如果max_s_lim<accel_lim,加速度受制于最大速度speed,由公式13可以推出減速距離decel_val。
添加一個負號使得減速距離為負值,和總步數相加即可得到減速開始時候的步數。
場景2:未達到所需的速度就要開始減速第二種場景是運行的步數不足以進行加速到最大速度就要開始減速。
如果max_s_lim>accel_lim,加速度受制于減速的開始,無法加速到最大速度,減速距離decel_val為:
若加速度等于減速度,有
添加一個負號使得減速距離為負值,和總步數相加即可得到減速開始時候的步數。
定時器中斷處理 定時器中斷產生步脈沖并且只有在步進電機移動時進入。這個中斷處理速度屬性的四個不同的狀態,分別為stop-accel-run-decel-stop。
速度的這種行為通過狀態機在定時器中斷中實現。如圖所示。start為開始狀態,accel為加速狀態,run為勻速狀態,decel為減速狀態。
Copyright ? 2021-2022 精北傳動機械(上海)有限公司 All Rights Reserved. 滬公網安備31012002005970 滬ICP備20024360號-1