[Điều Khiển PID Chuẩn]Các Bạn đã Hiểu Sai Về PID

Menu Payitforward Community
  • Home
  • Forums New posts Search forums
  • What's new New posts New profile posts Latest activity
  • Members Registered members Current visitors New profile posts Search profile posts
Log in Register What's new Search

Search

Everywhere Threads This forum This thread Search titles only By: Search Advanced search...
  • New posts
  • Search forums
Menu Log in Register
  • Forums
  • Chia sẻ Dự án / Tài liệu / Phần mềm
  • Chia sẻ Projects
[Điều khiển PID chuẩn]Các bạn đã hiểu sai về PID
  • Thread starter cenakhoa
  • Start date 7/10/13
C

cenakhoa

em thích màu hồng
Chào các bạn, các em, Qua kì thi Raise Your Arm 2013 vừa qua, mình có đọc một số code của vài team dự thi, mình thấy có vài điều bất ổn về code PID của các bạn, PID là một bộ điều khiển rất dễ và thâm niên gần 100 tuổi nhưng chắc chắn viết đúng code PID trong NƯỚC TA chỉ đếm trên đầu ngón tay, đa số là các bạn copy paste code vì quá khinh thường bộ điều khiển này. Sở dĩ mình nhận ra ngay các bạn copy paste code PID vì code này mình cũng từng dùng rồi, :) nhưng sau này nhận ra là nó sai, nó chỉ "có vẻ" đúng vì bộ PID khá đơn giản và code được áp dụng trong môi trường thí nghiệm, chứ nếu để ngoài thực tế nó SẼ bộc lộ nhiều điểm yếu. Đầu tiên các bạn hãy download tài liệu cơ sở tự động của thầy Huỳnh Thái Hoàng, mục thiết kế PID rời rạc theo link sau: http://www4.hcmut.edu.vn/~hthoang/cstd/Chuong9_CSTD.pdf Đây là code cũ PID mà 99% mà các bạn dùng (E hay error là sai số giữa giá trị đặt và giá trị hiện tại, U hay Out là giá trị PWM điều khiển động cơ): Code: Error_value = Set_Position - Position; P_part = Kp * Error_value; I_part += Ki * Error_value / T; D_part = Kd * (Error_value - pre_Error_value) * T; out+= P_part + I_part + D_part; pre_Error = Error và đây là code PID đúng như nó lẽ ra nên được viết: Code: P_part = Kp*(Error - pre_Error); I_part = 0.5*Ki*T*(Error + pre_Error); D_part = Kd/T*( Error - 2*pre_Error+ pre_pre_Error); Out = pre_out + P_part + I_part + D_part ; pre_pre_Error = pre_Error pre_Error = Error pre_Out = Out
  • Bộ PID sau phụ thuộc vào cả những thông số trước đó nên rõ ràng tính thích nghi cao hơn.
  • Bộ PID trước CHẮC CHẮN sẽ có vọt lố còn bộ PID sau thì chưa chắc. Cũng vì lý do này, các bạn cho hệ số I quá nhỏ, nhỏ đến mức bộ PID trở thành P hoặc PD mà các bạn vẫn đinh ninh là đang làm PID, ảnh hưởng đến chất lượng của bộ điều khiển.
Giải thích: Bộ trước có thành phần I cộng dồn theo cấp số cộng, không giảm tính tổng quát, giả sử điều khiển PID vị trí, Setpoint = 3000, vận tốc hiện thời bằng không. Bộ PID thứ nhất có thành phần I luôn dương theo thời gian và càng ngày càng lớn ngược lại bộ PID thứ hai có thành phần I càng ngày càng nhỏ và phù hợp hơn. Do đó nếu như Setpoint của các bạn cao (trong trường hợp điều khiển vị trí hoặc điều khiển vận tốc với encoder xịn nhiều xung), sai số tích lũy cộng dồn sẽ rất lớn, lớn đến một mức nào đó mà khi đã xác lập rồi thành phần I vẫn dương dẫn đến vọt lố, sau một thời gian vọt lố, thành phần I mới giảm dần về trạng thái cân bằng. Ngoài ra dựa theo công thức còn rất nhiều trường hợp nữa mà bộ PID viết sai thể hiện nhược điểm, các bạn có thể trải nghiệm thêm. Còn đây là cơ sở khoa học mình viết để khẳng định những điều trên là đúng (các bạn phải đọc tài liệu ở trên mới hiểu được mấy dòng sau đây): Note: T là thời gian lấy mẫu để điều khiển. G(s) là hàm truyền liên tục của bộ PID, G(z) là hàm truyền rời rạc của bộ PID theo lý thuyết rời rạc hóa của hai khâu tích phân và vi phân, còn z^-1 nhân cho một tín hiệu sẽ là tín hiệu ấy trong lần lấy mẫu trước đó theo môn xử lý số tín hiệu. Những công thức sau chỉ là khai triển đơn giản của công thức ban đầu, các bạn có thể tự tin xem hết, hiểu hết. Hi vọng sau bài viết này ai cũng viết đúng PID nhé. Hãy test , chia sẻ và reply Cập nhật: Bộ điều khiển hoạt động tốt với giải thuật mà mình đề ra, đã test trên nhiều mô hình. Bạn nào gặp hiện tượng output ngược dấu setpoint thì đảo 2 chân encoder lại. K

Keon2991

TOT
hóng thầy Nam và thầy Hoàng vào cho ý kiên :6cool_boss: D

dangduythanh134

TOT
Bài viết rất hay, CLB mình nên có thêm những bài viết như thế :1cool_byebye: Tôi đã khóc khi đọc bài này :((:-s T

tuane06

Trứng gà
hix, đây chính là câu trả lời cho câu hỏi PID là gì từ xưa đến giờ của mình và cũng là cơ sở để chuyển từ lý thuyết sang thực tế, cảm ơn bác chủ nhiều, em còn phải đọc tài liệu dài dài nữa mới mong hiểu hết vấn đề bác đã đề cập, dù sao cũng có hướng đi cho mình chứ ko còn bị mông lung mò mẫm nữa B

bluesilhouettes

Gà mẹ
Nên chuyển code sang dạng MAC để tính toán cho nhanh nếu cpu có hỗ trợ. Công thức rút gọn thì dễ nhìn đối với con người nhưng khó nhìn đối với máy tính. :) 4

40701002

Thành Viên PIF
Đã làm từ lúc đồ án 1 (điều khiển lò nhiệt). Nhưng chia sẻ như bạn thì chưa bao giờ vì nghĩ ai cũng như mình :). Bây giờ thì đã hiểu C

cenakhoa

em thích màu hồng
bluesilhouettes said: Nên chuyển code sang dạng MAC để tính toán cho nhanh nếu cpu có hỗ trợ. Công thức rút gọn thì dễ nhìn đối với con người nhưng khó nhìn đối với máy tính. :) Click to expand...
dạng MAC là sao bác, xin thỉnh giáo các một chút (y) C

chung

Trứng gà
cho mình hỏi, các số Kp, Ki, Kd lúc setup thường nằm từ khoảng nào tới khoảng nào vậy mọi người. Mình ko biết con số cụ thể nên ko biết setup thế nào để cân chỉnh 4

40701002

Thành Viên PIF
Bạn phải đọc thêm phương pháp Ziegler - Nichols nha H

hmtuong

Trứng gà
Theo ý kiến của mình, bạn cenakhoa hiểu chưa cặn kẽ rồi. Tùy theo phương pháp tính gần đúng mà hàm rời rạc của bộ PID sẽ khác nhau. Code PID rời rạc trên mạng thường là làm gần đúng theo phương pháp Euler, còn cách làm gần đúng trong sách DKTD là phương pháp trapezoidal. Ví dụ, phương pháp Euler gần đúng khâu tích phân là: Ki*Ts*[1/(z-1)] còn theo phương pháp trapezoidal: Ki*Ts/2*[(z+1)/(z-1)] Vì vậy, tùy theo yêu cầu mà chúng ta dùng phương pháp gần đúng cho phù hợp. T

taingay123321

Trứng gà
Bạn cenakhoa và hmtuong có thể thảo luận thêm chứ ? Trên page này họ cũng dùng code cũ từ lâu http://www.hocavr.com/index.php/app/dcservo#5-PID. Vậy đây là phương pháp đúng khác hay là pp sai ? Show hidden low quality content You must log in or register to reply here. Share: Facebook Twitter Reddit Pinterest Tumblr WhatsApp Email Link
  • Forums
  • Chia sẻ Dự án / Tài liệu / Phần mềm
  • Chia sẻ Projects
Top

Từ khóa » Công Thức Pid Rời Rạc