?

單片機PID電機轉速與位置控制系統設計

2022-08-12 09:30李帥波
工業儀表與自動化裝置 2022年4期
關鍵詞:編碼器增量偏差

趙 鵬,錢 美,李帥波

(新疆理工學院 機電工程學院,新疆 阿克蘇 843000)

0 引言

在運動控制系統中,如智能車由于受到載重、地面摩擦力、坡度等的影響,如果按照傳統的PWM開環調速其速度非常不穩定,甚至會導致電機堵轉的情況;在溫度控制系統中,要使溫度恒定通過加熱或制冷來實現,但由于慣性的影響,控制溫度只能在某一個范圍內波動,無法達到相對精確的控制[1]。PID控制是根據設定值與被測值的偏差,通過比例、積分、微分環節實現精確的控制,是一個二階線性控制器,適用于對被控對象模型了解不清楚的場合,其實質是根據輸入的偏差值,按照比例、積分、微分的函數關系進行運算,運算結果用以控制輸出。鑒于此,本設計提出以單片機為控制器,以直流電機為被控對象,設計了利用上位機監控的直流電機轉速與位置的控制系統,結合PID控制算法,實現對電機的轉速和位置的精確控制。

1 系統結構與原理分析

1.1 系統結構分析

該設計中使用的單片機STC8A8K64S4A12為國產增強型1T系列,其一個時鐘周期為一個單指令周期,是傳統51單片機的12倍,內含24 MHz高精度IRC,ISP編程時可上下調整。其內部存儲空間也較為充裕,數據存儲器和程序存儲器分別為8 KB和64 KB。包含4路輸入捕獲輸出比較單元,可實現對電機編碼器數據的獲取。驅動電路采用L298N模塊,電機選擇370減速電機,減速比為1:30。采用330線的光電編碼器[2],即電機轉一圈可產生330×30=9900個脈沖,以串口的形式通過上位機虛擬示波器實時顯示PWM輸出信號、電機測量轉速、設定速度等信息,以便直觀的對比控制效果達到最佳控制。L298模塊內部含有+5 V低壓差線性直流穩壓器,其輸出電壓可供編碼器正常工作。具體系統結構圖如圖1所示。

圖1 系統結構圖

1.2 位置式PID原理分析

PID控制規律數學表達式為:

(1)

經離散化后得到PID控制表達式為:

(2)

上式子稱為全量式或位置式PID。如果為運動控制,利用PWM調節電機轉速,其位置式PID算法公式也可表示為:

Pwm=Kp×e(k)+Ki×e(k)+Kd×[e(k)-e(k-1)]

(3)

1.3 增量式PID原理分析

增量式PID控制算法是指其輸出只是被控制量的增量ΔU(k),只使用前后三次測量的偏差值,就可以求出控制的增量,其增量式PID控制算法公式為:

ΔU(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]

它表示在兩次采樣時間間隔內執行器的位置變化量。與位置式相比,增量式計算量小得多。位置式與增量式關系如下:

(4)

后續的直流電機的速度與位置控制也是按上式進行算法實現的[3-4]。

1.4 編碼器原理分析

光電編碼器是利用光柵衍射原理實現位移-數字變換,通過光電轉換,將輸出軸上的機械幾何位移量轉換成脈沖數字量的傳感器。編碼器A、B兩相輸出為相位相差90度的正交編碼信號,其中輸出脈沖如下圖所示。

圖2 電機順時針運行編碼器輸出波形圖

圖3 電機逆時針運行編碼器輸出波形圖

電機轉向與A、B相相位關系如表1所示。

表1 電機轉向與編碼器輸出關系表

由以上分析可知,求出編碼器輸出的A或B相中的一相單位時間內的脈沖數即可求取電機的轉速;根據編碼器A、B相的相位差,可判斷出電機的轉向,當A相相位超前B相相位90°時,電機順時針運動,當A相相位滯后B相相位90°時,電機逆時針運動[5]。

2 軟硬件設計

2.1 硬件設計

設計中所選擇的STC8A系列單片機有四通道可編程計數器陣列PCA模塊,可用于脈寬測量、脈沖捕獲計數、高速脈沖輸出及PWM輸出四項功能。對于編碼器的輸出采用脈沖捕獲計數模式,電機選擇帶編碼器輸出的370直流電機,編碼器A、B相的輸出分別接單片機P17、P16引腳;單片機將PWM輸出數據、電機測量轉速或位置、設定轉速或位置通過單片機串口1傳輸至上位機虛擬示波器實時顯示;電機的驅動、PWM轉速控制及轉向控制通過H橋驅動模塊L298N實現,具體驅動電路與單片機接口連接如圖4所示。

圖4 電機驅動電路圖

2.2 軟件設計

單片機晶振設置為24 MHz,與上位機通信的波特率為115 200,單片機每隔20 ms獲取脈沖數量并判斷轉向,單位時間內脈沖數量即為轉速或速度的累加即為位置,調用位置式或增量式PID函數實現速度或位置的控制,通過修改PID參數加載至PWM輸出函數中調節電機轉速或位置[6]。PWM輸出頻率設置為10 kHz,具體主程序流程圖如圖5所示。

圖5 軟件流程圖

2.3 位置式PID的C語言模塊化程序

采用模塊化程序編寫,無需將PID參數獨立在函數之外定義,方便程序的移植。函數返回值為有符號整型,其正負為電機轉向,大小為具體PWM輸出值,實現對轉速的調節。其模塊化接口函數的設計是對式(3)的C語言實現,具體程序如下:

int Position_PID (int Target,int Encoder)

{

float Position_KP=15.0,Position_KI=13.0;

float Position_KD=12.0;

static float Bias=0,Integral_Bias=0,Last_Bias=0;

int Pwm;

Bias=Target-Encoder;

Integral_Bias+=Bias;

Integral_Bias=Integral_Bias>1000?1000:(Integral_Bias<(-1000)?(-1000):Integral_Bias);

Pwm=Position_KP*Bias+Position_KI*Integral_Bias+Position_KD*(Bias-Last_Bias);

Pwm=Pwm>9800?9800:(Pwm<(-9800)?(-9800):Pwm);

Last_Bias=Bias;

return Pwm;

}

增量式PID是有偏差的累加和求取的,其公式如下所示,程序結構與位置式相似。

Pwm+=Kp[e(k)-e(k-1)]+Ki×e(k)+Kd[e(k)-2e(k-1)+e(k-2)]

(5)

2.4 電機位置的控制

PID位置控制的實質是對速度的積分,積分的實質為分割、求和、取極限,設計中每隔20 ms對速度累加一次,累加到一定值后停止,即位置已經確定。其調用的位置式PID函數和通過增量式改進的全量式PID函數完全相同,只是在主程序中要對采集的數據每隔20 ms累加一次,且PID函數的實參為設定的位置值和測量的具體的脈沖累加的位置值而非速度值[7]。

3 系統調試

3.1 電機轉向的確定

硬件設計中L298N模塊是隨機接至直流電機的兩個繞組上的,給電機通以不同極性的電源其輸出方向就會變化,對于轉速或位置的控制要求為負反饋,如設定速度和初始速度均為0即電機靜止,PID控制實質是對偏差的控制,設置比例系數,如果為正反饋,用手扭動電機,單片機通過編碼器檢測到有偏差產生,會由初始的0轉速加速到最大值,此時與設定的靜止態剛好相反??梢酝ㄟ^硬件或軟件方案解決,硬件方法為交換驅動模塊接至電機繞組的相序;軟件方法為在程序中根據PID函數返回的PWM值的正負修改轉向控制。如果為負反饋,且設置了比例系數,當設定速度和初始速度均為0時,使用外力使其產生偏差時電機就有反作用力阻值偏差的產生,說明電機轉向符合設置的負反饋的控制要求[8]。

3.2 位置式PID轉速調節

通過調節位置式PID函數中的比例、積分、微分環節的參數,為了便于觀察控制效果,設計中每隔2秒,使編碼器連接的電機每20 ms測量的轉速由500修改為-500。采用串口1將PID函數返回值、測量速度、設定速度上傳至上位機虛擬示波器[9-11],其控制效果如圖6所示。

圖6 位置式PID轉速調節效果圖

3.3 位置式PID位置調節

由于電機轉一圈會產生9900個脈沖,因此為了便于觀察,設定位置每隔2秒,由9900修改為-9900,其控制效果為每隔2秒由正轉切換至反轉,其控制效果如圖7所示。

圖7 位置式PID位置控制效果圖

從以上兩圖可以看出位置式PID能有效實現轉速和位置的調節,且控制效果良好[12-13]。增量式PID與位置式相似,只不過其PID算法的實現是按增量Δu(i)的累加和求取的。

4 調試過程中問題分析

4.1 積分限幅與輸出限幅

設計中電機空載時轉速為333 r/min,減速比為1∶30,編碼器為330線,主程序每隔20 ms讀取一次編碼器的值以確定電機轉速和轉向。則20 ms內讀取的最大值為:(333÷60)×30×330×(20÷1000)≈1099,因此積分限幅值設置為±1000。

單片機程序設計中占空比為100%時的PWM的值為10 000,因此輸出限幅絕對值略小于PWM的最大值,從而設置為±9800[14]。

4.2 程序移植時PID參數的兼容性

相同硬件條件下,相同程序其控制效果差異較大,導致要重新調節PID參數,其原因在于編譯軟件Keil目標設置不同,導致執行效率不同,設計中為使程序兼容,應將編譯軟件的配置保持一致。具體編譯軟件中Code Rom Size空間設置的含義如下[15-16]。

SMALL模式:只用低于2 KB的程序空間。

COMPACT模式:單個函數程序大小不超過2 KB,總程序不超過64 KB,效率比LARGE高。

LARGE模式:可用全部64 KB空間。

4.3 當PWM輸出端口為P14時無PWM輸出

STC8A8K64S4A12單片機的PCA與PWM模塊部分端口是復用的,PCA的端口為高阻輸入,而PWM為準雙向I/O或強推挽輸出,結果導致如果PCA端口都設置為高阻輸入復用的PWM就無法輸出。設計中采用非復用端口加以解決。

4.4 模塊化程序設計中偏差值的保存

傳統的非模塊化程序設計,將偏差、偏差的積分和上次的偏差定義為全局變量,實現整個程序調用過程中的數據保持不丟失。此方案降低了程序的集成度,移植過程中還要考慮全局變量。本設計通過將以上變量定義為static類型,使三個變量在下一次調用時其值仍然保持。

5 結束語

傳統電機由于制造誤差,當同頻率同占空比的信號加載到兩個同一型號的電機時,電機轉速可能有偏差。如果為小車,則可能出現該直行的時候逐漸偏離的情況,因此必須結合傳感器一般為正交編碼器與單片機結合控制算法使其根據偏差實時調節,達到運行穩定的效果。該文基于單片機設計了一款PID電機轉速與位置控制系統,從系統結構和原理分析、軟硬件設計、系統調試及存在問題分析方面層層深入,通過實踐驗證,該方案有效解決了傳統直流電機轉速和位置的精確控制的問題。

猜你喜歡
編碼器增量偏差
融合CNN和Transformer編碼器的變聲語音鑒別與還原
導彈增量式自適應容錯控制系統設計
提質和增量之間的“辯證”
50種認知性偏差
全現款操作,年增量1千萬!這家GMP漁藥廠為何這么牛?
轉爐系統常用編碼器選型及調試
如何走出文章立意偏差的誤區
舞臺機械技術與設備系列談(二)
——編碼器
“價增量減”型應用題點撥
真相
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合