http://www.gammon.com.au/i2c and https://forum.arduino.cc/index.php?topic=124286.0

http://www.ozbotz.org/files-red-balancing-robot/

https://www.i2cdevlib.com/devices/mpu6050#source

http://playground.arduino.cc/Code/PIDLibrary

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

http://playground.arduino.cc/Code/PIDLibraryRelayOutputExample

PID have three parameter: proportion, integral and derivative

each of them have different role in each application and have to be modified for match with each application. Two main application use PID is position control and velocity control

1: Position control includes and two wheel balacing.

PID được dùng trong điều khiển vị trí và trong điều khiển vận tốc

1. điều khiển vị trí thì có tính toán tốc độ của động cơ để cái xe chạy đến đúng một điểm đặt trước, hoặc điểu khị tốc độ động cơ để robot trở về vị trí cân bằng

Trong loại 1 thì khi đã đạt đc target rồi thì PID turn off

2 điều khiển vận tốc động cơ tức là PID control để giữ motor velocity constaint

trong loại này thì khi đạt được vận tốt target rồi thì PID giữ nguyên giá trị.

Trong cái link sau thì nó có nói về cả hai loại PID

http://www.hocavr.com/index.php/app/dcservo

quote:”Tuy nhiên, theo lẽ thường thì công thức dòng 37 phải là Output=pPart+dPart+iPart nhưng ở đây lại là : Output+=pPart+dPart+iPart (để ý dấu + trước dấu =), nghĩa là Output được cộng dồn thay vì là tổng tức thời như chúng ta đã thảo luận trong phần giải thuật PID. Thật ra việc này cũng dễ hiểu. Trong bài toán điều khiển vị trí, khi sai số bằng 0 chúng ta có thể dừng bộ điều khiển (u=0) nhưng trong bài toán điều khiển vận tốc, khi sai số bằng 0 thì giá trị u vẫn phải được giữ là giá trị trước đó.Vì vậy, trong bài toán điều khiển vận tốc giá trị Output được cộng dồn thay vì gán trực tiếp, bạn phải ghi nhớ điều này trong các ứng dụng điều khiển của mình.”

đây là lúc nó giải thích sự khác biệt.

Cụ thể hơn là trong phần lý thuyết nó có nói về tác dụng của integral part là để trasnh steady state error. Giaỉ thích như thế này là đúng nhưng chưa đầy đủ, vì Integral tồn tại ngay từ đầu lúc tính PID chứ k phải đợi steady state error xuất hiện rồi nó PID mới dùng đến integral part. Vậy ý nghĩa của integral trong bộ PID ngay từ đầu là gì

Tóm lại là ngay từ đầu integral cũng có tác dụng như proportion part và nó cũng dùng để khử steady state error.

ví dụ cụ thể:

1.Bài toán điều khiển vị trí xe: steady state error là dạng có lực F nhưng xe không chạy vì có ma sát tĩnh, Derivertive part thì đã bằng không vì sai số không đổi, lúc này chỉ có integral là có tác dụng lớn nhất để đưa xe về vị trí cân bằng.

2. Bài toán two wheel balacing thì có trường hợp là xe bị nghiêng góc ví dụ 30 độ, Proportion part điều chỉnh động cơ quay ví dụ hiện tại là đã tăng từ 0 lên đến pwm=125 nhưng xe không thể trở về cân bằng được, vì động cơ chưa đủ mạnh. Nhưng xuất hiện trường hợp là góc nghiêng cũng không tăng thêm, tức là xe nó cũng không nghiên thêm mà cũng không giảm góc nghiên được, tức là nó cứ vừa nghiêng vừa chạy, góc không đổi. Lúc này proportion không có tác dụng giúp xe trở về cân bằng, Derivative thì bằng không vì error không đổi. Lúc này chỉ còn có integral part có tác dụng cộng dồn error để tăng pwm giúp xe về cân băng. Còn ngay từ đâuf thì effect of integral part cũng giống như proportion, đáp ứng theo time và theo error.

3. Bài toán duy trì vận tốc thì

http://lopdd07kstn.forumotion.net/t305-topic

quote:”

Các quy luật điều chỉnh

Trong phần này ta sẽ nghiên cứu ảnh hưởng của các tham số P, I và D đến các đáp ứng của hệ thống. Từ đó có thể hiểu rõ được ý nghĩa của chúng trong công việc điều chỉnh các tham số đó sau này. Các lý giải sau đây chỉ thuần túy ở khía cạnh kỹ thuật. Các lý giải mang tính lý thuyết chặt chẽ có thể tìm thấy trong các tài liệu khác, ví dụ như [2], [3], [3], [4]…

Quy luật điều chỉnh P

Từ công thức (6), nếu cho K_{i}=0 và K_{d}=0 thì tín hiệu ra của bộ điều khiển có dạng

u(t) = K_{p}e(t)

Nghĩa là tín hiệu ra của bộ điều khiển chỉ đơn giản là tích của hệ số tỷ lệ và sai lệch giữa tín hiệu đặt và tín hiệu thực.

Giả sử bài toán ở đây là điều khiển tốc độ động cơ với tín hiệu đặt tốc độ là r=1000 vòng/phút, K_{p} = 15. Ta thử khảo sát xem sự biến thiên của tín hiệu ra của bộ điều khiển theo thời gian sẽ như thế nào.

# Giả thiết tại thời điểm t=0 tín hiệu ra của hệ thống y=0. Khi đó, tín hiệu sai lệch sẽ là e=r-y=1000. Đầu ra của bộ điều khiển là u = K_{p}\times e = 15\times 1000 = 1500. Tín hiệu này sẽ được đưa đến đầu vào của đối tượng cần điều khiển làm cho đầu ra y của nó bắt đầu tăng lên, dẫn đến e bắt đầu giảm.
# Trong một số trường hợp, do quán tính của hệ thống, khi sai lệch e=0 (nghĩa là đầu ra y đã bằng với giá trị đặt r) làm cho u = K_{p} \times e = 0 nhưng tốc độ của động cơ vẫn tiếp tục gia tăng.
# Khi tốc độ vượt quá tốc độ đặt thì tín hiệu ra u của bộ điều khiển đảo chiều, đồng thời quán tính của hệ cũng giảm dần làm cho tốc độ càng giảm nhanh.
# Khi tốc độ giảm xuống dưới tốc độ đặt thì tín hiệu ra u của bộ điều khiển lại lớn hơn 0, làm cho tốc độ lại tăng lên nhưng với quán tính nhỏ hơn…
# Sau một vài chu kỳ dao động như trên thì tốc độ động cơ sẽ ổn định ở một giá trị nào đó, phụ thuộc vào các tham số của hệ thống.

Sai lệch tĩnh
Đối với quy luật điều chỉnh P, khi tốc độ của động cơ bằng với tốc độ đặt e=0 thì tín hiệu điều khiển u=K_{p}e cũng bằng 0 và, do đó, tốc độ động cơ sẽ bị kéo giảm xuống. Vì vậy, muốn u \neq 0 thì e phải khác 0. Nghĩa là phải luôn có một sai lệch giữa tín hiệu đặt và tín hiệu đầu ra thực tế của tín hiệu điều khiển.

Trong ví dụ trên, giả sử sau khi ổn định thì tốc độ động cơ đạt 970 vòng/phút thì sai lệch tĩnh sẽ là e = 1000 – 970 = 30 vòng/phút và tín hiệu ra của bộ điều khiển sẽ là u = K_{p}e = 15 \times 30 = 450.

Giảm sai lệch tĩnh

Nếu tăng K_{p} lên 150 chẳng hạn thì sai lệch tĩnh e chỉ cần bằng 3 là có thể đủ để tạo ra một tín hiệu điều khiển bằng 450 để duy trì một mômen đủ lớn giữ cho động cơ quay. Rõ ràng, khi tăng K_{p} thì có thể làm giảm được sai lệch tĩnh. Tuy nhiên, nếu K_{p} tăng quá lớn thì hệ có thể bị dao động, không ổn định.

Quy luật điều chỉnh PI

Quy luật điều chỉnh P có ưu điểm là tác động nhanh. Tín hiệu điều khiển phụ thuộc trực tiếp vào sai lệch giữa tín hiệu đặt và tín hiệu thực. Tuy nhiên, khi sai lệch bằng 0 thì tín hiệu điều khiển cũng mất nên luôn tồn tại sai lệch tĩnh như đã nói ở trên.

Vậy làm thế nào để triệt tiêu sai lệch tĩnh?

Câu trả lời là phải đưa ra tín hiệu điều khiển cho đến khi nào sai lệch tĩnh bằng 0 thì giữ nguyên giá trị điều khiển đó.

Đây chính là đặc tính của khâu tích phân với tín hiệu ra được viết lại như sau:

u_{i,k} = K_{i}e_{k} + u_{i,k-1}

# Giả sử tại thời điểm k=0 u_{i,0} = 0.
# Tại thời điểm k=1 thì u_{i,1} = K_{i}e_{1} + u_{i,0} = K_{i}e_{1} tương tự như bộ điều khiển kiểu P.
# Tại thời điểm tiếp theo u_{i,2} = K_{i}e_{2} + u_{i,1} và cứ như vậy tín hiệu điều khiển lần sau bằng tín hiệu điều khiển ở lần trước đó cộng đại số với tích giữa hệ số tích phân và sai lệch làm cho sai lệch e (dương hoặc âm) giảm dần (hệ ổn định).
# Giả sử tại thời điểm k=n sai lệch e_{k}=0. Khi đó u_{i,n} = u_{i,n-1} (rồi u_{i,n+1} = u_{i,n}…). Nghĩa là u_{i,k} sẽ không thay đổi nữa khi e_{k} = 0.

Với bài toán điều khiển tốc độ động cơ với tốc độ đặt là r=1000 vòng/phút, giả sử K_{i} = 0.25 ta thấy:

# Giả thiết tại thời điểm t=0 u_{i,0} = 0. Nếu tại thời điểm t = 1 mà y_{1} = 200 thì e_{1} = r – y_{1} = 1000 – 200 = 800 và tín hiệu ra của bộ điều khiển sẽ là u_{i,1} = K_{i}e_{1} + u_{i,0} = 0.25 \times 800 + 0 = 200. Tín hiệu này sẽ được đưa đến đầu vào của đối tượng cần điều khiển làm cho đầu ra y của nó tiếp tục tăng, dẫn đến e bắt đầu giảm.
# Tại thời điểm t=2 giả sử y_{2} = 500 thì e_{2} = r – y_{2} = 1000 – 500 = 500 và tín hiệu ra của bộ điều khiển sẽ là u_{i,2} = K_{i}e_{2} + u_{i,1} = 0.25 \times 500 + 200 = 125 + 200 = 325 (giá trị u_{i,1} = 200 của chu kỳ điều khiển trước được cộng thêm 125). Đầu ra y tiếp tục tăng.
# Tại thời điểm t=3 giả sử y_{3} = 800 thì e_{3} = r – y_{3} = 1000 – 800 = 200 và tín hiệu ra của bộ điều khiển sẽ là u_{i,3} = K_{i}e_{3} + u_{i,2} = 0.25 \times 200 + 325 = 50 + 325 = 375 (giá trị u_{i,2} = 325 của chu kỳ điều khiển trước được cộng thêm 50). Đầu ra y tiếp tục tăng.
# Tại thời điểm t=4 giả sử y_{3} = 900 thì e_{4} = r – y_{4} = 1000 – 900 = 100 và tín hiệu ra của bộ điều khiển sẽ là u_{i,4} = K_{i}e_{4} + u_{i,3} = 0.25 \times 100 + 375 = 25 + 375 = 400 (giá trị u_{i,3} = 375 của chu kỳ điều khiển trước được cộng thêm 25). Đầu ra y tiếp tục tăng.
# Tại thời điểm t=5 giả sử đầu ra đã bám theo đầu vào, nghĩa là y_{5} = 1000 thì e_{5} = r – y_{5} = 1000 – 1000 = 0 và tín hiệu ra của bộ điều khiển sẽ là u_{i,5} = K_{i}e_{5} + u_{i,4} = 0.25 \times 0 + 400 = 400 (tín hiệu ra của bộ điều khiển được giữ nguyên giá trị u_{i,4} = 400 của chu kỳ điều khiển trước). Tín hiệu đầu ra bộ điều khiển không thay đổi và tốc độ được giữ nguyên.
# Giả sử tại thời điểm t=6 tốc độ y_{6} = 1100 thì e_{6} = r – y_{6} = 1000 – 1100 = -100. Tín hiệu ra của bộ điều khiển sẽ là u_{i,6} = K_{i}e_{6} + u_{i,5} = 0.25 \times -100 + 400 = -25 + 400 = 375 (tín hiệu ra của bộ điều khiển đã được bớt đi giá trị -25 so với chu kỳ điều khiển trước). Tín hiệu đầu ra bộ điều khiển giảm làm cho tốc độ động cơ cũng giảm xuống.

Như vậy, nếu tại thời điểm t=n đầu ra bám kịp tín hiệu đặt (sai lệch bằng 0) thì tín hiệu ra của bộ điều khiển u_{i,n} cũng sẽ không đổi. Tại bất kỳ một thời điểm nào nếu sai lệch lại khác 0 thì tín hiệu ra của bộ điều khiển lại tiếp tục thay đổi nhằm kéo đầu ra bám theo tín hiệu đặt.

nó giải thích rõ tại steady state error in maintaining velocity problem. Trong dạng velocity này thì giá trị của integral là cộng dồn (subsume) at the beginning

Tuy nhiên trong dạng position control thì nếu cộng dồn integral này từ đầu luôn thì không đúng lắm vì nếu xe đến cân bằng rồi thì output PID should be zero. nếu ta cứ cộng dồn integral part thì cái xe phải dao động qua điểm cân bằng cho đến khi nào integral về không thì xe mới dừng lại. Theo mình nghĩ (chưa được kiểm tra) thì khi xe về cân bằng thì nên tắt integral đi hay là set cái integral này bằng không để nó không drive car anymore. Vì nếu không tắt(set to zero) integral thì sẽ diễn ra tình trạng sau:

Xe phải dao động quanh điểm cân bằng cho đến khi nào integral itself bằng không

Image result for sine wave

giả sử hàm trên là hàm error theo thời gian thì tính từ lúc bắt đầu cho đến lúc nó cắt trục hoành (tức là đã đến điểm cân bằng lần đầu) giá trị integral cộng dồn là diện tích và nó lớn. Nếu đến cân bằng mà không tắt thì PID different of zero tiếp tục drive card forward and integral now reduce.

Advertisements