Vous êtes sur la page 1sur 15

Sabanc University

Faculty of Engineering and Natural Sciences


Fall 2014

ME 303
CONTROL SYSTEM
DESIGN
LAB REPORT # 3
(Group Number1 & B)
PID Controller Design
Submitted by
Alp Gabay-15369
Doukan Er-15509
K. Selim Engin16429
on
19.11.2014

INTRODUCTION
The main aim of this lab is to see the effects of control parameters on a real system. Our
equipment consisted of a D-space device, DC motor with an encoder and a computer for
software. First of all, whole devices connected to each other properly and software configuration
took place. After that MATLAB project is created for simulation purposes. We were giving a
constant as an input and we were multiplying it with our transfer function and gain. By changing
the control parameters we tried to observe the effects of these parameters on our system. We
drew some graphs from the data we collected from our encoder that is attached to our motor and
the results of the graphs and the experiment is discussed below.

PROCEDURE
In this lab our task was doing some experiments on D-space in order to understand what is effect
of control parameters on the output. At first we installed our D-space device and made the
configurations accordingly. After that, we created a MATLAB project in order to download into
D-space for our experimental purposes. Creating another windows for our observations was
another part of our task. We drew 3 graph for input, output and error values. Finally, we
changed the control parameters' values in a specific order to see their effect on the system,
output.

RESULTS
Kp = 4

Output

13
12
11

10

15

20

25

Error

5
0

Control Input

-5

10

10

20
0
-20

Figure 1. The results with parameters Kp=4


2

Kp = 100

Output

2
1
0

10

Error

5
0

500
0
-500

Figure 2. The results with parameters Kp=100


Ki = 0.1

Output

50
0
-50

10

20

30

40

50

60

10

20

30

40

50

60

10

20

30

40

50

60

Error

50
0
-50

Control Input

Control Input

-5

20
0
-20

Figure 3. The results with parameters Ki=0.1


3

Ki = 1

Output

20
0
-20

10

20

30

40

50

60

10

20

30

40

50

60

10

20

30

40

50

60

Error

20
0
-20

Control Input

100
0
-100

Figure 4. The results with parameters Ki=1


Kp = 3 Ki = 0.1

Output

6
5.5
5
50

60

70

80

90

100

110

120

90

100

110

120

100

110

120

Error
0
-0.5
-1
50

60

70

80

Control Input
-0.05
-0.1
-0.15
50

60

70

80

90

Figure 5. The results with parameters Kp=3 Ki=0.1

Kp = 5 Ki = 0.1

Output

5
4.995
4.99
4.985
380

390

400

410

420

430

440

450

390

400

410

420

430

440

450

390

400

410

420

430

440

450

Error

0.02
0.01

Control Input

0
380
0.1
0.08
0.06
380

Figure 6. The results with parameters Kp=5 Ki=0.1


Kd = 1

Output

1
0.5
0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Error

1
0.5

Control Input

1
0.5
0

Figure 7. The results with parameters Kd=1

Kp = 3 Kd = 1

Output

10
5
0

Error

5
0

Control Input

-5

20
0
-20

Figure 8. The results with parameters Kp=3 Kd=1

Kp = 3 Kd = 2

Output

10
5
0

10

12

14

16

18

20

10

12

14

16

18

20

10

12

14

16

18

20

Error

5
0

Control Input

-5

20
0
-20

Figure 9. The results with parameters Kp=3 Kd=2


6

Kp = 3 Kd = 5

Output

10
5
0

10

12

14

16

18

10

12

14

16

18

10

12

14

16

18

Error

5
0

Control Input

-5

20
0
-20

Figure 10. The results with parameters Kp=3 Kd=5


Comparing PD Controllers (Output) Kp=3
6

R: Kd=1, G: Kd=2 B: Kd=5

10

12

14

16

18

20

Figure 11. Comparing the results of the output as the parameter Kd changes

Comparing PD Controllers (Error) Kp=3


5

R: Kd=1, G: Kd=2 B: Kd=5

-1

10

12

14

16

18

20

Figure 12. Comparing the results of the error as the parameter Kd changes
Comparing PD Controllers (Control Input) Kp=3
16
14

R: Kd=1, G: Kd=2 B: Kd=5

12
10
8
6
4
2
0
-2

10

12

14

16

18

20

Figure 13. Comparing the results of the control input as the parameter Kd changes

Kp = 1.5 Ki = 0.02 Kd = 0.15

Output

20
10
0

10

15

20

25

30

35

10

15

20

25

30

35

10

15

20

25

30

35

Error

20
0

Control Input

-20

50
0
-50

Figure 14. The results with parameters Kp=1.5 Ki=0.02 Kd=0.15


Kp = 1 Ki = 0.01 Kd = 0.01

Output

10
5
0

10

15

20

25

30

35

40

10

15

20

25

30

35

40

10

15

20

25

30

35

40

Error

5
0

Control Input

-5

10
0
-10

Figure 15. The results with parameters Kp=1 Ki=0.01 Kd=0.1

Kp=4 Kp=100 Ki=0.1 Ki=1

23.42

15.3

Kp=3 Kp=5 Kd=1 Kp=3 Kp=3 Kp=3 Kp=1.5


Ki=0.1 Ki=0.1
Kd=1 Kd=2 Kd=5 Ki=0.02
Kd=0.15
-0.08
0.02
[]
5
5
5
5

2.76

2.85

12.65

8.2

0.28

0.006

[]

2.45

2.12

1.73

7.93

2.37

20

500

14.44

58.3

-0.08

0.07

[]

15

15

15

23.05

7.56

11.04 285.05

10.31

43.9

0.08

0.06

[]

6.82

5.85

3.9

8.31

1.58

389

570

7721

929

41297

39833

1962

2201

3742

5034

2697

MP% 68

128

39

485

17

10

ts

4481

56693

50891 54583

48970

4013

6042

7823

25806

30893

tr

5181

DISCUSSION
K. Selim Engin:
In the first case, we have used a low Kp value. There was a little overshoot at the
beginning. As we increased the Kp the response got worse. When Kp was between 2-4 the
system was not satisfactory since there were overshoots and undershoots. However,
interestingly, when we increased the Kp value more, the transient response became better.
There was almost no OS when Kp was larger than 4.
Then, we removed the proportional controller and added pure integral control. We
started with a low Ki value. The response to it was not satisfactory, because the system was
unstable and there were oscillations. We kept increasing the Ki however the response did not
change too much and the results were similar when we used a high Ki in pure integral control.
When we added Kp, the system became stable again. However, the settling time was
large and the transient response was not fine enough. The steady-state error and the control
input were zero.
Later, we used pure derivative controller. Pure derivative control is impractical due to
the undesirable noise amplification. In the layout the system was unstable. Because of the
amplified noise, we cannot see anything in the plots of Figure 7.
Afterwards, we added proportional controller to pure derivative control. The response of
it was quite satisfactory. As we increased Kd the settling time also increased.
At the end, we used PID controller. The responses were similar to the results in the prelab. Thats why we picked parameter values that are close to the ones in the pre-lab. The
response of this controller was not the best. When we used PD control there was no OS. The
steady-state response was aloes satisfactory.
10

Kp=1
Ki=0.01
Kd=0.1
5

Alp Gabay:
As it was given in the lab task we started with a very small Kp value and increased it
slowly. From our observations, I can say that small Kp creates some under and overshoot but
as we increase it the percentage of these under and overshoots increased and the quality of the
system got worse.(when Kp is between 2 and 4). Surprisingly, when we exceeded 4 for the Kp
value we did not observe any overshoot.
After that we were asked to remove Kp and add some pure integral control. As we
expected regardless of the Ki value system was unstable. Increasing or decreasing the Ki value
did not affect the output drastically.
As the third task, we added some Kp value to the system and it simply became a PI
controller. That actions stabilized the system however it increased the settling time and we are
having a bad transient response.
Afterwards, we just put some pure derivative control to the system and it amplified our
noises in the system and we could not read any output and could not draw any graph from the
data. As a conclusion, I think it is useless to use pure derivative controller.
Then, we inserted a PD controller to our system. Results were okay and increasing Kd
allowed us to have smaller settling time and by changing Kp according to Kd values it was
possible to decrease the overshoot percentage.
Lastly, we put PID controller to the system. This should be the best of all systems that
we simulated but we encountered something different. In PD controller we managed to have
almost zero percent overshoot but in PID we could not reach that.
Doukan Er:
First of all, we started to observe the effect of Kp value as it was mentioned. We gave
small values of Kp to the system and continued to increase it. In a specific interval (2 and 4)
our system had some over and undershoot. When we reach to 4, overshoot of the system was
gone.
Secondly, we use pure integral control instead of Kp. Our observation was that the
system was very unstable does not matter which Ki value we insert.
Thirdly, we were asked to insert a PI controller. Adding Kp to our Ki, system became
stable but due to the integral gain we had very long settling time.
Later, we only inserted pure derivative controller to our system. That Kd increased our
noise in the output dramatically. That is why we could not observe anything on the output. For
that reason using a pure derivative controller is not logical.
Afterwards, we used a PD controller for our system. It had a very short settling time
with some overshoot. However, we can control the settling time as we desire and decrease the
overshoot to some extent.
At last, we put a PID controller for our system. In PID controller we managed to
control both settling time and overshoot percentage at the same time. However, we could
decrease the overshoot in PD controller more than PID.

11

CONCLUSION
Using pure derivative or pure integral control for any kind of system is useless because it
makes our system unstable and impossible to control. However, PI and PD controllers did a
great job. PI controller had a longer settling time than PD that is why PD controller is the most
suitable one for this system. In our experiments we could not make overshoot equal to zero in
PID controller. However maybe spending more time on the decision of the control parameters'
values can lead to zero overshoot.

APPENDIX
% %% Low Kp
figure(1)
subplot(3,1,1)
plot(kp4_output.X.Data, kp4_output.Y.Data)
title('Kp = 4');
ylabel('Output');
subplot(3,1,2)
plot(kp4_error.X.Data, kp4_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp4_input.X.Data, kp4_input.Y.Data)
ylabel('Control Input');
%% High Kp
figure(2)
subplot(3,1,1)
plot(kp100_output.X.Data, kp100_output.Y.Data)
title('Kp = 100');
ylabel('Output');
subplot(3,1,2)
plot(kp100_error.X.Data, kp100_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp100_input.X.Data, kp100_input.Y.Data)
ylabel('Control Input');
%% Low Ki
figure(3)
subplot(3,1,1)
plot(ki01_output.X.Data, ki01_output.Y.Data)
title('Ki = 0.1');
ylabel('Output');
subplot(3,1,2)
plot(ki01_error.X.Data, ki01_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(ki01_input.X.Data, ki01_input.Y.Data)
ylabel('Control Input');
%% High Ki
figure(4)
subplot(3,1,1)
plot(ki1_output.X.Data, ki1_output.Y.Data)
title('Ki = 1');
ylabel('Output');
subplot(3,1,2)
plot(ki1_error.X.Data, ki1_error.Y.Data)
ylabel('Error');
subplot(3,1,3)

12

plot(ki1_input.X.Data, ki1_input.Y.Data)
ylabel('Control Input');
%% Low Kp + Low Ki
figure(5)
subplot(3,1,1)
plot(kp3_ki01_output.X.Data, kp3_ki01_output.Y.Data)
title('Kp = 3 Ki = 0.1');
ylabel('Output');
subplot(3,1,2)
plot(kp3_ki01_error.X.Data, kp3_ki01_error.Y.Data)
title('Error');
subplot(3,1,3)
plot(kp3_ki01_input.X.Data, kp3_ki01_input.Y.Data)
title('Control Input');
%% Higher Kp + Low Ki
figure(6)
subplot(3,1,1)
plot(kp5_ki01_output.X.Data, kp5_ki01_output.Y.Data)
title('Kp = 5 Ki = 0.1');
ylabel('Output');
subplot(3,1,2)
plot(kp5_ki01_error.X.Data, kp5_ki01_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp5_ki01_input.X.Data, kp5_ki01_input.Y.Data)
ylabel('Control Input');
%% Pure Kd (NO GRAPH)
figure(7)
subplot(3,1,1)
plot(kd1_output.X.Data, kd1_output.Y.Data)
title('Kd = 1');
ylabel('Output');
subplot(3,1,2)
plot(kd1_error.X.Data, kd1_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kd1_input.X.Data, kd1_input.Y.Data)
ylabel('Control Input');
%% Kp(3) + Kd(1)
figure(8)
subplot(3,1,1)
plot(kp3_kd1_output.X.Data, kp3_kd1_output.Y.Data)
title('Kp = 3 Kd = 1');
ylabel('Output');
subplot(3,1,2)
plot(kp3_kd1_error.X.Data, kp3_kd1_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp3_kd1_input.X.Data, kp3_kd1_input.Y.Data)
ylabel('Control Input');
%% Kp(3) + Kd(2)
figure(9)
subplot(3,1,1)
plot(kp3_kd2_output.X.Data, kp3_kd2_output.Y.Data)
title('Kp = 3 Kd = 2');
ylabel('Output');
subplot(3,1,2)
plot(kp3_kd2_error.X.Data, kp3_kd2_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp3_kd2_input.X.Data, kp3_kd2_input.Y.Data)
ylabel('Control Input');

13

%% Kp(3) + Kd(5)
figure(10)
subplot(3,1,1)
plot(kp3_kd5_output.X.Data, kp3_kd5_output.Y.Data)
title('Kp = 3 Kd = 5');
ylabel('Output');
subplot(3,1,2)
plot(kp3_kd5_error.X.Data, kp3_kd5_error.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp3_kd5_input.X.Data, kp3_kd5_input.Y.Data)
ylabel('Control Input');
%% Comparing PD Controllers
figure(11)
hold on;
title('Comparing PD Controllers (Output) Kp=3');
ylabel('R: Kd=1, G: Kd=2 B: Kd=5')
plot(kp3_kd1_output.X.Data, kp3_kd1_output.Y.Data,'r')
plot(kp3_kd2_output.X.Data, kp3_kd2_output.Y.Data,'g')
plot(kp3_kd5_output.X.Data, kp3_kd5_output.Y.Data)
figure(12)
hold on;
title('Comparing PD Controllers (Error) Kp=3');
ylabel('R: Kd=1, G: Kd=2 B: Kd=5')
plot(kp3_kd1_error.X.Data, kp3_kd1_error.Y.Data,'r')
plot(kp3_kd2_error.X.Data, kp3_kd2_error.Y.Data,'g')
plot(kp3_kd5_error.X.Data, kp3_kd5_error.Y.Data)
figure(13)
hold on;
title('Comparing PD Controllers (Control Input) Kp=3');
ylabel('R: Kd=1, G: Kd=2 B: Kd=5')
plot(kp3_kd1_input.X.Data, kp3_kd1_input.Y.Data,'r')
plot(kp3_kd2_input.X.Data, kp3_kd2_input.Y.Data,'g')
plot(kp3_kd5_input.X.Data, kp3_kd5_input.Y.Data)
%% Kp(1) + Ki(0.02) + Kd(0.15)
figure(14)
subplot(3,1,1)
plot(kp1bucuk_kd015_ki002_o.X.Data, kp1bucuk_kd015_ki002_o.Y.Data)
title('Kp = 1.5 Ki = 0.02 Kd = 0.15');
ylabel('Output');
subplot(3,1,2)
plot(kp1bucuk_kd015_ki002_er.X.Data, kp1bucuk_kd015_ki002_er.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(kp1bucuk_kd015_ki002_i.X.Data, kp1bucuk_kd015_ki002_i.Y.Data)
ylabel('Control Input');
%% Prelab PID
figure(15)
subplot(3,1,1)
plot(prelab_o.X.Data, prelab_o.Y.Data)
title('Kp = 1 Ki = 0.01 Kd = 0.01');
ylabel('Output');
subplot(3,1,2)
plot(prelab_e.X.Data, prelab_e.Y.Data)
ylabel('Error');
subplot(3,1,3)
plot(prelab_i.X.Data, prelab_i.Y.Data)
ylabel('Control Input');
%% System Responses to Step Input
stepinfo(kp4_output.Y.Data)
stepinfo(kp100_output.Y.Data)
stepinfo(ki01_output.Y.Data)
stepinfo(ki1_output.Y.Data)
stepinfo(kp3_ki01_output.Y.Data)

14

stepinfo(kp5_ki01_output.Y.Data)
stepinfo(kd1_output.Y.Data)
stepinfo(kp3_kd1_output.Y.Data)
stepinfo(kp3_kd2_output.Y.Data)
stepinfo(kp3_kd5_output.Y.Data)
stepinfo(kp1bucuk_kd015_ki002_o.Y.Data)
stepinfo(prelab_o.Y.Data)
%% MAX Values Of Errors
max(kp4_error.Y.Data)
max(kp100_error.Y.Data)
max(ki01_error.Y.Data)
max(ki1_error.Y.Data)
max(kp3_ki01_error.Y.Data)
max(kp5_ki01_error.Y.Data)
max(kd1_error.Y.Data)
max(kp3_kd1_error.Y.Data)
max(kp3_kd2_error.Y.Data)
max(kp3_kd5_error.Y.Data)
max(kp1bucuk_kd015_ki002_er.Y.Data)
max(prelab_e.Y.Data)
%% RMS Values Of Errors
rms(kp4_error.Y.Data)
rms(kp100_error.Y.Data)
rms(ki01_error.Y.Data)
rms(ki1_error.Y.Data)
rms(kp3_ki01_error.Y.Data)
rms(kp5_ki01_error.Y.Data)
rms(kd1_error.Y.Data)
rms(kp3_kd1_error.Y.Data)
rms(kp3_kd2_error.Y.Data)
rms(kp3_kd5_error.Y.Data)
rms(kp1bucuk_kd015_ki002_er.Y.Data)
rms(prelab_e.Y.Data)
%% MAX Values Of Control Inputs
max(kp4_input.Y.Data)
max(kp100_input.Y.Data)
max(ki01_input.Y.Data)
max(ki1_input.Y.Data)
max(kp3_ki01_input.Y.Data)
max(kp5_ki01_input.Y.Data)
max(kd1_input.Y.Data)
max(kp3_kd1_input.Y.Data)
max(kp3_kd2_input.Y.Data)
max(kp3_kd5_input.Y.Data)
max(kp1bucuk_kd015_ki002_i.Y.Data)
max(prelab_i.Y.Data)
%% RMS Values Of Control Inputs
rms(kp4_input.Y.Data)
rms(kp100_input.Y.Data)
rms(ki01_input.Y.Data)
rms(ki1_input.Y.Data)
rms(kp3_ki01_input.Y.Data)
rms(kp5_ki01_input.Y.Data)
rms(kd1_input.Y.Data)
rms(kp3_kd1_input.Y.Data)
rms(kp3_kd2_input.Y.Data)
rms(kp3_kd5_input.Y.Data)
rms(kp1bucuk_kd015_ki002_i.Y.Data)
rms(prelab_i.Y.Data)

15