Thursday, December 17, 2015

Hướng dẫn chọn bộ 3 hệ số cho PID, phục vụ cho Robot cân bằng

      Như chúng ta đã biết, PID là một bộ điều khiển có hồi tiếp siêu kinh điển được sử dụng rất nhiều vào những năm 70 của thế kỉ trước. Mặc dù đã cũ nhưng nó vẫn tỏ ra rất hiệu quả.
      Cũng giống như các bộ điều khiển khác, để sử dụng được PID, ta cần tìm ra được 3 hệ số Kp, Ki, Kd. Vậy Kp, Ki, Kd dùng để làm gì? Và chọn như thế nào?
      Kp là hệ số của khâu tỉ lệ, tỉ lệ với sai số. Ta cần chọn Kp sao cho hệ đáp ứng đủ nhanh.
      Kd là hệ số của khâu vi phân. Khi hệ của ta đáp ứng đủ nhanh, sẽ sinh ra vọt lố, cần tăng Kd từ từ sao cho giảm độ vọt lố. Khi đó sẽ sinh ra tính ì, tức là khi sai số quá nhỏ, hệ không đạt được giá trị đặt.
      Ki là hệ số của khâu tích phân, là khâu cộng dồn. Khi hệ xuất hiện tượng ì, ta tăng dần Ki để loại bỏ hiện tượng đó. Khi Ki đủ lớn, vọt lố lại xuất hiện, giảm Ki xuống và hệ đi vào ổn định.


     Trên đây là một cách để "mò" hệ số PID (gọi là mò nhưng ta cần hiểu bản chất mới mò được! Và cũng không dễ để đạt được hệ ổn định). Ngoài ra ta còn có nhiều phương pháp để tìm hệ số PID như auto turning, các công cụ phần mềm, Cohen-Coon, Ziegler-Nichols... Trong đó phương pháp Ziegler-Nichols khá đơn giản, và mình đã áp dụng có hiệu quả. 
     Trong phương pháp Ziegler-Nichols ta cần tìm hai hệ số Ku và Pu. Trong đó Ku là hệ số liên quan đến tốc độ đáp ứng của hệ, Pu là chu kì dao động của hệ. Từ Ku và Pu ta tìm được bộ ba hệ số Kp, Ki, Kd theo công thức cho trong bảng.


     Cụ thể với robot cân bằng của chúng ta. Để tìm nhanh hệ số Ku và Pu, ta làm như sau: 
       - Đặt robot thẳng đứng. Dùng tay trái, để tay trái thành hình chữ U. Cho robot dao động trong lòng bàn tay trái (làm sao cũng được, miễn là robot giao động và không ngã, nhưng vẫn đảm bảo đủ không gian cho robot dao động).
       - Tăng dần hệ số Ku (tăng mạnh tay vào) cho đến khi robot dao động đủ nhanh và dao động tuần hoàn, khi đó ta được Ku.
       - Khi hệ dao động với một chu kỳ xác định, ta tiến hành xác định thời gian dao động của hệ. Thông thường ta dùng phương pháp đồ thị. Nhưng ở đây, chúng ta không có điều kiện để vẽ đồ thị. Vì vậy ta sẽ đoán. Kinh nghiệm, thời gian dao động của hệ sẽ nhỏ hơn 0.5s. Giảm từ từ Tu cho đến khi hệ ổn định.
       Đến đây ta đã có một con robot cân bằng cơ bản đứng được!
      
       Một số bạn làm có hiện tượng: robot chạy về một phía. Nguyên nhân là do cơ khí chưa tốt, khiến hệ bị nghiêng một góc. Ta hoàn toàn có thể giải quyết vấn đề này bằng phương pháp phần mềm: Bạn thấy robot của bạn nghiêng về hướng nào thì cho giá trị góc đặt ngược lại (khác 0 độ). Thử một vài lần thì robot của bạn đã có thể đứng được.
      
      Để đạt hiệu quả qua trong tính toán, ta nên đặt code tính toán PID trong ngắt timer. Vì arduino dùng các timer cho một vài công việc, nên ta sẽ chỉ dùng được timer2. Thư viện Mstimer2: http://playground.arduino.cc/Main/MsTimer2

       Đoạn mã tính PID:
       
  actual_position=ypr[1] * 180/M_PI;
  error = setpoint - actual_position;
  integral = integral + (error*dt);
  derivative = (error - previous_error)/dt;
  output = (Kp*error) + (Ki*integral) + (Kd*derivative);
       Đoạn mã tính hệ số Kp, Ki, Kd:

  Kp=0.6*Ku;
  Ki=2*(Kp/Pu);
  Kd=(Kp*Pu)/8;
      Các biến, các bạn nên để kiểu float cho kết quả tính chính xác.

      Mọi thắc mắc, vui lòng để lại ở phần bình luận. Hoặc liên hệ facebook.

      Chúc các bạn thành công và qua môn!
      Chào thân ái và quyết thắng.

      Tài liệu tham khảo:
http://nvtienanh.com/blog/bo-dieu-khien-pid-so-27-02-2014.html
https://vi.wikipedia.org/wiki/B%E1%BB%99_%C4%91i%E1%BB%81u_khi%E1%BB%83n_PID
https://www.youtube.com/watch?v=37EdWnIFiWg



      

No comments:

Post a Comment

inmoov finger voice test

Inmoov finger voice test