MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Tutorial #1: An Introduction to Matlab/Simulink Example #1: Plotting a trajectory vs. time In motion control systems, a reference trajectory describes the desired motion from position A to position B. Taking derivatives of the trajectory corresponds to getting the velocity, acceleration, jerk, snap and so on. 1. Given Equations 1 to 4, calculate the desired trajectory, s (t ) , velocity, s(t ) , and acceleration, s(t ) . 2. Plot the trajectory, velocity and acceleration profiles with respect to time as in Figure 1. 3. Save the time and trajectory profile data to a text file. displacement [mm] A Simple Trajectory 60 L 40 20 0 0 0.1 0.2 0.3 0.1 0.2 0.3 feedrate [mm/sec] 100 0.4 0.5 0.6 0.7 0.4 0.5 0.6 0.7 50 0 0 500 acceleration [mm/sec 2] F A 0 -500 D 0 0.1 τ1 T1 0.2 0.3 0.4 Time [msec] τ2 T2 0.5 0.6 0.7 τ3 T3 Figure 1. A simple trajectory with trapezoidal velocity. Given: Acceleration: Deceleration: Feedrate (Velocity): Travel Length: A = 500 mm/sec2 D = -500 mm/sec2 F = 100 mm/sec L = 50 mm 1 MTE360 Automatic Control Sampling Period: Prepared by: M.Heng, Revised by: K. Erkorkmaz Ts = 0.001 sec F 2 2T 1 1 FT s (t ) 1 F2 2 L FT3 F3 F 32 2 2T3 F T1 A F T3 D L T T T2 1 3 F 2 , 0 1 T1 , 0 2 T2 (1) , 0 3 T3 (2) (3) (4) Solution: Matlab code (partially complete) % file: tutorial01_example01.m clear all % clears the workspace close all % closes all figure windows % Given: A=500; D=-500; F=100; L=50; Ts=0.001; % % % % % acceleration mm/sec^2 deceleration mm/sec^2 feedrate (velocity) mm/sec travel length mm sampling period sec T1=F/A; % from equation 2 T3=-F/D; % from equation 3 T2=L/F - (T1+T3)/2; % from equation 4 if T1<0 || T2<0 || T3<0 % kinematic compatibility conditions disp('Error: acceleration, deceleration and travel length are not kinematically compatible.'); else % create row vector for time, initial time : step size : final time tau1=0:Ts:T1; % ... (do same for tau2 and tau3) Continues on page 3. 2 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Continued from page 2. % preallocate arrays for speed s1=zeros(1,length(tau1)); sd1=zeros(1,length(tau1)); sdd1=zeros(1,length(tau1)); %... (do same for s2 and s3) % from equation 1 for index=1:length(tau1) s1(index)=F*tau1(index)*tau1(index)/2/T1; sd1(index)=F*tau1(index)/T1; % first derivative: velocity sdd1(index)=A; % second derivative: acceleration end for index=1:length(tau2) s2(index)=F*tau2(index) + F*T1/2; sd2(index)=F; sdd2(index)=0; end for index=1:length(tau3) s3(index)=-F*tau3(index)*tau3(index)/2/T3 + F*tau3(index) + … L - F*T3/2; sd3(index)=-F*tau3(index)/T3 + F; sdd3(index)=D; end end t1=tau1'; % change tau1 from a row to a column vector tau1' t2=tau2(2:end)' + T1; % shift bounds and drop first vector element t3=tau3(2:end)' + T1 + T2; t = [t1;t2;t3]; % concatenation of time vector s1=s1'; s2=s2(2:end)'; s3=s3(2:end)'; s = [s1;s2;s3]; % concatenation of displacement vector %... (do same for sd and sdd) figure(1); subplot(3,1,1); plot(t,s); title('A Simple Trajectory'); ylabel('displacement [mm]'); xlabel('Time [msec]') subplot(3,1,2); %... (do same for sd and sdd) % % % % % % opens a figure window subplot(rows, columns, position) plots trajectory versus time creates a title for the plot labels the y-axis labels the x-axis % save data to file data = [t s]; % t and s should be column vectors save ex1_data.txt -ASCII -DOUBLE data %... (save also sd and sdd to the same file) %-- End of File --% 3 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Example #2: Simulation of a dynamic system Given a defined set for time, t , a dynamic system can be described with a function that receive inputs, u (t ) , and produces outputs, y (t ) . 1. Create a Simulink model with a first order system, with gain, K , and time constant, T . Simulate a unit step input and view both the input, u (t ) , and output, y (t ) , through a scope, as in Figure 2. Experiment with K , T , the step input and observe how the system response, y (t ) , behaves. Save data and plot results. 2. Apply trajectory from Example 1 as the input, as in Figure 3. Save data and plot results. Figure 2: A simple first order system. Figure 3: A simple first order system with trajectory input from Example 1. 4 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Solution to Part 1 Figure 4: Scope of first order system simulink model. Solution to Part 1: Matlab Code % file: tutorial01_example02_q1.m K=1; % set gain in workspace T=1; % set time constant in workspace open('fosystem.mdl'); % opens the model file sim('fosystem.mdl'); % runs the simulation % t u y extract data from Scope Data struct = ScopeData.time; = ScopeData.signals.values(:,1); = ScopeData.signals.values(:,2); % plot step input and output response figure(2); plot(t,u,t,y); title('Step Input Response'); ylabel('Response, y'); xlabel('Time, t'); legend('Input','Output'); % creates a legend for the plot % save data to file data = [t u y]; %... (save as shown in Example 1) %-- End of File --% 5 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Solution to Part 2: Matlab Code % file: tutorial01_example02_q1.m S = load('ex1_data.txt'); % loads data from file to the workspace t = S(:,1); % extract time vector u = S(:,3); % extract velocity profile Tend = t(end); % get total time of simulation K = 1; % set gain in workspace T = 0.01; % set time constant in workspace simin = [t u]; % array format for 1-D input signal open('fosystem_traj.mdl'); % opens the model file sim('fosystem_traj.mdl'); % runs the simulation time = simout.time; % if the save format of simout is "Structure with Time" y = simout.signals.values; % output vector % plot input and output in the same figure figure(3); plot(t,u,'b-'); hold on % "hold on" retains the current plot plot(time,y,'r-.'); title('Velocity Response'); ylabel('Response [mm/sec]'); xlabel('Time [sec]'); legend('Input','Output'); % save data to file %... (as shown in Example 1) %-- End of File --% 6 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Example #3: Design a Proportional Controller (p-controller) A proportional controller is a simple feedback control design where the control signal, u , is the system error ( e xr x ) multiplied by a gain, K p . 1. Create a Simulink model of a first order system cascaded with an integrator. The gain should be K 1 and time constant T =0.1 s. Simulate a square wave input with unit amplitude and frequency of 0.3 Hz. The sample time is 0.001 sec. View the reference position, xr (t ) , control signal, u (t ) , and actual position, x(t ) , through a scope, as in Figure 5. Experiment with different values of K p and observe how the system response changes. Plot the results as in Figure 6. Figure 5. A proportional control system. Position Response Position [mm] 2 1 0 Reference Actual -1 -2 5 6 7 5 6 7 8 9 10 8 9 10 Control signal, u 20 10 0 -10 -20 Time [sec] Figure 6. Position response and control signal. 7 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Example #4: Frequency Response Function Given a transfer function: G ( s) 2n , with n =5 rad/s, =0.1 s 2 2n s 2n Plot its frequency response as Bode and Nyquist diagrams. Procedure (refer to textbook, Chapter 6): 1. Substitute s j , resulting in G ( s) G ( j) 2. Evaluate complex gain ( G ( j) ) of transfer function at each frequency 3. Solve for the magnitude |G(jω)| and the phase angle <G(jω). G j ReG j ImG j Equation (5) 2 2 Im G j Equation (6) G j tan 1 Re G j 4. Use a logarithmic frequency scale from 10-1 to 102 rad/s, with 1000 points. Magnitude and frequency should be log scales (help loglog) while Phase and Frequency are linear and log scales (help semilogx), respectively, as shown in Figure 7. 8 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Solution for Question #4 % m file to demonstrate Bode and Nyquist plots clear; % define 2nd order transfer wn = 5; zeta = 0.1; G = tf([wn*wn],[1 2*zeta*wn function % % natural frequency [rad/s] % damping ratio [ ] wn*wn]); % generate frequency array of interest [rad/s]% w = logspace(-1,2,1000)'; % logarithmic, from 1e-2 to 1e2 % method 1: directly calculate frequency dependent complex gain % % ============================================================= % jw = j*w; % j*w vector r2d = 180/pi; % radians to degrees conversion factor numerator = G.num{1}; % extract numerator coefficients [0 0 25] denominator = G.den{1}; % extract denominator coefficients [1 1 25] Gf = polyval(numerator,jw)./polyval(denominator,jw); % evaluateu complex gain % generate Bode plot % figure(1); clf; zoom on; subplot(2,1,1); loglog(w,abs(Gf),'b'); title('Bode Plot'); ylabel('Magnitude [ ]'); grid on; subplot(2,1,2); semilogx(w,r2d*angle(Gf),'b'); ylabel('Phase [deg]'); xlabel('Frequency [rad/s]'); grid on; % generate Nyquist plot % range = 1:800; figure(2); clf; plot3(w(range),real(Gf(range)),imag(Gf(range)),'b'); view(90,0); xlabel('Frequency [rad/s]'); ylabel('Real{G(jw)}'); zlabel('Imag{G(jw)}'); grid on; title('Nyquist Plot'); % method 2: use matlab's built-in commands % % ======================================== % figure(3); bode(G); figure(4); nyquist(G); 9 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz Figure 7. Bode plot a second order system. G(j) |G(j)| Figure 8. Nyquist plot a second order system (try performing a 3D rotation of the Matlab figure!). 10 MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz For full solutions, Matlab code (.m files) and Simulink models (.mdl) will be available on the course website. 11