diff --git a/src/BallAndBeam.jl b/src/BallAndBeam.jl index dad1ba41208b1e838f8a1515fd3f74e1df8b56e3..94bd2b3059c1fa7f2cdd2122bb5b4dd9271f83ae 100644 --- a/src/BallAndBeam.jl +++ b/src/BallAndBeam.jl @@ -26,7 +26,7 @@ using LabProcesses, Plots, Polynomials, ControlSystems, ProgressMeter run_experiment(P::BallAndBeamType, ω, duration, settling_time, amplitude, bias) Perform fra-experiemnt For a single frequency `ω`. Called from inside `fra` """ -function run_experiment(P::BallAndBeamType, ω, duration, settling_time, amplitude, bias) +function run_experiment(P::BeamType, ω, duration, settling_time, amplitude, bias) h = sampletime(P) data = zeros(0:h:duration) LabProcesses.initialize(P) @@ -63,7 +63,7 @@ integrate(fun,data,ω,h) = h*sum(fun(ω*(i-1)*h).*data[i] for i = 1:length(data) - `nbr_of_periods = 10`: - `amplitude = 1`: Very low freqs might require smaller amplitude """ -function fra(P::BallAndBeamType, Ω::AbstractVector; +function fra(P::BeamType, Ω::AbstractVector; bias = 0, settling_time = 2, nbr_of_periods = 10, diff --git a/src/FRTN35_lab1.jl b/src/FRTN35_lab1.jl index be7012f4556d969e41e9ceeaa6f7089182480ea2..abcd4d87bf98ba413e9e12d4c5c2c9fc71df22bc 100644 --- a/src/FRTN35_lab1.jl +++ b/src/FRTN35_lab1.jl @@ -1,8 +1,8 @@ using BallAndBeam, LabProcesses, ControlSystems, JLD # @load "workspace.jld" # Run this command to restore a saved workspace -bias = 0 # Change this if your process drifts over time -P = LabProcesses.BallAndBeam(0.01, bias) +bias = 0.01 # Change this if your process drifts over time +P = LabProcesses.Beam(0.01, bias) h = sampletime(P) settling_time = 1 @@ -27,25 +27,25 @@ G3 = fra(P, w1_300, amplitude=2, bias=bias, nbr_of_periods=nbr_of_periods, s # Concatenate (overlapping) estimates to be used and sort based on freq G123 = sortfqs([G1; G2; G3]) -bopl(G123) +bopl(G123, m=:star) nypl(G123) ## Control ================================================================================== -# polevect = [-10] -# zerovect = [] -# gain = 1 -# sysFBc,L,T,C = fbdesign(G, polevect, zerovect, gain) - -# polevect = [-10] -# zerovect = [] -# gain = 1 -# sysFFc,YR,FF = ffdesign(T, polevect, zerovect, gain) - -# bopl(C, lab="Controller") -# bopl!(L, lab="Closed-loop system e->y") -# bopl!(FF, lab="Feedforward compensator") -# bopl!(YR, lab="Closed-loop system r->y") - -# sysFB,sysFF = c2d(sysFBc,h)[1],c2d(sysFFc,h)[1] -# y,u,r = run_control_2DOF(P, sysFB, sysFF, duration=5, reference = t->2sign(sin(2π/3*t))) -# plot([y u r], lab = ["y" "u" "r"]) +polevect = [-10] +zerovect = [] +gain = 1 +sysFBc,L,T,C = fbdesign(G, polevect, zerovect, gain) + +polevect = [-10] +zerovect = [] +gain = 1 +sysFFc,YR,FF = ffdesign(T, polevect, zerovect, gain) + +bopl(C, lab="Controller") +bopl!(L, lab="Closed-loop system e->y") +bopl!(FF, lab="Feedforward compensator") +bopl!(YR, lab="Closed-loop system r->y") + +sysFB,sysFF = c2d(sysFBc,h)[1],c2d(sysFFc,h)[1] +y,u,r = run_control_2DOF(P, sysFB, sysFF, duration=5, reference = t->2sign(sin(2π/3*t))) +plot([y u r], lab = ["y" "u" "r"])