Robotics
Thuật toán điều khiển PID

Thuật toán điều khiển PID

1. Bài toán điều khiển: vì sao cần PID?

Trong nhiều hệ thống kỹ thuật, ta không chỉ muốn thiết bị "hoạt động", mà muốn nó đạt đúng một giá trị mong muốn và giữ ổn định quanh giá trị đó. Ví dụ: robot cần chạy thẳng với tốc độ 100 vòng/phút ở mỗi bánh xe, máy sưởi cần giữ nhiệt độ ở 37°C, drone cần giữ độ cao 2 m, hoặc cánh tay robot cần dừng đúng tại một góc mong muốn.

PID là một thuật toán điều khiển phản hồi rất phổ biến vì nó đơn giản, dễ triển khai và hoạt động tốt trong nhiều hệ thống thực tế. Ý tưởng chính của PID là liên tục đo trạng thái hiện tại của hệ thống, so sánh với giá trị mong muốn, sau đó điều chỉnh tín hiệu điều khiển để giảm sai số.

Trong bài này, ta dùng một ví dụ xuyên suốt:

Một robot hai bánh cần giữ tốc độ bánh xe trái ở 100 vòng/phút. Bánh xe được gắn encoder để đo tốc độ thực tế. Bộ điều khiển sẽ thay đổi PWM cấp cho động cơ để tốc độ thực tế tiến gần và giữ ổn định tại 100 vòng/phút.

Các đại lượng cơ bản:

  • Giá trị mong muốn, hay setpoint:
r(t)=100 rpmr(t) = 100 \text{ rpm}
  • Giá trị đo được từ encoder:
y(t)y(t)
  • Sai số điều khiển:
e(t)=r(t)y(t)e(t) = r(t) - y(t)
  • Tín hiệu điều khiển đưa vào động cơ, ví dụ PWM:
u(t)u(t)

Nếu bánh xe đang quay 80 rpm trong khi mục tiêu là 100 rpm, sai số là:

e(t)=10080=20 rpme(t) = 100 - 80 = 20 \text{ rpm}

Bộ điều khiển cần tăng PWM để động cơ quay nhanh hơn. Nếu bánh xe đang quay 110 rpm, sai số là:

e(t)=100110=10 rpme(t) = 100 - 110 = -10 \text{ rpm}

Bộ điều khiển cần giảm PWM để tốc độ hạ xuống.


2. Điều khiển phản hồi: ý tưởng nền tảng của PID

PID thuộc nhóm điều khiển phản hồi. Đây là một nguyên lý rất quan trọng trong điều khiển tự động: thay vì chỉ ra lệnh một lần rồi để hệ thống tự chạy, bộ điều khiển liên tục quan sát kết quả thực tế, so sánh với mục tiêu, rồi điều chỉnh lại lệnh điều khiển.

Có thể hình dung điều khiển phản hồi giống như cách con người lái xe. Khi muốn xe chạy ở một tốc độ nhất định, ta không chỉ đạp ga cố định mãi mãi. Ta nhìn đồng hồ tốc độ, nếu xe chạy chậm hơn mong muốn thì nhấn ga thêm, nếu xe chạy nhanh quá thì nhả ga hoặc phanh nhẹ. Quá trình quan sát, so sánh và điều chỉnh này diễn ra liên tục.

Trong một hệ điều khiển phản hồi cơ bản, ta thường có bốn thành phần chính:

  1. Giá trị mong muốn: giá trị mà ta muốn hệ thống đạt được.
  2. Cảm biến đo phản hồi: dùng để biết hệ thống hiện đang ở trạng thái nào.
  3. Bộ điều khiển: tính toán cần điều chỉnh mạnh hay nhẹ.
  4. Cơ cấu chấp hành: nhận tín hiệu điều khiển và tác động lên hệ thống.

Với ví dụ trong bài, các thành phần này tương ứng như sau:

Thành phần trong điều khiển phản hồiVí dụ ở robot hai bánh
Giá trị mong muốnTốc độ bánh xe cần đạt: 100 rpm
Cảm biến phản hồiEncoder đo tốc độ quay thực tế
Bộ điều khiểnThuật toán PID tính lượng PWM cần thay đổi
Cơ cấu chấp hànhDriver động cơ và động cơ DC

Điểm cốt lõi của điều khiển phản hồi là sai số:

e(t)=r(t)y(t)e(t) = r(t) - y(t)

Trong đó r(t)r(t) là giá trị mong muốn, còn y(t)y(t) là giá trị đo được. Nếu sai số bằng 0, hệ thống đang đúng mục tiêu. Nếu sai số khác 0, bộ điều khiển phải tạo ra một hành động để kéo hệ thống về gần mục tiêu hơn.

Ví dụ, robot cần bánh xe quay ở 100 rpm:

  • Nếu encoder đo được 80 rpm, sai số là (10080=20)(100 - 80 = 20). Bánh xe đang quay chậm, bộ điều khiển cần tăng PWM.
  • Nếu encoder đo được 105 rpm, sai số là (100105=5)(100 - 105 = -5). Bánh xe đang quay nhanh hơn mục tiêu, bộ điều khiển cần giảm PWM.
  • Nếu encoder đo được đúng 100 rpm, sai số là 0. Bộ điều khiển không cần thay đổi mạnh.

Như vậy, điều khiển phản hồi giúp hệ thống có khả năng tự sửa sai. Đây là điểm khác biệt lớn so với điều khiển hở, nơi ta chỉ gửi một tín hiệu cố định mà không quan tâm đầu ra thực tế có đúng hay không.

Ví dụ, nếu ta điều khiển hở bằng cách luôn đặt PWM = 120 cho động cơ, bánh xe có thể quay 100 rpm trên mặt sàn nhẵn, nhưng chỉ còn 85 rpm khi robot đi trên mặt sàn nhám hoặc mang thêm tải. Vì không có phản hồi, hệ thống không biết mình đang chậm hơn mục tiêu.

Ngược lại, với điều khiển phản hồi, encoder phát hiện tốc độ giảm xuống 85 rpm. Sai số lúc này là 15 rpm. Bộ điều khiển sẽ tự tăng PWM để bù lại ma sát hoặc tải thay đổi. Nhờ vậy, robot có khả năng giữ tốc độ ổn định hơn trong nhiều điều kiện khác nhau.

PID chính là một cách cụ thể để trả lời câu hỏi:

Khi đã biết sai số, ta nên điều chỉnh tín hiệu điều khiển như thế nào?

Câu trả lời của PID không chỉ dựa trên sai số hiện tại, mà còn dựa trên lịch sử sai số và xu hướng thay đổi của sai số. Ba góc nhìn này tương ứng với ba thành phần P, I và D.


3. Công thức tổng quát của PID

Bộ điều khiển PID gồm ba thành phần:

  • P — Proportional: phản ứng theo sai số hiện tại.
  • I — Integral: phản ứng theo tổng sai số trong quá khứ.
  • D — Derivative: phản ứng theo tốc độ thay đổi của sai số.

Công thức liên tục thường được viết là:

u(t)=Kpe(t)+Ki0te(τ)dτ+Kdde(t)dtu(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt}

Trong đó:

  • u(t)u(t): tín hiệu điều khiển, ví dụ PWM.
  • e(t)e(t): sai số tại thời điểm hiện tại.
  • KpK_p: hệ số tỉ lệ.
  • KiK_i: hệ số tích phân.
  • KdK_d: hệ số vi phân.

Với robot, PID sẽ tính PWM theo ba nguồn thông tin:

  1. Bánh xe đang lệch mục tiêu bao nhiêu?
  2. Bánh xe đã bị lệch trong thời gian dài chưa?
  3. Sai số đang tăng nhanh hay giảm nhanh?

Ba câu hỏi này tương ứng với P, I và D.


4. Thành phần P: phản ứng theo sai số hiện tại

Thành phần P, hay Proportional, là phần đơn giản và trực quan nhất của PID. Nó tạo tín hiệu điều khiển tỉ lệ thuận với sai số hiện tại:

uP(t)=Kpe(t)u_P(t) = K_p e(t)

Ý nghĩa của thành phần P là: sai số càng lớn thì tác động điều khiển càng mạnh; sai số càng nhỏ thì tác động điều khiển càng nhẹ.

Nếu hệ thống còn cách xa mục tiêu, bộ điều khiển cần phản ứng mạnh để kéo hệ thống về nhanh hơn. Nếu hệ thống đã gần mục tiêu, bộ điều khiển chỉ nên điều chỉnh nhẹ để tránh làm hệ thống dao động. Vì vậy, P có thể được xem như phản xạ tức thời của bộ điều khiển đối với sai số.

P giống như khi ta điều chỉnh vòi nước để đạt một mức nước mong muốn. Nếu mực nước còn thấp rất nhiều, ta mở vòi lớn. Nếu mực nước chỉ thấp hơn một chút, ta mở vòi nhỏ hơn. Khi mực nước gần đạt mức mong muốn, ta không nên tiếp tục mở quá mạnh, vì nước có thể vượt quá mức cần thiết.

Trong điều khiển tốc độ bánh xe robot, P đóng vai trò tạo phản ứng nhanh ban đầu. Khi bánh xe quay chậm hơn tốc độ mong muốn, P tăng PWM. Khi bánh xe quay nhanh hơn tốc độ mong muốn, P giảm PWM.

Ví dụ với bánh xe robot

Giả sử tốc độ mong muốn là 100 rpm, tốc độ đo được là 80 rpm:

e=10080=20e = 100 - 80 = 20

Nếu chọn:

Kp=2K_p = 2

thì thành phần P tạo ra:

uP=2×20=40u_P = 2 \times 20 = 40

Có thể hiểu là bộ điều khiển cần tăng tác động lên động cơ thêm một lượng tương ứng với 40 đơn vị điều khiển.

Nếu sau một thời gian, tốc độ bánh xe tăng lên 95 rpm, sai số còn:

e=10095=5e = 100 - 95 = 5

khi đó:

uP=2×5=10u_P = 2 \times 5 = 10

Tác động điều khiển nhỏ hơn vì bánh xe đã gần đạt tốc độ mong muốn.

Nếu tốc độ bánh xe vượt lên 110 rpm:

e=100110=10e = 100 - 110 = -10

thì:

uP=2×(10)=20u_P = 2 \times (-10) = -20

Giá trị âm cho thấy bộ điều khiển cần giảm PWM để kéo tốc độ xuống.

Hạn chế của điều khiển P thuần

Điều khiển P giúp hệ thống phản ứng nhanh, nhưng nó thường không đủ để loại bỏ hoàn toàn sai số. Nguyên nhân là nhiều hệ thống thực tế có ma sát, tải, độ trễ hoặc vùng chết của động cơ.

Ví dụ, bánh xe robot cần đạt 100 rpm, nhưng do ma sát của mặt sàn, điều khiển P có thể chỉ giúp bánh xe ổn định ở 95 rpm. Khi đó sai số còn lại là:

e=10095=5e = 100 - 95 = 5

Thành phần P vẫn tạo thêm tác động điều khiển, nhưng tác động này có thể vừa đúng bằng phần lực bị mất do ma sát. Hệ thống đạt một trạng thái cân bằng mới ở 95 rpm thay vì 100 rpm.

Sai số còn tồn tại sau khi hệ thống đã ổn định được gọi là sai số xác lập. Để xử lý loại sai số kéo dài này, ta cần thành phần I.


5. Thành phần I: tích lũy sai số theo thời gian

Thành phần I, hay Integral, được dùng để xử lý những sai số nhỏ nhưng tồn tại lâu. Nếu P chỉ nhìn vào sai số tại thời điểm hiện tại, thì I nhìn vào tổng sai số đã tích lũy theo thời gian:

uI(t)=Ki0te(τ)dτu_I(t) = K_i \int_0^t e(\tau)d\tau

Ý nghĩa của thành phần I là: nếu hệ thống cứ lệch mục tiêu trong một khoảng thời gian dài, bộ điều khiển phải tăng dần tác động để xóa sai số đó.

Đây là điểm rất quan trọng. Trong thực tế, có nhiều trường hợp sai số hiện tại không quá lớn, nhưng nó tồn tại mãi. Nếu chỉ dùng P, bộ điều khiển có thể chấp nhận một sai số nhỏ còn lại. Nhưng với I, sai số nhỏ đó sẽ được cộng dồn theo thời gian, khiến bộ điều khiển ngày càng “khó chịu” với việc hệ thống chưa đạt đúng mục tiêu.

Có thể hình dung I giống như sự kiên nhẫn tích lũy của bộ điều khiển. Nếu bánh xe chậm hơn mục tiêu một chút trong thời gian ngắn, I chỉ tác động nhẹ. Nhưng nếu bánh xe cứ chậm hơn mục tiêu trong nhiều chu kỳ liên tiếp, I sẽ tăng dần để ép hệ thống tiến sát mục tiêu hơn.

Vì vậy, I đặc biệt hữu ích khi hệ thống có:

  • Ma sát.
  • Tải thay đổi.
  • Độ dốc.
  • Vùng chết của động cơ.
  • Sai số ổn định không thể loại bỏ bằng P.

Ví dụ với bánh xe robot

Giả sử robot cần giữ bánh xe ở 100 rpm. Khi chỉ dùng P, bánh xe ổn định ở 95 rpm do ma sát mặt sàn. Sai số còn lại là:

e=10095=5e = 100 - 95 = 5

Sai số 5 rpm này không lớn, nhưng nó kéo dài. Thành phần I sẽ cộng dồn sai số đó qua từng chu kỳ điều khiển.

Ở dạng rời rạc:

I[k]=I[k1]+e[k]ΔtI[k] = I[k-1] + e[k]\Delta t

Giả sử chu kỳ điều khiển là:

Δt=0.1 s\Delta t = 0.1 \text{ s}

Mỗi chu kỳ, integral tăng thêm:

[5×0.1=0.5][ 5 \times 0.1 = 0.5 ]
  • Sau 1 chu kỳ, integral tăng thêm 0.5.
  • Sau 5 chu kỳ, integral tăng thêm 2.5.
  • Sau 10 chu kỳ, integral tăng thêm 5.0.

Nếu chọn:

Ki=1K_i = 1

thì phần điều khiển do I tạo ra sau 10 chu kỳ là:

uI=1×5=5u_I = 1 \times 5 = 5

Lượng điều khiển bổ sung này giúp PWM tăng dần để vượt qua ma sát, từ đó kéo tốc độ từ 95 rpm lên gần 100 rpm hơn.

I có thể gây overshoot?

Vấn đề của I là nó dựa trên sai số trong quá khứ. Nếu sai số đã tích lũy quá nhiều, thành phần I vẫn có thể tiếp tục tác động mạnh ngay cả khi hệ thống đã gần đạt mục tiêu.

Ví dụ, bánh xe đang tăng từ 95 rpm lên 100 rpm. Khi tốc độ đã đạt 99 rpm, sai số hiện tại chỉ còn 1 rpm, nhưng integral trước đó có thể vẫn khá lớn. Nếu phần I tiếp tục đẩy PWM lên, bánh xe có thể vượt quá 100 rpm, chẳng hạn lên 108 rpm.

Đây là lý do thành phần I giúp giảm sai số xác lập, nhưng nếu chọn KiK_i quá lớn thì hệ thống dễ bị vượt mục tiêu và dao động.

Một vấn đề thường gặp khác là integral windup. Hiện tượng này xảy ra khi tín hiệu điều khiển đã đạt giới hạn nhưng integral vẫn tiếp tục tăng.

Ví dụ, PWM chỉ có thể nằm trong khoảng 0 đến 255. Nếu bánh xe bị kẹt, sai số lớn và PID tăng PWM lên 255. Nhưng vì bánh bị kẹt, tốc độ vẫn không tăng, sai số vẫn còn. Nếu integral tiếp tục cộng dồn, nó sẽ trở nên rất lớn. Khi bánh xe hết kẹt, phần I quá lớn có thể làm động cơ vọt mạnh, gây overshoot lớn.

Cách xử lý phổ biến là giới hạn giá trị integral:

IminIImaxI_{min} \leq I \leq I_{max}

Như vậy, I rất hữu ích để loại bỏ sai số kéo dài, nhưng cần được dùng cẩn thận để tránh tích lũy quá mức.


6. Thành phần D: dự đoán xu hướng thay đổi của sai số

Thành phần D, hay Derivative, dựa trên tốc độ thay đổi của sai số:

uD(t)=Kdde(t)dtu_D(t) = K_d \frac{de(t)}{dt}

Nếu P trả lời câu hỏi “hiện tại sai bao nhiêu?”, I trả lời câu hỏi “đã sai lâu chưa?”, thì D trả lời câu hỏi:

Sai số đang thay đổi nhanh như thế nào?

Ý nghĩa của D là giúp bộ điều khiển phản ứng với xu hướng của hệ thống. Nó không chỉ nhìn vị trí hiện tại của sai số, mà còn quan sát xem sai số đang giảm nhanh, giảm chậm, hay tăng lên.

Trực giác của D giống như hành động phanh sớm khi lái xe. Khi xe đang tiến rất nhanh đến vị trí cần dừng, ta không đợi đến đúng vạch mới phanh. Ta nhìn tốc độ tiếp cận và phanh trước để tránh vượt quá điểm dừng. Thành phần D cũng làm điều tương tự: nếu hệ thống đang tiến rất nhanh về mục tiêu, D có thể giảm bớt tác động điều khiển để tránh overshoot.

Trong điều khiển tốc độ bánh xe, D giúp làm đáp ứng mượt hơn. Khi bánh xe đang tăng tốc quá nhanh về 100 rpm, D có thể làm giảm PWM sớm để tốc độ không vượt quá mục tiêu quá nhiều.

Ví dụ với bánh xe robot

Giả sử mục tiêu là 100 rpm. Tốc độ bánh xe thay đổi như sau:

Thời điểmTốc độ đo đượcSai số
0.0 s80 rpm20
0.1 s90 rpm10
0.2 s98 rpm2

Sai số giảm từ 20 xuống 10, rồi xuống 2. Điều này cho thấy bánh xe đang tăng tốc nhanh về phía mục tiêu.

Nếu chỉ nhìn sai số hiện tại, tại thời điểm 0.2 s ta thấy sai số vẫn dương:

e=2e = 2

Thành phần P vẫn muốn tăng PWM thêm một chút. Thành phần I cũng có thể vẫn đang tạo thêm PWM vì trước đó bánh xe còn chậm. Tuy nhiên, nếu tiếp tục đẩy động cơ, bánh xe có thể vượt quá 100 rpm.

Thành phần D nhìn vào tốc độ giảm của sai số. Ở dạng rời rạc:

D[k]=e[k]e[k1]ΔtD[k] = \frac{e[k] - e[k-1]}{\Delta t}

Nếu:

e[k]=2,e[k1]=10,Δt=0.1e[k] = 2, \quad e[k-1] = 10, \quad \Delta t = 0.1

thì:

D[k]=2100.1=80D[k] = \frac{2 - 10}{0.1} = -80

Giá trị âm cho thấy sai số đang giảm rất nhanh. Khi nhân với (K_d), thành phần D tạo ra một tác động ngược chiều với P và I, giúp giảm bớt PWM. Nhờ vậy, hệ thống có thể tiến đến 100 rpm mềm hơn và ít bị vượt mục tiêu hơn.

Ngược lại, nếu tốc độ bánh xe bị giảm đột ngột do gặp mặt sàn nhám, sai số có thể tăng nhanh. Khi đó D phát hiện xu hướng sai số đang xấu đi và có thể hỗ trợ bộ điều khiển phản ứng sớm hơn.

Hạn chế của thành phần D

D rất hữu ích để giảm dao động, nhưng nó nhạy với nhiễu đo. Lý do là D dùng sự thay đổi của sai số giữa hai thời điểm liên tiếp. Nếu encoder đo tốc độ bị dao động nhẹ, đạo hàm của sai số có thể dao động mạnh.

Ví dụ, tốc độ thực tế gần như ổn định quanh 100 rpm, nhưng encoder đo lần lượt 100, 98, 101, 99 rpm. Các dao động nhỏ này làm sai số thay đổi liên tục. Nếu KdK_d quá lớn, PWM cũng có thể rung theo.

Vì vậy, trong thực tế, thành phần D thường cần được dùng vừa phải. Một số cách xử lý là:

  • Giảm KdK_d nếu tín hiệu điều khiển bị rung.
  • Lọc tốc độ đo từ encoder trước khi tính PID.
  • Tính đạo hàm trên tín hiệu đo đã lọc.

Tóm lại, D giúp bộ điều khiển có khả năng “nhìn xu hướng” và phanh sớm, nhưng cần cẩn thận với nhiễu cảm biến.


7. Kết hợp P, I và D

Khi kết hợp lại, ta có:

u(t)=uP(t)+uI(t)+uD(t)u(t) = u_P(t) + u_I(t) + u_D(t)

hay:

u(t)=Kpe(t)+Ki0te(τ)dτ+Kdde(t)dtu(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt}

Với ví dụ robot, từng thành phần có vai trò như sau:

Thành phầnCâu hỏi nó trả lờiVai trò trong điều khiển bánh xe
PHiện tại lệch bao nhiêu?Tăng hoặc giảm PWM theo sai số hiện tại
ILệch này có kéo dài không?Loại bỏ sai số ổn định do ma sát, tải, độ dốc
DSai số đang thay đổi nhanh không?Giảm overshoot, làm đáp ứng mượt hơn
  • Nếu chỉ dùng P, robot phản ứng nhanh nhưng có thể còn sai số ổn định.
  • Nếu thêm I, robot có thể đạt đúng tốc độ mong muốn hơn.
  • Nếu thêm D, robot có thể giảm dao động và tránh vượt mục tiêu quá nhiều.

8. PID rời rạc trong hệ thống nhúng

Trong vi điều khiển, PID thường được tính theo từng chu kỳ, ví dụ mỗi 10 ms hoặc 100 ms. Vì vậy, ta dùng dạng rời rạc.

Tại chu kỳ thứ kk:

e[k]=r[k]y[k]e[k] = r[k] - y[k]

Tích phân được xấp xỉ bằng tổng:

I[k]=I[k1]+e[k]ΔtI[k] = I[k-1] + e[k]\Delta t

Đạo hàm được xấp xỉ bằng hiệu sai số:

D[k]=e[k]e[k1]ΔtD[k] = \frac{e[k] - e[k-1]}{\Delta t}

Tín hiệu điều khiển:

u[k]=Kpe[k]+KiI[k]+KdD[k]u[k] = K_p e[k] + K_i I[k] + K_d D[k]

Ví dụ tính một bước PID

Giả sử:

  • Tốc độ mong muốn: 100 rpm
  • Tốc độ hiện tại: 92 rpm
  • Sai số trước đó: 12 rpm
  • Integral trước đó: 3.0
  • Chu kỳ lấy mẫu: Δt=0.1s\Delta t = 0.1 s
  • Kp=2,Ki=0.5,Kd=0.1K_p = 2, K_i = 0.5, K_d = 0.1

Sai số hiện tại:

e[k]=10092=8e[k] = 100 - 92 = 8

Tích phân mới:

I[k]=3.0+8×0.1=3.8I[k] = 3.0 + 8 \times 0.1 = 3.8

Đạo hàm:

D[k]=8120.1=40D[k] = \frac{8 - 12}{0.1} = -40

Tín hiệu điều khiển:

u[k]=2×8+0.5×3.8+0.1×(40)u[k] = 2 \times 8 + 0.5 \times 3.8 + 0.1 \times (-40) u[k]=16+1.94=13.9u[k] = 16 + 1.9 - 4 = 13.9

Ý nghĩa:

  • P muốn tăng PWM vì tốc độ còn thấp hơn mục tiêu.
  • I cũng tăng PWM nhẹ vì trước đó vẫn còn sai số.
  • D giảm bớt PWM vì sai số đang giảm nhanh, tức bánh xe đang tiến nhanh về mục tiêu.

Kết quả cuối cùng là bộ điều khiển vẫn tăng PWM, nhưng không tăng quá mạnh.


10. Ảnh hưởng của từng tham số Kp,Ki,KdK_p, K_i, K_d

Ba tham số PID quyết định hành vi của hệ thống.

10.1. Tăng KpK_p

Khi tăng KpK_p, hệ thống phản ứng nhanh hơn với sai số.

Trong ví dụ robot:

  • KpK_p nhỏ: bánh xe tăng tốc chậm, mất nhiều thời gian để gần 100 rpm.
  • KpK_p vừa phải: bánh xe nhanh chóng đạt gần 100 rpm.
  • KpK_p quá lớn: bánh xe có thể dao động quanh 100 rpm, lúc 90 rpm, lúc 110 rpm.

10.2. Tăng KiK_i

Khi tăng KiK_i, hệ thống loại bỏ sai số ổn định tốt hơn.

Trong ví dụ robot:

  • Không có I: bánh xe có thể dừng ở 95 rpm do ma sát.
  • Có I vừa phải: bánh xe được đẩy thêm để đạt 100 rpm.
  • I quá lớn: bánh xe dễ vượt lên 110 rpm hoặc dao động lâu.

10.3. Tăng KdK_d

Khi tăng KdK_d, hệ thống có xu hướng giảm dao động và giảm overshoot.

Trong ví dụ robot:

  • Không có D: tốc độ có thể vượt quá 100 rpm rồi mới quay lại.
  • D vừa phải: tốc độ tiến đến 100 rpm mượt hơn.
  • D quá lớn: tín hiệu PWM dễ bị rung nếu dữ liệu encoder nhiễu.

Tóm tắt trực giác:

Tham sốTăng lên thì thường làm gì?Rủi ro nếu quá lớn
KpK_pPhản ứng nhanh hơnDao động, overshoot
KiK_iGiảm sai số ổn địnhTích lũy quá mức, overshoot
KdK_dGiảm dao động, phanh sớmNhạy với nhiễu, tín hiệu rung

11. Cách chỉnh PID đơn giản trong thực tế

Có nhiều phương pháp chỉnh PID, từ thủ công đến các phương pháp hệ thống như Ziegler–Nichols. Với người mới hoặc hệ thống nhỏ, cách chỉnh thủ công thường dễ hiểu hơn.

Một quy trình đơn giản:

Bước 1: Tắt I và D

Đặt:

Ki=0,Kd=0K_i = 0, \quad K_d = 0

Chỉ dùng KpK_p.

Tăng KpK_p từ nhỏ đến khi bánh xe phản ứng đủ nhanh nhưng chưa dao động mạnh.

Ví dụ:

  • Kp=0.5K_p = 0.5: bánh xe lên tốc độ rất chậm.
  • Kp=1.5K_p = 1.5: bánh xe lên gần 100 rpm khá tốt.
  • Kp=3.5K_p = 3.5: bánh xe bắt đầu dao động quanh 100 rpm.

Có thể chọn Kp=2.0K_p = 2.0 làm giá trị ban đầu.

Bước 2: Thêm I để loại bỏ sai số ổn định

Nếu bánh xe ổn định ở 96 rpm thay vì 100 rpm, thêm KiK_i nhỏ.

Ví dụ:

  • Ki=0.1K_i = 0.1: sai số giảm từ từ.
  • Ki=0.5K_i=0.5 tốc độ tiến gần 100 rpm tốt hơn.
  • Ki=2.0K_i = 2.0: tốc độ vượt mục tiêu và dao động.

Có thể chọn Ki=0.5K_i = 0.5.

Bước 3: Thêm D nếu hệ thống bị overshoot hoặc dao động

Nếu tốc độ thường vượt lên 110 rpm trước khi ổn định, thêm KdK_d.

Ví dụ:

  • Kd=0.02K_d = 0.02: giảm overshoot nhẹ.
  • Kd=0.1K_d = 0.1: đáp ứng mượt hơn.
  • Kd=0.8K_d = 0.8: PWM rung mạnh do nhiễu encoder.

Có thể chọn Kd=0.1K_d = 0.1.

Bước 4: Kiểm tra với nhiễu và tải thay đổi

Sau khi chỉnh được trên mặt phẳng, cần thử thêm các tình huống:

  • Robot chạy trên mặt sàn nhám hơn.
  • Robot mang thêm tải.
  • Robot tăng tốc từ 0 lên 100 rpm.
  • Robot đổi mục tiêu từ 100 rpm sang 150 rpm.

Một bộ PID tốt không chỉ hoạt động trong một điều kiện, mà cần tương đối ổn định trong nhiều điều kiện khác nhau.


12. Tổng kết

PID là một thuật toán điều khiển phản hồi đơn giản nhưng rất mạnh. Nó hoạt động dựa trên sai số giữa giá trị mong muốn và giá trị đo được.

Ba thành phần của PID có thể hiểu ngắn gọn như sau:

  • P: sửa theo sai số hiện tại.
  • I: sửa theo sai số tích lũy trong quá khứ.
  • D: sửa theo xu hướng thay đổi của sai số.

Trong ví dụ điều khiển tốc độ bánh xe robot:

  • P giúp bánh xe phản ứng nhanh khi tốc độ lệch khỏi 100 rpm.
  • I giúp loại bỏ sai số ổn định do ma sát hoặc tải.
  • D giúp giảm overshoot và làm tốc độ tiến đến mục tiêu mượt hơn.

Một bộ PID tốt không chỉ nằm ở công thức, mà còn nằm ở cách triển khai thực tế: chọn chu kỳ lấy mẫu ổn định, giới hạn tín hiệu điều khiển, chống integral windup, lọc nhiễu cảm biến và chỉnh tham số phù hợp với hệ thống.

Vì dễ hiểu, dễ cài đặt và hiệu quả trong nhiều bài toán, PID vẫn là một trong những thuật toán điều khiển nền tảng nhất trong robot học, tự động hóa và hệ thống nhúng.

Bình luận & Cảm xúc