GIỚITHIỆU THUẬT TOÁNĐIỀUKHIỂN PID
1. Giớithiệu bộ điềukhiển PID:
Bộ điềukhiểnPID là một bộ điềukhiển vòng kín được sử dụng rộng rãi trong
công nghiệp. Sử dụng bộ điềukhiểnPID để điều chỉnh sai lệch giữa giá trị đo được của
hệ thống (process variable) với giá trị đặt (setpoint) bằng cách tính toán và điều chỉnh giá
trị điềukhiển ở ngõ ra.
Sơ đồ một hệ thống điềukhiển dùng PID:
Hình 1 – Sơ đồ hệ thống điềukhiển dùng PID
Một bộ điềukhiểnPID gồm 3 thành phần: P (proportional) – tạo tín hiệu điều
khiển tỉ lệ với sai lệch (error – e), I (integral) – tạo tín hiệu điềukhiển tỉ lệ với tích phân
theo thời gian của sai lệch, và D (derivative) – tạo tín hiệu điềukhiển tỉ lệ với vi phân
theo thời gian của sai lệch.
1.1. Khâu P:
Khâu P tạo ra tín hiệu điềukhiển tỉ lệ với giá trị của sai lệch. Việc này được thực
hiện bằng cách nhân sai lệch e với hằng số K
P
– gọi là hằng số tỉ lệ.
Khâu P được tính dựa trên công thức:
Với: P
out
: giá trị ngõ ra
K
P
: hằng số tỉ lệ
e: sai lệch: e = SP – PV
Sơ đồ khối của khâu P:
Hàm truyền:
p p
G (s) = K
Nếu chỉ có khâu P thì trong mọi trường hợp sai số tĩnh luôn xuất hiện, trừ khi giá
trị đầu vào của hệ thống bằng 0 hoặc đã bằng với giá trị mong muốn. Trong hình sau thể
hiện sai số tĩnh xuất hiện khi thay đổi giá trị đặt.
Hình 2 – Đáp ứng của khâu P
Nếu giá trị khâu P quá lớn sẽ làm cho hệ thống mất ổn định.
1.2. Khâu I:
Khâu I cộng thêm tổng các sai số trước đó vào giá trị điều khiển. Việc tính tổng
các sai số được thực hiện liên tục cho đến khi giá trị đạt được bằng với giá trị đặt, và kết
quả là khi hệ cân bằng thì sai số bằng 0.
Khâu I được tính theo công thức:
Với: I
OUT
: giá trị ngõ ra khâu I
K
i
: hệ số tích phân
e: sai số: e = SP – PV
Sơ đồ khối khâu I:
Hàm truyền:
I
I.
K
U(s) 1
G(s) = = =
E(s) s T s
Khâu I thường đi kèm với khâu P, hợp thành bộ điềukhiển PI. Nếu chỉ sử dụng khâu
I thì đáp ứng của hệ thống sẽ chậm và thường bị dao động.
Hình sau chỉ ra sự khác biệt giữa khâu I và PI:
Hình 3 – Đáp ứng của khâu I và PI
Ta có thể nhận thấy là khâu I làm cho đáp ứng của hệ thống bị chậm đi rất nhiều, còn
khâu PI giúp triệt tiêu sai số xác lập.
1.3. Khâu D:
Khâu D cộng thêm tốc độ thay đổi sai số vào giá trị điềukhiển ở ngõ ra. Nếu sai
số thay đổi nhanh thì sẽ tạo ra thành phần cộng thêm vào giá trị điều khiển. Điều này cải
thiện đáp ứng của hệ thống, giúp trạng thái của hệ thống thay đổi nhanh chóng và mau
chóng đạt được giá trị mong muốn.
Khâu D được tính theo công thức:
Với: D
OUT:
ngõ ra khâu D
K
D
: hệ số vi phân
e: sai số: e = SP – PV
Sơ đồ khối khâu D:
Hàm truyền:
( )
( )
( )
d
U s
G s K s
E s
= =
Khâu D thường đi kèm với khâu P thành bộ PD, hoặc với PI để thành bộ PID.
Hình 4 – Đáp ứng của khâu D và PD
Theo hình trên, bộ PD tạo đáp ứng có thời gian tăng trưởng nhỏ hơn so với bộ P. Nếu
giá trị D quá lớn sẽ làm cho hệ thống không ổn định.
1.4. Tổng hợp ba khâu – Bộ điềukhiển PID:
Bộ điềukhiểnPID là cấu trúc ghép song song giữa 3 khâu P, I và D.
Phương trình vi phân của bộ PID lý tưởng:
∫
P I D
de(t)
u(t) = K e( t)+ K e(t)dt + K
dt
Sơ đồ khối:
Đáp ứng của bộ PID:
Hình 5 – Đáp ứng của khâu P, PI và PID
1.5. Rời rạc hóa bộ điềukhiển PID:
Bộ điềukhiển số không thể lấy mẫu liên tục theo thời gian, nó cần được rời rạc ở
một vài mức. Khi cho hệ số lấy mẫu ngắn bên trong thời gian vi phân có thể đạt được xấp
xỉ một sai phân có giới hạn và tích phân qua việc lấy tổng. Chúng ta sẽ quan tâm mỗi
dạng ở một thời điểm, và sai số được tính ở mỗi khoảng lấy mẫu:
e(n) = X(n) – Y(n)
Bộ PID rời rạc đọc sai số, tính toán và xuất ngõ ra điềukhiển theo một khoảng
thời gian xác định (không liên tục) – thời gian lấy mẫu T. Thời gian lấy mẫu cần nhỏ hơn
đơn vị thời gian của hệ thống.
Không giống các thuậttoánđiềukhiển đơn giản khác, bộ điềukhiểnPID có khả
năng xuất tín hiệu ngõ ra dựa trên giá trị trước đó của sai số cũng như tốc độ thay đổi sai
số. Điều này giúp cho quá trình điềukhiển chính xác và ổn định hơn.
Hình 6 – Sơ đồ khối PID
Hàm truyền của hệ thống:
Hàm chuyển đổi:
Tính gần đúng theo công thức:
Với n là bước rời rạc tại t.
Kết quả thu được:
Với:
2. Thiết kế bộ điềukhiển PID:
Luật điềukhiển thường được chọn trên cơ sở đã xác định được mô hình toán học của
đối tượng phải phù hợp với đối tượng cũng như thỏa mãn yêu cầu của bài toán thiết kế.
Trong trường hợp không thể xác định được mô hình toán học của đối tượng, có thể
tìm luật điềukhiển cũng như các tham số của bộ điềukhiển thông qua thực nghiệm.
Ziegler và Nichols đã đưa ra phương pháp xác định thông số tối ưu của bộ PID là dựa
trên đồ thị hàm quá độ của đối tượng hoặc dựa trên các giá trị tới hạn thu được qua thực
nghiệm.
2.1. Sử dụng hàm quá độ của đối tượng:
Phương pháp này còn có tên là phương pháp thứ nhất của Ziegler – Nichols. Nó
có nhiệm vụ xác định các thông số K
p
, T
N
, T
V
cho các bộ điềukhiển P, PI và PID trên cơ
sở đối tượng có thể mô tả xấp xỉ bởi hàm truyền đạt dạng:
t
-T s
Ke
G(s) =
Ts+1
Sao cho hệ thống nhanh chóng về trạng thái xác lập và độ vọt lố
max
δ
không vượt quá
một giới hạn cho phép, khoảng 40% so với
∞→
=∞
t
thh )(lim)(
:
%40
)(
max
max
≤
∞
∆
=
h
h
δ
Ba tham số T
t
(thời gian trễ), K (hệ số khuếch đại) và T (hằng số thời gian quán tính)
của mô hình xấp xỉ có thể xác định được gần đúng từ đồ thị hàm quá độ h(t) của đối
tượng. Nếu đối tượng có dạng như hình 7a mô tả thì từ đồ thị hàm h(t) đó ta đọc ra được:
- T
t
là khoảng thời gian tín hiệu ra h(t) chưa có phản ứng ngay với tín hiệu kích
thích 1(t) tại đầu vào.
- K là giá trị giới hạn
∞→
=∞
t
thh )(lim)(
- Gọi A là điểm kết thúc khoảng thời gian trễ , tức là điểm trên trục hoành có hoành
độ bằng T
t
. Khi đó T là khoảng cần thiết sau T
t
để tiếp tuyến của h(t) tại A đạt
được giá trị K.
a) b)
Hình 7 – Xác định tham số cho mô hình xấp xỉ bậc nhất có trễ
Trường hợp hàm quá độ h(t) không có dạng lý tưởng như ở hình 7a, nhưng có dạng
gần giống như hình chữ S của khâu quán tính bậc 2 hoặc bậc n như mô tả ở hình 7b thì ba
tham số K, T
t
, T được xác định xấp xỉ như sau :
- K là giá trị giới hạn
)(∞h
.
- Kẻ đường tiếp tuyến của h(t) tại điểm uốn của nó. Khi đó T
t
sẽ là hoành độ giao
điểm của tiếp tuyến với trục hoành và T là khoảng thời gian cần thiết để đường
tiếp tuyến đi được từ giá trị 0 tới được giá trị K.
Như vậy ta thấy điều kiện để áp dụng được phương pháp xấp xỉ mô hình bậc nhất có
trễ của đối tượng là đối tượng phải ổn định, không có dao động và ít nhất hàm quá độ của
nó phải có dạng chữ S. Sau khi đã có các tham số cho mô hình xấp xỉ của đối tượng, ta
chọn các thông số của bộ điềukhiển theo bảng sau :
Bộ điềukhiển K
P
T
N
T
V
P
t
TK
T
.
_ _
PI
t
TK
T
.
9,0
t
T
3
10
_
PID
t
TK
T
.
2,1
t
T.2
t
T.5,0
Bảng 1 – Tính toán thông số bộ điều khiển
Từ đó suy ra :
Hệ số tích phân :
P
I
N
K
K =
T
Hệ số vi phân :
D P V
K = K .T
2.2. Sử dụng các giá trị tới hạn thu được từ thực nghiệm:
Trong trường hợp không thể xây dựng phương pháp mô hình cho đối tượng thì
phương pháp thiết kế thích hợp là phương pháp thực nghiệm. Thực nghiệm chỉ có thể
tiến hành nếu hệ thống đảm bảo điều kiện: khi đưa trạng thái làm việc của hệ đến biên
giới ổn định thì mọi giá trị của tín hiệu trong hệ thống điều phải nằm trong giới hạn cho
phép.
Phương pháp này còn có tên là phương pháp thứ hai của Ziegler – Nichols. Điều
đặc biệt là phương pháp này không sử dụng mô hình toán học của đối tượng điều khiển,
ngay cả mô hình xấp xỉ gần đúng.
Các bước tiến hành như sau :
- Trước tiên, sử dụng bộ P lắp vào hệ kín (hoặc dùng bộ PID và chỉnh các thành
phần K
I
và K
D
về giá trị 0). Khởi động quá trình với hệ số khuếch đại K
P
thấp, sau
đó tăng dần K
P
tới giá trị tới hạn K
gh
để hệ kín ở chế độ giới hạn ổn định, tức là tín
hiệu ra h(t) có dạng dao động điều hòa. Xác định chu kỳ tới hạn T
gh
của dao động.
Hình 8 – Mô hình điềukhiển với K
gh
Hình 9 – Xác định hệ số khuếch đại tới hạn
- Xác định thông số của bộ điềukhiển theo bảng sau :
Bộ điềukhiển K
P
T
N
T
V
P 0,5 K
gh
_ _
PI 0,45 K
gh
0,83 T
gh
_
PID 0,6 K
gh
0,5 T
gh
0,125 T
gh
Bảng 2: Thông số bộ điềukhiển theo thực nghiệm
Lưu đồ chương trình PID:
PID Controller
Error = SP - PV
P_term = Kp * Error
I_term = Ki * SumE
D_term = Kd * (Error – Pre_error)
PID = P_term + I_term + D_term
PID_out = 0 <= PID <= 255
Update PWM
* CONTROLLER FUNCTION: pid_controller() // pid_out = U(n) = Kp(E(n) + (Ts/Ti)SumE +
(Td/Ts)[E(n) - E(n-1)])
* */
void pid_controller(){
prop_term =0 ;
integ_term = 0;
deriv_term = 0;
pid_out = 0;
//******************
// calculate error error = SP - PV;
//*****************
//error = set_vel - cur_vel;
error = set_counter - cur_counter;
//********************************
// Propotional term calc of PID
//*******************************
prop_term = kp*(float)error;
//********************************
// Integeral term calc of PID
//*******************************
if (ki != 0)
{
sumE += error;
integ_term = ki*(float)sumE;
}
//********************************
// Derivative term calc of PID
//*******************************
if (kd != 0)
{
deriv_term = kd*(float)(error - prev_error);
prev_error = error;
}
// pid_out = U(n) = Kp(E(n) + (Ts/Ti)SumE + (Td/Ts)[E(n) - E(n-1)])
pid_out = (prop_term + integ_term + deriv_term)/2.4;
pid_update = (int)pid_out;
if(pid_update >= 255) pid_update = 255;
if(pid_update <= 0) pid_update = 0;
OCR0 = pid_update;
}