直流減速電機:電機1000r/min,減速后200r/min。電機尾部帶有增量式霍爾編碼器,解析度12PPR。現想實作統計霍爾脈沖數進行位置和速度調節,各位大佬有沒有什么建議?目的是實作給定位置,精準定位。允許每次定位2個脈沖誤差。
uj5u.com熱心網友回復:
淘寶就通過帶過孔的擋片統計激光數來計算轉數的傳感器,做小車都知道uj5u.com熱心網友回復:
硬體我這邊已經有了,主要是程式演算法想實作,速度和位置的雙倍訓控制。目的就是:在定點停止的時候,過沖的誤差不要太多。想了解相關資料或者程式,希望有大佬點撥下。uj5u.com熱心網友回復:
用PI控制吧。P引數小點,慢慢試。
uj5u.com熱心網友回復:
那速度和位置怎么切換控制呢,需要用到加速s曲線嗎?uj5u.com熱心網友回復:
那速度和位置怎么切換控制呢,需要用到加速s曲線嗎?
硬體我這邊已經有了,主要是程式演算法想實作,速度和位置的雙倍訓控制。目的就是:在定點停止的時候,過沖的誤差不要太多。想了解相關資料或者程式,希望有大佬點撥下。
用PI控制吧。P引數小點,慢慢試。
樓主不好意思,我沒有都清楚你的問題。位置控制時難道不是變速嗎?
uj5u.com熱心網友回復:
是變速的,就是不知道變速和實際位置之間怎么搭配,比如有一個什么函式可以讓電機在快達到設定位置時,速度幾乎為零。這樣不會過沖。調速:我現在是梯形調速法,效果不好。想試試S型,你說的PI調速是不是需要和設定速度比較呢?那這個設定速度我是需要測量出來的嗎?反正不管怎么實作,目的就一個,實作直流減速電機定位比較準確。uj5u.com熱心網友回復:
PI控制是根據位置差來調速。樓主是用PWM控制電機的嗎?uj5u.com熱心網友回復:
是的,STM32硬體產生PWM 頻率1Kuj5u.com熱心網友回復:
能詳細說說根據位置差的PI調速嗎?比如調速函式 形參是 當前位置和目標位置;又或者是其他,主要是這個有點懵,沒什么頭緒。uj5u.com熱心網友回復:
double Command; //目標位置脈沖數double Proportion; //比例系數
double Integral; //積分系數
double preErr; //前一拍誤差
void PI_Cal()
{
float Err,pErr,dU;
Err = Command - feedback;//feedback反饋脈沖數
pErr = Err - preErr;
dU = Proportion*pErr + Integral*Err;
preErr = Err;
return dU;
}
上面的代碼是增量式PI控制代碼。
1. dU可以看作是一個系數,此系數乘以PWM的最大脈寬作為輸出;也可以看作是PWM的脈寬輸出。
2. 一般PI引數先設定為0點幾甚至是0點0幾,最好模擬算一下dU大概是多少;P引數影響超調量,I引數影響調節時間,都是正相關——P越大超調量越大,I越大調節時間越長。
3. 設定限幅值,比如dU < 0時,PWM脈寬限制為最小脈寬,dU > Max時,PWM脈寬限制為最大脈寬。
4. 位置重繪時間在1~100ms之間吧,都是經驗值,具體看除錯效果。
uj5u.com熱心網友回復:
有專業的伺服卡,樓主這是低成本的方案uj5u.com熱心網友回復:
謝謝解答,這個程式給了我很大啟發,但是我還有幾個疑問:1.結合電機實際轉速,我準備設定20ms-50ms重繪一次脈沖數。
2.目標脈沖數是每次定時到的時候都要重繪,再設定新的;還是直接設定最終的目標脈沖數。(應該是每次都更新)
3.假如是每次都要重新設定目標脈沖數,那么每次目標脈沖數怎么設定呢?是等差遞增還是等比指數遞增呢?
4.整個帖子目的是為了精準定位,調速只是其中一個程序。在臨近終點時,怎么設定目標脈沖數呢?
uj5u.com熱心網友回復:
目標脈沖數設定為當前位置到目標地的總脈沖數;反饋脈沖數是出發地到此時刻的總脈沖數,在位置重繪時計算。臨近終點時,dU計算值會很小,幾乎為0。距離終點還有一個或者兩個脈沖時停止電機,電機依靠慣性還能向前走一點,具體看效果。這是經典控制理論最典型的應用,樓主可以網上找找資料。
uj5u.com熱心網友回復:
PID控制
uj5u.com熱心網友回復:
double Command; //目標位置脈沖數
double Proportion; //比例系數
double Integral; //積分系數
double preErr; //前一拍誤差
void PI_Cal()
{
float Err,pErr,dU;
Err = Command - feedback;//feedback反饋脈沖數
pErr = Err - preErr;
dU = Proportion*pErr + Integral*Err;
preErr = Err;
return dU;
}
上面的代碼是增量式PI控制代碼。
1. dU可以看作是一個系數,此系數乘以PWM的最大脈寬作為輸出;也可以看作是PWM的脈寬輸出。
2. 一般PI引數先設定為0點幾甚至是0點0幾,最好模擬算一下dU大概是多少;P引數影響超調量,I引數影響調節時間,都是正相關——P越大超調量越大,I越大調節時間越長。
3. 設定限幅值,比如dU < 0時,PWM脈寬限制為最小脈寬,dU > Max時,PWM脈寬限制為最大脈寬。
4. 位置重繪時間在1~100ms之間吧,都是經驗值,具體看除錯效果。
怎么感覺你這個是比例和微分?error-preerror應該是微分的程序吧,然后直接乘的那個error不是比例調控嗎?如果是I積分的話不應該累加嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/54708.html
標籤:單片機/工控
上一篇:三極管功放
下一篇:舵機的速度
