Cách áp dụng thuật toán pid trong việc điều khiển năm 2024

PID là 1 phương pháp điều khiển kinh điển nhưng rất hiệu quả. Và nó không hề khó chút nào khi điều khiển với bộ điều khiển số.

Ý nghĩa của các thành phần như sau:

P: tỉ lệ

I: tích phân

D: đạo hàm

Tạm thời các bạn chưa cần hiểu 3 khái niệm trên. Mình sẽ đi vào ví dụ, chỉ có ví dụ mới đem lại hạnh phúc cho mình và các bạn. 😀

Chú ý: phương pháp điều khiển PID là phương pháp điều khiển với SAI SỐ

Giả sử ta băm xung để điều khiển động cơ một chiều.

Giới thiệu qua băm xung 1 chút:

Ta băm xung với chu kỳ T(đơn vị thời gian) và độ rộng xung X (đơn vị thời gian).

Ta Cấp điện áp nguồn vào động cơ là V- Nguồn.

Vậy điện áp cấp vào động cơ sẽ là (x*V-Nguồn)/T (volt)

Ví dụ: V- Nguồn là 25 V. Băm xung với chu kỳ T = 100 s, x = 50s

Vậy điện áp cấp vào động cơ là 50*25/100 = 12.5 (volt)

Như trên tôi đã viết PID là phương pháp điều khiển với SAI SỐ. Vậy ta sẽ cùng tìm hiểu về sai số trong bài toán thực tế như sau:

Tôi muốn động cơ của tôi chạy 100 vòng/phút. Nhưng nó lại đang chạy 50 vòng / phút. Vậy sai số (ký hiệu là e ) e= 100 – 50 = 50 vòng/phút. Vậy sai số ở đây là 50 vòng /phút.

Dựa trên sai số này ta sẽ biết cách điều khiển động cơ. ở đây sai số = 50 tức là động cơ còn chạy chậm. Vậy thì ta sẽ tăng tốc động cơ lên bằng cách tăng độ rộng xung lên. Và Nếu e <0 tức động cơ đang chạy quá nhanh thì ta giảm độ rộng xung xuống.

Vậy thì ứng với mỗi e ta thay đổi độ rộng xung bao nhiêu ?

Ta có độ rộng xung gần như tỉ lệ thuận với sai số e. Vậy ta có thể viết ra công thức X = Kp*e.

Với : X là độ rộng xung, e là sai số. Kp là hệ số

Hệ số Kp ta sẽ phải tự chọn theo quá trình chạy động cơ thực tế. Việc chọn Kp là việc tốn thời gian nhất.

Công thức X = Kp*e là công thức thể hiện thành phần “tỉ lệ” P trong phương pháp PID. Vì X tỉ lệ với e theo Kp.

Vậy ta đã xong việc giải thíc thành phần tỉ lệ P

Công việc tiếp theo là tìm hiểu về thành phần tích phân I trong phương pháp PID.

Về lý thuyết ta thấy gần như chỉ cần điều khiển độ rộng xung X = Kp*e là chuẩn không cần chỉnh. Nhưng thực tế không như mơ. Có thể do sai số trả về quá nhỏ làm giá trị của X cũng quá nhỏ không thể thay đổi được tộc độ động cơ. nên động cơ cứ chạy ở một tốc độ gần sát với tốc độ thực tế.

Ví dụ: tốc độ mong muốn là 100 vòng / phút.Nhưng tốc độ thực tế lại là 99 vòng / phút.

Giá trị X = Kp*e lại quá nhỏ không thể tăng tốc độ động cơ lên được nữa.

Vậy ta làm thế nào ?

Lúc gặp trường hợp thế này thì ta phải tích lũy dần sai số lên theo thời gian. Cứ sau 1 thời gian ta lại cộng sai số lên cho đến khi nào sai số đủ lớn để có thể thay đổi được tốc độ động cơ. Bới vì sai số được cộng dồn theo thời gian chính là phép tích phân. Nên ta gọi thành phân này là thành phần tích phân I

Công thức tính độ rộng xung được thay đổi như sau:

X = K*e + K1*tích_phân_của_e_theo_thời_gian_t

Ký hiệu tích phân của e theo thời gian là TP(e,t).

Lúc này ta có X = Kp*e + Ki*TP(e,t).

Với Ki là hệ số. Hệ số Ki này ta phải chọn theo thực tế, mỗi động cơ mỗi bài toán việc chọn lựa sẽ khác nhau, việc chọn lựa này rất tốn thời gian.

Ta đã xong 2 phần P và I. còn lại phần cuối là D

Đến đây bạn đã thấy công thức X = Kp*e + Ki*TP(e,t) chỉnh không cần chuẩn chưa ?. 😀

Chưa ăn thua đâu. Ta còn chưa tính đến quán tính của trục động cơ và các cơ cấu kèm theo đó, Giả sử động cơ đang tăng tốc và đến điểm sai số e = 0. Lúc này X = 0. Ta ngừng băm xung. Có vẻ tốc độ động cơ sẽ giữ nguyên hoặc giảm đi. Nhưng không, do quán tính, tốc độ động cơ vẫn tăng thêm. Bây giờ thì e < 0. Ta chọn được X nhỏ đi, làm tốc độ động cơ quay chậm lại, đến vị trí e = 0. X = 0. Ta dừng việc băm xung vào động cơ. Động cơ vẫn không giữ ở tốc độ chuẩn mà theo quán tính sẽ giảm nữa. Việc tốc độ động cơ cứ vượt quá điểm chuẩn 1 chút so với thực tế được gọi là đáp ứng có dao động.

Nguyên lý để ngăn chặn dao động này diễn ra là ta sẽ giảm dần sự thay đổi tốc độ động cơ (tức là giảm gia tốc của động cơ ) khi mà tốc độ động cơ ngày càng tiếm đến điểm yêu cầu. Cũng đồng nghĩa với việc giảm sự thay đổi sai số khi mà tốc độ động cơ càng tiến gần đến tốc độ mình yêu câu.

Sự thay đổi sai số được tính theo công thức: Delta_e = e- et.

Với e: sai số ở thời điểm hiện tại

et: sai số ở thời điểm trước

Vậy thì nếu : Delta_e > 0 tức (e – et > 0) có nghĩa là thời điểm hiện tại sai số lớn hơn sai số thời điểm trước, thể hiện rằng tốc độ động cơ đang rời xa khỏi tốc độ yêu cầu. Dấu của Delta_e thể hiện tốc độ động cơ đang tiến về điểm yêu cầu hay rời xa khỏi điểm yêu cầu.

Như trong trường hợp này:Delta_e < 0 tức là tốc độ động cơ đang rời khỏi điểm yêu cầu (có thể giảm hoặc tăng). Delta_e > 0. Tức tốc độ động cơ đang tiến về điểm yêu cầu.

Thành phần Delta_e chính là thành phần đạo hàm trong PID.

Công thức tính độ rộng xung sẽ tính như sau: X = Kp*e + Ki*TP(e,t) + Kd*(e – et).

Thành phần D gần như luôn luôn khác dấu với thành phần P và I. nó có chức năng giảm thành phần P và I. nhờ đó mà giảm sự vượt quá điểm chuẩn dẫn đến giao động.

Trong 1 bài toán thực tế: bạn đo tốc độ động cơ bằng encoder, băm xung ra động cơ theo công thức trên, nhưng do X là độ rộng xung nên không thể là số âm. Có nhiêu cách để xử lý trường hợp này

Cách 1: thay đổi lại công thức như sau:

X = X0 + Kp*e + Ki*TP(e,t) + Kd*(e- et).

X0 là 1 hằng số để khi Kết quả Kp*e+Ki*TP(e,t)+Kd*(e-et) âm thì X cũng chỉ đạt đến giá trị nhỏ nhất là 0.

Cách 2: xử lý bằng thuật toán như sau:

X = Kp*e+Ki*TP(e,t) + Kd*(e-et)

If (X < 0 ) X = 0;

Cách 3: cách của chính bạn 😀

Lưu ý: 3 hệ số Kp,Ki,Kd là 3 hệ số do bạn tự chọn, ban đầu bạn cứ chọn bừa. Sau đó chạy thử rồi chọn đi chọn lại cho đến khi kết quả ưng ý.