toilet

Cùng nhau tìm hiểu giải thuật điều khiển kinh điển PID - phần 1

Thảo luận trong 'Thảo luận chung'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. Đăng 24/1/13 #1

    chivu Kỹ sư

    Số bài viết: 57
    Đã được thích: 160
    PID là cách viết tắc của các từ Propotional (tỉ lệ), Integral (tích phân), Derivative (đạo hàm) và là giải thuật điều khiển được dùng nhiều nhất trong các ứng dụng điều khiển tự động với yêu cầu chính xác (accurate), nhanh (fast response), ổn định (small overshot).

    pid.

    Một điều rất tự nhiên, với yêu cầu nhanh thì một cách đơn giản để công thức hóa ý tưởng này là dùng quan hệ tuyến tính:
    F=Kp*e
    Trong đó Kp là một hằng số dương nào đó mà chúng ta gọi là hệ số P (Propotional gain), e là sai số cần điều khiển. Mục tiêu điều khiển là đưa e (sai số) tiến về 0 càng nhanh càng tốt. Rõ ràng nếu Kp lớn thì tác động nhanh của điều khiển cũng càng lớn. Tuy nhiên, do quán tính mà việc điều khiển càng nhanh càng gây ra tính mất ổn định (do lực quán tính và lực điều khiển tạo ra cặp đối lực xuất hiện ở hai khoảng thời gian liên tiếp nhau => chúng tạo ra dao động không kiểm soát được).
    Như vậy, ta sẽ sử dụng đạo hàm của sai số e để làm tăng giá trị nhưng ngược chiều của lực F (vì e đang giảm nhanh dần). Nếu sử dụng đạo hàm làm thành phần “thắng” thì có thể giảm được overshot của xe. Thành phần “thắng” này chính là thành phần D (Derivative) trong bộ điều khiển PID mà chúng ta đang khảo sát. Thêm thành phần D này vào bộ điều khiển P hiện tại, chúng ta thu được bộ điều khiển PD như sau:
    F=Kp*e + Kd*(de/dt)
    Trong đó (de/dt) là vận tốc thay đổi của sai số e và Kd là một hằng số không âm gọi là hệ số D (Derivative gain).
    Sự hiện diện của thành phần D làm giảm overshot vật thể điều khiển khi nó tiến gần về vị trí cân bằng (vị trí ổn định), lực F gồm 2 thành phần Kp*e > =0 (P) và Kd*(de/dt) <=0 (D). Trong một số trường hợp thành phần D có giá trị lớn hơn thành phần P và lực F đổi chiều, “thắng” (hãm tốc) lại, yếu tố cần điều khiển (ví dụ vận tốc, vị trí...) của vật thể giảm mạnh ở gần vị trí cân bằng. Một vấn đề nảy sinh là nếu thành phần D quá lớn so với thành phần P hoặc bản thân thành phần P nhỏ thì khi tiến gần điểm cân bằng (chưa thật sự đến vị trí này), vật thể có thể dừng hẳn, thành phần D bằng 0 (vì sai số e không thay đổi nữa), lực F = Kp*e. Trong khi Kp và e lúc này đều nhỏ nên lực F cũng nhỏ và có thể không thắng được lực ma sát tĩnh. Sai số e trong tình huống này gọi là steady state error (tạm dịch là sai số trạng thái tĩnh). Để tránh steady state error, người ta thêm vào bộ điều khiển một thành phần có chức năng “cộng dồn” sai số. Khi steady state error xảy ra, 2 thành phần P và D mất tác dụng, thành phần điều khiển mới sẽ “cộng dồn” sai số theo thời gian và làm tăng lực F theo thời gian. Đến một lúc nào đó, lực F đủ lớn để thắng ma sát tĩnh và đẩy vật tiến tiếp về điểm cân bằng. Thành phần “cộng dồn” này chính là thành phần I (Integral - tích phân) trong bộ điều khiển PID. Vì chúng ta điều biết, tích phân một đại lượng theo thời gian chính là tổng của đại lượng đó theo thời gian. Bộ điều khiển đến thời điểm này đã đầy đủ là PID:
    F=Kp*e + Kd*(de/dt)+Ki*∫edt
    Như vậy, chức năng của từng thành phần trong bộ điều khiển PID giờ đã rõ. Tùy vào mục đích và đối tượng điều khiển mà bộ điều khiển PID có thể được lượt bớt để trở thành bộ điều khiển P, PI hoặc PD. Công việc chính của người thiết kế bộ điều khiển PID là chọn các hệ số Kp, Kd và Ki sao cho bộ điều khiển hoạt động tốt và ổn định (quá trình này gọi là PID gain tuning). Đây không phải là việc dễ dàng vì nó phụ thuộc vào nhiều yếu tố. Tôi tóm tắt một kinh nghiệm cơ bản khi chọn các hệ số cho PID như sau:
    - Chọn Kp trước: thử bộ điều khiển P với đối tượng thật (hoặc mô phỏng), điều chỉnh Kp sao cho thời gian đáp ứng đủ nhanh, chấp nhận overshot nhỏ.
    - Thêm thành phần D để loại overshot, tăng Kd từ từ, thử nghiệm và chọn giá trị thích hợp. Steady state error có thể sẽ xuất hiện.
    - Thêm thành phần I để giảm steady state error. Nên tăng Ki từ bé đến lớn để giảm steady state error đồng thời không để cho overshot xuất hiện trở lại.
    Có một phương pháp rất phổ biến dùng để chọn các hệ số cho bộ điều khiển PID gọi là Ziegler–Nichols, bạn quan tâm có thể tự tìm hiểu thêm.
    Và kết quả thì thật ấn tượng. Các bạn có thể xem video điều khiển tốc độ sử dụng thuật toán PID dưới đây để thấy "chất lượng" của nó!
    Chủ đề cùng chuyên mục
    Chia sẻ Share





    văn hiệp, vuongbk, ChipKool10 others thích bài này.
    #1
  2. Đăng 24/1/13 #2

    thanh_nhanbk BioMedical Engineering

    Số bài viết: 357
    Đã được thích: 729
    Em vẫn chưa thực sự hiểu lắm về PID, bữa trước có tham dự triển lãm kỹ thuật, em thấy có 1 anh làm con quardroto dùng giải thuật pid, nghe ảnh nói mà em chẳng hiểu là ảnh nói cái gì cả? hic, trình độ vẫn còn yếu quá mấy anh ơi!
    #2
  3. Đăng 24/1/13 #3

    dovanhieu FB: Nong Dan Can Thi

    Số bài viết: 1,202
    Đã được thích: 1,603
    Yahoo Messenger
    Skype
    :( Em học Lý thuyết điều khiển tự động rồi mà vẫn chẳng biết PID để làm gì nữa. Hay đơn giản học để làm bài tập và lấy điểm. =((
    Võ Văn Vũ thích bài này.
    #3
  4. Đăng 24/1/13 #4

    demon52 Kỹ sư

    Số bài viết: 878
    Đã được thích: 1,109
    Mình rất dốt công suất nhưng cái PID này cũng hiểu sơ sơ, nó chỉ là thuật toán kết hợp giúp chúng ta có thể điều khiển chính xác tốc độ và vị trí của động cơ ( để loại bỏ mấy cái sai số do ma sát, trơn trượt, quán tính ...) và công việc lập trình cũng ko yêu cầu hiểu quá rõ về nó làm gì, các bạn chỉ cần hiểu các lấy các thông số, mình có đọc 1 bài bên hocavr để làm. Các bạn thử làm mạch thật xem, hiểu ngay ý mà.
    kidteamdovanhieu thích bài này.
    #4
  5. Đăng 24/1/13 #5

    chivu Kỹ sư

    Số bài viết: 57
    Đã được thích: 160
    pid thực sự cũng không có gì phức tạp cả. Nó chỉ là ứng dụng toán học vào điều chỉnh sai số trong điều khiển thôi. Tùy yêu cầu bài toán mà trong quá trình điều chỉnh (lập trình) mình biến tấu nó tí chút cho hợp lý, nhưng cái gốc thì vẫn như trình bày ở trên. Quan trọng là lúc hoạt động thực tế ta phải điều chỉnh để lấy được các hệ số hợp lý mà thôi (đây là khâu quan trọng) :)
    kidteam thích bài này.
    #5
  6. Đăng 24/1/13 #6

    pjkachu195 Học sinh phổ thông

    Số bài viết: 8
    Đã được thích: 0
    Bạn ơi lý thuyết thì có thể hiểu được nhưng ứng dụng vào lập trình như thế nào thì mình chịu.Bạn có thể hướng dẫn cho mọi người cùng biết được không ? thanks
    ======================
    BQT: Bạn không nên trích dẫn bài viết quá dài gây loãng người đọc
    #6
  7. Đăng 24/1/13 #7

    The Kid Kỹ sư

    Số bài viết: 236
    Đã được thích: 185
    tóm lại là hồi tiếp âm.
    x+y = const
    x tăng thi y giảm.điện tử học là toán học vi phân.thế thôi.
    steady state có nghĩa là trang thái xác lập, có nghĩa là trạng thái có tính chu kỳ. yêu cầu mod phải giải thích cặn kẽ.không trừu tượng
    vuongbksgesvn thích bài này.
    #7
  8. Đăng 24/1/13 #8

    sgesvn Moderator

    Số bài viết: 2,283
    Đã được thích: 2,743
    The Kid đơn giản vậy ông bạn. :))
    kidteam thích bài này.
    #8
  9. Đăng 24/1/13 #9

    The Kid Kỹ sư

    Số bài viết: 236
    Đã được thích: 185
    mình nói vậy xin đừng chê mình. bạn có thể giải thích cho mọi người biết là điều kiện của trạng thái xác lập và nếu mạch đạt được điều kiện xác lập khi nào(vì có thể mạch sẽ dao động ngẫu nhiên). Điện tử học là vậy.
    tất nhiên là không phải đơn giản vậy, vì sơ đồ mà các bạn đưa ra thực ra nó là phương trình vi phân cấp 2 (đáp số sẽ có giao động). sẽ là rấ khó, ý mình nói là hồi tiếp âm tuyến tính thui thì đơn giản thôi. nhưng có điều mà mình chắc chắn rằng,nếu các bạn cứ nói lý thuyết mà không có cơ sơ tính toán mạch cụ thể cũng chỉ là nói lại của ai đó mà thôi.quan trọng chúng ta học được cái gì
    #9
  10. Đăng 24/1/13 #10

    The Kid Kỹ sư

    Số bài viết: 236
    Đã được thích: 185
    cứ để các bạn ấy viết, đừng câu nệ gì dài hay ngắn.nhưng đừng có dẫn sang diễn đàn khác.phức tạp,anh em mình ở đây bàn luận thoại mái.cứ tôn trọng nhau là được
    #10

Chia sẻ trang này