1題目
?開環傳遞函數 G(s)= 2/(s(0.5s+1)) ,采樣周期 T=0.5 秒,設計單位速度輸入下的最小拍控制器
1.1 方法1
根據課本中的步驟,最小拍控制器的設計步驟如下:
1. 確定對象的離散傳遞函數G(z),并確定其零極點。
2. 確定輸入信號類型,確定誤差傳遞函數Φ_e(z)需要包含的因子。例如,對于速度輸入,Φ_e(z)必須包含(1 - z^{-1})^2。
3. 確定Φ_e(z)的形式,考慮對象的零極點:
a. Φ_e(z)必須包含G(z)中單位圓外的零點作為零點。
b. Φ_e(z)必須包含G(z)中單位圓外的極點作為零點。
c. Φ_e(z)必須包含(1 - z^{-1})^m,其中m是輸入信號類型(階躍為1,速度2,加速度3等)。
4. 確定Φ(z) = 1 - Φ_e(z),其中Φ(z)必須包含G(z)中單位圓外的極點作為零點,以及可能的延遲項。
5. 解出Φ_e(z)和Φ(z),使得系統方程滿足,并解出控制器D(z)。
1.2 方法2
最小拍控制器的設計步驟如下:
1. 確定被控對象G(z)的零點和極點,以及是否存在單位圓外的零極點,這可能會影響穩定性,需要特殊處理。
2. 根據輸入類型,確定誤差傳遞函數E(z)的結構。對于單位速度輸入,E(z)必須包含(1 - z^{-1})^2的因子。
3. 設計閉環傳遞函數Φ(z) = 1 - E(z),使得閉環系統穩定且在有限拍內達到穩態。
4. 通過Φ(z)和G(z)求出控制器D(z) = Φ(z)/(G(z) * E(z))。不過可能更具體的公式可能需要調整。
或者,更準確地說,控制器D(z) = Φ(z)/(G(z)*(1 - Φ(z))),因為閉環傳遞函數Φ(z) = D(z)G(z)/(1 + D(z)G(z)),所以D(z) = Φ(z)/(G(z)(1 - Φ(z)))。
?1.3 方法3:于微波教材法
2代碼
按照于老師教材設計
2.1 傳遞函數的零階保持器的離散化GZ
% 系統參數
T = 0.5; % 采樣周期
s = tf('s');% 連續時間開環傳遞函數
Gc = 2/(s*(0.5*s + 1));% 使用零階保持法將連續傳遞函數轉換為離散傳遞函數
Gd = c2d(Gc, T, 'zoh');% 顯示離散傳遞函數
disp('離散化后的開環傳遞函數 G(z):');
Gd
Gd =0.3679 z + 0.2642----------------------z^2 - 1.368 z + 0.3679采樣時間: 0.5 seconds 離散時間傳遞函數。
2.2 閉環傳遞函數phiz
% 定義Φ(z)和Φ_e(z)
Phi = tf([0 2 -1], [1], T, 'Variable', 'z^-1'); % Φ(z) = 2z^{-1} - z^{-2}
Phi_e = tf([1 -2 1], [1], T, 'Variable', 'z^-1'); % Φ_e(z) = (1 - z^{-1})^2% 計算控制器D(z)
D = Phi / (G_discrete * Phi_e)
% 簡化控制器傳遞函數
D = minreal(D); % 消除公共零極點% 顯示控制器傳遞函數
disp('最小拍控制器 D(z):');
D
2.3 數字控制器DZ
D =
??? 5.437 - 10.15 z^-1 + 5.718 z^-2 - z^-3
? ------------------------------------------
? 1 - 1.282 z^-1 - 0.4366 z^-2 + 0.7183 z^-3
采樣時間: 0.5 seconds
離散時間傳遞函數。
我沒有對其因數分解!
2.4 仿真分析
單位速度分析
% 驗證閉環系統性能
closed_loop = feedback(D*G_discrete, 1)
t = 0:T:10; % 時間向量
r = t; % 單位速度輸入
[y, t_out] = lsim(closed_loop, r, t);% 繪制輸入輸出響應
figure;
plot(t_out, r, 'r--', t_out, y, 'b-');
xlabel('時間 (秒)');
ylabel('幅值');
legend('輸入信號', '輸出響應');
title('單位速度輸入下的閉環響應');
grid on;% 顯示穩態誤差
steady_state_error = r(end) - y(end);
disp(['穩態誤差: ', num2str(steady_state_error)]);
我認為單位速度響應還不錯,但教材說不行!
單位階躍響應
[y, t] = step(closed_loop, 10); % 計算10秒內的脈沖響應
figure
stem(t/T, y, 'filled');
xlabel('采樣周期')
ylabel('響應y(k)')
% 單位速度輸入的Z變換z = tf('z', T); % 聲明 z 變量
Rz = T * z/(z - 1)^2