%% Exercice 11 - Régulateur PI + Prédicteur de Smith clear; clc; close all; %% 1. Données du système h = 0.1; % Période d'échantillonnage h = 100 ms Kp = 19.5; % Gain proportionnel calculé Ki = 9.5; % Gain intégral calculé N = 100; % Nombre de pas de simulation W = ones(1, N); % Consigne en échelon %% 2. Variables de simulation y = zeros(1, N); u = zeros(1, N); yp = zeros(1, N); % Etats de mémoire yp_old1 = 0; u_old1 = 0; u_old2 = 0; u_old3 = 0; u_old4 = 0; e_old = 0; %% 3. Boucle de régulation temps réel (Code C transposé) for k = 5:N-1 % Mesure courante y_current = y(k); % Calcul de l'erreur avec prédiction e = W(k) - y_current - yp(k); % Commande PI u(k) = u_old1 + Kp * e + Ki * h * e_old; % Prédicteur de Smith yp(k+1) = 0.951 * yp_old1 + 0.0049 * u_old1 - 0.0049 * u_old4; % Simulation du procédé réel avec retard d = 3 pas % y(k+1) = 0.951*y(k) + 0.0049*u(k-3) y(k+1) = 0.951 * y(k) + 0.0049 * u(k-3); % Mise à jour des mémoires yp_old1 = yp(k+1); u_old4 = u_old3; u_old3 = u_old2; u_old2 = u_old1; u_old1 = u(k); e_old = e; end %% 4. Tracé des résultats figure('Name', 'PI avec Prédicteur de Smith'); subplot(2,1,1); stairs(0:h:(N-1)*h, y, 'b-', 'LineWidth', 1.5); hold on; plot(0:h:(N-1)*h, W, 'k--', 'LineWidth', 1.2); grid on; title('Réponse temporelle y(t) avec PI + Prédicteur de Smith'); xlabel('Temps [s]'); ylabel('Sortie y(t)'); legend('Sortie mesurée y', 'Consigne W'); subplot(2,1,2); stairs(0:h:(N-1)*h, u, 'r-', 'LineWidth', 1.5); grid on; title('Signal de commande u(t)'); xlabel('Temps [s]'); ylabel('Commande u(t)');