Search…

Thuật Toán PID trong Điều Khiển Tự Động

19/09/20204 min read
Chi tiết về thuật toán PID, các ví dụ thực tế và hướng đưa thuật toán vào ứng dụng, giải quyết bài toán thực tế và mô phỏng bằng MATLAB.

PID là thuật toán được sử dụng phổ biến trong lĩnh vực điện, điện tử, dùng PID tự động điều chỉnh, điều khiển để động cơ tự động và giúp đạt được giá trị chuẩn mong muốn, có độ lỗi nhỏ nhất.

Xe tự cân bằng

Nguyên lý thuật toán

Một chiếc xe tự động sử dụng Arduino, cảm biến âm thanh cùng bộ điều khiển động cơ, bài toán đặt ra là xe có thể chạy theo 1 đường thẳng; thuật toán PID là lựa chọn phù hợp để giải quyết trường hợp này.

Muốn bánh xe quay được 200 vòng/giây, tương đương với giá trị truyền vào cho động cơ là pwm = 200, trong khi đó thực tế xe đang chạy vào mép lề của một bãi cát (tức là bánh trái chạy ở đường bình thường, bánh phải chạy trên bãi cát), ma sát lớn làm bánh xe chỉ quay được 100 vòng/giây, như vậy xe có thể chạy lệch phải. Tính được độ lỗi bánh xe phải lúc này là 100 vòng. Vậy để xe chạy thẳng, cần tăng tốc độ truyền vào cho động cơ bên phải ở thời điểm này để giúp bánh xe đạt được 200 vòng/giây bất kể có ma sát. Từ giá trị độ lỗi của số vòng quay, cần quy ra giá trị pwm để truyền vào cho động cơ.

Khi này pwm = 200 + 50 (giả sử: 100 vòng/giây ~ 50 pwm).

* Lưu ý: những con số trong ví dụ này là giả định.

Kết quả của thuật toán là độ lỗi của tốc độ động cơ tại một thời điểm, sử dụng thông tin từ giá trị này để điều chỉnh, đưa vào bài toán một cách hợp lý.

Giá trị trả về của thuật toán được tổng hợp dựa trên 3 thành phần là P I D. Có nghĩa, thuật toán dựa trên độ lỗi theo thời gian trong quá trình hoạt động của động cơ, bao gồm độ lỗi ở thời điểm hiện tại, độ lỗi dựa trên toàn bộ quá trình và đạo hàm độ lỗi ở thời điểm hiện tại.

Công thức

Giải thích

Kp Ki Kd lấy giá trị không âm và tương ứng với độ ảnh hưởng của 3 thành phần P I hay D vào giá trị trả về.

Phân tích về 3 thành phần:

  • P: độ lỗi ở thời điểm hiện tại, để có độ lỗi này cần một giá trị tên pivot là giá trị lý tưởng mong muốn động cơ đạt được, có thể suy ra độ lỗi từ pivot.
  • I: độ lỗi của toàn bộ quá trình, với giá trị này, giá trị điều chỉnh sẽ phụ thuộc vào toàn bộ quá trình hoạt động của động cơ, giá trị này sẽ lấy dựa vào trung bình độ lỗi ở mỗi thời điểm trước đó.
  • D: đạo hàm độ lỗi trong một khoảng thời gian trước đó, giá trị này có nghĩa giá trị điều chỉnh sẽ phần nào đó đoán được xu hướng của động cơ mà điều chỉnh cho hợp lý.

Vậy để thuật toán có thể hoạt động, cần các giá trị:

  • Giá trị lý tưởng (giá trị mốc), dựa vào giá trị này để tính độ lỗi.
  • Cần đo được giá trị thực tế ở mỗi thời điểm.
  • Kp Ki Kd.

Mã nguồn ví dụ

Sử dụng MATLAB để code và vẽ biểu đồ để dễ hình dung.

Vì không thể lấy giá trị thực tế nên cần random giá trị để sử dụng.

  • Random giá trị ngẫu nhiên từ 150 đến 200 và coi nó như là số vòng đo được trong 1 giây.
  • Sau đó tính độ lỗi dựa vào kết quả đo được, giá trị pivot (200), độ lỗi trong quá khứ.
  • Có kết quả độ lỗi, quy độ lỗi về giá trị pwm, từ đó tính được pwm cần truyền vào cho động cơ.
Kp = 0.6;
Ki = 0.2;
Kd = 0.2;
Pivot = 200;  // pivot value (round/s)
sum_e = 0;
N = 100;      // amount of random numbers

X = zeros(1, N);  // create array has size N to contain random values. (round/s)
E = zeros(1, N);  // create array has size N to contain error values. (round/s)
PWM = ones(1, N) * 200; // create array has N element, the value of each element is 200. (pwm)
idx = zeros(1, N);
xPrev = 200;  // to save the previous value. (round/s)

for i = 1:1:N
    X(i) = rand(1) * 100 + 150; // random from 150 -> 250
    e = Pivot - X(i);    // calculate the error value.
    sum_e = sum_e + e;

    P = Kp * e;
    I = Ki * (sum_e / i);
    D = Kd * (X(i) - xPrev);

    E(i) = (P + I + D)/ (Kp + Ki + Kd);  // OUTPUT OF THE PID ALGORITHM.
    PWM(i) = PWM(i) - E(i);    // calculate pwm to control. You need to convert E(i) (round/s) to pwm. Ex: 100round/s ~ 50pwm. 

    xPrev = X(i);
   idx(i) = i;
end

plot(idx, X, idx, PWM, idx, E);  // plot the chart.
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024