You are on page 1of 114

Mục lục

1 Giới thiệu về MATLAB và SIMULINK 5

1.1 Hiểu về môi trường làm việc của MATLAB . . . . . . . . . . . . . . . . . . . . . 5

1.1.1 Cú pháp cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.1.2 Biến (variable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.1.3 Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.1.4 Vẽ đồ thị (plotting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.1.5 Đa thức (polynomial) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.1.6 Sử dụng m-file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.1.7 Khai báo hàm truyền trong MATLAB . . . . . . . . . . . . . . . . . . . 16

1.1.8 Biến đổi Laplace với MATLAB . . . . . . . . . . . . . . . . . . . . . . . 17

1.1.9 Biến đổi Laplace ngược . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.1.10 Khai triển phân thức với MATLAB . . . . . . . . . . . . . . . . . . . . . 18

1.1.11 Tìm zero và cực của đa thức với MATLAB . . . . . . . . . . . . . . . . . 20

1.2 Giới thiệu về SIMULINK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.2.1 Khởi động Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

1.2.2 Một ví dụ cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1
2 MỤC LỤC

2 GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG 27

2.1 Các hệ động học (Dynamic systems) . . . . . . . . . . . . . . . . . . . . . . . . 27

2.2 Hàm truyền . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.3 Một số ví dụ về mô hình hóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.3.1 Hệ cơ học . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.3.2 Hệ thống điện (electrical systems): . . . . . . . . . . . . . . . . . . . . . 33

3 PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS) 39

3.1 Tổng quát về đáp ứng thời gian (Time response overview) . . . . . . . . . . . . 39

3.2 Tổng quát về đáp ứng tần số (Frequency response overview) . . . . . . . . . . . 40

3.3 Sự ổn định . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.4 Bậc của hệ (System Order) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.4.1 Các hệ bậc nhất (First-order systems) . . . . . . . . . . . . . . . . . . . 42

3.4.2 Các hệ bậc hai (Second-order systems) . . . . . . . . . . . . . . . . . . . 45

3.5 Tìm hiểu về các dạng đáp ứng với MATLAB . . . . . . . . . . . . . . . . . . . . 49

4 THIẾT KẾ BỘ ĐIỀU KHIỂN PID (PID CONTROLLER DESIGN) 55

4.1 Tổng quát về PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.2 Những tính chất của hạng tử (term) P, I, D . . . . . . . . . . . . . . . . . . . . 57

4.3 Bài toán ví dụ (example problem) . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.3.1 Đáp ứng step vòng hở (Open-loop step response) . . . . . . . . . . . . . 59

4.3.2 Điều khiển vòng kín với bộ điều khiển tỉ lệ (Proportional control) . . . . 60

4.3.3 Điều khiển vòng kín với bộ điều khiển Vi phân -Tỉ lệ (Proportional-
Derivative control) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
MỤC LỤC 3

4.3.4 Điều khiển vòng kín với bộ điều khiển Tích phân-Tỉ lệ (Proportional-
Integral control) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.3.5 Điều khiển vòng kín với bộ điều khiển Tỉ lệ-Tích phân-Vi phân (Proportional-
Integral-Derivative control) . . . . . . . . . . . . . . . . . . . . . . . . . 62

4.3.6 Hướng dẫn chung để thiết kế một bộ điều khiển PID . . . . . . . . . . . 62

4.4 Điều chỉnh PID tự động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5 THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG QUỸ ĐẠO NGHIỆM SỐ (ROOT


LOCUS CONTROLLER DESIGN) 65

5.1 Các cực vòng kín (closed-loop poles) . . . . . . . . . . . . . . . . . . . . . . . . 66

5.2 Biểu diễn quỹ đạo nghiệm số của một hàm truyền (Plotting the root locus of a
tranfer function) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.2.1 Chọn một giá trị của K từ quỹ đạo nghiệm số (Choosing a value of K
from the Root Locus) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.3 Đáp ứng vòng kín (Closed-loop response) . . . . . . . . . . . . . . . . . . . . . . 70

5.4 Sử dụng Bộ thiết kế hệ điều khiển cho thiết kế quỹ đạo nghiệm số (Using Control
System Designer for Root Locus Design) . . . . . . . . . . . . . . . . . . . . . . 70

6 HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC 75

6.1 Sử dụng gói hỗ trợ Arduino Hardware Support Package . . . . . . . . . . . . . . 76

6.2 Gói Simulink ArduinoIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

6.3 Bắt đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

6.4 Một ví dụ đơn giản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

6.5 Hoạt động 1 Phần (a): XÁC ĐỊNH ĐÁP ỨNG BƯỚC CỦA MỘT MẠCH TỤ
ĐIỆN-ĐIỆN TRỞ (RC CIRCUIT) . . . . . . . . . . . . . . . . . . . . . . . . . 85

6.5.1 Mục đích . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86


4 MỤC LỤC

6.5.2 Mô hình hóa từ các nguyên lý thứ nhất/đầu tiên (modelling from first
principles) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.5.3 Thí nghiệm nhận dạng hệ thống . . . . . . . . . . . . . . . . . . . . . . . 88

6.6 Phần b: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA MỘT MẠCH ĐIỆN TRỞ-TỤ
ĐIỆN (RC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

6.7 ĐIỀU KHIỂN ĐIỆN ÁP CHO MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC) . . . . 106

7 KHÔNG GIAN TRẠNG THÁI TRONG MATLAB 109

7.1 Biến đổi hàm truyền sang không gian trạng thái . . . . . . . . . . . . . . . . . 110

7.2 Biến đổi từ Phương trình trạng thái thành hàm truyền . . . . . . . . . . . . . . 111

7.3 Biến đổi tương đương: Sự bất biến của hành vi và giá trị riêng . . . . . . . . . . 111

7.3.1 Dạng chuẩn tắc đường chéo (Diagonal Canonical Form) . . . . . . . . . . 113

7.3.2 Sử dụng MATLAB để tìm ma trận biến đổi mà cho dạng chuẩn tắc . . . 114
Chương 1

Giới thiệu về MATLAB và SIMULINK

MATLAB (matrix laboratory) là một ngôn ngữ lập trình cấp cao thế hệ thứ tư và là một môi
trường tương tác để tính toán, hiển thị và lập trình MATLAB được phát triển bởi MathWorks.

Nó cho phép kiểm soát ma trận; biểu diễn hàm số và số liệu; thực thi thuật toán; tạo giao diện
người dùng; tương tác với những chương trình được viết bằng những ngôn ngữ khác như C,
C++, Java, và FORTRAN; phân tích số liệu; phát triển thuật toán; và tạo ra các mô hình và
các ứng dụng.

MATLAB có nhiều lệnh và hàm toán học được xây dựng sẵn mà giúp ta trong việc tính toán,
tạo ra đồ thị, và thực hiện các phương pháp tính bằng số.

1.1 Hiểu về môi trường làm việc của MATLAB

Môi trường làm việc của MATLAB có thể được khởi tạo từ biểu tượng trên màn hình desktop.
Cửa sổ làm việc chính trong MATLAB được gọi là desktop. Khi MATLAB bắt đầu, desktop
xuất hiện ở bố cục mặc định.

Current Folder: Ô này cho phép xem các thư mục và tập tin của dự án.

Command Window: Đây là khu vực chính mà các lệnh có thể được nhập vào ở dòng lệnh. Nó
được chỉ thị bởi dấu nhắc lệnh (»).

Workspace: hiển thị tất cả các biến được tạo bởi và/hoặc được nhập vào từ các tập tin.

5
6 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

Command History: Ô này hiển thị hoặc trả về các lệnh mà được nhập ở dòng lệnh.

1.1.1 Cú pháp cơ bản

Môi trường MATLAB hành xử giống như một máy tính siêu phức tạp. Ta có thể nhập vào các
lệnh ở dấu nhắc lệnh ».

MATLAB là một môi trường được biên dịch. Nói cách khác, ta đưa ra một lệnh và MATLAB
thực thi nó ngay lập tức.

5+5
ans =
10

Sử dụng dấu chấm phẩy (;) trong MATLAB

Dấu chấm phẩy (;) chỉ thị kết thúc câu lệnh. Tuy nhiên, nếu ta không muốn hiển thị kết quả
của một biểu thức trong MATLAB, ta phải thêm vào dấu (;) sau biểu thức đó.

x = 3;
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 7

y = x + 5
y =
8

Khi ta bấm Enter, MATLAB thực thi nó ngay lập tức và kết quả trả về là y = 8

Thêm vào bình luận (comment)

Biểu tượng phần trăm (%) được sử dụng để chỉ thị dòng bình luận.

x = 9 % assign 9 for x

Hằng số và biến đặc biệt

MATLAB hỗ trợ các biến và hằng số đặc biệt sau:

Tên Ý Nghĩa
ans Kết quả gần nhất
i,j Đơn vị ảo
Inf Vô cùng
pi số pi

Tên biến

Tên biến bao gồm một ký tự theo sau bởi bất kỳ số lượng ký tự, số hoặc dấu gạch chân.

MATLAB thì phân biệt chữ hoa, chữ thường.

Tên biến có độ dài bất kỳ, tuy nhiên, MATLAB chỉ sử dụng N ký tự đầu tiên, trong đó N được
cho bởi hàm namelengthmax.

x=3;
y_1=5;
8 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

1.1.2 Biến (variable)

Trong môi trường MATLAB, mỗi biến là một mảng (array) hoặc ma trận (matrix). Ta có thể
gán các biến theo một cách đơn giản. Ví dụ:

x = 3 % định nghĩa biến x và gán cho nó một giá trị

MATLAB sẽ thực thi câu lệnh trên và trả về

x=3

Nó tạo ra một ma trận 1x1 tên là x và lưu giá trị 3 trong phần tử của nó.

Chú ý rằng: Một khi một biến nào đó được nhập vào hệ, ta có thể liên hệ nó sau đó.

Các biến phải có giá trị trước khi nó được sử dụng.

Khi một biểu thức trả về một kết quả mà chưa được gán cho bất kỳ biến nào, hệ thống sẽ gán
cho nó biến tên ans. Ví dụ:

sqrt(9)
ans = 3

Nếu ta quên tên biến

Lệnh who liệt kê tất cả tên các biến mà ta đã sử dụng.

Ví dụ:

who
Your variables are:
a ans b c

Lệnh whos liệt kê chi tiết hơn về các biến: Các biến hiện thời trong bộ nhớ; Loại của mỗi biến;
Bộ nhớ được phân cho mỗi biến; Biến là biến phức hay không.

whos
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 9

Attr Name Size Bytes Class


==== ==== ==== ==== =====
a 1x1 8 double
ans 1x70 757 cell
b 1x1 8 double
c 1x1 8 double

Total is 73 elements using 781 bytes

Lệnh clear xóa tất cả các biến từ bộ nhớ.

clear x % nó sẽ xóa biến x

clear % nó sẽ xóa tất cả các biến trong workspace

1.1.3 Vector

Một vector là một mảng một chiều. MATLAB cho phép tạo ra hai loại vector: vector hàng và
vector cột.

Vector hàng được tạo ra bằng cách bao quanh một tập hợp các phần tử bằng dấu ngoặc vuông,
sử dụng khoảng trắng hoặc dấu phẩy để phân định các phần tử.

Ví dụ: Hãy tạo một vector a bằng cách nhập vào cửa sổ lệnh MATLAB (MATLAB command
window) như sau:

a = [1 2 3 4 5 6]

Tạo một vector với các phần tử từ 0 đến 20 và cách nhau 2 đơn vị (cách này thường xuyên
được dùng để tạo một vector thời gian):

t = 0:2:20

Cộng thêm 2 vào mỗi phần tử của vector a để có vector b :

b = a + 2
10 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

Cộng/trừ hai vector nếu chúng có độ dài như nhau:

c = a + b;

d = a – b;

Vector cột được tạo ra bằng cách bao quanh một tập hợp các phần tử trong dấu ngoặc vuông,
sử dụng dấu chấm phẩy (;) để phân định giữa các phần tử. Ví dụ:

c = [7; 8; 9; 10; 11]

Bài Tập: Nhập vector hàng a có các phần tử: 1, 3, 5, 7, 9

Nhập vector côt b có các phần tử: 2, 4, 6, 8, 10

Tìm vector: c=a*b

Ma trận

Một ma trận là một mảng hai chiều. Trong MATLAB, một ma trận được tạo ra bằng cách
nhập mỗi dòng như là một dãy các phần tử cách nhau bởi khoảng trống hoặc dấu phẩy, và cuối
mỗi dòng là dấu chấm phẩy. Ví dụ:

B = [1 2 3 4; 5 6 7 8; 9 10 11 12]

Ma trận trong MATLAB có thể được biến đổi theo nhiều cách. Tìm ma trận chuyển vị của B
bằng cách:

C = B'

Nhân các phần tử tương ứng của ma trận với nhau bằng cách sử dụng toán tử .*

E = [1 2; 3 4]
F = [2 3; 4 5]
G = E.*F
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 11

Tìm nghịch đảo của một ma trận bằng lệnh inv

X = inv(E)

Tìm giá trị riêng của ma trận bằng lệnh eig

eig(E)

1.1.4 Vẽ đồ thị (plotting)

Việc vẽ một đồ thị cũng dễ dàng với MATLAB. Ví dụ, để vẽ đồ thị sóng sin theo thời gian:

• Tạo một vector thời gian (time vector) (dấu “;“ cho MATLAB biết ta không muốn thấy
tất cả các giá trị)

• Tính giá trị sin theo thời gian

• Các lệnh sau hàm plot (title, xlabel, ylabel) sẽ thêm các chú thích vào đồ thị

t = 0:0.25:7;
y = sin(t)

plot(t,y)
title('Sin wave as a function of time')
xlabel('Time (s)')
ylabel('Amplitude')

Bài tập: Vẽ đồ thị của hàm cos trong khoảng thời gian từ 1 đến 8s, thời gian lấy mẫu là 0.1s.

1.1.5 Đa thức (polynomial)

Trong MATLAB, một đa thức được biểu diễn bởi một vector. Để tạo ra một đa thức trong
MATLAB, nhập từng hệ số (coefficient) của đa thức vào vector theo thứ tự giảm dần (descend-
ing order). Ví dụ, để biểu diễn đa thức

x4 + 3x3 − 15x2 − 2x + 9

trong MATLAB, nhập vào vector sau


12 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

y = [1 3 -15 -2 9]

MATLAB có thể dịch một vector với độ dài n + 1 như một đa thức bậc n. Do đó, nếu một đa
thức mất đi bất kỳ hệ số nào, người dùng phải điền 0 vào vị trí thích hợp trong vector. Ví dụ,

x4 + 1

sẽ được biểu diễn trong MATLAB như:

y = [1 0 0 0 1]

Ta có thể tìm giá trị (value) của một đa thức bằng hàm polyval. Ví dụ, để tìm giá trị của đa
thức trên ở x = 2,

z = polyval([1 0 0 0 1],2)

Ta cũng có thể tìm nghiệm (root) của một đa thức bằng lệnh roots

roots([1 3 -15 -2 9])

Nhân (multiply) hai đa thức với nhau sử dụng lệnh conv:

a = [1 2];
b = [1 4 8];
c = conv(a,b)

Chia (divide) hai đa thức c cho b bằng lệnh deconv:

[aa, R]=deconv(c, b)

Kết quả (result) được lưu trong biến aa và phần thừa (remainder) được lưu ở biến R
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 13

Bài tập: Hãy nhập các đa thức sau vào MATLAB:

1)8k 3 − 6k 2 − 2k + 18
2)k 6 + 6k 4 + 11k 2 − 2k

• Tìm nghiệm của các đa thức trên

• Tìm giá trị của từng đa thức với k = 3

• Nhân hai đa thức với nhau

1.1.6 Sử dụng m-file

MATLAB cho phép ta viết hai loại tập tin chương trình.

Scripts - các tập tin script (tập tin kịch bản) là các tập tin chương trình với đuôi mở rộng .m.
Trong các tập tin này, ta viết các chuỗi lệnh mà ta muốn thực thi cùng nhau. Script không
chấp nhận đầu vào và không trả về bất kỳ đầu ra nào. Chúng làm việc sử dụng số liệu trong
workspace.

Functions (Hàm số) - các tập tin hàm số cũng là tập tin chương trình với đuôi mở rộng .m.
Hàm số chấp nhận đầu vào và trả về đầu ra.

Tạo và chạy script file

Để tạo script file, ta cần sử dụng trình soạn thảo văn bản (text editor). Ta có thể mở trình
soạn thảo MATLAB theo 2 cách. Sử dụng dòng nhắc lệnh và sử dụng IDE

Nếu ta đang sử dụng dòng nhắc lệnh, nhập vào edit ở dấu nhắc lệnh. Việc này sẽ mở trình
soạn thảo. Ta có thể nhập trực tiếp tên tập tin (với mở rộng .m) Ví dụ:

edit

hoặc để mở một M file đã có sẵn

edit <filename>
14 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

Lệnh trên sẽ tạo ra một tập tin trong thư mục MATLAB mặc định. Nếu ta muốn lưu tất cả
các file chương trình trong một thư mục cụ thể, thì ta sẽ phải cung cấp toàn bộ đường dẫn.

Một cách khác là sử dụng IDE, chọn NEW -> Script .

Ví dụ: Nhập vào Script:

a = 5; b = 7;
c = a + b

Sau khi tạo và lưu tập tin, ta có thể chạy tập tin đó theo hai cách:

1. Bấm vào nút Run trên cửa sổ hoặc,

2. Nhập vào tên tập tin ở dòng nhắc lệnh

Hãy tạo một m-file trong đó thực hiện phép so sánh:

a = 5;
b = 7;
if (a>b)
c=7
else
c=9
end

Lưu file và thực thi nó ở cửa sổ lệnh.

Hàm số

Một hàm số (function) là một nhóm các câu lệnh mà cùng với nhau chúng thực hiện một nhiệm
vụ. Trong MATLAB, các hàm số được định nghĩa trong các tập tin riêng biệt. Tên của tập tin
và tên hàm số nên giống nhau.

Hàm số làm việc dựa trên các biến (variables) trong không gian làm việc của nó (không gian
làm việc địa phương). Nó khác với không gian làm việc ở dấu nhắc lệnh của MATLAB (không
gian làm việc cơ sở).
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 15

Hàm số có thể chấp nhận nhiều hơn một đối số đầu vào và có thể trả về nhiều hơn một đối số
đầu ra.

Cú pháp: f unction[out1, out2, ..., outN ] = myf un(in1, in2, in3, ..., inN )

Ví dụ: Hàm số sau được đặt tên mymax và nên được viết trong một tập tin có tên mymax.m.
Nó lấy 5 số làm đối số và trả về số lớn nhất. Tạo file mymax.m và nhập vào code sau:

function max = mymax(n1, n2, n3, n4, n5)


max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end

Hàng đầu tiên bắt đầu với từ khóa function. Nó cho biết tên của hàm và thứ tự của đối số.
Trong ví dụ của ta, hàm mymax có 5 đối số đầu vào (n1, n2, n3, n4, n5 ) và một đối số đầu ra
(max ).

Ta có thể gọi hàm này ví dụ như:

mymax(34, 78, 89, 23, 11)

MATLAB sẽ thực thi và trả về kết quả sau:

ans = 89

Bài tập: tạo một hàm để thực hiện phép tính sau: d = 2*x+3*y+6*z;
16 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

1.1.7 Khai báo hàm truyền trong MATLAB

a. Sử dụng khai báo kiểu vector và hàm TF

Nhập vào MATLAB hàm truyền


s+1
G(s) =
s2 + 2s + 1
Ta có thể thực hiện như sau:

>> num=[1 1];


>> den=[1 2 1];
>> G=tf(num,den)

G =
s + 1
-------------
s^2 + 2 s + 1
Continuous-time transfer function.

Bài tập: Hãy thực hiện việc nhập vào các hàm truyền sau:

3s2 + 2s + 1
G1(s) = 4
5s + 2s3 + 1
5s2 + 1
G2(s) = 3
5s + 4s2 + 2s + 1

b. Đa thức sử dụng biến s

Một cách khác để biểu diễn một đa thức là sử dụng biến Laplace s trong MATLAB. Định nghĩa
một biến số s trong MATLAB được thực hiện như sau:

s = tf('s')

Do đó, đa thức
1
poly(s) =
s4 + 3s3 − 15s2 − 2s + 9
sẽ được nhập vào:

poly = 1/(s^4+3*s^3-15*s^2-2*s+9)
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 17

Ta cũng có thể nhân hai đa thức với nhau sử dụng biến s.

x = s+2;
y = s^2+4*s+8;
z = x* y

Bài tập: Hãy nhập đa thức sau vào MATLAB sử dụng biến s?

A(s) = 5s6 + s3 − 18s2 + 7s


5s2 + 1
G1(s) =
5s3 + 4s2 + 2s + 1

1.1.8 Biến đổi Laplace với MATLAB

Hàm laplace(f ) trả về biến đổi Laplace của f . Mặc định, biến độc lập là t (miền thời gian) và
biến biến đổi là s (miền Laplace).

Ví dụ

syms t % Create symbolic variable t


laplace(t^0)
ans =
1/s

pretty(ans)
1
-
s

syms t % Create symbolic variable t


laplace(t)
ans =
1/s^2

>> pretty(ans)
1
--
2
18 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

1.1.9 Biến đổi Laplace ngược

Hàm ilaplace(F ) trả về biến đổi Laplace ngược của F . Mặc định, biến độc lập là s và biến biến
đổi là t.

1
Ví dụ Tính toán biến đổi Laplace ngược của s2
. Mặc định, biến đổi ngược trả về dạng của t.

syms s
F = 1/s^2;
ilaplace(F)
ans =
t

Bài Tập: Hãy tìm biến đổi Laplace ngược của hàm truyền sau:
1
G=
s+2

1.1.10 Khai triển phân thức với MATLAB

Cho hàm
B(s) num b0 sn + b1 sn−1 + ... + bn
= = n
A(s) den s + a1 sn−1 + ... + an
Trong MATLAB, vector hàng num và den biểu thị các hệ số của tử số (numerator) và mẫu số
(denominator) của hàm truyền.

num = [b0 b1 ... bn ]


den = [1 a1 ... an ]

Lệnh [r, p, k] = residue(num, den) tìm phần dư (residue - r), cực (pole - p), phần tử trực tiếp
(k) của hàm:
B(s) r(1) r(2) r(n)
= + + ... + + k(s)
A(s) s − p(1) s − p(2) s − p(n)

Lệnh residue cũng có thể được dùng để tìm các hệ số của đa thức từ phân thức được khai
triển:
1.1. HIỂU VỀ MÔI TRƯỜNG LÀM VIỆC CỦA MATLAB 19

[r, p, k] = residue(num, den)

với r, p, k có ý nghĩa như trên.

B(s)
Để tạo thành đa thức dạng A(s)
, dùng lệnh printsys(num, den, ‘s0 ).

Ví dụ
B(s) 2s3 + 5s2 + 3s + 6
= 3
A(s) s + 6s2 + 11s + 6
Các lệnh trên MATLAB

num = [2 5 3 6];
den = [1 6 11 6];
[r,p,k]=residue(num,den)
r =

-6.0000
-4.0000
3.0000

p =

-3.0000
-2.0000
-1.0000

k =

có nghĩa là:
B(s) −6 −4 3
= + + +2
A(s) s+3 s+2 s+1
Để biến đổi trở lại thành đa thức ban đầu, trong MATLAB dùng các lệnh:

[num1,den1]=residue(r,p,k);
printsys(num1,den1,'s')

num/den =
20 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

2 s^3 + 5 s^2 + 3 s + 6
-----------------------
s^3 + 6 s^2 + 11 s + 6

1.1.11 Tìm zero và cực của đa thức với MATLAB

Ta có thể tìm trực tiếp zero và cực của hàm truyền sử dụng các lệnh zero và pole tương ứng,
hoặc

B(s)
Lệnh [z, p, K] = tf 2zp(num, den): Dùng để tìm zero, cực và độ lợi (gain) của đa thức A(s)

Ví dụ
B(s) 4s2 + 16s + 12
= 4
A(s) s + 12s3 + 44s2 + 48s
Cách 1:

s=tf('s');
G=(4*s^2+16*s+12)/(s^4+12*s^3+44*s^2+48*s)
zero(G)
pole(G)

Cách 2:

num = [0 0 4 16 12];
den = [1 12 44 48 0];
[z,p,K] = tf2zp(num,den)

1.2 Giới thiệu về SIMULINK

Simulink là một mở rộng đồ họa (graphical extension) cho MATLAB để mô hình hóa và mô
phỏng các hệ. Một trong những thuận lợi chính của Simulink là khả năng mô hình hóa một hệ
không tuyến tính, việc mà một hàm truyền không thể làm. Một thuận lợi khác của Simulink là
khả năng tiếp nhận các điều kiện ban đầu. Khi một hàm truyền được xây dựng, các điều kiện
ban đầu được giả định là 0.
1.2. GIỚI THIỆU VỀ SIMULINK 21

Trong Simulink, các hệ thống được vẽ trên màn hình như các sơ đồ khối (block diagram). Nhiều
phần tử của sơ đồ khối có sẵn, như là hàm truyền (transfer function), điểm tổng (summing
junctions) . . . cũng như các thiết bị đầu vào và đầu ra ảo (virtual input/output devices) như
là bộ phát (generator) và máy hiện sóng (oscilloscope). Simulink được tích hợp với MATLAB
và dữ liệu có thể được truyền dễ dàng giữa hai chương trình. Trong phần hướng dẫn này và
các phần tiếp theo, ta sẽ áp dụng Simulink đối với các ví dụ từ MATLAB để mô hình các hệ,
xây dựng bộ điều khiển, và mô phỏng hệ.

1.2.1 Khởi động Simulink

Khởi động Simulink bằng cách nhập lệnh simulink vào cửa sổ lệnh hay nút Simulink trên
standard toolbar

Tạo một cửa sổ mới

Trong Simulink, một mô hình là một tập hợp các khối để biểu diễn một hệ. Ngoài việc tạo một
mô hình từ đầu (from scratch), những file mô hình được lưu trước đó có thể được mở từ File
menu hay nhập tên file vào cửa sổ lệnh của MATLAB.

File mô hình

Trong Simulink, một mô hình là một tập hợp các khối nhằm biểu diễn một hệ thống. Ngoài
việc tạo ra một mô hình từ đầu, tập tin mô hình đã được lưu lại trước đó cũng có thể được mở
từ menu File hoặc từ dấu nhắc lệnh của MATLAB.

Những phần tử cơ bản

Ta sẽ phân tích các phần tử cơ bản của Simulink dựa trên sơ đồ khối hình 1.2.1

Có hai lớp lớn các phần tử trong Simulink: khối (blocks) và đường (lines). Các khối được sử
dụng để tạo ra (generate), điều chỉnh (modify), kết hợp (combine), cung cấp (output) và hiện
tín hiệu. Các đường được sử dụng để truyền tín hiệu (signal) từ môt khối đến khối khác.

Khối

Khối có nhiều lớp tổng thể trong thư viện Simulink:

Nguồn (source): được sử dụng để tạo ra nhiều kiểu tín hiệu


22 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

Bộ nhận (sink): được sử dụng để cung cấp và hiển thị tín hiệu

Khối liên tục (continuous): các phần tử hệ thống liên tục theo thời gian (hàm truyền, mô hình
không gian trạng thái, bộ điều khiển PID, v.v)

Khối rời rạc (discrete): các phần tử hệ thống thời gian rời rạc, tuyến tính (hàm truyền rời rạc
(discrete transfer function), mô hình không gian trạng thái rời rạc (discrete state-space model),
v.v)

Phép tính toán học (math operations): chứa nhiều phép toán thông dụng (độ lợi (gain), tổng
(sum), tích (product), giá trị tuyệt đối (absolute value), v.v)

Cổng và hệ con (ports & Subsystems): chứa các khối rất hữu ích để xây dựng một hệ thống

Khối có 0 đến nhiều điểm đầu vào và 0 đến nhiều điểm đầu ra. Các điểm đầu vào không sử
dụng được chỉ thị bởi một hình tam giác mở nhỏ (open triangle). Các điểm đầu ra không sử
dụng được chỉ thị bởi một tam giác nhỏ.
1.2. GIỚI THIỆU VỀ SIMULINK 23

Đường (lines)

Đường truyền tín hiệu theo hướng mũi tên (arrow). Đường phải luôn luôn truyền tín hiệu từ
điểm đầu ra của một khối đến điểm đầu vào của một khối khác. Một ngoại lệ của quy luật này
là một đường có thể rẽ nhánh từ một đường khác.

Đường không thể cấp tín hiệu vào một đường khác; các đường phải được kết hợp thông qua
khối như là một điểm tổng (summing junction).

Một tín hiệu có thể là một tín hiệu đại số (scalar signal) hay một tín hiệu vector. Đối với hệ
một đầu vào, một đầu ra (SISO), tín hiệu đại số thường được sử dụng. Đối với hệ nhiều đầu
vào, nhiều đầu ra (MIMO), tín hiệu vector thường được sử dụng, gồm 2 hay nhiều tín hiệu đại
số. Đường được sử dụng để truyền tín hiệu đại số và vector là giống nhau. Loại tín hiệu được
mang bởi đường được quyết định bởi các khối ở mỗi đầu ra của đường.

1.2.2 Một ví dụ cơ bản

Hãy tạo một mô hình đơn giản gồm 3 khối: step, transfer function, scope. Step là một khối
source mà từ đó một tín hiệu đầu vào dạng bước (step input signal) bắt nguồn. Tín hiệu này
được truyền thông qua đường theo hướng mũi tên đến hàm truyền (thuộc khối Continuous).
Khối hàm truyền điều chỉnh tín hiệu đầu vào của nó và cấp ra một tín hiệu mới truyền tới
Scope (thuộc khối Sink). Scope là khối nhận được sử dụng để hiển thị một tín hiệu giống như
một máy hiện sóng (oscilloscope).

Khối phức tạp nhất trong 3 khối này là Scope. Hãy click đôi lên nó để thấy một cửa sổ mới.
Khi mô phỏng được thực hiện, tín hiệu cấp vào scope sẽ được hiển thị lên cửa sổ này.

Click vào Run, Play hay nhập Ctrl-T vào cửa sổ lệnh để tiến hành chạy mô phỏng.

Nhìn vào cửa sổ Scope, ta thấy đáp ứng step không bắt đầu cho đến khi t=1s.

Thay đổi khối

Một khối có thể được thay đổi bằng cách click đôi nó. Click đôi vào hàm truyền và thay đổi
các hệ số của tử số và mẫu số của nó để có được hàm truyền như hình:

Click đôi vào khối step. Các tham số mặc định trong khối này là tín hiệu step xảy ra ở thời
điểm 1s, từ giá trị ban đầu là 0 đến giá trị 1. Hãy thay đổi các giá trị này, chạy mô phỏng lại
24 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK

và quan sát kết quả.

Vì hàm truyền mới có đáp ứng rất nhanh, nó nén lại thành một phần rất hẹp của cửa sổ scope.
Đây không thật sự là vấn đề đối với scope, nhưng với bản thân sự mô phỏng. Simulink mô
phỏng hệ trong 10 giây ngay cả khi hệ đã đạt đến trạng thái ổn định (steady state) ngay sau
1 giây.

Để điều chỉnh, ta cần thay đổi các tham số mô phỏng. Trong cửa sổ mô hình, chọn Model
configuration parameters (thông số cấu hình cho mô hình) từ menu Simulation (mô phỏng) hay
bấm Ctrl+E. Hộp hội thoại (dialog box) sau sẽ xuất hiện:

Có nhiều tùy chọn để điều chỉnh thông số mô phỏng; ta chỉ quan tâm tới thời gian bắt đầu và
thời gian dừng (start time và stop time), cái mà cho Simulink biết khoảng thời gian thực hiện
việc mô phỏng. Điều chỉnh thông số mô phỏng: start time từ 0 → 0.8s; stop time từ 10 → 2s.
Chạy mô phỏng lại và quan sát cửa sổ Scope.
1.2. GIỚI THIỆU VỀ SIMULINK 25
26 CHƯƠNG 1. GIỚI THIỆU VỀ MATLAB VÀ SIMULINK
Chương 2

GIỚI THIỆU: MÔ HÌNH HÓA HỆ


THỐNG

Bước đầu tiên trong quá trình thiết kế điều khiển là phát triển mô hình toán học thích hợp của
hệ thống được điều khiển. Các mô hình này có thể được rút ra từ các định luật vật lý (physical
laws) hoặc dữ liệu thực nghiệm (experimental data). Trong phần này, cách biểu diễn bằng hàm
truyền (transfer function) và không gian trạng thái (state-space) của các hệ động học được giới
thiệu.

2.1 Các hệ động học (Dynamic systems)

Các hệ động học là các hệ mà thay đổi hoặc tiến triển theo thời gian theo một quy luật cố
định. Đối với nhiều hệ vật lý, quy luật này có thể được phát biểu như một tập hợp các phương
trình vi phân bậc nhất (first-order differential equations):
dx
ẋ = = f(x(t), u(t), t) (2.1)
dt
Trong phương trình trên, x(t) là vector trạng thái (state vector), là một tập hợp các biến
(variables) biểu diễn trạng thái của hệ ở thời điểm t. Ví dụ, trong một hệ lò xo đơn giản (mass-
spring damper system), hai biến trạng thái có thể là vị trí (position) và vận tốc (velocity) của
khối lượng (mass). u(t) là vector đầu vào bên ngoài (external input vector) đối với hệ ở thời
điểm t, và f là một hàm số (có thể không tuyến tính) mà tạo ra đạo hàm theo thời gian (time
derivative) hay tốc độ thay đổi (rate of change) của vector trạng thái, dx/dt, ở một thời điểm
cụ thể.

27
28 CHƯƠNG 2. GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG

Trạng thái ở bất kỳ thời điểm tương lai, x(t1 ), có thể được xác định chính xác khi đã biết trạng
thái ban đầu, x(t0 ), và giá trị của đầu vào (time history of inputs) u(t) giữa t0 và t1 bằng cách
lấy tích phân (integrating) phương trình 2.1. Mặc dù bản thân các biến trạng thái là không
duy nhất (unique), cần phải có số lượng biến trạng thái tối thiểu, n, để nắm bắt trạng thái của
một hệ được cho và để có thể dự đoán hành vi của hệ (system’s future behaviour) ở tương lai.
n được xem như bậc của hệ (system order) và quyết định kích thước/chiều (dimensionality)
của không gian trạng thái. Bậc của hệ thường tương ứng với số phần tử chứa năng lượng độc
lập trong hệ thống.

Mối quan hệ trong phương trình 2.1 rất tổng quát và có thể được sử dụng để mô tả nhiều hệ
thống đa dạng khác nhau; tuy nhiên, nó rất khó cho việc phân tích hệ thống. Có hai dạng
đơn giản hóa thường gặp để làm cho vấn đề dễ kiểm soát hơn. Đầu tiên, nếu hàm f không
phụ thuộc rõ ràng vào thời gian, vd, ẋ = f(x,u), thì hệ được xem là bất biến theo thời gian
(time invariant). Giả định này là hợp lý bởi vì bản thân các định luật vật lý không phụ thuộc
vào thời gian. Đối với các hệ bất biến theo thời gian, các tham số hoặc hệ số (parameters or
coefficients) của hàm f là hằng số (constant). Các biến trạng thái, x(t), và đầu vào điều khiển,
u(t), vẫn có thể phụ thuộc vào thời gian.

Giả định phổ biến thứ hai liên quan đến sự tuyến tính (linearity) của hệ thống. Trong thực tế,
gần như mọi hệ vật lý đều không tuyến tính (nonlinear). Nói cách khác, f là một hàm phức tạp
của trạng thái và đầu vào. Sự không tuyến tính xuất hiện theo nhiều con đường khác nhau,
một đường phổ biến trong các hệ điều khiển là “sự bão hòa” (saturation) trong đó một phần
tử của hệ thống đạt tới giới hạn hoạt động vật lý của nó. Tuy nhiên, xét trên một khoảng hoạt
động đủ nhỏ (đường tiếp tuyến gần 1 đường cong) thì động học của hầu hết các hệ là gần như
tuyến tính (approximately linear). Trong trường hợp này, hệ của các phương trình vi phân bậc
nhất có thể được biểu diễn như một phương trình ma trận, ẋ = Ax + Bu.

Trước khi có các máy tính số (digital computers), người ta chỉ có thể phân tích các hệ tuyến
tính bất biến theo thời gian (linear time-invariant systems or LTI). Do vậy, hầu hết các kết quả
của lý thuyết điều khiển đều được dựa trên các nhận định này. Mai mắn là, như ta sẽ thấy, các
kết quả có được từ các giả định này là hữu ích và nhiều vấn đề kỹ thuật quan trọng đã được
giải quyết bằng cách sử dụng các kỹ thuật LTI. Thật vậy, sức mạnh của các hệ điều khiển hồi
tiếp (feedback control systems) là chúng làm việc bền vững (robust) ngay cả khi có sự bất định
của mô hình (modeling uncertainty).
2.2. HÀM TRUYỀN 29

2.2 Hàm truyền

Các hệ LTI có tính chất cực kỳ quan trọng là nếu đầu vào của hệ là dạng sin, thì đầu ra cũng
sẽ dạng sin với cùng tần số (frequency) như đầu vào, nhưng có thể khác về độ lớn (magnitude)
và pha (phase). Sự khác biệt ở độ lớn và pha là một hàm theo tần số và mô tả đáp ứng tần số
(frequency response) của hệ.

Sử dụng biến đổi Laplace (Laplace transform), ta có thể chuyển đổi việc biểu diễn theo miền
thời gian của hệ thống (system’s time-domain representation) sang biểu diễn mối quan hệ đầu
vào/đầu ra ở miền tần số (frequency-domain input/output representation). Đây được gọi là
hàm truyền (transfer function). Việc biến đổi này cũng chuyển phương trình vi phân thành
một phương trình đại số (algebraic equation), mà việc phân tích nó thường dễ dàng hơn.

Trong lý thuyết điều khiển, những hàm gọi là hàm truyền thường được sử dụng để mô tả mối
liên hệ đầu vào-đầu ra của những thành phần hoặc hệ thống mà có thể được mô tả bằng các
công thức vi phân, tuyến tính và bất biến theo thời gian (LTI).

Biến đổi Laplace của môt hàm số miền thời gian, f (t), được định nghĩa như bên dưới:

Z ∞
F (s) = L {f (t)} = e−st f (t)dt
0

Trong đó, thông số s = σ + jω là một biến tần số phức (complex frequency variable). Trong
thực tế, rất hiếm khi bạn phải thực hiện một biến đổi Laplace một cách trực tiếp. Thông thường
thì tra bảng chuyển đổi có sẵn: Biến đổi Laplace của đạo hàm cấp n của một hàm là rất quan
trọng:
dn f
 
L = sn F (s) − sn−1 f (0) − sn−2 f˙(0) − ... − sf (n−2) (0) − f (n−1) (0)
dtn
Những phương pháp miền tần số thường được sử dụng nhất để phân tích các hệ LTI một đầu
vào/một đầu ra (single-input/single-output (SISO)), ví dụ, các hệ có phương trình vi phân với
hệ số không đổi, như:

an y (n) (t)+an−1 y (n−1) (t)+...+a1 ẏ(t)+a0 y(t) = bm u(m) (t)+bm−1 u(m−1) (t)+...+b1 u̇(t)+b0 u(t) (n ≥ m)

trong đó, y(t) là tín hiệu đầu ra, u(t) là tín hiệu đầu vào của hệ thống. Biến đổi Laplace của
phương trình này được cho bên dưới:

an sn Y (s) + an−1 sn−1 Y (s)... + a1 sY (s) + a0 Y (s) = bm sm U (s) + bm−1 sm−1 U (s) + ... + b1 sU (s) + b0 U (s)
30 CHƯƠNG 2. GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG

trong đó Y(s) và U(s) là biến đổi Laplace của y(t) và u(t). Chú ý rằng, khi tìm hàm truyền, ta
luôn luôn giả sử rằng các điều kiện ban đầu (initial conditions), y(0), ẏ(0), u(0) v.v là 0. Hàm
truyền từ đầu vào U(s) tới đầu ra Y(s), do đó
L[Output] Y (s) bm sm + bm−1 sm−1 + ... + b1 s + b0
Hàm truyền = G(s) = = =
L[input] U (s) an sn + an−1 sn−1 + ... + a1 s + a0
Ta cũng có thể đưa hàm truyền về dạng zero-cực-độ lợi (zero-pole-gain):
N (s) (s − z1 )(s − z2 )...(s − zm−1 )(s − zm )
Hàm truyền = G(s) = =K
D(s) (s − p1 )(s − p2 )...(s − pn−1 )(s − pn )
Các zero của hàm truyền, z1 , . . . , zm là nghiệm của đa thức tử số (numerator polynomial), vd.,
các giá trị của s sao cho N (s) = 0. Các cực của hàm truyền, p1 , . . . , pn là nghiệm của đa thức
mẫu số (denominator polynomial), vd, các giá trị của s sao cho D(s) = 0. Cả zero và cực có
thể có giá trị phức (complex value). Độ lợi của hệ (Gain) là K = bm /an .

Ta có thể xác định hàm truyền một cách trực tiếp từ phương trình không gian trạng thái như
sau:
Y (s)
G(s) = = C(sI − A)−1 B + D
U (s)

2.3 Một số ví dụ về mô hình hóa

Sau khi đã tìm hiểu các công cụ về toán học và vật lý, ta sẽ tìm hiểu một số ví dụ về biểu diễn
hệ vật lý bằng các phương trình toán học. Mục đích của việc này là giúp ta thấy được một hệ
thống vật lý được biểu diễn bởi mô hình toán học là như thế nào.

2.3.1 Hệ cơ học

Các định luật về chuyển động của Newton là nền tảng để phân tích các hệ cơ học. Định luật
2 của Newton, phương trình bên dưới, phát biểu rằng, tổng của các lực tác động lên một vật
bằng tích khối lượng và gia tốc của nó. Định luật 3 Newton phát biểu, nếu hai vật tiếp xúc,
chúng chịu lực tác động có độ lớn như nhau, chỉ tác động theo hướng ngược nhau.
X d2 x
F = ma = m (2.2)
dt2

Khi áp dụng phương trình này, cách tốt nhất là xây dựng một giản đồ vật thể tự do hay giản
đồ lực (free-body diagram (FBD)) của hệ mà chỉ ra tất cả các lực tác động vào vật ấy.
2.3. MỘT SỐ VÍ DỤ VỀ MÔ HÌNH HÓA 31

Hình 2.1: Hệ Giảm chấn-khối lượng-lò xo.

Hình 2.2: Giản đồ lực của hệ Giảm chấn-khối lượng-lò xo.

Ví dụ: Hệ Giảm chấn-khối lượng-lò xo (Mass-Spring-Damper System)

Giản đồ lực (free-body diagram) của hệ này được cho bên dưới. Lực lò xo tỉ lệ với độ chuyển vị
(displacement) x của khối lượng, m, và lực cản nhớt (viscous damping force) tỉ lệ với vận tốc
của khối lượng, v = ẋ. Hai lực này ngược với chiều chuyển động của khối lượng và do đó được
biểu diễn theo chiều âm (negative) của trục x. Chú ý rằng x = 0 tương ứng với vị trí của khối
lượng khi lò xo không bị nén, kéo. Ta tiếp tục bằng cách tổng hợp các lực và áp dụng định luật
II Newton, phương trình (2.2), theo mỗi hướng. Trong trường hợp này, không có lực tác động
theo hướng y; lực theo hướng x là:
X
Fx = F (t) − bẋ − kx = mẍ (2.3)

Phương trình này, được xem như là phương trình chủ đạo (governing equation), mô tả hoàn
toàn trạng thái động học của hệ. Sau này, ta sẽ thấy làm như thế nào để tính toán đáp ứng
của hệ đối với bất kỳ tác động bên ngoài nào (external input), F(t), cũng như phân tích tính
chất của hệ (như là sự ổn định (stability) và hiệu năng (performance)).

Để mô tả không gian trạng thái của hệ lò xo-khối lượng ở trên, ta phải hạ bậc phương trình chủ
đạo bậc hai (second-order governing equation) thành một tập hợp hai phương trình vi phân
bậc nhất (first-order differential equations). Ta chọn vị trí (x) và vận tốc (ẋ) là các biến trạng
32 CHƯƠNG 2. GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG

thái, x được gọi là vector trạng thái.

" #
x
x=

Biến vị trí (position variable) mô tả năng lượng thế năng (potential energy) trữ trong lò xo,
trong khi đó biến vận tốc mô tả động năng (kinetic energy) của khối lượng M. Bộ giảm chấn
(damper) chỉ tiêu tán năng lượng, nó không lưu trữ năng lượng. Thông thường, khi chọn các
biến trạng thái, sẽ là hữu ích khi xem xét biến nào biểu thị năng lượng được lưu trữ trong hệ
thống. Phương trình trạng thái trong trường hợp này là:
" # " #" # " #
ẋ 0 1 x 0
ẋ = = k
+ F (t)
ẍ −m − mb ẋ 1
m

Giả sử ta quan tâm đến việc điều khiển vị trí của khối lượng, thì phương trình đầu ra là:
" #
x
y = [1 0]

Biểu diễn hệ ở dạng không gian biến trạng thái

Hãy nhập các ma trận A, B, C, D của hệ vào MATLAB với giá trị của các biến như sau:

m khối lượng (mass) 1.0 kg

k hằng số lò xo (spring constant) 1.0 N/m

b hằng số tắt dần (damping constant) 0.2 Ns/m

F lực đầu vào (input force)

Sử dụng lệnh ss(A, B, C, D) để mô tả hệ bằng không gian trạng thái?

Sử dụng lệnh step để thấy đáp ứng của hệ?

Biểu diễn hệ ở dạng hàm truyền

Hãy biến đổi Laplace phương trình 2.3, giả sử các điều kiện ban đầu là 0 ?

Hãy nhập mô hình hàm truyền này vào MATLAB theo 2 cách đã học ở chương 1?

Sử dụng lệnh step để thấy đáp ứng của hệ?


2.3. MỘT SỐ VÍ DỤ VỀ MÔ HÌNH HÓA 33

Sử dụng simulink Hãy dùng simulink để biểu diễn và mô phỏng hệ trên dựa trên hàm truyền
của nó?

Thay đổi thời gian mô phỏng thành 100s?

2.3.2 Hệ thống điện (electrical systems):

Giống như định luật Newton đối với các hệ cơ học, định luật mạch điện của Kirchoff (Kirchoff’s
circuit laws) là công cụ phân tích cơ sở để mô hình hóa các hệ thống điện. Định luật dòng
điện của Kirchoff (Kirchoff’s current law – KCL) phát biểu rằng tổng của các dòng điện đi vào
một nút (node) trong một mạch điện phải bằng với tổng các dòng điện đi ra khỏi nút đó. Định
luật điện thế của Kirchoff (Kirchoff’s voltage law – KVL) phát biểu rằng hiệu điện thế (voltage
difference) quanh bất kỳ vòng kín nào trong một mạch điện là 0. Khi áp dụng KVL, điện thế
nguồn thường lấy giá trị dương và điện thế của tải là giá trị âm.

Mạch RLC

Bây giờ ta sẽ xem xét một mạch nối tiếp gồm 3 phần tử: một điện trở (resistor), một điện cảm
(inductor) và một điện dung (capacitor). Vì mạch này là một vòng đơn (single loop), mỗi nút

Hình 2.3: Mạch RLC.

chỉ có một đầu vào và một đầu ra; do đó, áp dụng KCL cho thấy rằng dòng điện , i(t), là như
34 CHƯƠNG 2. GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG

nhau trong mạch điện ở mọi thời điểm. Bây giờ, áp dụng KVL quanh vòng và sử dụng quy tắc
về dấu được chỉ trong sơ đồ, ta có phương trình chủ đạo (governing equation) sau:
Z
di 1
V (t) − Ri − L − idt = 0 (2.4)
dt C

Chú ý rằng, phương trình chủ đạo cho mạch RLC có dạng tương tự như hệ lò xo – khối lượng
ở trên. Cụ thể, chúng đều là hệ bậc hai, mà ở đó điện tích (charge – là tích phân của dòng
điện) tương ứng với độ chuyển vị, cảm kháng (inductance) tương ứng với khối lượng, trở kháng
(resistance) tương ứng với độ cản nhớt (viscous damping), và nghịch đảo dung kháng (inverse
capacitance) tương ứng với độ cứng lò xo (spring stiffness). Những điều tương tự này và những
thứ giống nhau khác tỏ ra hữu ích trong việc hiểu về hành vi của các hệ động lực học.

Biểu diễn không gian trạng thái được tìm bằng cách chọn điện tích của tụ điện và dòng điện
qua mạch (cuộn cảm) là các biến trạng thái.

" #
q
x=
i

trong đó, Z
q= idt

Phương trình trạng thái do đó là:


" # " #" # " #
i 0 1 q 0
ẋ = di = 1 R
+ 1
V (t)
dt
− LC
− L
i L

Ta chọn dòng điện là đầu ra: " #


q
y = [0 1]
i

Một lần nữa ta thấy một hệ thống thực được đơn giản hóa thành sơ đồ và được mô tả bởi
phương trình toán học mà có thể được chia sẽ và phân tích dễ dàng.

Cho R = 1 L = 1H C = 1F

Sử dụng lệnh ss(A, B, C, D) để mô tả hệ bằng không gian trạng thái?

Sử dụng lệnh step để thấy đáp ứng của hệ?

Biểu diễn hệ ở dạng hàm truyền


2.3. MỘT SỐ VÍ DỤ VỀ MÔ HÌNH HÓA 35

Hãy biến đổi Laplace phương trình (2.4), giả sử các điều kiện ban đầu là 0?

Hãy nhập mô hình hàm truyền này vào MATLAB theo 2 cách đã học ở chương 1?

Sử dụng lệnh step để thấy đáp ứng của hệ?

Sử dụng simulink Hãy dùng simulink để biểu diễn và mô phỏng hệ trên dựa trên hàm truyền
của nó?

Một Số Lệnh Trong MATLAB Để Mô Tả Hệ Thống Tự


Động

Lệnh tf : Tạo ra hệ thống mô tả bởi hàm truyền.

Cú pháp: G = tf (T S, M S), với TS, MS lần lượt là tử số và mẫu số của hàm truyền G.

Ví dụ:

s=tf('s');
TS = 1; MS = [1 1];
G1 = tf(TS, MS)
G1 =

1
-----
s + 1

Lệnh minreal: Đơn giản hàm truyền.

Cú pháp: G = minreal(G)

Ví dụ:

TS = [1,2];
MS = conv([1,2],[1,3]);
G = tf(TS, MS)
G =
36 CHƯƠNG 2. GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG

s + 2
-------------
s^2 + 5 s + 6

G2 = minreal(G)
G2 =

1
-----
s + 3

Lệnh series: Tình hàm truyền của hệ thống nối tiếp

Cú pháp: G = series(G1,G2).

Hàm truyền G = G1* G2

Lệnh parallel: Tính hàm truyền của hệ thống song song.

Cú pháp: G = parallel(G1, G2).

Hàm truyền G = G1 + G2

Lệnh feedback: Tính hàm truyền của hệ thống hồi tiếp.

a) Hàm truyền của hệ thống hồi tiếp âm:

Gka = f eedback(G, H) ⇔ Gka = f eedback(G, H, −1)

G
Gka =
1+G∗H

b) Hàm truyền của hệ thống hồi tiếp dương:

Gkd = f eedback(G, H, +1)

G
Gkd =
1−G∗H
2.3. MỘT SỐ VÍ DỤ VỀ MÔ HÌNH HÓA 37

Ví dụ: Tìm Gka và Gkd với:


1
G=
s+1
3
H= 2
s + 3s + 1

Lệnh ss: Tạo ra hệ thống bằng phương trình trạng thái.

Ví dụ:

>> A = [0 1; -3 -2];
>> B = [0;1];
>> C = [1 0];
>> D = 0;
>> G=ss(A, B, C, D)

Lệnh tf : Biến đổi từ phương trình trạng thái về hàm truyền. Cú pháp: G = tf (P T T T )
38 CHƯƠNG 2. GIỚI THIỆU: MÔ HÌNH HÓA HỆ THỐNG
Chương 3

PHÂN TÍCH HỆ THỐNG (SYSTEM


ANALYSIS)

Một khi các mô hình toán học (mathematical models) của hệ thống đã có được, ở dạng không
gian trạng thái (state-space form) hay hàm truyền (transfer function form), ta có thể phân
tích những mô hình này để dự đoán xem hệ sẽ đáp ứng (response) như thế nào ở cả miền thời
gian và miền tần số (time and frequency domains). Việc phân tích này nhằm phục vụ cho việc
thiết kế bộ điều khiển. Các hệ thống điều khiển thường được thiết kế để cải thiện sự ổn định
(stability), vận tốc đáp ứng (speed of response), sai lệch ở trạng thái ổn định (steady-state
error), hay ngăn chặn sự dao động (prevent oscillation). Trong phần này, ta sẽ tìm hiểu làm
thế nào để xác định những đặc tính động học (dynamic properties) này từ các mô hình hệ.

3.1 Tổng quát về đáp ứng thời gian (Time response overview)

Đáp ứng thời gian mô tả trạng thái của một hệ động học thay đổi như thế nào theo thời gian
khi chịu sự tác động bởi một đầu vào cụ thể nào đó. Vì các mô hình mà ta rút ra bao gồm các
phương trình vi phân, một vài phép tích phân phải được thực hiện nhằm xác định đáp ứng theo
thời gian của hệ thống. Đối với một số hệ đơn giản, nghiệm giải tích hoàn toàn (closed-form
analytical solution) có thể tìm được. Tuy nhiên, đối với hầu hết các hệ, đặc biệt là các hệ không
tuyến tính hoặc các hệ chịu đầu vào phức tạp, việc tích phân này phải được tiến hành một
cách số học (numerically). May mắn là MATLAB cung cấp nhiều nguồn hữu ích để tính toán
đáp ứng theo thời gian cho nhiều loại đầu vào, như ta sẽ thấy trong các phần sau.

39
40 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

Đáp ứng thời gian của một hệ động học tuyến tính gồm tổng của đáp ứng quá độ (transient
response), mà phụ thuộc vào các điều kiện ban đầu, và đáp ứng trạng thái ổn định (steady-
state response), mà phụ thuộc vào đầu vào của hệ. Chúng tương ứng với nghiệm đồng nhất
(homogenous solution) và nghiệm riêng biệt (particular solution) của phương trình vi phân chủ
đạo (governing differential equations).

3.2 Tổng quát về đáp ứng tần số (Frequency response


overview)

Tất cả các ví dụ trình bài trong phần thực hành này đều được mô hình hóa bởi các phương
trình vi phân tuyến tính hệ số không đổi (linear constant coefficient differential equations) và
do đó chúng tuyến tính bất biến theo thời gian (linear time-invariant LTI). Các hệ LTI có tính
chất cực kỳ quan trọng là nếu đầu vào của hệ là hàm sin, thì đầu ra ở trạng thái ổn định
(steady-state output) cũng sẽ dạng sin với cùng tần số, nhưng, nhìn chung, khác độ lớn và pha.
Sự khác biệt về độ lớn và pha này là một hàm của tần số và bao gồm đáp ứng tần số (frequency
response) của hệ.

Đáp ứng tần số của một hệ có thể được tìm từ hàm truyền của nó theo cách sau: tạo một vector
tần số (dao động giữa tần số zero hoặc “DC” đến vô cùng (infinity) và tính giá trị của hàm
truyền của hệ ở các tần số này. Nếu G(s) là hàm truyền vòng hở (open-loop transfer function)
của hệ và ω là vector tần số, thì ta vẽ đồ thị G(jω) theo ω. Vì G(jω) là một số phức (complex
number), ta có thể vẽ đồ thị của cả độ lớn và pha của nó (biểu đồ Bode); hoặc vị trí của nó
trong mặt phẳng phức (complex plane) (sơ đồ Nyquist – Nyquist diagram). Cả hai phương
pháp này hiển thị cùng thông tin, nhưng theo cách khác nhau.

3.3 Sự ổn định

Cho mục đích của ta, định nghĩa về ổn định của đầu vào bị chặn/đầu ra bị chặn (Bounded
input Bounded output – BIBO) sẽ được sử dụng. Ở định nghĩa này, một hệ là ổn định nếu
đầu ra duy trì trong giới hạn (remain bounded) đối với tất cả các đầu vào hữu hạn (bounded
inputs or finite inputs). Trong thực tế, điều này có nghĩa là hệ không bị tăng mất kiểm soát
(blow up) trong lúc hoạt động.
3.3. SỰ ỔN ĐỊNH 41

Mô tả hàm truyền là đặc biệt hữu ích khi phân tích sự ổn định hệ thống. Nếu tất cả các
cực (poles) của hàm truyền (giá trị của s mà làm cho mẫu số bằng 0) có các phần thực âm
(negative real parts), thì hệ là ổn định. Nếu bất kỳ cực nào có phần thực dương, thì hệ là không
ổn định. Nếu ta xem xét các cực trên mặt phẳng phức s (complex s-plane), thì tất cả các cực
phải nằm ở nửa trái mặt phẳng s (left-half plane LHP) để đảm bảo sự ổn định. Nếu bất kỳ
cặp nghiệm nào nằm ở trục ảo (imaginary axis), thì hệ là ổn định biên (marginally stable) và
hệ sẽ có xu hướng dao động. Một hệ với các cực chỉ toàn phần ảo thì không được xem là ổn
định BIBO. Đối với các hệ như vậy, sẽ tồn tại đầu vào hữu hạn nào đó mà làm cho đáp ứng
của hệ vượt giới hạn. Các cực của một hệ LTI có thể được tìm dễ dàng trong MATLAB bằng
lệnh pole.

Bài tập:

Tìm cực của hàm truyền sử dụng lệnh pole:

1
G1(s) =
s2
+ 2s + 5
1
G2(s) =
s−1

Hệ thống ổn định không? Tại sao? (kiểm tra lại sử dụng đầu vào là hàm step)

Sự ổn định của một hệ cũng có thể được tìm thấy từ mô tả không gian trạng thái. Thật sự,
các cực của hàm truyền là các giá trị riêng (eigenvalues) của ma trận hệ A. Ta có thể sử dụng
lệnh eig để tìm giá trị riêng sử dụng trực tiếp mô hình LTI của hệ , eig(G), hoặc từ ma trận
hệ thống như sau:

[A, B, C, D] = ssdata(G);

eig(A)

Lệnh ssdata của hàm truyền G trả về các ma trận của mô hình không gian biến trạng thái.
Đây là một cách biến đổi từ mô hình dạng hàm truyền sang mô hình dạng không gian trạng
thái.

Để tìm ngược lại đa thức đặc trưng (characteristic polynomial) của hàm truyền từ ma trận A,
ta sử dụng lệnh poly (vd. poly(A)).
42 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

3.4 Bậc của hệ (System Order)

Bậc của một hệ động học là bậc của đạo hàm cao nhất của phương trình vi phân chủ đạo
(governing differential equation). Nó cũng là số mũ cao nhất (highest power) của s trong mẫu
số của hàm truyền của hệ. Những tính chất quan trọng của các hệ bậc một, hai và cao hơn sẽ
được trình bài trong phần này.

3.4.1 Các hệ bậc nhất (First-order systems)

Các hệ bậc nhất là các hệ động học đơn giản nhất để phân tích. Một vài ví dụ phổ biến bao gồm
hệ bộ giảm chấn-khối lượng (mass-damper system) và mạch RC. Dạng tổng quát của phương
trình vi phân bậc nhất như sau:

ẏ(t) + ay(t) = bu(t) hay τ ẏ(t) + y(t) = kdc u(t)

dạng của một hàm truyền bậc nhất là:

b kdc
G(s) = = (3.1)
s+a τs + 1

trong đó kdc và τ quyết định hoàn toàn tính chất của hệ bậc nhất.

Độ lợi tần số thấp (Low frequency (DC) gain)

Độ lợi DC, kdc , là tỉ số độ lớn của đáp ứng bước (step response) ở trạng thái ổn định (steady-
state step response) đối với độ lớn của đầu vào bước (step input). Đối với các hàm truyền ổn
định, định lý giá trị sau cùng (final value theorem) cho thấy rằng độ lợi DC là giá trị của hàm
truyền ở s = 0. Đối với các hệ bậc nhất ở các dạng trên, độ lợi DC là kdc = b/a.

Hằng số thời gian (Time constant)

Hằng số thời gian của hệ bậc nhất là Tc = τ = 1/a. Nó bằng với thời gian để đáp ứng của hệ
đạt 63% giá trị ở trạng thái ổn định đối với một đầu vào bước (từ các điều kiện ban đầu bằng
0). Tổng quát hơn, nó biểu thị tỉ lệ thời gian mà động học của hệ là đáng kể.
3.4. BẬC CỦA HỆ (SYSTEM ORDER) 43

Cực và Zero (Poles/Zeros)

Các hệ bậc nhất có một cực thực (single real pole), trong trường hợp này ở s = −a. Do đó, hệ
là ổn định nếu a là dương và không ổn định nếu a là âm. Hệ bậc nhất tiêu chuẩn (standard
first order system) không có zeros.

Đáp ứng bước/nấc (step response)

Chúng ta có thể tính toán đáp ứng theo thời gian của hệ đối với một đầu vào bước với độ lớn
u.

Bài tập:

Cho kdc = 5; τ = 10; u = 2. Hãy tìm đáp ứng bước của hệ bậc nhất tiêu chuẩn ở (phương trình
3.1).

Chú ý rằng, MATLAB cũng cung cấp một giao diện người dùng (Graphical user interface –
GUI) công cụ Linear System Analyzer để phân tích các hệ LTI bằng cách sử dụng cú pháp:
linearSystemAnalyzer(’step’, G). Nếu click phải vào đồ thị đáp ứng bước và chọn Characteris-
tics, ta có thể lựa chọn để có nhiều tham số hệ thống: peak response (đáp ứng đỉnh), settling
time (thời gian quá độ), rise time (thời gian tăng), và steady-state (trạng thái ổn định).

Thời gian quá độ/Thời gian xác lập (Settling time)

Thời gian quá độ, Ts , là thời gian cần để đầu ra của hệ nằm trong khoảng nào đó (vd.2% hoặc
5%) của giá trị trạng thái ổn định đối với một đầu vào step. Thời gian ổn định của một hệ bậc
nhất đối với khoảng dung sai (tolerance) thường gặp nhất được cho ở bảng bên dưới. Chú ý
rằng, dung sai càng nhỏ thì hệ sẽ tốn nhiều thời gian hơn để ổn định trong khoảng này.

10% 5% 2% 1%
Ts = 2.3/a = 2.3Tc Ts = 3/a = 3Tc Ts = 3.9/a = 3.9Tc Ts = 4.6/a = 4.6Tc
44 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

Thời gian tăng (rise time)

Thời gian tăng, Tr , là thời gian cần để đầu ra của hệ tăng từ mức thấp x% đến mức cao hơn
y% của giá trị trạng thái ổn định. Đối với các hệ bậc nhất, khoảng điển hình đó là 10% - 90%.

Đồ thị Bode

Đồ thị Bode biểu diễn độ lớn và pha của đáp ứng tần số của hệ, G(jω), tương ứng với tần số
ω. Ta có thể tạo ra biểu đồ Bode của một hệ G trong MATLAB sử dùng hàm bode(G).

Một lần nữa, kết quả tương tự có thể tìm được bằng cách sử dụng công cụ Linear System
Analyzer GUI, linearSystemAnalyzer(’bode’, G).

Đồ thị bode sử dụng tỉ lệ tần số logarith (logarithmic frequency scale) do đó nó có thể hiển thị
một dãi tần số lớn. Tương tự, độ lớn được biểu diễn bằng đơn vị decibel logarith (decibel unit
– dB) như:

MdB = 20log10 (M )

Cũng như với trục tần số, tỉ lệ decibel cho phép chúng ta xem một khoảng độ lớn rộng hơn
trên một đồ thị đơn. Như chúng ta sẽ thấy ở các phần tiếp theo, khi các phần tử và bộ điều
khiển được đặt nối tiếp (placed in series), hàm truyền của hệ tổng quát là tích của từng hàm
3.4. BẬC CỦA HỆ (SYSTEM ORDER) 45

truyền. Sử dụng tỉ lệ dB, đồ thị độ lớn của hệ tổng quát là tổng của các đồ thị độ lớn của từng
hàm truyền. Đồ thị pha của hệ tổng quát cũng là tổng của từng đồ thị pha.

Độ lớn ở tần số thấp của đồ thị Bode bậc nhất là 20log(kdc ). Đồ thị độ lớn có một chỗ cong
(bend) ở tần số bằng với giá trị tuyệt đối của nghiệm (vd: ω = a), và giảm 20dB với mỗi 10
lần tăng của tần số (độ dốc (slope) = −20dB/decade). Đồ thị pha thì tiệm cận (asymptotic)
với 0 độ (degree) ở tần số thấp, và tiệm cận với −90 độ ở tần số cao. Giữa tần số 0.1 ∗ a và
10 ∗ a, pha thay đổi khoảng −45 độ cho mỗi 10 lần tăng của tần số (-45 degrees/decade).

Ta sẽ thấy ở những phần sau, những phương pháp tần số trong thiết kế bộ điều khiển, cách
làm thế nào sử dụng đồ thị Bode để tính toán sự làm việc và ổn định vòng kín (closed-loop
stability and performance) của hệ hồi tiếp (feedback systems).

Bài tập:

Cho kdc = 7; τ = 12. Hãy vẽ đồ thị Bode của hệ bậc nhất tiêu chuẩn bằng lệnh bode.

3.4.2 Các hệ bậc hai (Second-order systems)

Các hệ bậc hai thường gặp trong thực tế, và là dạng đơn giản nhất của hệ động học mà có
dao động (to exibit oscillations). Các ví dụ bao gồm hệ bộ giảm chấn-lò xo-khối lượng (mass-
pring-damper system) và mạch RLC. Nhiều hệ bậc cao có thể được ước lượng như hệ bậc hai
để thuận tiện cho việc phân tích (to facilitate analysis).

Dạng chính tắc (canonical form) của phương trình vi phân bậc hai như sau:

mÿ(t) + bẏ(t) + ky(t) = f (t) (3.2)


hay ÿ(t) + 2ζωn ẏ(t) + ωn2 y(t) = kdc ωn2 u(t) (3.3)

Hàm truyền bậc hai dạng chính tắc (Canonical second-order transfer function) có dạng sau,
trong đó nó có hai cực và không có zero.

1 kdc ωn2
G(s) = = (3.4)
ms2 + bs + k s2 + 2ζωn s + ωn2

Các tham số kdc , ζ, và ωn quyết định hành vi của một hệ bậc hai dạng chính tắc.
46 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

Độ lợi tần số thấp (DC Gain)

Độ lợi DC, kdc , là tỉ số của độ lớn ở trạng thái ổn định của đáp ứng step trên độ lớn của đầu
vào step, và đối với những hệ ổn định, nó là giá trị của hàm truyền khi s = 0. Đối với những
dạng đã cho:
1
kdc =
k

Tỉ số tắt dần (Damping ratio)

Tỉ số tắt dần ζ là một đại lượng không thứ nguyên (dimensionless quantity) biểu thị tốc độ mà
ở đó một dao động trong đáp ứng của hệ tắt dần do các ảnh hưởng như ma sát nhớt (viscous
friction) hay trở kháng (electrical resistance). Từ định nghĩa trên,
b
ζ= √
2 km

Tần số tự do (natural frequency)

Tần số tự do ωn là tần số (ở rad/s) mà hệ sẽ dao động khi mà nó không bị tắt dần, ζ = 0


r
k
ωn =
m

Cực/Zero (Poles/Zeros)

Hàm truyền bậc hai dạng chính tắc có hai nghiệm ở:


p
sp = −ζωn ± jωn 1 − ζ2

Underdamped systems (Các hệ dưới ngưỡng tắt dần)

Nếu ζ < 1, thì hệ là underdamped. Trong trường hợp này, cả hai cực có giá trị phức với phần
thực âm (complex-valued with negative real parts); do vậy, hệ là ổn định nhưng dao động trong
khi tiến đến giá trị trạng thái ổn định. Một cách cụ thể, đáp ứng tự nhiên dao động với tần số
p
tự nhiên tắt dần, ωd = ωn 1 − ζ 2 (rad/s)

Bài tập
3.4. BẬC CỦA HỆ (SYSTEM ORDER) 47

Cho kdc = 1, ωn = 10, ζ = 0.2. Hãy nhập hàm truyền (G1) của hệ bậc hai dạng chính tắc vào
MATLAB (phương trình 3.4)

• Biểu diễn các nghiệm và zero của hàm truyền trên đồ thị bằng lệnh pzmap

• Điều chỉnh khoảng hiển thị của trục x, y bằng lệnh axis, vd. axis([-3 1 -15 15])

• Tìm đáp ứng bước của hệ

• Điều chỉnh khoảng hiển thị của trục x, y với x từ 0 đến 3 và y từ 0 đến 2

Thời gian quá độ/Thời gian xác lập (Settling time)

Thời gian quá độ, Ts , là thời gian cần để đầu ra của hệ nằm trong khoảng nào đó (vd. 2%)
của giá trị trạng thái ổn định đối với một đầu vào step. Đối với một hệ underdamped, bậc hai
dạng chính tắc, thời gian xác lập có thể được ước lượng bởi phương trình sau:

−ln(phân số dung sai)


Ts =
ζωn

Thời gian xác lập cho các dung sai thông dụng được trình bài ở bảng dưới:

10% 5% 2% 1%
Ts = 2.3/(ζ ∗ ωn ) Ts = 3/(ζ ∗ ωn ) Ts = 3.9/(ζ ∗ ωn ) Ts = 4.6/(ζ ∗ ωn )

Percent Overshoot (Phần trăm vọt lố)

Phần trăm độ vọt lố là phần trăm mà đáp ứng bước của hệ vượt quá giá trị trạng thái ổn định
sau cùng (final steady-state value). Đối với một hệ underdamped bậc hai, phần trăm độ vọt
lố Mp liên quan trực tiếp đến tỉ số tắt dần theo phương trình sau. Ở đây, Mp là số thập phân
trong đó 1 tương ứng với 100% của độ vọt lố.

√−ζπ
Mp = e 1−ζ 2

Đối với các hệ underdamped bậc hai, 1% thời gian quá độ, Ts ; 10-90% thời gian tăng, Tr ; và
phần trăm độ vọt lố, Mp , liên quan đến tỉ số tắt dần và tần số tự nhiên như phương trình ở
48 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

dưới.

4.6
Ts ≈
ζωn
1.8
Tr ≈
ωn
−ln(Mp )
ζ=p
π 2 + ln2 (Mp )

Overdamped Systems (Hệ giảm dao động quá mức)

Nếu ζ > 1, thì hệ là overdamped (quá ngưỡng tắt dần). Cả hai cực đều là thực (real) và âm;
do vậy, hệ là ổn định và không dao động.

Bài tập:

Cho kdc = 1, ωn = 10, ζ = 1.2. Hãy nhập hàm truyền (G2) của hệ bậc hai dạng chính tắc vào
MATLAB (phương trình 3.4)

• Biểu diễn các nghiệm và zero của hàm truyền trên đồ thị bằng lệnh pzmap

• Điều chỉnh khoảng hiển thị của trục x, y với x từ -20 đến 1 và y từ -1 đến 1

• Tìm đáp ứng bước (step) của hệ

• Điều chỉnh khoảng hiển thị của trục x, y với x từ 0 đến 1.5 và y từ 0 đến 1.5

Critically-Damped Systems (Hệ giảm dao động tới hạn)

Nếu ζ = 1, thì hệ là critically damped (giảm dao động tới hạn). Cả hai cực là thực và có cùng
độ lớn, sp = −ζωn . Đối với hệ bậc hai dạng chính tắc, thời gian quá độ (settling time) nhanh
nhất có được khi hệ là critically damped.

Bài tập:

Bây giờ, hãy thay đổi tỉ số tắt dần thành 1 (ζ = 1), nhập hàm truyền (G3), vẽ lại pole-zero
map và đáp ứng step.
3.5. TÌM HIỂU VỀ CÁC DẠNG ĐÁP ỨNG VỚI MATLAB 49

Undamped Systems (Hệ không suy giảm dao động)

Nếu ζ = 0, thì hệ là undamped (không suy giảm dao động, hay không tắt dần). Trong trường
hợp này, các cực là hoàn toàn ảo (không có phần thực); do vậy, hệ là ổn định biên (marginally
stable) và đáp ứng step dao động vĩnh viễn.

Bài tập

Hãy thay đổi tỉ số tắt dần thành 0 (ζ = 0), nhập hàm truyền (G4), plot lại pole-zero map và
đáp ứng step.

Đồ thị Bode

Bài tập

Hãy vẽ đồ thị Bode về pha và độ lớn với tất cả các điều kiện của tỉ số tắt dần (4 giá trị của
ζ như đã trình bài ở trên) cho hệ bậc hai dạng chính tắc. Vẽ chúng trên cùng một đồ thị sử
dụng lệnh bode. Thêm vào phần chú thích bằng lệnh legend. Vd, legend(’underdamped: zeta <
1’,’overdamped: zeta > 1’,’critically-damped: zeta = 1’,’undamped: zeta = 0’).

Nhận xét từ kết quả trên: Độ lớn của đồ thị Bode của một hệ bậc hai giảm -40 dB/decade, trong
khi đó pha thay đổi từ 0 đến -180 độ. Đối với hệ underdamped, ta còn thấy đỉnh cộng hưởng
(resonant peak) gần tần số tự nhiên, ωn = 10 rad/s. Kích thước (size) và độ nhọn (sharpness)
của đỉnh phụ thuộc vào độ tắt dần (damping) của hệ, và được mô tả bởi hệ số chất lượng
(quality factor) hay Q-Factor, được định nghĩa bên dưới. Q-Factor là một tính chất quan trọng
trong xử lý tín hiệu (signal processing).

1
Q=

3.5 Tìm hiểu về các dạng đáp ứng với MATLAB

Đáp ứng bước

Cho hàm truyền:


C(s) 25
sys = = 2
R(s) s + 4s + 25
50 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

Đáp ứng bước đơn vị sẽ là:

step(sys)

Khi lệnh step có đối số bên trái như:

[y,x,t]=step(sys)

sẽ không có đồ thị hiện lên. Các giá trị trả về sẽ được lưu vào các ma trận y (ma trận đầu ra)
và x (ma trận trạng thái), mà được tính toán đến thời điểm t. Và ta cần sử dụng lệnh plot(t, y)
để hiển thị đáp ứng này.

Đồ thị 3 chiều của đáp ứng bước đơn vị

MATLAB cho phép ta vẽ đồ thị 3D một cách dễ dàng với lệnh mesh và surf. Sự khác biệt giữa
hai đồ thị này là với mesh, các đường được vẽ; với surf, không gian giữa các đường được điền
đầy bằng màu sắc. Ta sẽ tìm hiểu lệnh mesh.

Ví dụ: Xét hàm truyền:

C(s) 1
sys = = 2
R(s) s + 2ζs + 1
Vẽ đồ thị đáp ứng bước c(t) khi ζ có các giá trị sau:

ζ = 0, 0.2, 0.4, 0.6, 0.8, 1.0

Và hãy vẽ đồ thị 3 chiều.

Chú ý, ta đã sử dụng lệnh mesh(t,zeta,y’) để vẽ đồ thị 3 chiều. Ta cũng có thể sử dụng mesh(y’)
để có cùng kết quả.
3.5. TÌM HIỂU VỀ CÁC DẠNG ĐÁP ỨNG VỚI MATLAB 51

Nếu bài toán bao gồm nhiều bước tính toán lập lại, ta có thể đơn giản việc lập lại bằng cách
sử dụng vòng lập for loop như được trình bài trong ví dụ.

Lệnh text dùng để viết lên đồ thị, ví dụ, text(3.4, -0.06, ’A’), sẽ viết lên đồ thì ’A’ bắt đầu ở
tọa độ x = 3.4, y = −0.06.

Đáp ứng xung

Đáp ứng xung đơn vị của một hệ điều khiển có thể đạt được bằng cách sử dụng lệnh impulse.

impulse(num,den) đối với dạng hàm truyền

impulse(A, B, C, D) đối với dạng phương trình trạng thái

Ví dụ: Tìm đáp ứng xung đơn vị của hệ sau:


52 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)

C(s) 1
= 2
R(s) s + 0.2s + 1

a=[1];
b=[1 0.2 1];
G1 = tf(a, b)
impulse(G1);
grid
title('dap ung xung cua G1')

Đáp ứng dốc (ramp response)

Không có lệnh ramp trong MATLAB. Do vậy, ta cần sử dụng lệnh step hoặc lệnh lsim để có
được đáp ứng dốc. Cụ thể, ta chia hàm truyền sys của hệ bởi s và sử dụng lệnh đáp ứng bước.
Ví dụ, xét hệ vòng kín:
C(s) 2s + 1
= 2
R(s) s +s+1
Đối với một đầu vào dốc đơn vị, R(s) = 1/s2 . Do vậy,

2s + 1 1 2s + 1 1
C(s) = = 2
s2+s+1s 2 (s + s + 1)s s

Do đó, trong MATLAB, ta chỉ cần nhập như sau:

H=(2*s+1)/((s^2+s+1)*s)
step(H)
grid
title('dap ung doc cua C(s)')

Đáp ứng đối với đầu vào bất kỳ

Để có được đáp ứng đối với đầu vào bất kỳ, lệnh lsim có thể được sử dụng.

lsim(num,den,r,t) đối với dạng hàm truyền

lsim(A,B,C,D,u,t) đối với dạng phương trình trạng thái


3.5. TÌM HIỂU VỀ CÁC DẠNG ĐÁP ỨNG VỚI MATLAB 53

Ví dụ:

Sử dụng lệnh lsim để biểu diễn đáp ứng dốc của hệ sau:

C(s) 2s + 1
sys = = 2
R(s) s +s+1

s=tf('s');
sys=(2*s+1)/(s^2+s+1);
t=0:0.1:10;
r=t;
y=lsim(sys, r, t)
plot(t,r,'-', t, y,'o')
grid
title('dap ung doc cua C(s) su dung lenh lsim')
xlabel('t Sec')
ylabel('Dau vao doc va dap ung dau ra')
text(6.3, 4.6,' Dau vao doc')
text(4.75, 9.0, 'Dau ra')

Link tham khảo:

http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&section=SystemModeling
54 CHƯƠNG 3. PHÂN TÍCH HỆ THỐNG (SYSTEM ANALYSIS)
Chương 4

THIẾT KẾ BỘ ĐIỀU KHIỂN PID


(PID CONTROLLER DESIGN)

Trong phần này, ta sẽ tìm hiểu về một cấu trúc bộ bù hồi tiếp/hay phản hồi (feedback compen-
sator structure) đơn giản nhưng linh hoạt: Bộ điều khiển tỉ lệ-tích phân-vi phân (Proportional-
Integral-Derivative (PID) controller). Bộ điều khiển PID được ứng dụng rộng rãi bởi vì nó rất
dễ hiểu (understandable) và hiệu quả (effective). Một điểm mạnh khác của nó là tất cả các kỹ
sư đều có khái niệm về vi phân (differentiation) và tích phân (integration), do đó họ có thể áp
dụng hệ thống điều khiển ngay cả khi không hiểu sâu về lý thuyết điều khiển. Hơn nữa, mặc
dù bộ bù là đơn giản, nó có thể thu thập lịch sử của hệ (thông qua việc tích phân) và dự đoán
(anticipate) hành vi của hệ (thông qua việc vi phân). Ta sẽ thảo luận sự ảnh hưởng của mỗi
tham số PID lên động học của hệ vòng kín (closed-loop system) và sẽ trình bài cách sử dụng
một bộ điều khiển PID để cải thiện hoạt động của một hệ thống.

4.1 Tổng quát về PID

Trong phần thực hành này, ta sẽ xem xét hệ hồi tiếp đơn nhất (unity-feedback system) sau:

Đầu ra của một controller (bộ điều khiển) PID, mà là đầu vào của plant – u(t) (đối tượng điều
khiển), được tính toán trong miền thời gian từ sai lệch hồi tiếp (feedback error) như sau:
Z
de(t)
u(t) = Kp e(t) + Ki e(t)dt + Kd (4.1)
dt
Đầu tiên, hãy xem bộ điều khiển PID làm việc như thế nào trong một hệ vòng kín (closed-loop

55
56 CHƯƠNG 4. THIẾT KẾ BỘ ĐIỀU KHIỂN PID (PID CONTROLLER DESIGN)

Hình 4.1:

system) bằng cách sử dụng sơ đồ trên. Biến (e) biểu thị sự sai lệch/sai số (tracking error), là sự
khác biệt giữa đầu ra mong muốn hoặc tham chiếu r (desired output or reference) và đầu ra
thực tế y (actual output). Tín hiệu sai lệch này (e) được cấp tới bộ điều khiển PID, và bộ điều
khiển tính toán cả đạo hàm và tích phân của tín hiệu sai lệch này theo thời gian (error signal
with respect to time). Tín hiệu điều khiển u (control signal) tới plant (đối tượng điều khiển)
bằng với độ lợi tỉ lệ Kp (proportional gain) nhân với độ lớn của sai lệch cộng với độ lợi tích
phân Ki (integral gain) nhân với tích phân của sai lệch cộng với độ lợi vi phân Kd (derivative
gain) nhân với vi phân của sai lệch.

Tín hiệu điều khiển này (u) được cấp tới plant và đầu ra mới (y) được thu thập. Đầu ra mới
này sau đó được cấp ngược về (hồi tiếp) và so sánh với giá trị tham chiếu/đầu ra mong muốn
(reference) để tìm tín hiệu sai lệch mới. Bộ điều khiển lấy tín hiệu sai lệch mới này và tính toán
để có một giá trị đầu vào điều khiển mới. Quá trình (process) này cứ như vậy tiếp tục.

Hàm truyền của một bộ điều khiển PID được tìm bằng cách biến đổi Laplace phương trình 4.1.

Ki Kd s2 + Kp s + Ki
Kp + + Kd s = (4.2)
s s

trong đó Kp = độ lợi tỉ lệ (proportional gain)

Ki = độ lợi tích phân (integral gain)

Kd = độ lợi vi phân (derivative gain)

Bài tập:

Cho Kp = 1, Ki = 1, Kd = 1, hãy nhập mô hình hàm truyền của bộ điều khiển PID vào
MATLAB?

Ta cũng có thể sử dụng đối tượng pid (pid object) của MATLAB để tạo ra một bộ điều khiển
PID thời gian liên tục ở dạng song song (continuous-time controller in parallel form) tương
4.2. NHỮNG TÍNH CHẤT CỦA HẠNG TỬ (TERM) P, I, D 57

đương như sau:


C = pid(Kp, Ki, Kd)

Ta có thể chuyển đổi (convert) đối tượng pid ở trên sang dạng hàm truyền bằng lệnh tf, vd,
tf(C)

4.2 Những tính chất của hạng tử (term) P, I, D

Tăng độ lợi tỉ lệ (Kp ) làm tăng tín hiệu điều khiển đối với cùng mức độ sai lệch. Bộ điều khiển
sẽ tác động mạnh hơn cho cùng một mức độ sai lệch, do đó có xu hướng làm cho hệ vòng kín
phản ứng nhanh hơn, nhưng cũng làm tăng độ vọt lố (overshoot). Một ảnh hưởng khác của
việc tăng Kp là nó có xu hướng làm giảm, nhưng không loại trừ, sai lệch xác lập (steady-state
error).

Việc thêm vào hạng tử vi phân (Kd ) vào bộ điều khiển giúp thêm vào khả năng “dự đoán”
(“anticipate”) sai lệch của bộ điều khiển. Với điều khiển tỉ lệ đơn giản, nếu Kp là cố định (fixed),
cách duy nhất để tín hiệu điều khiển tăng là khi sai lệch tăng. Với điều khiển vi phân, tín hiệu
điều khiển có thể lớn nếu sai lệch bắt đầu tăng lên, ngay cả khi độ lớn của sai lệch vẫn còn
tương đối nhỏ. Sự “dự đoán” này có xu hướng thêm vào hệ thống sự tắt dần (add damping),
do đó làm giảm độ vọt lố. Tuy nhiên, việc thêm vào hạng tử vi phân không có ảnh hưởng đến
sai lệch trạng thái ổn định.

Thêm vào bộ điều khiển hạng tử tích phân (Ki ) có xu hướng làm giảm sai lệch trạng thái ổn
định. Nếu có một sai lệch ổn định, kéo dài, bộ tích phân tích lũy và tích lũy, do đó làm tăng
tín hiệu điều khiển và làm giảm sai lệch xuống. Một hạn chế (drawback) của hạng tử tích phân
là nó có thể làm cho hệ trì truệ (sluggish) và dao động (oscillatory).

Những ảnh hưởng tổng thể của các thông số Kp , Kd , Ki của bộ điều khiển lên một hệ vòng kín
được tóm tắt trong bảng dưới. Chú ý rằng, bảng này đúng trong nhiều trường hợp nhưng ko
phải tất cả. Nếu ta thật sự muốn biết ảnh hưởng của từng độ lợi, ta phải làm nhiều phân tích
hơn, hoặc là thực hành trên hệ thống thực.

Đáp ứng vòng kín Thời gian tăng Độ vọt lố Thời gian xác lập Sai lệch xác lập
Kp Giảm Tăng Thay đổi nhỏ Giảm
Ki Giảm Tăng Tăng Giảm
Kd Thay đổi nhỏ Giảm Giảm Không thay đổi
58 CHƯƠNG 4. THIẾT KẾ BỘ ĐIỀU KHIỂN PID (PID CONTROLLER DESIGN)

4.3 Bài toán ví dụ (example problem)

Giả sử ta có hệ bộ giảm chấn-lò xo-khối lượng (mass-spring-damper system) đơn giản:

Hình 4.2:

Phương trình chủ đạo (governing equation) của hệ là:

mẍ + bẋ + kx = F (4.3)

Biến đổi Laplace phương trình chủ đạo, ta có:

ms2 X(s) + bsX(s) + kX(s) = F (s) (4.4)

Hàm truyền giữa lực đầu vào F (s) (input force) và độ chuyển vị đầu ra X(s) (output displace-
ment) trở thành:
X(s) 1
P (s) = = 2
(4.5)
F (s) ms + bs + k
Cho m = 1 kg

b = 10 N s/m

k = 20 N/m

F=1N

Mục tiêu (goal) của bài toán này là cho thấy được ảnh hưởng của từng hạng tử, Kp , Ki , Kd ,
nhằm đạt được mục tiêu chung là:

Thời gian tăng nhanh (fast rise time)

Giảm thiểu độ vọt lố (minimal overshoot)

Sai lệch xác lập bằng 0 (zero steady-state error).


4.3. BÀI TOÁN VÍ DỤ (EXAMPLE PROBLEM) 59

4.3.1 Đáp ứng step vòng hở (Open-loop step response)

Đầu tiên, hãy xem đáp ứng step của vòng hở (của plant, không bao gồm bộ điều khiển).

Hình 4.3:

Bài tập

Hãy tạo một m-file để tìm đáp ứng bước (step) của hàm truyền 4.5 vừa tìm được với các giá
trị m, b, k như trên?

Thực hiện lại việc này bằng cách sử dụng Simulink?

Hình 4.4:

Ta thấy, độ lợi (DC gain) của hàm truyền của plant (đối tượng điều khiển) là 1/20, do đó 0.05
là giá trị sau cùng/ giá trị xác lập (final value) của đầu ra đối với một đầu vào step đơn vị.
Điều này có nghĩa là sai lệch ở trạng thái ổn định (steady-state error) là 0.95, khá lớn. Hơn
thế nữa, thời gian tăng (rise time) là khoảng 1s, và thời gian xác lập (settling time) là khoảng
1.5s. Ta hãy thiết kế một bộ điều khiển mà sẽ làm giảm thời gian tăng, giảm thời gian xác lập,
và loại bỏ sai lệch xác lập.

Ta sẽ bắt đầu với bộ điều khiển tỉ lệ


60 CHƯƠNG 4. THIẾT KẾ BỘ ĐIỀU KHIỂN PID (PID CONTROLLER DESIGN)

4.3.2 Điều khiển vòng kín với bộ điều khiển tỉ lệ (Proportional con-
trol)

Hình 4.5:

Từ bảng trên, ta thấy rằng bộ điều khiển tỉ lệ (Kp ) làm giảm thời gian tăng (rise time), và
tăng độ vọt lố, và giảm sai lệch xác lập. Hàm truyền vòng kín T (s) của hệ hồi tiếp đơn vị với
bộ điều khiển tỉ lệ có dạng sau, trong đó Y (s) là đầu ra và tham chiếu R(s) (reference)) là đầu
vào (chú ý, không phải F (s)).

Y (s) Kp
T (s) = = 2 (4.6)
R(s) s + 10s + (20 + Kp )

Bài tập:

Hàm truyền vòng kín T (s) (closed-loop transfer function) đã được rút ra như thế nào (dựa vào
hình 4.5)?

Cho độ lợi tỉ lệ Kp = 300:

Hãy thay đổi m-file để tìm hàm truyền vòng kín của hệ sử dụng lệnh feedback?

Tìm đáp ứng step của hàm truyền vòng kín (thời gian mô phỏng từ 0 đến 2s)?

s=tf('s');
P=1/(s^2+10*s+20);
Kp=300;
C=Kp;
sys=feedback(P*C,1)
t=0:0.1:2;
step(sys,t)

Hãy dùng simulink để biểu diễn toàn bộ hệ trên (dựa trên hình 4.5)?

Biểu diễn lại hệ hở trên cùng file simulink với hệ kín và so sánh sự khác biệt?
4.3. BÀI TOÁN VÍ DỤ (EXAMPLE PROBLEM) 61

Hình 4.6:

4.3.3 Điều khiển vòng kín với bộ điều khiển Vi phân -Tỉ lệ (Proportional-
Derivative control)

Từ bảng trên, ta thấy rằng việc thêm vào điều khiển vi phân (Kd ) có xu hướng làm giảm độ
vọt lố và thời gian xác lập.

Hãy kiểm chứng lại điều này bằng cách:

Bài tập:

Hãy tìm hàm truyền vòng kín của hệ với bộ điều khiển PD (dựa vào hình 4.5) bằng cách thủ
công (manually)? Cho Kp = 300, Kd =10

Hãy thay đổi m-file để tìm hàm truyền vòng kín của hệ sử dụng lệnh feedback ?

Tìm đáp ứng bước của hàm truyền vòng kín (thời gian mô phỏng từ 0 đến 2s)?

Hãy dùng simulink để biểu diễn toàn bộ hệ trên (dựa trên hình 4.5)?

4.3.4 Điều khiển vòng kín với bộ điều khiển Tích phân-Tỉ lệ (Proportional-
Integral control)

Từ bảng, ta thấy rằng việc thêm vào điều khiển tích phân (Ki ) có xu hướng làm giảm thời gian
tăng, tăng cả độ vọt lố và thời gian xác lập, và giảm sai lệch xác lập.

Bài tập:

Hãy tìm hàm truyền vòng kín của hệ với bộ điều khiển PI (dựa vào hình 4.5) bằng cách thủ
62 CHƯƠNG 4. THIẾT KẾ BỘ ĐIỀU KHIỂN PID (PID CONTROLLER DESIGN)

công (manually)? Cho Kp = 30, Ki = 70.

Hãy thay đổi m-file để tìm hàm truyền vòng kín của hệ sử dụng lệnh feedback?

Tìm đáp ứng step của hàm truyền vòng kín (thời gian mô phỏng từ 0 đến 2s)?

Hãy dùng simulink để biểu diễn toàn bộ hệ trên (dựa trên hình 4.5)?

4.3.5 Điều khiển vòng kín với bộ điều khiển Tỉ lệ-Tích phân-Vi phân
(Proportional-Integral-Derivative control)

Bài tập:

Cho độ lợi tỉ lệ Kp = 350, Ki =300, Kd =50

Hãy thay đổi m-file để tìm hàm truyền vòng kín của hệ sử dụng lệnh feedback?

Tìm đáp ứng bước của hàm truyền vòng kín (thời gian mô phỏng từ 0 đến 2s)?

Hãy dùng simulink để biểu diễn toàn bộ hệ trên (dựa trên hình 4.5)?

4.3.6 Hướng dẫn chung để thiết kế một bộ điều khiển PID

Khi ta thiết kế một bộ điều khiển PID cho một hệ thống đã cho, làm theo các bước sau để đạt
được đáp ứng mong muốn.

• Tìm đáp ứng vòng hở và quyết định xem thứ gì cần được cải thiện

• Thêm vào một điều khiển tỉ lệ để cải thiện thời gian tăng (rise time)

• Thêm vào một điều khiển vi phân để giảm độ vọt lố (overshoot)

• Thêm vào một điều khiển tích phân để giảm sai lệch xác lập (steady-state error)

• Điều chỉnh từng độ lợi của Kp , Ki , Kd cho đến khi đạt được đáp ứng tổng thể mong muốn.

Cuối cùng, nên nhớ rằng, ta không cần phải sử dụng tất cả 3 loại điều khiển (tỉ lệ, vi phân, và
tích phân) vào một hệ, nếu không cần thiết. Ví dụ, nếu một bộ điều khiển PI thỏa mãn các
4.4. ĐIỀU CHỈNH PID TỰ ĐỘNG 63

yêu cầu đề ra (như ví dụ ở trên), thì ta không cần dùng điều khiển vi phân vào hệ. Nên để cho
bộ điều khiển càng đơn giản càng tốt.

4.4 Điều chỉnh PID tự động

MATLAB cung cấp công cụ để tự động lựa chọn các thông số tối ưu cho thuật toán PID. Việc
này làm cho quá trình thử sai (trial and error) mô tả ở trên là không cần thiết. Ta có thể mở
công cụ trực tiếp sử dụng pidtune hoặc thông qua pidT uner.

Tham khảo

http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&section=ControlPID

https://www.mathworks.com/matlabcentral/answers/111085-pid-block-and-manual-pid
64 CHƯƠNG 4. THIẾT KẾ BỘ ĐIỀU KHIỂN PID (PID CONTROLLER DESIGN)
Chương 5

THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG


QUỸ ĐẠO NGHIỆM SỐ (ROOT
LOCUS CONTROLLER DESIGN)

Trong phần này, ta sẽ tìm hiểu về quỹ đạo nghiệm số (root locus), làm thế nào để tạo ra nó
sử dụng MATLAB, và làm thế nào để thiết kế bộ điều khiển hồi tiếp để thõa mãn tiêu chí
làm việc nào đó thông qua việc sử dụng quỹ đạo nghiệm số. Cần chú ý sự khác biệt giữa hàm
truyền vòng kín (closed-loop) và hàm truyền vòng hở (open loop).

Hình 5.1:

65
66CHƯƠNG 5. THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG QUỸ ĐẠO NGHIỆM SỐ (ROOT LOCUS CONTRO

5.1 Các cực vòng kín (closed-loop poles)

Quỹ đạo nghiệm số (QĐNS) của một hàm truyền vòng hở H(s) (open-loop transfer function)
là một đồ thị vị trí của tất cả các cực vòng kín (closed-loop poles) có thể có với một vài tham
số, thường là một độ lợi tỉ lệ K, dao động giữa 0 và ∞. Hình bên dưới biểu diễn một kiến trúc
hồi tiếp đơn nhất (unity-feedback architechture), nhưng quy trình thì hoàn toàn giống với bất
kỳ hàm truyền vòng hở H(s) nào, ngay cả khi một vài phần tử của hàm truyền vòng hở ở trên
đường hồi tiếp.

Hình 5.2:

Hàm truyền vòng kín (closed-loop transfer function) trong trường hợp này là:
Y (s) K ∗ H(s)
=
R(s) 1 + K ∗ H(s)
và do vậy, các cực của hệ vòng kín là các giá trị của s sao cho phương trình đặc trưng 1 + K ∗
H(s) = 0.

b(s)
Nếu ta viết H(s) = a(s)
, thì phương trình này có thể được viết lại như:

⇒ a(s) + K ∗ b(s) = 0
a(s)
⇒ + b(s) = 0
K
Cho n là bậc của a(s) và m là bậc của b(s) (bậc của đa thức tương ứng với bậc cao nhất của
s).

Ta sẽ xem xét tất cả các giá trị dương của K. Khi K → 0, các cực của hệ vòng kín là nghiệm
của a(s) = 0 (cực của H(s)). Khi K → ∞, cực của hệ vòng kín là nghiệm của b(s) = 0 (zero
của H(s)). Dù với bất kỳ giá trị nào của K, hệ vòng kín có n cực, trong đó n là số cực của
hàm truyền vòng hở H(s). Quỹ đạo nghiệm số do đó có n nhánh (branch), mỗi nhánh bắt đầu
ở một cực của H(s) và tiến tới 1 zero của H(s). Nếu H(s) có nhiều cực hơn zero (như thường
thấy), m < n, thì ta nói rằng H(s) có zero ở vô cùng. Trong trường hợp này, giới hạn của H(s)
khi s → ∞ là zero. Số zero ở vô cùng là n − m, là số lượng cực vòng hở trừ đi số lượng zero
vòng hở, và là số nhánh của quỹ đạo nghiệm số mà đi đến “vô cùng” (tiệm cận – asymptotes).
5.2. BIỂU DIỄN QUỸ ĐẠO NGHIỆM SỐ CỦA MỘT HÀM TRUYỀN (PLOTTING THE ROOT LOCUS

Vì QĐNS bao gồm vị trí của tất cả các nghiệm vòng kín có thể có, quỹ đạo nghiệm số giúp
chúng ta chọn lựa giá trị của độ lợi K để đạt được tiêu chí làm việc ta mong muốn. Nếu bất kỳ
cực được chọn nào nằm ở nửa phải mặt phẳng phức (right-half complex plane), hệ vòng kín sẽ
không ổn định. Các cực gần nhất với trục ảo (imaginary axis) có ảnh hưởng lớn nhất lên đáp
ứng vòng kín (closed-loop response), gọi là cực chiếm ưu thế (dominant poles), cho nên mặc dù
một hệ có 3 hoặc 4 cực, nó có thể vẫn làm việc giống như một hệ bậc nhất hoặc hệ bậc hai,
tùy thuộc vào vị trí của cực chiếm ưu thế (dominant pole).

5.2 Biểu diễn quỹ đạo nghiệm số của một hàm truyền
(Plotting the root locus of a tranfer function)

Bài tập

Xét một hệ vòng hở có hàm truyền:


Y (s) s+7
H(s) = =
U (s) s(s + 5)(s + 15)(s + 20)

Làm thế nào để thiết kế một bộ điều khiển hồi tiếp cho hệ trên sử dụng phương pháp quỹ đạo
nghiệm số? Các tiêu chí ta mong muốn: độ vọt lố 5% (5% overshoot) và thời gian tăng 1s (1
second rise time).

Tạo một m-file đặt tên rl.m. Trong file này, tạo một mô hình hàm truyền và sử dụng lệnh rlocus
như sau:

s = tf('s');
sys = (s + 7)/(s*(s + 5)*(s + 15)*(s + 20));
rlocus(sys)
axis([-22 3 -15 15])

5.2.1 Chọn một giá trị của K từ quỹ đạo nghiệm số (Choosing a
value of K from the Root Locus)

Đồ thị QĐNS (có được từ lệnh rlocus) biểu diễn tất các vị trí có thể có của cực vòng kín
(closed-loop pole location) của một bộ điều khiển tỉ lệ (proportional controller). Trong trường
68CHƯƠNG 5. THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG QUỸ ĐẠO NGHIỆM SỐ (ROOT LOCUS CONTRO

hợp này, không phải tất cả vị trí nghiệm vòng kín này thõa mãn tiêu chí thiết kế của ta. Để xác
định phần nào của quỹ đạo nghiệm là chấp nhận được, ta có thể sử dụng lệnh sgrid(zeta, wn)
để hiển thị các đường của tỉ số tắt dần (constant damping ratio) và tần số dao động tự nhiên
(natural frequency). Hai đối số (arguments) của nó là tỉ số tắt dần zeta và tần số tự nhiên wn
[Chúng có thể ở dạng vector nếu ta muốn xem một khoảng các giá trị chấp nhận được]. Trong
bài toán của ta, ta cần độ vọt lố ít hơn 5% (có nghĩa là tỉ số tắt dần ζ lớn hơn 0.7) và thời
gian tăng 1s (có nghĩa là tần số tự nhiên ωn lớn hơn 1.8).

Liên hệ đến các công thức từ bài 3 (Phân tích hệ thống) để kiểm chứng lại các giá trị đã được
tính sẵn ở trên.

−ln(Mp )
ζ=p
π 2 + ln2 (Mp )
1.8
Tr ≈
ωn
ωn = 1.8

Nhập các lệnh sau vào cửa sổ lệnh MATLAB:

zeta = 0.7;
wn = 1.8;
sgrid(zeta,wn)

Hình 5.3:

Ở đồ thị trên, hai đường nét chấm (dotted line) nằm ở một góc gần 40° biểu diễn những vị
5.2. BIỂU DIỄN QUỸ ĐẠO NGHIỆM SỐ CỦA MỘT HÀM TRUYỀN (PLOTTING THE ROOT LOCUS

trí cực với ζ = 0.7, ở giữa những đường này, các cực sẽ có ζ > 0.7 và ngoài những đường này
ζ < 0.7. Cung tròn chỉ vị trí nghiệm với tần số tự nhiên ωn = 1.8; bên trong nó, ωn < 1.8 và
bên ngoài nó ωn > 1.8 .

Trở lại bài toán của ta, để làm cho độ vọt lố ít hơn 5%, các cực phải nằm giữa 2 đường nét đứt
(two angled dotted lines), và để cho thời gian tăng ít hơn 1s, các cực phải ở ngoài nửa đường
tròn nét chấm (dotted semicircle). Do đó, ta biết phần nào của quỹ đạo nghiệm, hay các vị trí
nghiệm vòng kín có thể có, thõa mãn điều kiện đã cho. Tất cả các cực trong vị trí này đều nằm
trong mặt phẳng nữa trái (left-half plane), do đó hệ vòng kín sẽ ổn định.

Từ đồ thị trên, ta thấy rằng, quỹ đạo nghiệm số của ta có phần nằm trong vùng mong muốn
(desired region). Do vậy, trong trường hợp này, ta chỉ cần một bộ điều khiển tỉ lệ để di chuyển
các cực tới vùng mong muốn. Ta có thể sử dụng lệnh rlocfind trong MATLAB để chọn các cực
mong muốn trong quỹ đạo nghiệm.

[K, poles] = rlocfind(sys)

Bấm vào đồ thị điểm mà ta muốn đặt nghiệm vòng kín (nghiệm của hệ vòng kín) của mình.
Ta có thể muốn chọn các điểm được biểu diễn ở đồ thị bên dưới để thõa mãn tiêu chí thiết kế.

Hình 5.4:
70CHƯƠNG 5. THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG QUỸ ĐẠO NGHIỆM SỐ (ROOT LOCUS CONTRO

Chú ý rằng, vì quỹ đạo nghiệm có thể có nhiều hơn 1 nhánh, khi ta chọn một cực, ta cũng xác
định được vị trí của những nghiệm vòng kín khác nữa, tất cả chúng có được từ cùng 1 giá trị
của K. Nên nhớ rằng, những cực này cũng sẽ ảnh hưởng tới đáp ứng. Từ đồ thị trên, ta thấy
rằng, 4 cực được chọn (biểu thị bởi dấu “+”), hai cực gần trục ảo nhất là nằm trong vùng mong
muốn của ta. Vì các cực này có xu hướng ảnh hưởng chính tới đáp ứng, chúng ta tự tin rằng,
các tiêu chí thiết kế của ta sẽ được đáp ứng bởi một bộ điều khiển tỉ lệ với giá trị K này.

5.3 Đáp ứng vòng kín (Closed-loop response)

Để kiểm tra đáp ứng step, ta cần biết hàm truyền vòng kín. Ta có thể tính toán hàm này sử
dụng các định luật về đơn giản hóa sơ đồ khối, hoặc để MATLAB làm việc đó (Ta không cần
nhập vào giá trị K nếu lệnh rlocfind được sử dụng):

sys_cl = feedback(K*sys,1)

Có hai đối số (arguments) cho hàm feedback là hàm truyền theo đường tới (forward path) và
hàm truyền theo đường hồi tiếp (feedback path) của hệ vòng hở. Trong trường hợp này, hệ của
ta là hồi tiếp đơn nhất (unity-feedback) nên đối số thứ 2 là 1.

Nếu trường hợp là hồi tiếp không đơn nhất (non-unity feedback), hãy dùng lệnh help cho hàm
feedback để tìm hiểu cách tìm hàm truyền vòng kín mà có một độ lợi trong đường hồi tiếp.

Kiểm tra đáp đáp ứng của hệ vòng kín với giá trị được chọn của K:

step(sys_cl)

5.4 Sử dụng Bộ thiết kế hệ điều khiển cho thiết kế quỹ


đạo nghiệm số (Using Control System Designer for
Root Locus Design)

Dùng lệnh sisotool(tên hàm truyền) để mở công cụ này.


5.4. SỬ DỤNG BỘ THIẾT KẾ HỆ ĐIỀU KHIỂN CHO THIẾT KẾ QUỸ ĐẠO NGHIỆM SỐ (USING CON

Một cách khác để hoàn thành những công việc ở mục trước là sử dụng công cụ Control System
Designer trong MATLAB. Sử dụng cùng mô hình như trên, đầu tiên ta định nghĩa plant (đối
tượng điều khiển), G khi vào File/Import.

Ta có thể thấy đồ thị quỹ đạo nghiệm, cùng với đồ thị Bode vòng hở (open-loop Bode plot),
và đồ thị Bode vòng kín (closed-loop Bode plot) của plant được cho trong hồi tiếp đơn nhất
với một bộ điều khiển mặc định K=1 (C=1).

Hình 5.5:

Bước kế tiếp là thêm vào các yêu cầu thiết kế cho đồ thị Root Locus. Việc này được thực hiện
trực tiếp trên đồ thị bằng cách click phải và chọn Design Requirements/New. Các yêu cầu thiết
kế có thể được thiết lập đối với Thời gian quá độ (settling time), phần trăm vọt lố (Percent
Overshoot), tỉ số tắt dần (Damping ratio), Tần số tự nhiên (Natural frequency), hay một ràng
buộc vùng (Region constraint).

Ở đây, ta sẽ thiết lập các yêu cầu thiết kế cho tỉ số tắt dần (Damping ratio) và tần số tự nhiên
(natural frequency) như đã được làm trước đó với lệnh sgrid. Nhớ lại rằng giới hạn các yêu cầu
cho ta ζ = 0.7 và ωn = 1.8. Thiết lập những giá trị này trong yêu cầu thiết kế. Trên đồ thị, bất
kỳ diện tích nào mà vẫn còn trắng thì đó là vùng mà các nghiệm vòng kín có thể chấp nhận
được.
72CHƯƠNG 5. THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG QUỸ ĐẠO NGHIỆM SỐ (ROOT LOCUS CONTRO

Phóng to Root Locus bằng cách click phải vào trục và chọn Properties/Limits. Thay đổi real-
axis limits (giới hạn trục thực) thành -25 đến 5 và imaginary axis limits (giới hạn trục ảo)
thành -2.5 đến 2.5.

Hình 5.6:

Mở đồ thị đáp ứng step bằng cách chọn Analysis/Response To Step Command. Ta cũng có
thể thấy các giá trị hiện thời của một số tham số then chốt trong đáp ứng. Ở đồ thị đáp ứng
step, click phải vào đồ thị và tới Characteristics/ Peak Response. Lập lại Characteristics/ Rise
Time. Bây giờ sẽ thấy 2 chấm tròn lớn trên màn hình hiển thị giá trị của các tham số này.
Click vào mỗi chấm này để hiển thị thông tin.

Như thể hiện trên đồ thị Step response, độ vọt lố là chấp nhận được, nhưng thời gian tăng
(rise time) là quá lớn. Các chấm màu hồng trên đồ thị root locus biểu diễn vị trí nghiệm vòng
kín tương ứng với K hiện tại. Để sữa lại, ta cần chọn một giá trị mới cho độ lợi K. Giống như
cách ta sử dụng lệnh rlocfind, độ lợi của bộ điều khiển có thể được thay đổi một cách trực tiếp
trên đồ thị root locus. Click vào chấm màu hồng gần trục ảo nhất (ở gốc tọa độ – origin) và
kéo tới vùng màu trắng của đồ thị root locus của ta như hình bên dưới.

Trong Preview box của cửa sổ, ta có thể thấy rằng, độ lợi vòng đã thay đổi đến 360. Kiểm tra
đồ thị đáp ứng vòng kín, cả hai yêu cầu của ta giờ đã thõa mãn.

Bài tập

1. Cho hệ như hình:


5.4. SỬ DỤNG BỘ THIẾT KẾ HỆ ĐIỀU KHIỂN CHO THIẾT KẾ QUỸ ĐẠO NGHIỆM SỐ (USING CON

1
P (s) =
s(s + 1)
s+2
C(s) = K
s + 10

Hãy tìm K để đáp ứng step vòng kín của hệ có thời gian tăng (rise time) không lớn hơn 0.7 s
và độ vọt lố (overshoot) không quá 20% bằng cả hai cách (1) sử dụng các dòng lệnh và (2) sử
dụng công cụ sisotool )?

2. Cho
1
P (s) =
s(s + K)
C(s) = 1

Hãy tìm quỹ đạo nghiệm của hệ vòng kín trên?


74CHƯƠNG 5. THIẾT KẾ BỘ ĐIỀU KHIỂN DÙNG QUỸ ĐẠO NGHIỆM SỐ (ROOT LOCUS CONTRO
Chương 6

HOẠT ĐỘNG DỰA TRÊN PHẦN


CỨNG: MẠCH RC

Dưới đây là một ví dụ về hoạt động dựa trên phần cứng mà ta có thể sử dụng để tìm hiểu các
khái niệm đằng sau việc mô hình hóa, thiết kế bộ điều khiển và thực thi bộ điều khiển cho
các hệ thống động. Các hoạt động này sử dụng một board Arduino (Uno, Mega 2560, vv) giao
tiếp với một máy tính chủ (host computer) chạy MATLAB / Simulink (bản chất của các hoạt
động này đều có thể đạt được với nền tảng phần cứng và phần mềm thay thế khác). Hầu hết
các hoạt động sử dụng gói ArduinoIO (ArduinoIO package), mặc dù ta cũng có thể sử dụng
gói hỗ trợ phần cứng Arduino chuẩn (Arduino Hardware Support Package). Cả hai gói đều có
sẵn miễn phí với MATLAB / Simulink tiêu chuẩn. Thông tin chi tiết về các gói này và cài đặt
của chúng có thể được tìm thấy bằng cách theo liên kết bên dưới.

http://ctms.engin.umich.edu/CTMS/index.php?aux=Activities_IOpack

Lưu ý: đối với các board Arduino nhái của Trung Quốc sử dụng IC nạp chương trình và giao
tiếp UART chính là CP210x (CP2102, CP2104,...) hoặc CH34x (CH340, CH341,...), thì sinh
viên có thể phải cài thêm driver cho các IC này theo hướng dẫn:

Tiêu đề bài viết: Cách cài đặt Driver cho mạch Arduino Compatible (CP210x / CH34x)

https://wiki.makerlab.vn/index.php/C%C3%A1ch_c%C3%A0i_%C4%91%E1%BA%B7t_Driver_cho_
m%E1%BA%A1ch_Arduino_Compatible_(CP210x_/_CH34x)

75
76 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

6.1 Sử dụng gói hỗ trợ Arduino Hardware Support Pack-


age

Cách thứ 1 để có thể kết nối Simulink và Arduino là sử dụng gói hỗ trợ Arduino Hardware
Support Package. Thư viện này cho phép nhúng code vào Arduino. Cách thực hiện:

• Vào Adds-on/Get Hardware Support Packages/Install from Internet và chọn gói cài đặt
như hình (chọn nhiều gói cùng lúc có thể bị lỗi cài đặt)

• Tạo account của trang Matlab sử dụng email có đuôi dạng edu, vd, ....@ctuet.edu.vn

• Lựa chọn các bước cài đặt như thông thường

Trong trường hợp mà ta muốn tạo một đồ án riêng lẻ mà không cần kết nối với máy chủ (ví
dụ, robot di động độc lập), ta sẽ cần thực thi logic điều khiển vào Arduino của ta. Ta có thể
làm được việc này bằng cách sử dụng gói hỗ trợ Arduino Hardware Support Package. Trong
trường hợp này, board Arduino sẽ không chạy chương trình máy chủ, mà sẽ chạy một chương
trình mà đã được biên dịch thành code có thể thực thi (executable code) từ mô hình Simulink
mà ta đã tạo ra. Chú ý, nếu ta muốn chạy board Arduino độc lập khỏi máy tính chủ, ta sẽ cần
cung cấp một nguồn cho board, ví dụ pin 9V. Ta có thể sử dụng thư viện của gói hỗ trợ này
để nhúng code vào Arduino cho bài thực tập điều khiển nhiệt độ sử dụng bóng đèn.

https://www.youtube.com/watch?v=nOz3uTi20Jo
6.2. GÓI SIMULINK ARDUINOIO 77

Một vài board Arduino (ví dụ, Mega 2560) có thể được giao tiếp trong khi tiến hành thí nghiệm
bằng cách sử dụng gói hỗ trợ Arduino Hardware Support Package (chạy Simulink ở chế độ Exter-
nal Mode). Chi tiết về gói hỗ trợ này có thể được tìm thấy ở: https://www.mathworks.com/hardware-
support/arduino-simulink.html

(chú ý cần có R2014a hoặc cao hơn để sử dụng gói này)

6.2 Gói Simulink ArduinoIO

Cách thứ 2: Trong phần lớn các hoạt động dựa trên phần cứng này, ta sẽ sử dụng gói ArduinoIO
từ MathWorks để xử lý giao diện giữa Simulink và phần cứng của ta. Ta sử dụng gói này bởi
vì nó cho phép sự giao tiếp dễ dàng và thời gian thực giữa Simulink và Arduino board mà
không cần đi sâu vào truyền thông giao tiếp nối tiếp (serial communication). Ta có thể tải gói
ArduinoIO từ MATLAB central file exchange.

Gói ArduinoIO bao gồm một chương trình đơn giản chạy trên board Arduino và các khối đặc
biệt cho Simulink. Chương trình này đóng vai trò như một Server để truyền thông tin giữa
phần cứng và máy tính chủ đang chạy một mô hình Simulink (cái mà sử dụng các khối đặc
biệt). Trong các ứng dụng này, bất kỳ logic điều khiển mà ta phát triển ở Simulink sẽ chạy trên
máy tính chủ. Cùng với nó, các phần tử này cho phép ta can thiệp vào các đầu vào và đầu ra
của board Arduino, và đọc encoders, tất cả từ Simulink (hoặc từ các dòng lệnh của MATLAB).

6.3 Bắt đầu

Một khi ta đã tải và giải nén gói ArduinoIO, ta có thể bắt đầu nhìn vào file readme

Kết nối với Board Arduino

Việc đầu tiên ta cần làm là làm cho board Arduino sẵn sàng và chạy. Hướng dẫn chi tiết làm
thế nào kết nối board với máy chủ và làm thế nào để tải driver cho board có thể được tìm thấy
ở đây:

https://www.arduino.cc/en/Guide/HomePage

Link này cũng mô tả môi trường phát triển Arduino (IDE) và làm thế nào để upload chương
78 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

trình vào board. IDE Arduino bao gồm một editor để ta viết chương trình (gọi là sketches) và
sau đó build, compile và upload code vào board. Tổng quát, ta sẽ chỉ sử dụng IDE để upload
chương trình.

Upload chương trình

Chương trình “server” sẽ chạy trên board Arduino song song với mô hình Simulink chạy trên
máy tính chủ (host computer). Chương trình sẽ chạy liên tục và nhận lệnh từ mô hình Simulink
thông qua cổng nối tiếp (serial port). Sau đó nó thực thi các lệnh này và, nếu cần, trả về kết
quả. Có nhiều phiên bản của chương trình được bao gồm như các phần của gói IO. Cụ thể,
ta sẽ sử dụng adios.pde. Sketch này thực hiện các lệnh về I/O analog và digital (“adio”), đọc
quadrature encoders (“e”), và có thể tương tác với motor thông và một shield (“s”) (module
chức năng). Chú ý rằng .pde là một mở rộng cũ hơn và Arduino giờ đây sử dụng .ino.

Các hướng dẫn sau là cần thiết để tải lên file adios.pde vào bộ nhớ của board Arduino. Miễn
là không có file nào khác được tải lên sau này, bước này không cần được lập lại và gói IO có
thể được sử dụng ngay khi board được nối tới máy tính chủ.

Từ menu thanh công cụ, chọn File>Open và tìm file adios.pde (trong thư mục ArduinoIO/pde/a-
dioes) và mở nó. Kế tiếp, nối board Arduino và chắc chắn rằng ta đã chọn đúng board và
đúng cổng serial (port) trong IDE (kiểm tra menu Tools/board : và Tool/Port:), sau đó chọn
File>Upload và đợi “Done Uploading”.

Đến lúc này, file adioes.pde đã được upload và ta có thể đóng IDE, vì ta không cần nó nữa và
để cho MATLAB có thể sử dụng cổng serial.

Cài đặt gói ArduinoIO vào thư viện của Simulink


6.4. MỘT VÍ DỤ ĐƠN GIẢN 79

Chạy MATLAB (chọn Run as Administrator ). Việc này cho phép đường dẫn cập nhật (updated
path) được lưu. Sau đó, đặt thư mục MATLAB hiện hành tới vị trí của file install_arduino.m
(trong thư mục ArduinoIO). Cuối cùng, nhập install_arduino ở dòng lệnh MATLAB để chạy
các dòng lệnh. Các dòng lệnh chỉ đơn giản là thêm vào các thư mục ArduinoIO thích hợp và
đường dẫn MATLAB và lưu đường dẫn.

Nếu ta tiến hành mở Simulink, ta sẽ thấy Library bây giờ bao gồm Arduino IO Library như
hình. Các khối này được sử dụng để tương tác với board Arduino. Ví dụ, để đọc cảm biến
thông qua Analog Input hoặc đóng, mở một cơ cấu chấp hành thông qua Digital Output.

6.4 Một ví dụ đơn giản

Ta sẽ thực hiện một ví dụ đơn giản để cho thấy làm thế nào để sử dụng gói ArduinoIO để tương
tác với board Arduino thông qua Simulink. Trong nhiều ví dụ ta sẽ sử dụng board Arduino để
tạo ra các lệnh điều khiển số (ON/OFF) cho một hệ đã cho (hoặc cơ cấu chấp hành của nó).
Ta cũng sẽ sử dụng board Arduino để đọc các tín hiệu tương tự (điện áp) từ hệ (hoặc cảm biến
của nó). Trong ví dụ đơn giản này, ta sẽ làm chớp tắt đèn LED.

Thiết lập phần cứng

Mạch cho ví dụ đơn giản này gồm một điện trở mắc nối tiếp với một đèn LED. Điện trở là cần
thiết để hạn chế dòng điện bởi nếu không thì đèn LED có thể cháy.

Để thực hiện việc này, ta cần:


80 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

• Board Arduino (Uno, Mega, . . . )

• Cáp USB

• Breadboard

• LED

• Điện trở (và tụ điện nếu ta muốn) (220 )

• Dây nối

Mạch được kết nối như hình bên dưới. Lưu ý, board Arduino cũng sẽ có thể được sử dụng để
đo điện áp qua LED nhờ một chân AO (Analog Input). Do đó, ta kết nối dây từ chân IO tới
điểm nơi mà điện trở và LED gặp nhau. Trong ví dụ này, điện áp qua đèn LED không quá
quan trọng với ta, tuy nhiên nó cho thấy làm thế nào ta sẽ hồi tiếp tín hiệu từ các hệ thống
đa dạng.

Thiết lập phần mềm

Trong ví dụ này, ta sẽ sử dụng Simulink để tạo ra lệnh mà bật/tắt LED. Ta cũng sẽ sử dụng
Simulink để đọc dữ liệu điện áp từ board và để vẽ dữ liệu theo thời gian thực. Mô hình Simulink
ta sẽ sử dụng được cho bên dưới. Khối Arduino Digital Write, Arduino Analog Read, Arduino
IO Setup, và Real-Time Pacer là tất cả các phần của gói IO. Các khối còn lại là các phần thuộc
về thư viện chuẩn của Simulink. Cụ thể, khối Pulse Genertator và khối Scope. Mỗi mô hình
ta tạo ra sử dụng gói IO sẽ bao gồm một khối IO Setup (thiết lập chân vào/ra) và một khối
Real-Time Pacer. Click đôi lên khối IO Setup cho phép ta xác định Serial (COM) port (cổng
COM) mà Arduino được kết nối. Trong ví dụ này, board được kết nối tới “COM3”, mặc dù nó
có thể khác trên máy của ta. Ta sẽ luôn luôn đặt thông số Speedup của khối Real-time Pacer
6.4. MỘT VÍ DỤ ĐƠN GIẢN 81

là “1” để chỉ rằng mô hình Simulink của ta chạy ở cùng nhịp độ như thời gian thực, đó là, 1s
của thời gian mô phỏng tương ứng với 1s thời gian vật lý.

Như cho thấy, lệnh điện áp đầu vào được tạo ra bởi một khối Pulse Generator. Giá trị của
khối này là 0 hoặc 1 mà được đưa tới khối Arduino Digital Write. Click đôi lên khối Pulse
Generator, ta có thể đặt Sample Time (thời gian lấy mẫu) thành 0.1s. Ta sẽ thiết lập khối này
hơn nữa để chuyển đổi đầu ra của nó giữa hai trạng thái mỗi 1 s (mỗi 10 mẫu). Vì ta đang sử
dụng kênh 8 cho đầu ra số (digital output), ta click đôi lên khối Arduino Digital Write để thiết
lập Pin thành 8 từ menu. Ta sẽ để thời gian lấy mẫu của khối này theo khối Pulse Generator
(tạo xung). Đầu vào 0 tới khối Digital Write làm cho đầu ra 0V được tạo ra ở chân tương ứng,
trong khi một đầu vào 1 tới khối Digital Write cho đầu ra 5V.

Khối Arduino Analog Read đọc dữ liệu điện áp đầu ra thông qua đầu vào Analog Input, A0
trên board. Click đôi vào khối cho phép ta thiết lập Pin thành 0 từ menu. Ta cũng có thể đặt
thời gian lấy mẫu Sampling time thành 0.1. Mô hình Simulink đã cho sau đó vẽ đồ thị từ dữ
liệu được ghi lại (điện áp qua đèn LED) thông qua một khối Scope.

Một khi mô hình Simulink đã được tạo ra, nó có thể được chạy từ menu Simulation>Run hoặc
bấm nút Play trên toolbar. Sau đó, đèn LED chớp tắt. Click đôi vào Scope và bấm Autoscale
để xem tín hiệu điện áp đo được.

Dữ liệu mà ta vẽ được tương ứng với điện áp qua đèn LED. Vì đèn LED và điện trở là tương
82 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

đương các thiết bị tĩnh (static devices), điện áp qua đèn LED nhảy gần như ngay lập tức từ 0
tới giá trị ổn định của nó bất kỳ khi nào chân đầu ra số (digital pin) được chuyển lên “on”. Ở
thời điểm này, dữ liệu được cho dưới dạng bit. Vì board Arduino sử dụng bộ chuyển đổi tương
tự-số ADC 10 bit, dãy điện áp 0-5V của analog input được biểu diễn bởi các số nguyên từ 0
tới 1023 (210 = 1024). Do đó, số liệu được ghi lại chỉ ra rằng LED có một điện áp rơi khoảng
2V khi được bật lên (405/1023*5 =2 V). Việc này chỉ ra rằng diode thực tế có một ít điện trở
khi nó ở forward biased, nó không làm việc giống như một ngắn mạch lý tưởng.

Trong ví dụ này, thời gian lấy mẫu 0.1s mà ta sử dụng thì dễ dàng đạt được bởi hệ của ta.
Tuy nhiên, có những ví dụ mà ta cần thực hiện nhiều tính toán hơn ở Simulink, hoặc muốn sử
dụng thời gian lấy mẫu nhỏ hơn bởi vì động học của tín hiệu mà ta đang đọc rất nhanh. Trong
những trường hợp như vậy, ta sẽ phải thử sử dụng một sampling time rất nhỏ mà không thể
đạt được một cách liên tục. Điều này có thể gặp vấn đề bởi vì Simulink đang chạy dưới một
hệ điều hành thời gian không thực (non-realtime operating system) mà đang thực hiện nhiều
nhiệm vụ khác ưu tiên hơn, do vậy mà có thể giới hạn vận tốc mà Simulink có thể giao tiếp
với board Arduino. Một cách để kiểm chứng sampling time có thỏa mãn hay không là nhìn vào
cửa sổ lệnh MATLAB sau khi ta chạy mô hình Simulink. Nếu Simulink có thể thõa mãn thời
gian lấy mẫu cho trước, ở dòng lệnh, ta sẽ gặp một thông báo cho biết thời gian lý tưởng trung
bình như hình bên dưới. Nếu mô hình không thõa mãn yêu cầu về thời gian, sẽ không có thời
gian lý tưởng và do vậy dòng thông báo này sẽ không xuất hiện ở cửa sổ lệnh.

Mở rộng

Ta có thể đọc một tín hiệu từ bên ngoài, ví dụ từ một công tắc bấm, và sử dụng nó để xác định
khi nào bật đèn LED. Hoặc là, ta có thể sử dụng một tín hiệu PWM (khối Analog Output) để
thay đổi độ sáng của LED. Cuối cùng, ta có thể thay thế LED bởi một tụ điện để xem một hệ
6.4. MỘT VÍ DỤ ĐƠN GIẢN 83

động học (dynamic system), thay vì một hệ tĩnh (static system). Như ví dụ về mạch RC mà
ta sẽ tìm hiểu ở phần tiếp theo.
84 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC
Mạch RC

Tổng quan: Hoạt động này sử dụng một mạch điện đơn giản chỉ gồm một điện trở và một tụ
điện. Loại mạch này là một ví dụ đơn giản nhưng quan trọng của một hệ thống động. Các hoạt
động khám phá việc mô hình hóa, phân tích và kiểm soát mạch điện. Board mạch Arduino
được sử dụng để tạo đầu vào cho mạch (thông qua đầu ra kỹ thuật số) và để đọc đầu ra của
mạch (thông qua đầu vào tương tự). Board mạch Arduino cũng truyền đạt dữ liệu được ghi tới
Simulink giúp cho việc quan sát và phân tích.

6.5 Hoạt động 1 Phần (a): XÁC ĐỊNH ĐÁP ỨNG BƯỚC
CỦA MỘT MẠCH TỤ ĐIỆN-ĐIỆN TRỞ (RC CIR-
CUIT)

Nội dung

• Dụng cụ cần

85
86 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

• Mục đích

• Mô hình hóa từ nguyên lý thứ nhất

• Thí nghiệm nhận dạng hệ thống

• Kiểm chứng mô hình – đáp ứng cưỡng bức

• Kiểm chứng mô hình – đáp ứng tự do

• Mở rộng

Dụng cụ cần

• Board Arduino (vd. Uno, Mega2560, . . . )

• Cáp USB

• Breadboard

• Các thành phần điện tử (điện trở và tụ điện)

• Đồng hồ đo điện trở, tụ điện (tùy chọn)

• Dây nối

Hệ mà ta sẽ sử dụng trong hoạt động này là một mạch điện đơn giản bao gồm một điện trở R
và một tụ điện C mắc nối tiếp. Board Arduino sẽ được sử dụng để tạo ra đầu vào cho mạch
RC này và để đo đầu ra của mạch. Cụ thể, đầu vào mạch sẽ là một bước 5V, được tạo ra từ
Digital Output của board, mà đi vào điện trở và tụ điện. Đầu ra của mạch sẽ là điện áp rơi của
tụ điện mà sẽ được đọc thông qua chân Analog Input của mạch. Số liệu này sau đó được cấp
vào Simulink để quan sát và so sánh với kết quả đầu ra của mô phỏng từ mô hình của ta.

6.5.1 Mục đích

Mục đích của hoạt động này là để minh họa làm thế nào để mô hình một hệ thống điện đơn
giản. Cụ thể, theo nguyên lý thứ nhất (first principles) là được dựa trên các định luật vật lý
của mạch điện và hướng tiếp cận hộp đen (là được dựa trên số liệu đo được từ hệ). Các thí
nghiệm liên quan sẽ được sử dụng để minh họa phương pháp hộp đen (nhận dạng hệ thống),
cũng như để kiểm chứng về sự chính xác của mô hình. Hoạt động này cũng cung cấp một ví
dụ về một hệ bậc nhất.
6.5. HOẠT ĐỘNG 1 PHẦN (A): XÁC ĐỊNH ĐÁP ỨNG BƯỚC CỦA MỘT MẠCH TỤ ĐIỆN-ĐIỆN TRỞ (

6.5.2 Mô hình hóa từ các nguyên lý thứ nhất/đầu tiên (modelling


from first principles)

Đầu tiên, ta sẽ sử dụng sử hiểu biết của ta về các định luật vật lý của mạch RC để rút ra cấu
trúc của mô hình hệ. Ta gọi nó là Mô hình hóa từ các nguyên lý cơ bản (modelling from first
principles). Ta sử dụng các biến sau trong ví dụ này:

(R) trở kháng của điện trở

(C) dung kháng của tụ điện

(ei ) điện áp đầu vào

(eo ) điện áp đầu ra

Để bắt đầu ta giả sử hướng của dòng điện và áp dụng định luật Kirchhoff về điện áp. Dòng
điện đi từ nơi điện thế cao tới nơi điện thế thấp hơn, do đó, hướng của dòng sẽ là theo chiều
kim đồng hồ trong trường hợp này:

Định luật phát biểu rằng tổng điện áp quanh một vòng kín phải bằng 0. Do đó, quy luật vòng
tạo ra phương trình chủ đạo sau cho mạch:

Z
1
ei − iR − idt = 0
C

Một mô hình thay thế cho phương trình vi tích phân này là hàm truyền (transfer function).
Hàm truyền mô tả hành vi đầu vào/đầu ra của hệ và được rút ra bằng cách biến đổi Laplace
một phương trình vi-tích phân đã cho, trong khi giả sử các điều kiện ban đầu là 0 (i(0)=0).
88 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

1
Ei (s) − I(s)R − I(s) = 0
Cs

Kế tiếp ta phải thực hiện một vài phép tính đại số để sắp xếp lại phương trình trên ở dạng
đầu ra chia cho đầu vào. Trong trường hợp này, đầu vào là Ei (s) và đầu ra là Eo (s). Do vậy, ta
phải loại bỏ dòng điện I(s) vì nó không phải là đầu ra hay đầu vào, và ta phải giới thiệu đầu
ra Eo (s) vào phương trình trên. Giải phương trình trên cho I(s) ta có phương trình sau:

Ei (s)
I(s) = 1
R + Cs
1
R
Sau đó, ta có thể nhận thấy rằng điện áp đầu ra (qua tụ điện) là eo = C
idt. Biến đổi Laplace
và tìm I(s), ta có:

Eo (s)
I(s) = 1
Cs

Do đó:

Ei (s) Eo (s)
1 = 1
R + Cs Cs

Sắp xếp lại biểu thức theo dạng đầu ra chia đầu vào ta có mô hình hàm truyền:
1
Eo (s)
G(s) = = Cs 1
Ei (s) R + Cs

Nhận thấy rằng, hệ trên là hệ bậc nhất, ta có thể đưa hàm truyền về dạng chuẩn:
1 K
G(s) = =
RCs + 1 τs + 1

Ở dạng này, ta có thể nhận thấy các tham số của mạch ảnh hưởng đáp ứng của nó như thế
nào. Cụ thể, các giá trị của điện trở và tụ điện ảnh hưởng tốc độ đáp ứng của mạch qua sự ảnh
hưởng lên hằng số thời gian, τ = RC. Tuy nhiên, Các thành phần mạch không thể ảnh hưởng
hoạt động trạng thái ổn định của mạch bởi vì độ lợi tần số thấp K luôn luôn bằng 1.

6.5.3 Thí nghiệm nhận dạng hệ thống

Trong ví dụ này ta sẽ ghi lại điện áp đầu ra của mạch RC đối với một điện áp đầu vào dạng
bước. Dựa trên đáp ứng thời gian của điện áp đầu ra, ta sẽ rút ra mô hình từ dữ liệu thu thập.
6.5. HOẠT ĐỘNG 1 PHẦN (A): XÁC ĐỊNH ĐÁP ỨNG BƯỚC CỦA MỘT MẠCH TỤ ĐIỆN-ĐIỆN TRỞ (

Cách này đôi khi được gọi là mô hình hóa hộp đen (blackbox modeling) hoặc mô hình hóa dựa
trên số liệu (data-driven modelling). Sau khi ta tạo ra được một mô hình như vậy, ta sẽ so sánh
nó với mô hình rút ra từ nguyên lý thứ nhất mà đã tạo ra trước đó trong phần 6.5.2

Thiết lập phần cứng

Mạch RC đơn giản của ta có thể được áp dụng trên một breadboard và được kết nối với
board Arduino như hình. Một điều chú ý là nếu ta sử dụng một tụ điện điện phân (electrolytic
capacitor), thì cực của nó ta phải quan tâm. Cụ thể, nếu tụ điện của ta có chiều dài chân khác
nhau và một chân được đánh dấu bởi một dấu âm, thì đó là tụ điện điện phân. Nối tụ điện
điện phân sao cho chân có dấu âm nối với phần điện áp thấp hơn của mạch (nối với 0V trong
trường hợp này). Board Arduino được sử dụng để nhận lệnh đầu vào từ Simulink và áp điện
áp đầu vào tới mạch RC (thông qua một Digital Output). Board cũng đọc được dữ liệu điện
áp đầu ra từ mạch (thông qua một Analog Input) và truyền số liệu tới Simulink.

Trong thí nghiệm này, các giá trị của điện trở và tụ điện được chọn sao cho đáp ứng thời gian
của mạch là đủ chậm để thiết lập Arduino/Simulink có thể lấy mẫu mạch RC với tốc độ đủ
nhanh để cho một bức tranh rõ ràng về đầu ra của mạch. Nếu tốc độ lấy mẫu nhanh hơn ít
nhất 10 lần hằng số thời gian của mạch, ta sẽ có thể thu được một đáp ứng rõ ràng. Trong thí
nghiệm này, ta chọn R = 10kΩ và C = 100µF để tạo ra một hằng số thời gian 1s. Đây là một
ứng dụng có năng lượng thấp do đó hầu hết các điện trở và tụ điện hiện nay đều làm việc tốt,
ta chỉ cần chắc rằng tụ điện chịu được một điện áp thấp nhất là 5V.
90 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

Thiết lập phần mềm

Trong thí nghiệm này, ta sẽ sử dụng Simulink để đọc dữ liệu từ board và vẽ số liệu ở thời gian
thực. Cụ thể, ta sẽ sử dụng gói IO từ MathWorks.

Như bên dưới, lệnh điện áp đầu vào được tạo ra bởi một khối Pulse Generator. Khối này được
chọn bởi vì sự tổng quát của nó. Ta cũng có thể sử dụng một khối Step. Khối Pulse Generator
tạo ra giá trị 0 hoặc 1 mà sau đó được cấp cho khối Arduino Digital Write. Vì ta đang sử dụng
kênh 8 cho digital output, ta click đôi vào khối Arduino Digital Write để thiết lập Pin thành
8. Một đầu vào 0 tới khối Digital Write làm cho đầu ra 0V ở chân tương ứng, trong khi đầu
vào 1 sẽ cho ra 5V. Tỉ lệ xích này được thực hiện bởi khối Gain đặt trước khối Scope. Trong
mô hình này, khối Pulse Generator được thiết lập để cho ra 0 ở 5s đầu tiên để xả tụ điện hoàn
toàn, trước khi bước lên 1 cho 5s cuối cùng của chu kỳ.

Khối Arduino Analog Read đọc số liệu điện áp đầu ra thông qua Analog Input, A0 trên board.
Click đôi vào khối cho phép ta chọn Pin thành 0. Ta cũng sẽ đặt Sample Time thành 0.1, tức
là nhanh hơn 10 lần hằng số thời gian của mạch và do đó đủ nhanh. Các khối khác trong mô
hình cũng có thể được đặt để có Sampling Time (thời gian lấy mẫu) 0.1 (hoặc giữ nguyên -1).
Thời gian lấy mẫu được đặt cho biến Ts trước khi chạy mô hình. Khối Gain trên Analog Input
được bao gồm để chuyển số liệu thành đơn vị Volts (bằng cách nhân với 5/1023). Việc chuyển
đổi này có thể được hiểu là do board Arduino sử dụng bộ ADC 10 bit, mà có nghĩa là kênh
Analog Input đọc một điện thế giữa 0 và 5V, và chia nó ra thành 210 = 1024 lát. Do đó, 0
tương ứng với 0V và 1023 tương ứng với 5V.

Sau đó, mô hình Simulink đã cho vẽ đồ thị của điện áp đặt đầu vào và điện áp đầu ra nhờ
khối Scope và cũng lưu số liệu đầu ra, dạng mảng (array), vào khối To Workspace để phân tích
thêm. Khối Arduino Digital Write, khối Arduino Analog Read, khối Arduino IO Setup, và khối
Real-Time Pacer là các phần tử thuộc gói IO. Các khối còn lại thuộc về thư viện Simulink tiêu
chuẩn.
6.5. HOẠT ĐỘNG 1 PHẦN (A): XÁC ĐỊNH ĐÁP ỨNG BƯỚC CỦA MỘT MẠCH TỤ ĐIỆN-ĐIỆN TRỞ (

Một khi mô hình Simulink đã được tạo ra, nó có thể được chạy để thu thập số liệu điện áp đầu
vào và đầu ra. Thực thi code sau ở cửa sổ lệnh sẽ tạo ra đồ thị như bên dưới. Chú ý rằng, ta
chỉ vẽ 5s cuối,và do đó đã bỏ qua phần xả của tụ điện.

Nhận dạng thông số (parameter identification)

Dựa trên hình trên, ta có thể rút ra một mô hình với số liệu đã ghi lại. Nhận thấy rằng số liệu
được quan sát có dạng của một đáp ứng bậc nhất, ta sẽ giả sử mạch của ta có mô hình bậc
nhất tiêu chuẩn.

Eo (s) K
G(s) = =
Ei (s) τs + 1

Ta có thể nhận dạng các thông số của hệ như K và τ từ số liệu đáp ứng được ghi. Cụ thể, giá
eo,ss
trị trạng thái ổn định của đáp ứng chỉ ra rằng độ lợi tần số thấp DC là K = ei,ss
≈ 1. Chú ý,
ta đã kiểm chứng bằng đồng hồ đo là điện áp đầu ra được tạo ra thông qua Digital Output rất
gần 5V. Nhớ lại rằng, theo định nghĩa, hằng số thời gian τ biểu diễn thời gian để đáp ứng của
hệ đạt 1 − e−1 ≈ 63.2% tổng thay đổi của nó, τ có thể được tính toán nhờ code sau, trong đó
63.2% của 5 là khoảng 3.16.
92 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

Vì đầu vào bước diễn ra ở khoảng 0.1s và đầu ra đạt tới 3.16V ở khoảng 1.16s, hằng số thời
gian có thể được xác định như τ ≈ 1.16 − 0.10 = 1.06s. Trong thực tế, ta chỉ có số liệu ở mỗi
0.1s, nhưng sử dụng datatip trong đồ thị MATLAB cho phép ta nội suy giá trị giữa các mẫu.
Sử dụng một chu kỳ lấy mẫu nhỏ hơn sẽ cho phép ta cải thiện độ chính xác của việc nhận dạng
các thông số hệ thống. Kết luận, mô hình có được từ việc nhận dạng hệ thống là :

Eo (s) 1
G(s) = =
Ei (s) 1.06s + 1
Kiểm chứng mô hình – đáp ứng cưỡng bức

Trong phần này, ta sẽ kiểm chứng hai mô hình mạch điện mà ta có, mô hình có được từ nguyên
lý cơ bản và mô hình hộp đen, bằng cách so sánh các đáp ứng bước được dự báo bởi các mô
hình với số liệu thực tế được ghi lại từ mạch.

Nhớ lại mô hình ta có trước đó từ nguyên lý cơ bản:

Z
1
ei − iR − idt = 0
C
Ta sẽ tạo ra mô hình Simulink từ phương trình chủ đạo này bằng cách tìm đạo hàm bậc cao
nhất:

Z
1 1
i = (ei − idt)
R C
6.5. HOẠT ĐỘNG 1 PHẦN (A): XÁC ĐỊNH ĐÁP ỨNG BƯỚC CỦA MỘT MẠCH TỤ ĐIỆN-ĐIỆN TRỞ (

Phương trình này sau đó có thể được tạo ra trong Simulink như hình với các khối được tô đậm
(trong đó R và C là các biến). Ta cũng đã thêm các khối này vào mô hình Simulink để mà ta
có thể so sánh trực tiếp điện áp đầu ra thực tế với điện áp đầu ra được mô phỏng. Khối Unit
Delay được thêm vào để cho thời gian điện áp đầu vào được mô phỏng phù hợp với thời gian
điện áp đầu vào được tạo ra bởi board Arduino. Các khối To Workspace được thiết lập để có
đầu ra dạng Array (bằng cách click đôi vào khối).

Ta có thể biểu diễn mô hình đầu tiên theo dạng hàm truyền, nhưng như vậy ta sẽ không trực
tiếp đặt các điều kiện ban đầu (điện ban đầu sẵn có trong tụ điện). Điện tích trong tụ điện là
đầu ra của khối Integrator và điều kiện ban đầu của nó được đặt bằng cách click đôi vào khối
Integrator. Ta đặt điều kiện ban đầu của nó là qinit .

Để làm cho mô hình của ta rõ hơn, ta có thể tạo một hệ con cho mô hình có được từ nguyên
lý cơ bản. Cụ thể, ta có thể chọn các khối được tô đậm ở hình trên và click phải, sau đó
chọn Create Subsystem from Selection. Ta cũng có thể thay đổi màu của khối bằng cách chọn
Format>Background color >Light Blue.
94 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

Chạy mô hình này, sau đó ta có thể so sánh điện áp đầu ra được mô phỏng eo_sim với điện
áp đầu ra thực nghiệm eo_act. Nhớ lại rằng khối Pulse Generator được thiết lập là 0 trong 5s
đầu tiên để tụ xả điện hoàn toàn trước khi được bước (step) lên 1. Nhập vào các dòng lệnh
sau:

Hình trên cho thấy sự tương đương khá tốt giữa điện áp đầu ra được dự đoán từ mô hình và từ
mạch thực tế. Bây giờ, ta hãy tìm hiểu hoạt động của mô hình hộp đen mà ta rút ra từ thực
nghiệm. Thêm mô hình này vào Simulink:

Eo (s) 1
G(s) = =
Ei (s) 1.06s + 1

Tạo hệ con theo cùng cách thức mà ta đã làm cho mô hình từ nguyên tắc thứ nhất.
6.5. HOẠT ĐỘNG 1 PHẦN (A): XÁC ĐỊNH ĐÁP ỨNG BƯỚC CỦA MỘT MẠCH TỤ ĐIỆN-ĐIỆN TRỞ (

Nhớ lại rằng, mô hình có từ nguyên tắc thứ nhất không dự đoán chính xác đầu ra tạo bởi mạch
RC thực. Môt yếu tố đóng góp tới sự khác biệt này có thể là các thành phần (điện trở và tụ
điện) có các giá trị thực khác với các giá trị danh nghĩa. Ta có thể cải thiện mô hình của ta
bằng cách đo điện trở và điện dung thực.

Trong ví dụ này, R thực được đo là 9840Ω so với nhãn ghi là 10kΩ, trong khi C thực được
đo là 103.4µF , so với nhãn ghi là 100µF . Nhập vào các giá trị này vào mask của mô hình từ
nguyên lý thứ nhất ở Simulink, sau đó ta có thể chạy lại mô phỏng của ta. Thực thi các lệnh
Matlab sau:

Kiểm tra ở trên, mô hình hộp đen phù hợp với số liệu thực nghiệm cực tốt, trong khi đó việc
thay đổi các giá trị R và C không cải thiện mức độ phù hợp của mô hình từ nguyên lý cơ bản
96 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

lắm. Giả thuyết của sai lệch này là do các điện trở và điện dung không được mô phỏng của các
kênh đầu vào và đầu ra được nối với mạch. Các ảnh hưởng của tải như vậy có thể được mô tả
bởi mô hình hộp đen như đã thấy.

Mô hình hộp đen sẽ khá chính xác khi nó được áp dụng cho trường hợp mà nó được rút ra.
Tuy nhiên, một mô hình hộp đen có thể sai nếu nó được áp dụng dưới những điều kiện khác.
Việc này đặc biệt đúng nếu mô hình không nắm bắt được chính xác bản chất của hệ. Do đó,
ta sẽ kiểm tra mô hình của ta dưới các điều kiện khác nhau trong phần kế tiếp. Trong trường
hợp này vì ta biết rằng cấu trúc của mô hình từ nguyên tắc cơ bản phù hợp với cấu trúc của
mô hình hộp đen (cả hai cùng bậc nhất) và vì điện trở và điện dung không thay đổi nhiều, mô
hình hộp đen vẫn làm việc tốt. Thuận lợi chính của sử dụng mô hình hộp đen, bên cạnh sự
chính xác, thì người ta không cần hiểu bản chất của hệ để có nó.

Một thay đổi thú vị mà ta có thể làm trong ví dụ này là thay thế một một điện trở cố định
bởi một biến trở (a trimmer potentiometer) để xem đáp ứng của mạch thay đổi như thế nào
với sự thay đổi của trở kháng. Ta cũng có thể sử dụng với một tụ điện biến thiên.

6.6 Phần b: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA


MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC)

Mục đích

Trong hoạt động trước ta tìm hiểu về đáp ứng thời gian của một mạch RC. Mục đích của hoạt
động này là hiểu về đáp ứng tần số của mạch này. Cụ thể, ta sẽ xây dựng phần đồ thị độ lớn
của đồ thị Bode cho mạch RC. Trong hoạt động này, ta sẽ đặt vào một dãi các tần số, nhưng
ta sẽ sử dụng đầu vào là sóng vuông thay vì sóng sin. Theo cách này, đáp ứng biên độ mà ta
tạo ra sẽ không tương ứng một cách chính xác với định nghĩa chuẩn của đáp ứng tần số. Lý do
mà ta sử dụng đầu vào sóng vuông là giúp ta biết ý nghĩa của đáp ứng tần số của mạch dựa
trên sự hiểu biết về đáp ứng bước của mạch mà ta đã có được ở phần A.

Đáp ứng tần số lý thuyết

Ý nghĩa phía sau việc phân tích đáp ứng tần số là kiểm tra xem hệ đáp ứng như thế nào với
một đầu vào biến thiên dạng sin có tần số khác nhau. Nếu ta có một hệ tuyến tính, như với
mạch RC, thì một đầu vào sin với một tần số nào đó sẽ tạo ra một đầu ra dạng sin với cùng
tần số ở trạng thái ổn định. Tuy nhiên, đầu ra có thể có biên độ khác với đầu vào và đầu ra có
6.6. PHẦN B: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC)97

thể có lệch pha so với đầu vào. Ý nghĩa này được minh họa trên hình:

Ta có thể hiểu việc này bằng cách xét rằng nếu hệ của ta được biểu diễn như một hàm truyền
G(s), thì đầu ra là tích của hàm truyền và đầu vào, Y(s)=G(s)R(s). Do đó, đầu ra có thể được
tách thành một thành phần với các cực của hàm truyền (biểu diễn đáp ứng tự nhiên của hệ)
và một thành phần với các cực của tín hiệu đầu vào. Nếu hệ là ổn định, thì đáp ứng tự nhiên
sẽ tắt dần và chỉ còn lại một đầu ra ở trạng thái ổn định có cùng dạng (cực) như tín hiệu đầu
vào.

Khi ta xét đáp ứng tần số của hệ, ta đặc biệt quan tâm độ lớn và pha của đầu ra ở trạng thái
ổn định so với đầu vào dạng sin. Một cách để biểu diễn số liệu biên độ (độ lớn) và số liệu pha
này là đồ thị Bode. Một đồ thị Bode bao gồm 2 đồ thị, một là đáp ứng về độ lớn (tỉ số của
biên độ đầu ra so với biên độ đầu vào, Y/R) theo tần số, và một là đáp ứng về pha theo tần
số.

Thực thi các lệnh sau sẽ tạo ra đồ thị Bode lý thuyết của mạch RC của ta (với R = 10kΩ, C =
100µF ).

Hình trên cho thấy mạch RC làm việc như một bộ lọc thông thấp (cho qua các tần số thấp và
chặn lại các tần số cao). Ở tần số thấp, mạch có biên độ ứng với 0 dB. Nhớ lại rằng, biên độ
ở đơn vị dB được tính như là 20log(Y /R), do đó, một biên độ 0 dB tương ứng với trường hợp
mà biên độ đầu ra bằng với biên độ đầu vào (tỉ số Y/R bằng 1). Trong khi đó ở tần số cao, độ
98 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

lớn ở dB trở nên âm nhiều hơn. Xu hướng này tương ứng với tỉ số biên độ càng gần 0, đó là,
đầu ra giảm dần nhiều hơn khi tần số đầu vào tăng lên. Xu hướng quan sát được ở đồ thị pha
là đầu ra trễ pha nhiều hơn so với đầu vào khi tần số đầu vào tăng lên.

Xu hướng này được quan sát trong hầu hết các hệ vật lý. Khi tần số đầu vào tăng lên, hệ sẽ
khó khăn hơn trong việc bám theo đầu vào. Với hệ của ta, tần số mà ở đó đầu ra bắt đầu suy
giảm được quyết định bởi độ lớn của các thành phần R và C. Cụ thể, nhớ lại hàm truyền cho
mạch RC:

Eo (s) 1 K
G(s) = = =
Ei (s) RCs + 1 τs + 1

Tần số gãy (break frequency hay corner frequency) cho mạch này được quyết định bởi vị trí
cực của nó, đó là 1/τ = 1/RC. Trong trường hợp của mạch này, RC = 1 và tần số gãy là lân
cận của 1 rad/s. Nhớ lại dạng của đáp ứng bước mạch RC, ta có thể dự đoán mạch sẽ đáp
ứng như thế nào đối với một đầu vào sóng vuông có tần số dao động. Ta sẽ kiểm chứng lại sự
hiểu của ta với một thí nghiệm dựa trên phần cứng trong phần tới. Mục đích tổng thể của hoạt
động này là giúp ta hiểu rõ hơn đáp ứng tần số của hệ có ý nghĩa gì.

Thực thi các lệnh sau trong MATLAB sẽ tạo ra đồ thị đáp ứng bước lý thuyết cho mạch RC
của ta (với R = 10kΩ, C = 100µF ).

Đó là đáp ứng bước bậc nhất tiêu chuẩn. Đối với một đầu vào sóng vuông, ta có thể tưởng
tượng rằng đầu vào sẽ tăng như hình trên khi đầu vào “ON” và sẽ giảm một cách lũy thừa khi
đầu vào “OFF”. Chu kỳ giữa trạng thái ON và OFF sẽ tạo ra một đáp ứng giống như hình bên
dưới
6.6. PHẦN B: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC)99

Trong hình trên, chu kỳ của đầu vào sóng vuông là đủ lớn mà đầu ra của hệ có thời gian để đạt
tới trạng thái ổn định trước khi tín hiệu đầu vào chuyển đổi giá trị của nó. Nhớ lại một hệ bậc
nhất, tốn khoảng 4 lần hằng số thời gian (4τ ) để đầu ra đạt tới 98% thay đổi tổng của nó. Do
đó, khi tần số đầu vào là đủ chậm (chu kỳ đủ lớn so với τ ), đáp ứng đầu ra sẽ có dạng như hình
trên, trong đó độ lớn của đầu ra gần bằng với độ lớn của đầu vào. Đây là điều mà ta đã quan
sát trong đồ thị Bode được tạo ra trước đó. Ở tần số thấp, độ lớn gần bằng 20log1 = 0dB, mà
tương ứng với tỉ số độ lớn 1 (không suy giảm).

Nhớ thêm rằng, cần khoảng 1 hằng số thời gian (τ ) để một đáp ứng bước bậc nhất tiêu chuẩn đạt
63% thay đổi tổng của nó. Do đó, khi sóng vuông có chu kỳ 2τ (tần số bằng 2π/2τ ≈ 3.14rad/s
cho hệ này) đáp ứng đầu ra sẽ không có đủ thời gian để đạt tới trạng thái ổn định trước khi
đầu vào chuyển đổi giá trị của nó lần nữa. Như vậy, biên độ của đầu ra sẽ nhỏ hơn biên độ của
đầu vào. Việc này đã được thấy trước đó ở đồ thị Bode mà trong đó biên độ phía trên tần số
gãy (1rad/s) thì ít hơn 1 (ít hơn 0 dB). Khi tần số của đầu vào tăng, có ít thời gian hơn để
đầu ra phản ứng. Điều này đã được thể hiện ở đồ thị Bode, biên độ của hệ (biên độ đầu ra)
trở nên càng nhỏ hơn khi tần số đầu vào càng tăng.

Ta sẽ khám phá việc này trong thực nghiệm sau.

Thực nghiệm về nhận dạng hệ thống

Trong thực nghiệm này, ta sẽ ghi lại điện áp đầu ra của mạch RC đối với một đầu vào là điện
áp sóng vuông. Cụ thể, đầu vào điện áp sẽ thay đổi giữa 0V và 5V, trong đó thời gian “OFF”
sẽ bằng với thời gian “ON”. Tần số của đầu vào sóng vuông sẽ được biến thiên và biên độ
tương ứng của đáp ứng đầu ra của mạch sẽ được ghi lại để ước lượng đáp ứng biên độ của hệ.
Theo một nghĩa nào đó, chúng ta đang tạo ra mô hình đáp ứng tần số của hệ thống một cách
thực nghiệm. Điều này đôi khi được gọi là mô hình hộp đen hoặc mô hình theo hướng dữ liệu
(data-driven model). Thiết lập phần cứng và phần mềm mà ta sẽ sử dụng rất giống với thiết
lập trong Phần (a) của hoạt động này.

Thiết lập phần cứng

Mạch RC có thể được thực hiện như trên hình:

Trong thí nghiệm này, các giá trị của điện trở và tụ điện được chọn sao cho đáp ứng thời gian
100 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

của mạch là đủ chậm để thiết lập Arduino/Simulink có thể lấy mẫu mạch RC với tốc độ đủ
nhanh để cho một bức tranh rõ ràng về đầu ra của mạch. Nếu tốc độ lấy mẫu nhanh hơn ít
nhất 10 lần hằng số thời gian của mạch, ta sẽ có thể thu được một đáp ứng rõ ràng. Trong thí
nghiệm này, ta chọn R = 10kΩ và C = 100µF để tạo ra một hằng số thời gian 1s.

Thiết lập phần mềm

Trong thí nghiệm này, ta sẽ sử dụng Simulink để đọc dữ liệu từ board và vẽ số liệu ở thời gian
thực. Cụ thể, ta sẽ sử dụng gói ArduinoIO.

Như bên dưới, lệnh điện áp đầu vào được tạo ra bởi một khối Pulse Generator. Khối này được
chọn bởi vì sự tổng quát của nó. Ta cũng có thể sử dụng một khối Step. Khối Pulse Generator
tạo ra giá trị 0 hoặc 1 mà sau đó được cấp cho khối Arduino Digital Write. Vì ta đang sử dụng
kênh 8 cho digital output, ta click đôi vào khối Arduino Digital Write để thiết lập Pin thành 8.
Một đầu vào 0 tới khối Digital Write làm cho đầu ra 0V ở chân tương ứng, trong khi đầu vào
1 cho ra 5V. Tỉ lệ xích này được thực hiện bởi khối Gain đặt trước khối Scope. Trong mô hình
này, khối Pulse Generator được thiết lập để cho ra 0 ở 5s đầu tiên để xả tụ điện hoàn toàn,
trước khi bước lên 1 ở 5s cuối cùng của chu kỳ.

Khối Arduino Analog Read đọc số liệu điện áp đầu ra thông qua Analog Input, A0 trên board.
Click đôi vào khối cho phép ta chọn Pin thành 0. Ta cũng sẽ đặt Sample Time dựa trên tần số
của đầu vào được sử dụng. Ví dụ, đối với một tần số đầu vào 10 rad/s (1 decade cao hơn tần
số gãy của mạch 1 rad/s), ta có thể sử dụng thời gian lấy mẫu 0.02. Thời gian lấy mẫu này
tương ứng với một tần số lấy mẫu 50Hz, mà nhanh hơn 30 lần tần số của tín hiệu đầu vào (10
rad/s 1.59 Hz). Điều này có nghĩa là đáp ứng của mạch với đầu vào này sẽ được lấy mẫu nhiều
hơn 30 lần/chu kỳ. Tần số này đủ để biết được tính chất đầu ra của hệ ở tần số này. Ta có thể
6.6. PHẦN B: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC)101

đặt các thời gian lấy mẫu như biến Ts (hoặc giữ nguyên “-1”) và gán nó giá trị 0.02.

Mô hình Simulink đã cho sau đó vẽ đồ thị của điện áp đặt ở đầu vào và điện áp đầu ra được
ghi lại trên một khối Scope và cũng lưu số liệu đầu ra, dạng mảng, vào khối To Workspace
để phân tích thêm. Khối Arduino Digital Write, khối Arduino Analog Read, khối Arduino IO
Setup, và khối Real-Time Pacer là các bộ phận thuộc gói IO. Các khối còn lại thuộc về thư
viện Simulink tiêu chuẩn.

Một khi mô hình Simulink đã được tạo ra, nó có thể được chạy để thu thập số liệu điện áp đầu
vào và đầu ra. Thực thi code sau ở cửa sổ lệnh sẽ tạo ra đồ thị như bên dưới. Chú ý rằng, ta
chỉ vẽ 5s cuối, và do đó đã bỏ qua phần xả của tụ điện.

Thu thập số liệu

Để xây dựng đồ thị Bode biên độ một cách thực nghiệm, ta sẽ quét qua một đầu vào sóng
vuông có tần số biến thiên và ghi lại biên độ của đáp ứng đầu ra. Để có một bức tranh hoàn
chỉnh của đáp ứng tần số của mạch RC, ta cần sử dụng các tần số từ ít nhất 1 decade dưới tần
số gãy (1 rad/s) tới ít nhất 1 decade trên tần số gãy. Cụ thể, ta sẽ sử dụng dãy tần số từ 0.05
rad/s (nhỏ hơn 20 lần 1 rad/s) tới 30 rad/s (lớn hơn 30 lần 1 rad/s). Bên dưới là bảng mô tả
chu kỳ và tần số của tín hiệu đầu vào, cũng như thời gian lấy mẫu (sampling time) và khoảng
thời gian thực nghiệm được sử dụng để đảm bảo đáp ứng của mạch được lấy mẫu đủ và đáp
ứng được cho đủ thời gian để đạt tới trạng thái ổn định. Hãy dựa vào các thông số của bảng
này để thực nghiệm lần lượt với 19 tần số đã cho để tìm đồ thị bode về biên độ của mạch RC.

Cho mục đích minh họa, ta sẽ nhìn vào đáp ứng của mạch với một đầu vào sóng vuông chu kỳ
T=4s. Việc này tương ứng với một tần số khoảng 1.571 rad/s, mà nhanh hơn tần số gãy ở 1
rad/s một ít. Để bắt đầu, nhập vào các lệnh sau vào cửa sổ lệnh:
102 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

Bây giờ, hãy mở mô hình Simulink đã được cho trước đó trong file này. Click đôi vào khối
Input Voltage và khối Arduino Analog Read, tương ứng, và đặt các tham số N và Ts như hình
dưới.

Trước khi chạy mô hình Simulink, đảm bảo rằng nó chạy 40s như hình, tương ứng với bảng
trên.

Nhập vào code sau MATLAB sẽ tạo ra một đồ thị như bên dưới, mà bao gồm đầu vào sóng
vuông và đáp ứng đầu ra của mạch.

Một khi ta đã ghi lại số liệu đáp ứng đầu ra, ta có thể tính toán biên độ của đáp ứng tần số
của hệ ở tần số cụ thể này. Xem xét hình trên, đáp ứng bắt đầu với một chu kỳ quá độ và đạt
6.6. PHẦN B: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC)103

tới trạng thái ổn định trong khoảng 7-8s. Sau khi ổn định, các giá trị lớn nhất và nhỏ nhất của
tín hiệu đầu ra có thể được ước lượng bằng cách phóng to hình.

Kiểm tra những hình trên cho ta một ước lượng về biên độ đầu ra (4.32-0.65)/2=1.835. Vì biên
độ đầu vào là khoảng 5/2=2.5, có nghĩa là biên độ của hệ ở tần số này có thể được tính như
sau:

Y 1.835 Y
magnitude = ≈ ≈ 0.734 ⇒ 20 log10 ≈ −2.686dB
R 2.5 R
Quá trình này sau đó được lập lại cho 18 tần số khác đã liệt kê trong bảng trên. Từ các số liệu
này, ta có thể ước lượng bằng tay biên độ đáp ứng của hệ ở 18 tần số khác.

Ví dụ ở trên cho thấy rằng hệ đã suy giảm đầu vào một ít (biên độ nhỏ hơn 1) ở tần số khoảng
1.571 rad/s. Điều này nằm trong dự tính vì tần số này lớn hơn một ít so với tần số gãy mà ta
đã dự đoán. Nhập vào các code sau sẽ cho phép ta kiểm tra đáp ứng của hệ đối với một tần số
thấp hơn, cụ thể, với T = 40s mà tương ứng với một tần số khoảng 0.157 rad/s.

Như mong đợi, vì chu kỳ của đầu vào sóng vuông là lớn hơn nhiều hằng số thời gian của mạch
RC, đáp ứng đầu ra có nhiều thời gian để đạt tới trạng thái ổn định trước khi đầu vào thay
đổi. Do đó, đáp ứng biên độ của mạch ở tần số này là khoảng 1 (0 dB). Khi chu kỳ bằng 4s,
mạch không có đủ thời gian để đạt tới trạng thái ổn định, do đó, đầu ra phần nào bị giảm đi.
Nếu ta giảm chu kỳ của đầu vào nhiều hơn (tăng tần số), mạch sẽ có ít thời gian hơn để đáp
ứng và đầu ra sẽ bị giảm nhiều hơn. Thực thi các lệnh sau sẽ cho thấy đáp ứng của mạch đối
104 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

với một sóng vuông đầu vào với chu kỳ T=0.4s, mà tương ứng với một tần số khoảng 15.71
rad/s.

Như ta mong đợi, đầu ra suy giảm nhiều hơn so với đầu vào. Một điều khác mà ta chú ý là
đầu ra trở nên ít ổn định hơn ở những tần số cao. Việc này do một số nguyên nhân. Vì biên
độ đầu ra nhỏ hơn nhiều, bất kỳ lỗi hoặc nhiễu nào đều trở nên lớn hơn (về %). Thứ hai, khi
tần số của tín hiệu tăng lên, thời gian lấy mẫu cần phải nhỏ hơn để có đủ số điểm trên chu
kỳ để xây dựng lại đáp ứng đầu ra. Nếu các tín hiệu là đủ nhanh, ta sẽ đi tới giới hạn vận tốc
của phần cứng và phần mềm thực nghiệm. Đối với hệ phần cứng ta đang sử dụng, ta không
thể đạt được thời gian lấy mẫu nhanh hơn 0.01s. Do đó, ở các tần số cao, đôi khi ta mất đi các
đỉnh của tín hiệu đầu ra (đỉnh và đáy có thể xảy ra giữa các mẫu).

Để xây dựng đồ thị biên độ Bode ta mong muốn, ta cần tính toán độ lợi cho mỗi tần số trong
tổng 19 tần số trong bảng của ta. Việc này có thể được thực hiện bằng tay như đã minh họa
cho T=4s.
6.6. PHẦN B: NHẬN DẠNG ĐÁP ỨNG TẦN SỐ CỦA MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC)105

Nếu ta tính toán biên độ bằng tay (ở dB) và lưu chúng trong vector M và lưu các tần số tương
ứng trong vector w , thì các lệnh sau sẽ tạo ra một đồ thị giống như hình trên.

Kiểm tra đồ thị Bode trên cho thấy sự phù hợp định tính giữa đáp ứng biên độ được dự đoán
bởi lý thuyết và số liệu thực nghiệm được ghi. Một vài sự khác biệt có thể do sự không phù
hợp giữa giá trị các thành phần thực tế và giả định (R và C ). Tuy nhiên, nguyên nhân chủ yếu
của sự khác nhau này là ta đã thực hiện thực nghiệm của ta bằng cách quét qua các tần số
của đầu vào sóng vuông thay vì sử dụng đầu vào dạng sin. Ta đã sử dụng đầu vào sóng vuông
để giúp ta hiểu rõ hơn tại sao đáp ứng của một hệ lại khác nhau với các đầu vào tần số biến
thiên. Hơn nữa, hầu hết các board Arduino không có khả năng tạo ra đầu ra tương tự.

Trong khi ta không xây dựng phần đáp ứng pha của đồ thị Bode cho mạch này, số liệu ta ghi
lại có cung cấp thông tin về pha. Xem xét rằng một chu kỳ tương ứng với 360°. Đối với một
đầu vào sóng vuông, ta có thể xem xét rằng sóng chuyển từ 5V xuống 0V tại vị trí 180° trong
chu kỳ của nó. Hơn nữa, ta có thể ước lượng sóng khi đang ở điểm giữa của trạng thái ON của
nó, mà sẽ là ở vị trí 90° trong chu kỳ của nó. Khi đầu vào sóng vuông chậm, ví dụ T=40s, đầu
ra đạt tới 5V khá nhanh khi so sánh với chu kỳ. Khi như vậy, “đỉnh” của sóng đầu ra trễ so với
“đỉnh” của sóng đầu vào chỉ một ít. Khi tần số của đầu vào tăng lên, ví dụ T=4s hoặc T=0.4s,
đầu ra đạt tới giá trị lớn nhất của nó ở điểm khi mà đầu vào chuyển từ 5 sang 0V. Do đó, đầu
ra đạt tới giá trị đỉnh của nó ở vị trí 180°, mà là 90° sau khi đầu vào đạt tới giá trị đỉnh của
nó (pha = -90°). Điều này phù hợp với đồ thị Bode pha lý thuyết mà được tạo ra lúc ban đầu.

Mở rộng
106 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC

Nếu ta muốn tạo ra một đáp ứng tần số cho mạch này sử dụng đầu vào dạng sin, có một số
tùy chọn. Sử dụng một bộ tạo hàm bên ngoài để tạo ra đầu vào cho mạch RC, hơn là tạo ra
đầu vào từ board Arduino. Một tùy chọn khác là sử dụng một board mà có thể tạo ra đầu ra
tương tự. Một ví dụ như vậy là Arduino Due. Hầu hết những mẫu khác (Uno, Mega2560, . . . )
chỉ có thể tao ra các đầu ra số. Trong trường hợp này, ta có thể xem xét đầu vào mạch là chu
kỳ làm việc (duty cycle) của một sóng vuông PWM. Do vậy, ta có thể quan sát đáp ứng tần
số của mạch bằng cách biến thiên chu kỳ làm việc theo dạng sin qua các tần số khác nhau.

6.7 ĐIỀU KHIỂN ĐIỆN ÁP CHO MỘT MẠCH ĐIỆN


TRỞ-TỤ ĐIỆN (RC)

Sơ đồ điều khiển vòng kín điển hình được cho bên dưới:

Yêu cầu: Sử dụng lần lượt bộ điều khiển P, PI, PID, điều khiển điện áp của tụ điện ở bất kỳ
giá trị nào giữa 0-5V?

So sánh giữa đáp ứng của mô hình thực tế và mô hình lý thuyết?


6.7. ĐIỀU KHIỂN ĐIỆN ÁP CHO MỘT MẠCH ĐIỆN TRỞ-TỤ ĐIỆN (RC) 107
108 CHƯƠNG 6. HOẠT ĐỘNG DỰA TRÊN PHẦN CỨNG: MẠCH RC
Chương 7

KHÔNG GIAN TRẠNG THÁI


TRONG MATLAB

Mô hình không gian trạng thái tổng quát của một hệ tuyến tính bất biến theo thời gian là:

ẋ = Ax + Bu
y = Cx

Lưu ý: Mặc dù hiện tại có nhiều phần mềm hỗ trợ việc phân tích các mô hình toán, sinh viên
vẫn phải hiểu được bản chất của vấn đề.

Ta sử dụng lệnh ss(A, B, C, D) để định nghĩa một hệ thống dưới dạng không gian trạng thái.

A=[1 2;3 2];


B=[1;0];
C=[1 -1];
D=0;
G=ss(A,B,C,D)

được kết quả là:

G =

A =
x1 x2
x1 1 2

109
110 CHƯƠNG 7. KHÔNG GIAN TRẠNG THÁI TRONG MATLAB

x2 3 2

B =
u1
x1 1
x2 0

C =
x1 x2
y1 1 -1

D =
u1
y1 0

Continuous-time state-space model.

Sau khi mối liên hệ giữa đầu vào và đầu ra của hệ thống được định nghĩa, ta có thể:

7.1 Biến đổi hàm truyền sang không gian trạng thái

ẋ = Ax + Bu
y = Cx

thành
n(s)
Y (s) = U (s)
d(s)
Ví dụ: Biểu diễn hàm truyền G(s) dưới dạng không gian trạng thái
s+2
G(s) =
s2 + 4s − 2

n=[1 2];
d=[1 4 -2];
[A,B,C,D]=tf2ss(n,d)
7.2. BIẾN ĐỔI TỪ PHƯƠNG TRÌNH TRẠNG THÁI THÀNH HÀM TRUYỀN 111

7.2 Biến đổi từ Phương trình trạng thái thành hàm


truyền

Chú ý: Việc này chỉ áp dụng cho hệ SISO (một đầu vào một đầu ra) vì ta cần cẩn trọng trong
áp dụng đối với các quá trình MIMO mà không đề cập ở đây.

Ta sử dụng hàm ss2tf (A, B, C, D, iu) với iu là đầu vào thứ i

A=[1 2;3 2];


B=[1;0];
C=[1 -1];
D=0;
[n,d]=ss2tf(A,B,C,D,1)

Kết quả

n =
0 1 -5

d =
1 -3 -4

Có nghĩa là
n(s) s+5
G(s) = = 2
d(s) s − 3s − 4

7.3 Biến đổi tương đương: Sự bất biến của hành vi và


giá trị riêng

ẋ = Ax + Bu
y = Cx

Đặt z = T ∗ x− > x = T −1 z
112 CHƯƠNG 7. KHÔNG GIAN TRẠNG THÁI TRONG MATLAB

Thay z vào phương trình trên ta được:

ż = T AT −1 z + T Bu
y = CT −1 z

hay

ż = Âz + B̂
y = Ĉz

với

 = T AT −1
B̂ = T B
Ĉ = CT −1

%Nhap ma tran A,B,C,D


A=[-1 0 0.2;-1 -3 0;0 0.1 -0.5];
B=[1;0;-2];
C=[1 -1 0];
D=0;

%Nhap ma tran T
T=[2 1 1;0 1 -1; -3 0 2];

%Tim ma tran nghich dao cua T


Ti=inv(T);

%Tim Ahat, Bhat, Chat cua he thong chuyen doi tuong duong
Ahat=T*A*Ti;
Bhat=T*B;
Chat=C*Ti;

% Dinh nghia he thong ban dau va he thong tuong duong vao MATLAB
G=ss(A,B,C,D);
Ghat=ss(Ahat,Bhat,Chat,D);

%Tim dap ung buoc va ve do thi cua hai he thong


[y,t]=step(G);
7.3. BIẾN ĐỔI TƯƠNG ĐƯƠNG: SỰ BẤT BIẾN CỦA HÀNH VI VÀ GIÁ TRỊ RIÊNG 113

[yhat]=step(Ghat,t);
plot(t,y,'r',t,yhat,'o');

7.3.1 Dạng chuẩn tắc đường chéo (Diagonal Canonical Form)

ẋ = Ax + Bu
y = Cx

Đặt z = W ∗ x− > x = W −1 z , với W là Vector riêng (eigenvector) của ma trận A.

Thay W vào phương trình trên ta được:

ż = W AW −1 z + W Bu
y = CW −1 z

hay

ż = Âz + B̂
y = Ĉz

với

 = W −1 AW = Λ
B̂ = W −1 B
Ĉ = CW

Với Λ là giá trị riêng (eigenvalue) của ma trận A.

Kiểm chứng lại

A=[-1 0 0.2;-1 -3 0;0 0.1 -0.5];


[W,lambda]=eig(A); %Luu Vector rieng vao bien W va gia tri rieng vao bien ...
lambda
Ahat=inv(W)*A*W
114 CHƯƠNG 7. KHÔNG GIAN TRẠNG THÁI TRONG MATLAB

7.3.2 Sử dụng MATLAB để tìm ma trận biến đổi mà cho dạng chuẩn
tắc

Sử dụng lệnh canon để tìm ma trận biến đổi T mà đưa hệ về dạng chuẩn tắc mong muốn.

a. Đưa hệ về dạng chuẩn tắc đường chéo (diagonal canonical matrix)

A=[0 1 2;-1 3 4;0 2 0];


B=[1;0;-2];
C=[1 -1 0];
D=0;
G=ss(A,B,C,D);
[Canform,T]=canon(G,'modal') %Tra ve dang chuan tac ng c h o ...
(diagonal canonical form - luu o bien Canform) va ma tran bien doi (T)

b. Đưa hệ về dạng chuẩn tắc quan sát được (observable canonical form)

[Canform,T]=canon(G,'companion') %Tra ve dang chuan tac quan s t ...


c (observable canonical form - luu o bien Canform) va ma tran bien ...
doi (T)

You might also like