PID 루프 튜닝을위한 좋은 전략은 무엇입니까?


55

컨트롤러 게인 조정이 어려울 수 있습니다 . 올바른 솔루션으로 수렴되는 안정적인 시스템을 얻는 데 어떤 일반적인 전략이 효과적입니까?


1
보다 구체적인 질문을 목표로하는 질문이 더 유용 할 것입니다. 그렇지 않으면, 당신은 튜닝에 관한 섹션과 함께 PID 기사를 보아야 합니다
ronalchn

2
필자는 항상 튜닝 PID가 시스템의 특성에 크게 의존한다는 것을 알고 있었기 때문에 오토 튜닝 시스템 이 그다지 유용 하지 않은 이유는 무엇입니까? 첫 번째 통과, 낮은 성능의 매개 변수 집합에는 적합하지만 최적과 는 거리멀고 특정 시스템의 기계, 전기 및 제어 측면에 최적화되지 않은 일반 전략 과 동일한 문제가 있습니다.
Mark Booth

답변:


66

기어링이 거의 없거나 전혀없는 소형 저 토크 모터의 경우 좋은 기준선 튜닝을 얻는 데 사용할 수있는 절차 중 하나는 외란에 대한 반응을 조사하는 것입니다.

PID를 조정하려면 다음 단계를 사용하십시오.

  1. 모든 게인을 0으로 설정하십시오.
  2. 외란에 대한 반응이 안정적으로 진동 할 때까지 P 게인을 늘리십시오.
  3. 진동이 사라질 때까지 D 게인을 증가시킵니다 (즉, 심각하게 감쇠 됨).
  4. D 게인을 늘려도 진동이 멈추지 않을 때까지 2 단계와 3 단계를 반복하십시오.
  5. P와 D를 마지막 안정 값으로 설정하십시오.
  6. 원하는 진동 수로 설정 점에 도달 할 때까지 I 게인을 늘리십시오 (일반적으로 0이지만 오버 슈트의 몇 번의 진동을 신경 쓰지 않으면 더 빠른 응답을 얻을 수 있음)

사용하는 장애는 컨트롤러가 연결된 메커니즘에 따라 다릅니다. 일반적으로 설정 점에서 손으로 메커니즘을 옮기고 놓아도 충분합니다. 진동이 점점 커지면 P 게인을 줄여야합니다.

D 게인을 너무 높게 설정하면 시스템이 떨리기 시작합니다 (P 게인 진동보다 높은 주파수에서 진동). 이 경우 D 게인이 멈출 때까지 줄이십시오.

이 기술에는 이름이 있다고 생각합니다. 내가 찾으면 여기에 넣겠습니다.



1
@ Throwback1986, 이것은 확실히 하지 만 P 이득을 사용하여 I 및 D 이득 후 발진 P 이득 및 oscilation 기간에서 따라 산출되는 위치 지글러 - 니콜스
dm76

튜닝이 필요한 다중 조인트가있는 로봇 암을 튜닝하는 데 대한 추가 조언이 있습니까? 기지에서 시작하여 엔드 이펙터 또는 다른 방법으로 바깥쪽으로 작업합니까, 아니면 중요합니까?
adamconkey

1
학술 또는 산업 환경에서는보다 정교한 제어 방법이 필요합니다. 가장 취미적인; 중력은 감쇠 효과가 있으므로 중력이 모터에 가장 영향을 미치는 각도로 각 조인트를 조정하십시오. 예를 들어, 중력이 모터가 아닌 베어링에 작용하도록 암이 똑바로 향하도록합니다. 순서는 중요하지 않습니다. 원하는 성능을 얻을 수없는 경우 피드 포워드 중력 보상 항을 제어에 추가하는 것이 가장 쉬운 방법 일 것입니다 (직렬 암에 재귀 Newton-Euler 사용).
hauptmech

pidtuner.com의 도구는 나에게 주신 좋은 결과 몇 가지 알려진 단점이 있습니다 지글러 - 니콜스 방법보다가; folk.ntnu.no/skoge/publications/2003/tuningPID/more/…
Juan Gonzalez Burgos

13

내가 대학에서 가르쳤다는 hauptmech의 대답과 비슷한 실험 방법 :

  1. 모든 게인을 0으로 설정하십시오.
  2. 시스템이 진동 할 때까지 K d를 증가시킵니다 .
  3. K d 를 2-4만큼 줄 입니다.
  4. K pK d 의 약 1 %로 설정하십시오 .
  5. 진동이 시작될 때까지 K p를 증가시킵니다 .
  6. 감소 K의 P를 2-4 배로.
  7. 설정 K 난을 의 약 1 %에 K의 페이지 .
  8. 증가 K에게 난을 진동이 시작할 때까지.
  9. 감소 K I를 2-4 배로.

지글러 - 니콜스 방법은 당신이 진동주기에 대한 정확한 수를 얻을 수 있다면 더 정확하다. 일반적으로 주어진 "클래식 PID"숫자를 사용하여 진동을 유발하므로 항상 최적의 것은 아닙니다.

상승 시간, 오버 슈트, 안정화 시간, 정상 상태 오류 및 안정성에 대한 각 용어의 영향에 대한 일반적인 규칙 은 IEEE 제어 시스템에서 Li, Ang 및 Chong 의 "PID 제어 시스템 분석 및 설계" 표 1을 참조하십시오. 잡지.


2
먼저 Kd? 나는 항상 Kp로 시작하는 것이 가장 좋다고 생각했습니다.
Rocketmagnet

나는 오래된 강의 슬라이드에서 기록하고 있습니다. 그렇지 않은 이유가 있다면 그것을 듣고 싶어합니다.
Joe Baker

1
이것이 바로 "바지 자리"튜닝을 옹호하는 알고리즘입니다. 시스템을 모델링하거나 응답을 측정하지 않고도 최대한 가깝게 접근 할 수 있습니다. (올바른 튜닝이 필요한 경우 모델링 및 / 또는 측정이 유일한 방법입니다).
TimWescott

Kd를 조정하는 것은 모든 PID에서 Kd의 부호가 음수이기 때문에 나에게 의미가 없습니다. 시스템 오류를 줄이면서 매우 큰 오류 변화가 발생할 때 제어 신호를 줄이는 데 사용됩니다. Kd 만있는 경우 시스템이 반대 방향으로 이동하여 오류가 증가하고 문제가 복잡해집니다. Kd가 양수이면 올바른 방향으로 오류가 크게 변경 될 때마다 더 빠르게 변경하고 목표를 초과 달성하게됩니다.
앤드류 카포 디치

실제로, D 게인 조정은 먼저 의미가 있지만 "증가"D 게인은 절대 값 증가를 의미하고 감쇠 만 증가한다고 가정합니다. D 게인의 가장 큰 문제는 고주파 노이즈를 증폭시키고 P 게인없이 해당 효과를 보는 것이 좋습니다. 따라서 본질적으로 댐핑과 같은 동작을 멈추고 노이즈 및 지연된 오류 신호를 증폭하기 시작하는 게인을 찾는 것부터 시작합니다. 나는 2 단계를 가정하고, 식물이 진동하는지 확인하기 위해 식물을 찌를 필요가 있습니다.
DrRobotNinja

7

Embedded.com에서 기사를 다시 옮겼지만 지금 여기 있습니다. 여기에는 PID 루프를 작성하는 방법 (부동 소수점이 아닌 다른 방법으로 PID 루프를 수행하는 방법을 설명하는 방법)과 조정 방법이 모두 나와 있습니다.

박사없이 PID

가장 좋은 방법은 당신의 능력에 많이 의존한다. 숙련 된 제어 시스템 사용자 인 경우 최적의 튜닝 을 얻는 방법 은 플랜트의 응답 ( "식물"== "제어중인 것")을 측정하는 것입니다. 측정은 플랜트의 모델을 추출하여 설계하거나 측정에 직접 설계합니다.

어려운 특정 공장에서는 만족스러운 측정을 할 수 없다는 것을 알게 될 것입니다.이 경우 모델 만 사용하면됩니다. 그것들은 드물지만 일할 때 만족합니다.


5

Sebastian Thrun은 "로봇 자동차 프로그래밍 방법"클래스에서 PID 튜닝을위한 간단한 알고리즘을 제시했습니다. "트위들"이라고하며 여기에 설명되어 있습니다 .

트위들 (Twiddle)은 극소값을 찾는 경향이 있습니다. 즉 , 상황에 맞지 않지만 최적 의 3 가지 상수를 만들 수 있습니다. PID 상수 조정 문제는 유틸리티를 최대화하기 위해 특정 매개 변수를 찾는 일반적인 검색 문제의 하위 세트입니다 (이 경우 PID 알고리즘의 오류 최소화). 이 문제에 대한 다른 일반적인 솔루션 (예 : 언덕 등반, 시뮬레이션 어닐링, 유전자 알고리즘 등)을 통해보다 최적의 솔루션을 찾을 수 있습니다.


4

다른 두 가지 대답과 달리 PID를 조정하는 좋은 수동 방법은 Kd를 무시하는 것이라고 말합니다. 따라서 0에서 시작하여 목표에 도달 할 때까지 Kp를 늘리고 Ki를 증가시켜 정상 상태 오류를 제거하십시오.

Kd는 노이즈에 잘 반응하지 않아 문제를 혼동시킬 수 있습니다. 그러면 아날로그 입력에 필터를 추가하기 시작한 다음 제어 속도를 늦추는 것 외에 다른 것이 무엇인지 질문하고 모든 것을 해결하기가 더 어려워집니다.

나를 혼란스럽게하는 또 다른 것은 PID 방정식이 표준 형식이거나 독립 (wikipedia의 병렬) 형식인지 여부입니다. Ki의 효과는 형식이 생각한 것과 다른 방식 일 때 역으로 보입니다. 두 유형 모두 자동화에 사용되며 때로는 전환 옵션이 있습니다.


4

시스템 모델링

물론 다른 답변에서 언급 한 것처럼 실험 튜닝을 수행 할 수 있지만 제어하려는 모든 것에 대해 합리적인 동적 모델을 정의 하고 매개 변수식별 할 수 있다면 잘 기반으로 컨트롤러를 설계 할 수 있어야합니다 오버 슈트 , 상승 시간 , 정착 시간 , 정상 상태 오류 등과 같은 정의 된 기준 .

MATLAB 에는 컨트롤러를 조정하여 이러한 기준의 조합에 맞게 최적화 할 수있는 도 있어 사용하기가 더 좋습니다.

컨트롤러 알기

PID 컨트롤러의 각 파라미터가 무엇을하는지 배우는 것도 도움이됩니다. 모든 실험 알고리즘은 어떻게 든 이런 종류의 지식을 기반으로합니다. 지침을 따를뿐만 아니라 그 느낌을 스스로 얻을 수 있다면 컨트롤러를 수동으로 조정하는 것이 더 쉬울 수 있습니다.

실제 문제

컨트롤러를 튜닝 할 때 와인딩 , 부적절한 샘플링 속도 , 채도 등 이러한 것들 중 하나가 길을 잃을 가능성이 있습니다 .

결론

결국, 시스템 작동 방법 및 실험 종류에 대한 지식을 얻기 위해 실제로 시스템으로 무엇을 할 수 있는지에 달려 있습니다. 가장 좋은 점은 PID 컨트롤러와 제어 이론에 대해 더 많이 배우는 것입니다. 일반적으로 IMO이지만 편견이 있습니다. :)


오늘날 사람들이 PID 튜닝을위한 휴리스틱 을 제안하는 이유를 이해하지 못하지만 오늘날에는 이론적 인 배경이 필요없는 플랜트 식별 및 컨트롤러 설계를위한 다양한 자동 도구가 제공됩니다. 그런 다음이 답변에 엄지 손가락을 대십시오.
Ugo Pattacini

3

관심이있는 사람들을 위해 내 경험에서 조금 확장하려고 노력할 것입니다. 문제는 우리가 다소 접근하기 어려운 (때로는 유용하지 않은) 많은 제어 이론을 가지고 있고 종종 부정확 한 시스템에 대한 가정 규칙을 가지고 있다고 생각합니다.

안정

제어 루프가 불안정 해지는 이유에 대해 먼저 이야기 해 봅시다. 이 토론에서는 선형 시스템을 가정하겠습니다. 비공식적으로 이것은 제어 신호가 주어진 주파수에서 사인파 인 경우 관측 된 출력이 동일한 주파수에 있고 제어 시스템의 진폭을 변경하면 출력이 동일한 비율로 응답한다는 것을 의미합니다. 이 가정은 많은 실제 시스템에 대한 근사치이며 서로 다른 주파수를 개별적으로 볼 수 있습니다.

제어 경로를 보면 설정 점, PID 컨트롤러, 시스템 (일명 "Plant") 및 센서가 있습니다. 센서에서 고정 설정 점과 사인파를 상상해보십시오 (이것은 센서의 실제 교란과 동일합니다). 불안정한 시스템에서 피드백은 시간이 증가함에 따라 진폭이 증가하도록 제어 루프가 오류를 감소시키는 대신 오류를 증폭시킵니다. 이것이 일어나는 이유는 지연 또는이 특정 주파수에 대해 입력과 출력 사이의 위상 편이 때문입니다. 주어진 주파수에서 출력의 개방 루프 (즉, 피드백 없음) 시프트 및 진폭을 볼 수 있으며 그래프에 모든 것을 그릴 때 Bode Plot 과 같은 것을 얻을 수 있습니다. 이 개방 루프 그래프에서 오류가 계속 증폭되는 상황이 발생하면 시스템이 불안정 해집니다. 지연이 파장의 1/2보다 작거나 게인이 x1보다 작 으면 시스템은 안정적 입니다. 실제로 우리는 그 시점에서 약간의 마진 (이득 마진과 위상 마진)을 원하기 때문에 많은 수동 / 휴리스틱 방법에서이 "후진"을 보게됩니다.

이러한 수동 방법의 주요 문제점은 맹인으로 비행하며 제어 시스템이 제대로 작동하지 않는다는 것입니다.

또한 P, I 및 D의 의미는 센서가 측정하는 것과 적용하는 제어와 관련이 있습니다. 가정용 컨트롤러의 일반적인 실수는 사람들이 실제로 그렇지 않을 때 P를 적용한다고 생각하는 것입니다. 모터 컨트롤러에는 종종 위치 루프가 있으며, 토크 루프에서 실행되는 속도 루프에서 실행됩니다. (A 캐스케이드 )

그래, 이것이 어떻게 우리에게 도움이 되나요?

첫 번째 요점은 자신의 PID 컨트롤러를 구축하는 경우 개방 루프 응답을 측정하는 방법도 빌드해야한다는 것입니다. 컨트롤러의 입력에서 주파수 스윕을 수행하고 피드백이 분리 된 상태에서 센서의 출력을 측정하십시오. 그런 다음 개방형 루프 보드 플롯을 그리고 시스템이 안정적인 이유를 보고 다양한 컨트롤과 균형을 맞출 수 있습니다. 폐쇄 루프 응답을 측정하는 것도 유용하며 루프가 닫힌 상태에서 설정 점의 주파수 스위프를 수행하여 모든 시스템에서이를 수행 할 수 있습니다. 둘 다 그렇게 어렵지는 않으며 많은 이론적 지식이 필요하지 않습니다.

후드 아래에서 무슨 일이 일어나고 있는지 이해하지 않고 단순히 컨트롤을 조정하는 경우 시스템을 최적화 할 수 없습니다. 이러한 시스템에 대한 직관을 구축하는 것은 그리 어렵지 않습니다. 예를 들어 비례 게인은 위상에 영향을 미치지 않지만 모든 주파수에서 개방 루프 게인을 증가시킵니다. 모든 수동 튜닝 방법에서 비례 게인을 증가시킬 때하고있는 일은 위상이 -180이되는 주파수를 찾는 것입니다. 다양한 컨트롤이 주파수 응답에 미치는 영향에 대한 자세한 내용을 보려면 이것을 참조하십시오 .

폐쇄 루프 성능을 극대화하려면 컨트롤러 게인뿐만 아니라 시스템을 조정해야합니다. 당신이 원하는 것은 시스템을 가능한 한 뻣뻣한 것으로 만드는 것입니다. 이를 통해 제어 파라미터를 증가시키고 최상의 개방 및 폐쇄 루프 대역폭을 얻을 수 있습니다. 모터 제어 어플리케이션에서의 경험에서 비례 이득은 대부분의 "작업"과 적분기의 "휴식"을 수행해야하는 것입니다. 나는 당신이 D 용어가 전혀 필요하지 않다고 생각합니다. 저역 통과 필터와 노치 필터를 사용하면 기계적 공진이있을 수 있지만 보드 플롯없이 설정하는 것이 매우 어려운 상황에서 많은 도움이됩니다 (폐쇄 루프에서 관찰하는 발진 주파수는 개방 루프와 다를 수 있음).

안전이 우려되는 경우 (매우 강력한 모터 또는 모터가 제어 할 수없는 시스템으로 인해 파괴 될 수있는 시스템) 시스템을 보호하기 위해 튜닝을 시작하기 전에 약간의 제한을 설정해야합니다 (예 : 전류 제한, 최대 위치 오류). 그런 다음 매개 변수 범위에 대한 느낌을 얻어야합니다. 피드백에 회 전당 40 카운트 또는 회 전당 4000 카운트가있는 경우 매개 변수는 주어진 시스템에 대해 100 배가됩니다. 내 접근 방식은 먼저 제어력이 좋지 않은 범위를 찾은 다음 P부터 시작하여 그다음부터 올라갑니다. (나는 다시 장님입니다.) 백 오프하면이 안정성 마진이 생성됩니다.

폐쇄 루프 너머

닫힌 루프는 시스템에서 오류를 제거하려고 시도합니다. 항상 다소 제한된 성능을 갖습니다. 당신이하고 싶은 일은 폐쇄 루프 컨트롤러가 보는 오류를 최소화하는 것입니다. 그 방법 중 하나는 피드 포워드 라는 기술을 사용하는 것 입니다. 피드 포워드에서는 컨트롤러를 둘러보고 시스템에 직접 명령을 내립니다. 그 예로 가속 피드 포워드가 있습니다. 모터의 토크 상수를 알고 있고 부하를 알고 있다면 부하의 특정 가속을 얻기 위해 얼마나 많은 전류를 구동해야하는지 알 수 있습니다. 명령 입력 가속을 상수에 곱하여 컨트롤러의 드라이브 명령에 추가하면됩니다. 기본적으로 컨트롤러가없는 경우 시스템을 구동하는 데 필요한 작업을 수행하고 있으며 루프에 걸리는 오류가 적을수록 시스템 성능이 향상됩니다. 실제로는 큰 차이가 있습니다.


"모터 컨트롤 어플리케이션에서의 경험에서 비례 이득은 대부분의"작업 "과 적분기의"휴식 "을 수행해야하는 것입니다. D 용어가 전혀 필요하지 않다고 생각합니다." 나는 전형적인 모터 제어 어플리케이션에 동의합니다. P는 주요 업무를 수행하고 I는 장기 드리프트 / 오류를 보상합니다. 그러나 여기에서는 쿼드 콥터가 많은 외부 난류를 겪을 것이므로 D 항은 빠른 응답을 얻는 데 중요합니다. I 용어와 관련하여 쿼드가 자율 탐색 모드에 있지 않는 한 그렇게 중요하지 않습니다.
dm76

@ dm76 : 내 경험의 대부분은 모터 제어에 관한 것이며, 면책 조항을 만듭니다. ;-) 직관은 쿼드 콥터 응용 프로그램에 여전히 여유가 있다고 말하고 P가 매우 높으면 외부 교란을 처리 할 수 ​​있다고 생각합니다 (예 : 모터 제어에서 수행됩니다). 쿼드 콥터에 대해 명확한 것을 말하려면 해당 시스템을 자세히 살펴볼 필요가 있습니다. 여기서 내가 말한 많은 부분이 적용됩니다 (특히 주파수 영역에서 튜닝을 수행하고 시스템의 개방 루프 응답을 가짐) ).
Guy Sirton

1
@ dm76 : 실제로 이러한 "통칙"PID 튜닝은 모터에서 매우 평범한 성능을 제공하며 쿼드 콥터에서도 거의 동일합니다. 때때로 잘 배치 된 노치 필터는 차수의 차이를 만들 수 있습니다.
Guy Sirton

0

Ziegler-Nichols 는 쉬운 수동 방법입니다. 보다 강력한 방법도 존재합니다. 일반적으로 수학적 솔루션 (분석, 반복 최적화 등)에 의존합니다.

그 외에도 일부 자동화 기술에 대한 Google "자체 조정 PID". 내가 가장 좋아하는 것은 신경망을 PID 튜닝에 적용하는 것입니다.


0

정확한 PID 계수를 원할 경우 :

  • 당신의 통계 액추에이터 데이터 가져 오기 (즉, collecting input voltages+ encoder pulsesCONST에서 자주 ( 0.01sec을위한) 시간 20secsA와 3X의 2000행렬)
  • MATLAB의 Ident 툴박스를 사용하여 액추에이터의 전송 기능 (TF)을 가져 옵니다 .
  • 마지막으로 MATLAB에서 PIDTool 도구 상자를 사용 하고 변환 함수를 업로드하십시오.

또는 빠르고 간단한 방식으로 :

Ziegler–Nichols 라는 더 빠른 접근 방식이 있습니다 . 여기에 이미지 설명을 입력하십시오

그리고이 이미지에서 PID 매개 변수 효과를 보여줍니다 .
PID 파라미터 효과

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.