PID 알고리즘 : 오랜 지연 후 빠른 입력 값 변경을 설명하는 방법


15

서보 제어 밸브를 사용하여 온수 및 냉수를 혼합하기 위해 Arduino Leonardo에서 기본 PID 알고리즘을 구현하려고합니다. 목표는 온도를 설정 값에 최대한 가깝게 유지하는 것입니다. 화상으로부터 사용자를 보호하기 위해 출력 온도가 설정 값을 초과하지 않도록하는 것이 특히 중요합니다. 두 번째로 중요한 것은 설정 점 근처에서 가능한 빨리 온도를 얻는 것입니다.

온도의 작은 변화에 대해서는 PID 알고리즘표준 구현이 정상적으로 작동하는 것 같습니다. 그러나 밸브 위치를 변경 한 후 지연이 표준 지연보다 훨씬 길기 때문에 온수가 밸브에 도달하기를 기다릴 때 발생할 수있는 긴 지연을 설명하는 방법을 모르겠습니다.

온수 라인의 길이와 온수를 마지막으로 사용한 이후의 시간에 따라 온수가 밸브에 도달하는 데 수십 초가 걸릴 수 있으므로이 시간 동안 수온은 저온에서 상당히 일정하게 유지됩니다 온수 밸브가 곧 100 % 열립니다. 적분 구성 요소가 큰 오류 값을 누적하기 시작합니다.

온수가 밸브에 도달하면 감지 된 온도가 최대 온수 온도로 매우 빠르게 상승합니다. 적분 오차가 크기 때문에 온도가 설정 값을 초과 한 후 온수 밸브가 100 %로 오랫동안 유지됩니다. 적분 값을 기다리면 정상 수준으로 감소합니다. 따라서 결과는 몇 초 동안 최대 온도의 물입니다.

가능한 긴 지연 을 설명하는 방법을 잘 모르겠습니다 . 이 경우 최대 응답 시간을 제한하기 위해 적분 오차 값에 상한과 하한을 설정하는 것이 현명합니까? 이것은 필수 구성 요소의 목적을 무효화하는 것으로 보이며 설정 점에 도달 한 후에도 여전히 약간의 지연이 발생합니다.

아니면 오랜 지연 후에 빠른 입력 변경을 처리하는 더 좋은 방법이 있습니까?

조언을 주셔서 감사합니다!


1
사실, 밸브 작동에 비해 수온 변화가 상대적으로 느리다고 생각하기 때문에 I-action이 필요한지 궁금합니다. 설상가상으로, 얻을 수있는 극도로 열악한 위상 마진으로 인해 진동 동작이 발생할 수 있습니다 (이론적으로 시스템은 안정적이지만 실제로는 진동이 멈추지 않을 수 있습니다. 또한 사람들을 태워 버릴 수 있기 때문에 Chu와 JonRB의 의견을 충분히 볼 수 없습니다!
Sanchises

답변:


15

귀하의 문제는 Integral Windup 이며 일반적인 제어 문제입니다. 비선형 또는 기타 경계가있는 영역에서 컨트롤러는 설정 점을 추적 할 수 없으며 적분이 큰 값으로 증가합니다. 이로 인해 설정 점에 도달했을 때 큰 오버 슈트가 발생합니다. 이것이 바로 추론 한 문제입니다.

가장 간단한 솔루션은 Integrator 값 자체 를 합리적인 최대 으로 제한하는 것 입니다. 적분기가 여전히 큰 가치로 감겨지기 때문에 적분 기여를 제한하는 것도 효과 가 없습니다.

Mathworks에는 통합 와인드업에 대한 다른 솔루션 이 포함 된 페이지 가 있습니다.

PID 컨트롤러에서는 일반적으로 가능한 적은 적분 항을 원합니다. 표준 기계식 온도 제어 밸브에서는 비례 제어 만 사용되며 정상적으로 작동합니다. 적분 항을 최대한 작게 유지하십시오. 사용자는 최종 온도에서 작은 오차를 느끼지 않을 것입니다. PD만으로도 적절한 성능을 얻을 수 있습니다.

이것은 매우 특별하고 알려진 사례이므로 컨트롤러에 다른 모드를 사용하는 것을 고려할 수 있습니다. 뜨거운 흡입구 온도를 측정하고 설정 온도보다 낮을 때 뜨거운 100 %, 차가운 20 %를 실행하십시오. 예열되면 양호한 초기 조건으로 PID로 전환하십시오.


1
예. 이상적으로는 흡입구 온도를 독립적으로 측정하고 이러한 방식으로 와인드업을 방지 할 수 있습니다.
Brian Drummond

2
와인드업은 문제가 될 수 있지만 적분기가 구현되지 않은 경우, 예를 들어 지연의 불안정화 효과는 여전히 남아 있습니다. Smith Predictor는 순수한 시간 지연의 영향을 완화시키는 좋은 방법입니다. 적분기 와인드업 만 해결하면 시간 지연으로 인해 발생하는 고유 한 위상 지연을 극복 할 수 없습니다.
Chu

2
정확히, 나는 이것이 순수한 통합 자 바람이라고 생각하지 않습니다. 정상적인 작업이 필요한 조건을 충족하지 않으면 항상 EVEN에 대해 완화해야 할 유효한 우려
JonRB

와우, 좋은 대답입니다! 나는이 선을 따라 생각하고 있었지만 (적 분자 최대 값을 제한 함) 질문을 올바르게 표현하지 않았으므로 오해되었습니다. 나는 적어도 해결책이있는 구장에 있다는 것을 보는 것이 좋습니다. 온도가 제어 가능한 범위에 도달 할 때까지 "I"요소를 비활성화하는 것이 가장 간단한 해결책이라고 생각합니다. 이를 통해 변경 사항에 매우 빠르게 대응할 수 있습니다. 그런 다음 실제 온도 변화를보고 원하는 결과에 가까워지면 적분을 다시 활성화하여 필요한 추가 푸시를 추가하십시오. 자세한 답변 감사합니다!
Ryan Griggs

그러나 적분 항은 속도를 높이기위한 것이 아니며, 체계적인 오차, 특히 비례 계수가 정확하지 않은 경우이를 바로 잡을 수 있습니다. 아니? 그리고이 상황에서 P coef. 두 파이프의 수압에 따라 달라지기 때문에 항상 완벽 할 수는 없습니다.
로마 Starkov

4

이 프로세스를 효율적으로 제어하는 ​​핵심은 핫 탭과 콜드 탭이 대칭 적으로 작동하지 않으며 최적의 알고리즘이이를 고려해야한다는 것을 인식하는 것입니다.

한동안 온수를 사용하지 않으면 파이프에서 냉각됩니다.

냉수를 한 시간 동안 사용하지 않으면 냉수가 냉각기가있는 냉수 탱크에서 온 것이 아니라면 더운 여름날에 굉장히 좋지만 차가운 물은 그대로 유지됩니다. 베팅은 실제로 매우 드)니다).

따라서 우리는 우리가 온수 파이프에서 얻는 것을 모른다고 가정하지만, 냉각수 파이프는 실행 동안 거의 일정하게 유지 될 수 있습니다.

따라서 혼합 수의 온도와 밸브 설정을 알거나 냉수의 온도를 추정하여 현재 온수 파이프에서 나오는 물의 온도를 추정 할 수 있습니다. 그런 다음 열역학 공식 평가를 기반으로 PID없이 정확한 출력 온도를 얻도록 밸브를 조정할 수 있습니다.

"냉수 온도 추정"을 얻으려면 사이클 시작시 짧은 시간 (몇 초 정도) 냉수를 가동하고 온도를 읽을 수 있습니다. 그런 다음 두 온도 모두에 대해 해결할 수있는 데이터가 충분하지 않으므로 이후에 변경되지 않는다고 가정하십시오.

이 구성표는 완벽하게 정확하지는 않지만 과감한 오버 슈트없이 안정적으로 야구장에 들어갈 것으로 예상됩니다. 그런 다음이 체계 위에서 PID를 실행하여 결과를 미세 조정하지만 PID가 생성 할 수있는 밸브 설정으로 변경을 제한하십시오. 온수 입력 온도가 크게 변경되면 PID 상태를 재설정하십시오.

여러 온도 센서로 더 멋진 솔루션이 가능합니다.


PID 상자 밖에서 생각하는 또 다른 위대한 대답입니다. 나는 수온을 테스트하고 대략적인 밸브 위치로 원하는 출력 온도를 산출하는 일종의 룩업 테이블을 만드는 것을 고려했습니다. 추위는 비교적 일정하지만 겨울에는 추울 수도 있습니다. 수로는 약 24-36 인치에 묻혀 있으며 보통 온화한 온도를 유지합니다. 그런 다음 최대 온수 출력 온도 (약 120F)를 설명하고 예열 후 미세 조정을 위해 PID를 사용하여 밸브를 적절하게 배치하는 조회 테이블을 만들 수 있습니다.
Ryan Griggs

1
우물물은 수심 / 공급원에 따라 따뜻한 여름에도 매우 시원하게 유지할 수 있습니다. 하우스 파이프에있는 "차가운"물은 아래에서 펌핑되는 것보다 더 따뜻합니다. 따라서 차가운 물은 실제로 사용하면 차가워집니다 (지하 수온에 도달 할 때까지). 나는 "큰 도시"에 갈 때 항상 "놀랐다"고 차가운 물은 결코 식지 않습니다.
rickhg12hs

2

제어 엔지니어가 필수적인 와인드업 가능성에 대해하는 일에 대한 위의 멋진 답변에 세부 사항을 추가하고 싶었습니다. 이것은 많은 산업 공정에서도 발생하며 과학보다는 예술입니다.

성능 사양에 실제로 필요할 수있는 적분 이득을 희생하지 않고 이에 대한 일반적인 교과서 조치가 있습니다.

  1. 0 오류 수준을 넘을 때마다 적분기를 재설정합니다. 이것은 적분기를 블라인드 어큐뮬레이터 대신에 온 디맨드 유형의 비선형 요소 인 적분기로 만듭니다.

  2. 기본적으로 적분 동작 입력 블록을 루프의 표시 요소에 연결합니다. 이는 통합 이 빌드 업을 시작했는지 여부 를 판단 하기위한 출력 일 수 있습니다 (심판을 적절하게 만들기 위해 프로세스를 이해해야 함). 또는 액추에이터가 포화 상태인지 여부를 확인하고 해당 정보를 기반으로 피드백 루프를 형성합니다. 방금 Google에서 나온 첫 번째 링크를 무작위로 선택 했으며이 비디오의 끝 부분에 마지막 요점에 대한 그래픽 설명이 있습니다. https://www.youtube.com/watch?v=H4YlL3rZaNw


아이디어를 확장 해 주셔서 감사합니다. 비디오 주셔서 감사합니다, 그것은 문제를 잘 설명합니다.
tomnexus

1

때때로 시스템 작동 범위의 거친 단계에 대해 여러 세트의 PID 매개 변수를 갖는 것이 도움이 될 수 있습니다. 시스템이 한 단계의 동작에서 다른 단계로 이동함에 따라 즉시 변경됩니다. 예를 들어, 핫 탭을 켜고 냉수 만 얻을 때 Kp, Ki 및 Kd 한 세트; 그런 다음 온도가 올라 가기 시작하면 다른 Kp, Ki & Kd 세트로 전환하십시오. 그런 다음 두 가지를 적절히 조정하십시오.

Brett Beauregard의 Arduino Playground에서 PID 라이브러리를 사용하고 있습니까? 이건 꽤 좋습니다. 그리고 이것에도 '적응 적'예가 있습니다.


제안 해 주셔서 감사합니다. pid 라이브러리를 사용하지 않고 작동 방식에 대해 더 많이 배우기 위해 직접 작성했습니다.
Ryan Griggs

피드 포드를 고려 했습니까? 빠른 변경은 개방 루프를 통한 출력에 영향을 주므로 폐쇄 루프가 반응하기를 기다리지 않습니다.
Gregory Kornblum

이 경우 "피드 포워드"가 작동하는 방식에 대해 뇌를 감싸려고합니다. 입력이 원하는 온도이고 출력이 조회 테이블이나 간단한 방정식을 사용하여 밸브를 미리 결정된 위치로 설정합니까 (위의 다른 의견에서 논의한 바와 같이)?
Ryan Griggs

피드백 (폐쇄 루프 PID) 외에 피드 포워드를 사용할 수 있습니다. 피드 포워드 제어기의 조치에 피드백 제어기의 조치를 추가하기 만하면됩니다. 피드 포워드 컨트롤러는 밸브의 역 모델이 이상적입니다. 피드 포워드는 기본적으로 설정 값 변경에 대한 즉각적인 조치를 제공합니다. 피드 포워드 플러스 피드백을 사용해도 피드백 제어 보상기의 와인드업을 고려해야합니다. 피드백 요소를 고려해야합니다.
docscience

1

시스템을 모델링 했습니까?

오버 슈트, 특히 주파수를 보여주는 시간 기반 데이터가 있습니까?

다음은 제어 기반 쿼리에서 질문해야하는 두 가지 질문입니다.

당신이 설명한 것에서, 당신의 적분 이득은 너무 높습니다. 적 분자 바람으로 인한 것일 수 있습니다. 표시된 코드에는 실제적인 우려가 있습니다. 그 중 하나는 개별 적 분자 중 최대가 아닙니다.

  • 매우 불량한 이산 적분기 토폴로지
  • P + I 출력은 물론 I 출력에도 클램프 / 제한 없음

매우 높고 감소하는 데 시간이 걸리기 때문에 똑같이 될 수 있습니다.

예, I 레지스터에 저장된 값은 P + I가 시스템의 응답으로 설정되지 않았기 때문에 감쇄되어야하기 때문에 1000C라고 말할 수 있습니다.

가장 먼저해야 할 일은 포스트 프로세싱을 위해 실시간 데이터를 캡처하는 것입니다. 다음으로 P 전용을 실행하고 비례 게인 이 원하는 온도에서 ALMOST를 달성하도록합니다 (제어 이론 상태는 그렇지 않습니다). 여부에 따라

  1. 적합한 I 이득을 결정하는데 용이 한 현재 캡처 데이터의 분석
  2. 적절한 이익을 창출하기 위해 플랜트 모델이 파생됩니다.

PID 코드를 더 나은 구현으로 변경 한 다음 요점을 증명하기 위해 약간의 I를 추가합니다.

이러한 이익이 무엇을 의미하는지 결정해야합니다. 입력은 온도이고 출력은 ... 흐름? 흐름 / C 전송과 흐름 / C 전송 기능이 있어야합니다.


좋은 답변입니다. 감사합니다. 나는 아직 모르는 것처럼 시스템을 모델링하지 않았다.이 연구에서 발이 젖기 시작했다. I 값이 합리적인 범위를 벗어나는 것이 맞습니다. Integrator를위한 더 나은 구현 알고리즘을 알려줄 수 있습니까? 의사 코드는 코드를 복사하여 붙여 넣지 않고 내 자신의 단어로 배우고 넣을 수 있기 때문에 가장 좋습니다. 또한 이와 같은 간단한 시스템 모델링에 대한 소개를 알려주시겠습니까? 유량 수준 (핫 및 콜드 믹스)이이 시스템의 출력인지 확인하십시오. 현재는 반비례 H / C입니다.
Ryan Griggs

1
곧 조정을 추가
하겠습니다

1

Integral Windup을 해결하는 한 가지 방법은 제어 출력이 최대 처짐에 도달 할 때마다 오류 누적중지하는 것 입니다. 또는 최대 처짐으로부터 얼마나 멀리 떨어져 있는지 스케일을 조정하십시오. 따라서 컨트롤러가 "hot water 100 %, cold water 0 %"를 출력 할 때마다 오류를 누적하지 말고 0으로 재설정하지 마십시오.

PID가 보상 할 수있는 체계적인 오류에 한계가 있기 때문에 적분을 최대로 제한하는 것을 좋아하지 않습니다.

또한 기본 시스템에 대한 지식없이 제어하려고하는 하나의 매개 변수 만있는 "dumb"PID를 만드는 대신 두 개의 추가 온도 센서를 핫 입력과 콜드 입력 모두에 설치하는 것이 좋습니다. 그런 다음 입력 온도를 기준으로 원하는 위치에 가까운 기능을 찾으려고 PID 루프 만 사용 하여이 기능의 출력 오류 를 조정 합니다.

밸브 위치 (알 수 있음)뿐만 아니라 수압 (알 수 없음)에 따라 유량을 측정하지 않기 때문에 오차가 커질 것입니다.

그래도 PID 루프가 제대로 댐핑되어 있으면 뜨거운 유량을 빠르게 줄이려면 D 요소를 잘 보정해야하므로 이는 온수가 탭에 도달하는 문제에 많은 도움이됩니다. 내 경험상 미분 계수를 올바르게 얻는 것이 가장 어렵다. 그러나 두 개의 추가 센서가있는 경우 기본 출력은 입력 수온과 똑같이 빠르게 변경되므로 기본적으로 미분 요소가 전혀 필요하지 않습니다.

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