Các chiến lược tốt để điều chỉnh các vòng lặp PID là gì?


55

Điều chỉnh mức tăng của bộ điều khiển có thể khó khăn, chiến lược chung nào hoạt động tốt để có được một hệ thống ổn định hội tụ đến giải pháp phù hợp?


1
Một câu hỏi nhắm vào một câu hỏi cụ thể hơn sẽ hữu ích hơn.
Mặt

2
Tôi luôn thấy việc điều chỉnh các bộ điều chỉnh rất phụ thuộc vào đặc điểm của hệ thống, đó là lý do tại sao tôi chưa bao giờ thấy các hệ thống tự động điều chỉnh rất hữu ích. Họ là tốt cho một đường chuyền đầu tiên, thiết lập hiệu suất thấp của các thông số, nhưng họ xa từ tối ưu, và bạn sẽ có cùng một vấn đề với bất kỳ chung chiến lược mà không được tối ưu hóa cho các khía cạnh cơ khí, điện và kiểm soát của một hệ thống nhất định.
Đánh dấu gian hàng

Câu trả lời:


66

Đối với các động cơ mô-men xoắn nhỏ, thấp, có ít hoặc không có bánh răng, một quy trình bạn có thể sử dụng để có được một giai điệu cơ bản tốt là thăm dò phản ứng của nó đối với sự xáo trộn.

Để điều chỉnh một PID sử dụng các bước sau:

  1. Đặt tất cả lợi ích về không.
  2. Tăng mức tăng P cho đến khi đáp ứng với nhiễu là dao động ổn định.
  3. Tăng mức tăng D cho đến khi các dao động biến mất (nghĩa là nó bị giảm nghiêm trọng).
  4. Lặp lại bước 2 và 3 cho đến khi tăng mức tăng D không dừng các dao động.
  5. Đặt P và D về các giá trị ổn định cuối cùng.
  6. Tăng mức tôi đạt được cho đến khi nó đưa bạn đến điểm đặt với số lượng dao động mong muốn (thường là 0 nhưng có thể có phản ứng nhanh hơn nếu bạn không bận tâm đến một số dao động quá mức)

Những nhiễu loạn bạn sử dụng phụ thuộc vào cơ chế mà bộ điều khiển được gắn vào. Thông thường di chuyển cơ chế bằng tay ra khỏi điểm đặt và buông là đủ. Nếu dao động càng ngày càng lớn thì bạn cần giảm mức tăng P.

Nếu bạn đặt mức tăng D quá cao, hệ thống sẽ bắt đầu trò chuyện (rung ở tần số cao hơn dao động khuếch đại P). Nếu điều này xảy ra, giảm mức tăng D cho đến khi nó dừng lại.

Tôi tin rằng kỹ thuật này có tên. Tôi sẽ đặt nó ở đây khi tôi tìm thấy nó.



1
@ Throwback1986, Đây chắc chắn không phải là Ziegler-Nichols mà chỉ sử dụng mức tăng P và khi đó mức tăng I và D được tính toán tương ứng từ mức tăng P dao động và thời gian
thẩm thấu

Bạn có lời khuyên bổ sung nào cho việc điều chỉnh cụ thể một cánh tay robot có nhiều khớp cần điều chỉnh không? Bạn có bắt đầu từ cơ sở và làm việc ra ngoài đến đầu cuối, hoặc ngược lại, hoặc thậm chí nó có quan trọng không?
adamconkey

1
Trong môi trường học thuật hoặc công nghiệp, bạn sẽ muốn một phương pháp kiểm soát tinh vi hơn. Đối với một hobbiest; trọng lực có tác dụng giảm xóc, vì vậy điều chỉnh từng khớp ở góc mà trọng lực tác động ít nhất đến động cơ. Chẳng hạn, với cánh tay hướng thẳng lên để trọng lực tác dụng lên ổ trục chứ không phải động cơ. Đặt hàng không quan trọng. Thêm một thuật ngữ bù trọng lực tiếp theo vào điều khiển của bạn có lẽ là cải tiến dễ dàng nhất (sử dụng Newton-Euler đệ quy cho một nhánh nối tiếp) nếu bạn không thể có được hiệu suất bạn muốn.
hauptmech

Công cụ pidtuner.com đã cho tôi kết quả tốt hơn so với phương pháp Ziegler-Nichols, có một số nhược điểm đã biết; dân gian.ntnu.no/skoge/publications/2003/tuningPID/more/iêu
Juan Gonzalez Burgos

13

Một phương pháp thử nghiệm tương tự với câu trả lời của hauptmech mà tôi đã được dạy ở trường đại học:

  1. Đặt tất cả mức tăng thành 0.
  2. Tăng K d cho đến khi hệ thống dao động.
  3. Giảm K d theo hệ số 2-4.
  4. Đặt K p thành khoảng 1% của K d .
  5. Tăng K p cho đến khi dao động bắt đầu.
  6. Giảm K p theo hệ số 2-4.
  7. Đặt K i thành khoảng 1% K p .
  8. Tăng K i cho đến khi dao động bắt đầu.
  9. Giảm K i theo hệ số 2-4.

Các phương pháp Ziegler-Nichols là chính xác hơn nếu bạn có thể nhận được một số chính xác cho thời kỳ dao động. Nó thường gây ra dao động khi sử dụng các số "PID cổ điển" đã cho, do đó không phải lúc nào cũng tối ưu.

Để biết các quy tắc chung về tác động của từng thuật ngữ đối với thời gian tăng, vượt mức, thời gian giải quyết, lỗi trạng thái ổn định và ổn định, hãy xem Bảng 1 của "Thiết kế và phân tích hệ thống điều khiển PID" của Li, Ang và Chong trong Hệ thống điều khiển của IEEE Tạp chí.


2
Kd đầu tiên? Tôi luôn nghĩ rằng tốt nhất là bắt đầu với Kp.
Rocketmagnet

Tôi đang phiên âm từ các slide bài giảng cũ, nếu có lý do chính đáng để không làm theo cách đó tôi sẽ tò mò muốn nghe nó.
Joe Baker

1
Đó là thuật toán mà tôi ủng hộ cho việc điều chỉnh "chỗ ngồi của quần". Nó sẽ giúp bạn tiến gần nhất có thể mà không cần mô hình hóa hệ thống hoặc đo lường phản ứng của nó. (Mô hình hóa và / hoặc đo lường là cách duy nhất để đi nếu bạn thực sự cần điều chỉnh đúng).
TimWescott

Điều chỉnh Kd trước tiên không có ý nghĩa gì với tôi, vì trong mọi PID tôi đã triển khai dấu hiệu của Kd là âm tính. Nó được sử dụng để giảm tín hiệu điều khiển khi xảy ra thay đổi rất lớn về lỗi, về bản chất làm giảm hệ thống. Nếu bạn chỉ có Kd, hệ thống sẽ di chuyển theo hướng ngược lại, làm tăng lỗi và gây ra sự cố. Nếu Kd là dương, thì bất cứ khi nào có sự thay đổi lớn về lỗi xảy ra theo đúng hướng, bạn sẽ làm cho nó thay đổi nhanh hơn và vượt quá mục tiêu của bạn.
Andrew Capodieci

Trên thực tế, điều chỉnh mức tăng D trước tiên có ý nghĩa, nhưng tôi cho rằng "tăng" D có nghĩa là tăng giá trị tuyệt đối và nó chỉ tăng giảm. Vấn đề lớn nhất với độ lợi D là nó khuếch đại nhiễu tần số cao và thật tuyệt khi thấy hiệu ứng đó mà không có mức tăng P. Vì vậy, về cơ bản, bạn đang bắt đầu bằng cách tìm kiếm các mức tăng mà tại đó nó dừng hoạt động như giảm xóc và bắt đầu khuếch đại tín hiệu lỗi và độ trễ. Tôi giả sử bước 2, bạn cần chọc cây của bạn để xem nó có dao động không.
DrRobotNinja

7

Embedded.com đã chuyển bài viết của tôi một lần nữa, nhưng đây là nơi nó đang ở. Điều này chỉ cho bạn cả cách viết một vòng lặp PID (tìm ra cách thực hiện nó trong một cái gì đó ngoài dấu phẩy động được để lại như một bài tập cho người đọc) và cách điều chỉnh nó.

Không có tiến sĩ

Cách tốt nhất phụ thuộc rất nhiều vào khả năng của bạn. Cách để điều chỉnh tốt nhất , giả sử bạn là người có hệ thống kiểm soát có kinh nghiệm, bằng cách sử dụng để đo lường phản ứng của nhà máy ("nhà máy" == "điều bạn đang kiểm soát"), sau đó tùy thuộc vào cách bạn đã làm các phép đo trích xuất một mô hình của nhà máy và thiết kế theo đó, hoặc chỉ thiết kế trực tiếp đến các phép đo.

Đối với một số loại cây khó nhất định, bạn sẽ thấy rằng mình không thể thực hiện các phép đo thỏa đáng, trong trường hợp đó bạn phải đi theo mô hình một mình. Đó là những thứ hiếm, nhưng thỏa mãn khi bạn làm cho chúng hoạt động.


5

Sebastian Thrun đã trình bày một thuật toán đơn giản để điều chỉnh PID trong lớp "Cách lập trình xe robot" của mình. Nó được gọi là "twiddle", ông mô tả nó ở đây .

Twiddle rất dễ tìm thấy cực tiểu địa phương - điều này có nghĩa là bạn có thể đưa ra một bộ ba hằng số ổn, nhưng không tối ưu cho tình huống. Vấn đề điều chỉnh các hằng số PID là một tập hợp con của một vấn đề tìm kiếm tổng quát hơn để tìm các tham số nhất định để tối đa hóa tiện ích (trong trường hợp này, giảm thiểu lỗi của thuật toán PID). Bạn có thể xem xét các giải pháp chung khác cho vấn đề này, như leo đồi, ủ mô phỏng, thuật toán di truyền, v.v ... có thể sẽ tìm ra giải pháp tối ưu hơn.


4

Ngược lại với hai câu trả lời khác, tôi muốn nói một cách điều chỉnh thủ công tốt là bỏ qua Kd. Vì vậy, bắt đầu từ 0 và tăng Kp cho đến khi bạn đạt được mục tiêu, sau đó tăng Ki để thoát khỏi lỗi trạng thái ổn định.

Kd có thể nhầm lẫn vấn đề này vì nó phản ứng kém với tiếng ồn, sau đó bạn bắt đầu thêm các bộ lọc vào đầu vào tương tự của mình và sau đó đặt câu hỏi điều gì xảy ra ngoài việc làm chậm sự kiểm soát của bạn và làm cho toàn bộ vấn đề trở nên khó khăn hơn ...

Một điều nữa ràng buộc tôi nhầm lẫn là nếu phương trình PID ở dạng chuẩn hoặc ở dạng độc lập (song song trong wikipedia). Hiệu ứng của Ki dường như nghịch đảo khi hình thức là cách sai với những gì bạn nghĩ nó là. Cả hai loại được sử dụng trong tự động hóa, đôi khi có tùy chọn để chuyển đổi giữa chúng.


4

Mô hình hệ thống

Tất nhiên điều chỉnh thử nghiệm có thể được thực hiện như được đề cập trong các câu trả lời khác, nhưng nếu bạn có thể xác định mô hình động hợp lý cho bất cứ điều gì bạn muốn kiểm soát và có thể xác định các tham số của nó , bạn có thể thiết kế bộ điều khiển của mình dựa trên tốt các tiêu chí được xác định như vượt quá , thời gian tăng , thời gian giải quyết , lỗi trạng thái ổn định , v.v.

Thậm chí có những công cụ trong MATLAB có thể điều chỉnh bộ điều khiển của bạn để tối ưu hóa cho sự kết hợp của các tiêu chí này, điều này làm cho nó thậm chí còn tốt hơn để sử dụng.

Biết bộ điều khiển của bạn

Tìm hiểu những gì từng tham số trong bộ điều khiển PID cũng khá hữu ích. Tất cả các thuật toán thử nghiệm dựa trên loại kiến ​​thức này bằng cách nào đó. Nếu bạn không chỉ làm theo hướng dẫn mà còn có thể tự mình cảm nhận được điều đó, bạn có thể thấy điều chỉnh thủ công dễ dàng hơn.

Các vấn đề trong thế giới thực

Có khả năng một trong những điều này, trong số những điều khác, sẽ xảy ra khi bạn điều chỉnh bộ điều khiển của mình: cuộn dây , tốc độ lấy mẫu không đầy đủ , độ bão hòa .

Phần kết luận

Cuối cùng, tất cả phụ thuộc vào những gì bạn thực sự có thể làm với hệ thống của mình để có được một số kiến ​​thức về cách thức hoạt động và loại thử nghiệm nào có thể được thực hiện. Điều tốt nhất là thực sự tìm hiểu thêm về bộ điều khiển PID và lý thuyết điều khiển nói chung, IMO, nhưng tôi thiên vị :)


Tôi không hiểu tại sao mọi người cứ đề xuất phương pháp phỏng đoán để điều chỉnh PID trong khi ngày nay chúng tôi được cung cấp nhiều công cụ tự động để nhận dạng nhà máy và thiết kế bộ điều khiển không yêu cầu nền tảng lý thuyết sâu sắc. Thumb up cho câu trả lời này sau đó.
Ugo Pattacini

3

Tôi sẽ cố gắng mở rộng một chút từ kinh nghiệm của tôi cho những người có thể quan tâm. Tôi nghĩ vấn đề là chúng ta có rất nhiều lý thuyết điều khiển hơi khó tiếp cận (và đôi khi không hữu ích) và sau đó chúng ta có các quy tắc đưa ra các giả định về các hệ thống thường không chính xác.

Ổn định

Trước tiên hãy nói về lý do tại sao các vòng điều khiển trở nên không ổn định. Đối với cuộc thảo luận này, tôi sẽ giả sử một hệ thống tuyến tính. Một cách không chính thức điều này có nghĩa là nếu tín hiệu điều khiển của bạn là sóng hình sin ở một tần số nhất định thì đầu ra quan sát của bạn có cùng tần số và nếu bạn thay đổi biên độ của hệ thống điều khiển thì đầu ra của bạn sẽ phản hồi theo cùng một tỷ lệ. Giả định này là một xấp xỉ tốt cho nhiều hệ thống trong thế giới thực và cho phép chúng ta xem xét các tần số khác nhau.

Nếu bạn nhìn vào đường dẫn điều khiển, bạn có điểm đặt, bộ điều khiển PID, hệ thống của bạn (còn gọi là "Nhà máy"), rồi cảm biến của bạn. Tưởng tượng một điểm đặt cố định và sóng hình sin từ cảm biến của bạn (điều này tương đương với nhiễu loạn trong thế giới thực tại cảm biến, được đưa trở lại). Trong một hệ thống không ổn định, phản hồi của bạn làm cho vòng điều khiển khuếch đại lỗi thay vì giảm nó để thời gian tăng biên độ của bạn. Lý do điều này xảy ra là do độ trễ, hoặc đối với tần số cụ thể này, một sự dịch pha giữa đầu vào và đầu ra. Đối với một tần số nhất định, chúng ta có thể xem xét sự thay đổi và biên độ của vòng lặp mở (nghĩa là không có phản hồi) của đầu ra và khi chúng ta vẽ tất cả những thứ đó trên biểu đồ, chúng ta sẽ có được một cái gì đó giống như Bode Plot. Nếu chúng ta có một tình huống trong biểu đồ vòng mở này trong đó lỗi tiếp tục được khuếch đại thì chúng ta có một hệ thống không ổn định. Nếu độ trễ nhỏ hơn 1/2 bước sóng hoặc mức tăng nhỏ hơn x1 thì hệ thống sẽ ổn định . Trong thực tế, chúng tôi muốn có một số tiền ký quỹ từ thời điểm đó (đạt được tỷ lệ ký quỹ và tỷ lệ pha), đó là lý do tại sao bạn sẽ thấy "lùi lại" này trong nhiều phương pháp thủ công / heuristic.

Vấn đề chính với những phương pháp thủ công đó là bạn bị mù và bạn được đảm bảo khá nhiều để có được một hệ thống điều khiển kém.

Ngoài ra, hãy nhớ rằng ý nghĩa của P, I và D có liên quan đến cảm biến của bạn đang đo và kiểm soát nào bạn đang áp dụng. Một lỗi phổ biến trong các bộ điều khiển được xây dựng tại nhà là mọi người nghĩ rằng họ đang áp dụng P khi họ thực sự không. Bộ điều khiển động cơ thường có vòng lặp vị trí, chạy trên vòng tốc độ chạy trên vòng xoắn. (Một thác )

OK nhưng điều này giúp chúng ta như thế nào?

Điểm đầu tiên tôi muốn đưa ra là nếu bạn đang xây dựng bộ điều khiển PID của riêng mình, bạn cũng nên xây dựng cách đo phản ứng vòng hở. Thực hiện quét tần số ở đầu vào bộ điều khiển của bạn và đo đầu ra của cảm biến với phản hồi bị ngắt kết nối. Sau đó, bạn có thể vẽ sơ đồ Bode vòng mở và xem tại sao hệ thống của bạn ổn định và có thể trao đổi các điều khiển khác nhau. Nó cũng hữu ích để đo phản hồi vòng kín và bạn có thể làm điều đó với bất kỳ hệ thống nào bằng cách thực hiện quét tần số điểm đặt của bạn trong khi vòng lặp được đóng lại. Cả hai điều này đều không khó và không đòi hỏi nhiều kiến ​​thức lý thuyết.

Nếu bạn chỉ đơn giản là điều chỉnh các điều khiển mà không có bất kỳ hiểu biết nào về những gì đang diễn ra dưới mui xe, bạn sẽ không thể tối ưu hóa hệ thống của mình. Xây dựng một số trực giác về các hệ thống này không khó lắm. Ví dụ, mức tăng tỷ lệ không ảnh hưởng đến pha mà chỉ đơn giản là tăng mức tăng vòng hở trên tất cả các tần số. Vì vậy, những gì bạn đang làm khi bạn tăng mức tăng theo tỷ lệ trong tất cả các phương pháp điều chỉnh thủ công đó là tìm tần số trong đó pha đến -180. Xem điều này để có thêm ý tưởng về tác động của các điều khiển khác nhau đối với đáp ứng tần số của bạn.

Khá thường xuyên nhận được hiệu suất vòng kín tốt nhất liên quan đến việc điều chỉnh hệ thống và không chỉ tăng bộ điều khiển. Những gì bạn muốn là làm cho hệ thống "cứng" nhất có thể. Điều đó sẽ cho phép bạn tăng cường các tham số điều khiển và có được băng thông vòng mở và đóng tốt nhất. Theo kinh nghiệm của tôi trong các ứng dụng điều khiển động cơ, mức tăng theo tỷ lệ là thứ nên được thực hiện trong hầu hết các "công việc" và tích hợp "phần còn lại". Tôi không nghĩ bạn cần một thuật ngữ D nào cả. Có bộ lọc thông thấp và bộ lọc notch giúp ích rất nhiều trong các trường hợp bạn có thể có một số cộng hưởng cơ học nhưng việc đặt chúng mà không có Bode Plot là rất khó (tần số dao động bạn quan sát được trong vòng kín có thể khác với vòng lặp mở).

Nếu an toàn là một mối quan tâm (động cơ rất mạnh hoặc hệ thống có thể bị phá hủy bởi động cơ mất kiểm soát), bạn cần đặt một số giới hạn trước khi bắt đầu điều chỉnh (ví dụ: giới hạn hiện tại, lỗi vị trí tối đa) để bảo vệ hệ thống. Sau đó, bạn cần có được một số loại cảm giác cho phạm vi của các tham số. Nếu phản hồi của bạn có 40 số trên mỗi vòng quay hoặc 4000 số trên mỗi vòng quay, các tham số của bạn sẽ là hệ số 100 cho một hệ thống nhất định. Cách tiếp cận của tôi trước tiên là tìm một phạm vi mà bạn có một số khả năng kiểm soát kém và sau đó lan rộng từ đó bắt đầu bằng P và sau đó tôi (mặc dù một lần nữa bạn lại bị mù). Sao lưu tạo ra biên độ ổn định này.

Ngoài vòng khép kín

Vòng lặp kín cố gắng để đưa ra lỗi từ hệ thống. Nó sẽ luôn luôn có một hiệu suất hạn chế. Những gì bạn muốn làm là giảm thiểu lỗi mà bộ điều khiển vòng kín của bạn nhìn thấy và một cách để làm điều đó là thông qua một kỹ thuật được gọi là chuyển tiếp nguồn cấp dữ liệu. Trong feed-Forward bạn đi xung quanh bộ điều khiển và điều khiển một lệnh trực tiếp đến hệ thống. Một ví dụ về điều đó sẽ là tăng tốc chuyển tiếp. Nếu bạn biết mô-men xoắn của động cơ không đổi và bạn biết tải trọng bạn có thể biết được mức độ bạn cần lái xe để có được gia tốc nhất định của tải. Bạn chỉ cần lấy gia tốc đầu vào lệnh, nhân nó với một hằng số và thêm nó vào lệnh ổ đĩa của bộ điều khiển. Về cơ bản, bạn đang làm những gì cần thiết để điều khiển hệ thống nếu không có bộ điều khiển và bạn càng có thể nhận được càng ít lỗi thì vòng lặp của bạn phải xử lý càng tốt và hệ thống của bạn sẽ hoạt động tốt hơn. Nó làm cho một sự khác biệt rất lớn trong thực tế.


"Theo kinh nghiệm của tôi trong các ứng dụng điều khiển động cơ, mức tăng theo tỷ lệ là thứ nên làm hầu hết" công việc "và tích hợp" phần còn lại ". ​​Tôi không nghĩ bạn cần một thuật ngữ D nào cả." Tôi đồng ý với điều đó cho ứng dụng điều khiển động cơ điển hình. P thực hiện công việc chính và tôi bù cho lỗi trôi dạt / lỗi dài hạn. Nhưng ở đây, quad quad sẽ chịu nhiều nhiễu loạn bên ngoài, vì vậy thuật ngữ D rất quan trọng để có được phản hồi nhanh. Đối với thuật ngữ I, trừ khi quad ở chế độ điều hướng tự trị, điều đó không quan trọng.
dm76

@ dm76: Hầu hết kinh nghiệm của tôi là về điều khiển động cơ và tôi từ chối trách nhiệm đó ;-) Trực giác của tôi nói rằng vẫn còn chỗ cho tôi trong ứng dụng quad quad và tôi nghĩ nếu P rất cao thì nó có thể xử lý các nhiễu bên ngoài (giống như nó làm trong điều khiển động cơ). Tôi thực sự cần phải xem xét kỹ hơn về các hệ thống đó để nói điều gì đó chắc chắn về tứ giác ... Tôi nghĩ rằng rất nhiều điều tôi nói ở đây áp dụng (đặc biệt là điều chỉnh của bạn trong miền tần số và có đáp ứng vòng lặp mở của hệ thống ).
Guy Sirton

1
@ dm76: Và thực sự những "quy tắc ngón tay cái" đó thực sự dẫn đến hiệu suất rất tầm thường trong các động cơ và có lẽ giống nhau trong các tứ giác. Đôi khi, một bộ lọc notch được đặt tốt có thể tạo ra một sự khác biệt lớn ...
Guy Sirton

0

Ziegler-Nichols là một phương pháp thủ công dễ dàng. Các phương thức mạnh hơn cũng tồn tại - chúng thường dựa vào các giải pháp toán học (phân tích, tối ưu hóa lặp, v.v.)

Ngoài ra, google "tự điều chỉnh PID" cho một số kỹ thuật tự động. Yêu thích của tôi là ứng dụng của các mạng thần kinh để điều chỉnh PID.


0

Nếu bạn muốn có một hệ số PID chính xác:

  • Nhận dữ liệu bộ chấp hành thống kê của bạn (tức là collecting input voltages+ encoder pulsestrong 0.01secthời gian const thường xuyên ( ) cho 20secsdưới dạng ma trận 3x 2000)
  • Nhận chức năng chuyển (TF) của bộ truyền động của bạn (sử dụng hộp công cụ Nhận dạng trong MATLAB).
  • Cuối cùng, sử dụng hộp công cụ PIDTool trong MATLAB và tải lên chức năng biến đổi của bạn.

Hoặc một cách nhanh chóng và đơn giản:

Có một cách tiếp cận nhanh hơn được gọi là Ziegler nhận Nichols : nhập mô tả hình ảnh ở đây

Và trong hình ảnh này chứng minh các hiệu ứng tham số PID :
Hiệu ứng tham số PID

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.