자체 튜닝 PID 유사 컨트롤러를 구현하는 방법


15

다음 특성을 가진 시스템의 온도를 제어하기위한 마이크로 컨트롤러 프로그램을 작성하려고합니다.

  • 출력은 고정주기 주파수 (시간당 ~ 2-10)로만 켜거나 끌 수 있습니다.
  • 공장의 반응 속도가 느립니다 (온도의 측정 가능한 변화가 10 분 이상 소요됨).
  • 공장은 환경 조건에 따라 온도를 잃습니다.
  • 설정 점은 사용자 요구에 따라 큰 단계로 달라질 수 있습니다.

오류를 최소화하고 입력으로 제공된 사이클 속도를 준수하는 컨트롤러를 작성 중입니다.

이것은 PI 컨트롤러로 쉽게 수행 할 수 있으며 출력은 듀티 사이클로 변환됩니다. 문제는 프로그램이 자동 Kp, Ki 상수를 자동 조정하고 선택하고 다양한 환경 조건과 가열 용량의 변화에 ​​적응해야한다는 것입니다. 따라서 PI 컨트롤러를 미리 조정하는 것은 그리 유용하지 않습니다.

실제 PI 또는 PID를 사용할 필요는 없습니다. 도움이된다면 퍼지 로직을 사용할 수 있으며, 시스템 응답 및 측정 된 스텝 응답 에 대한 정보를 제안하는 열 손실 (선형)을 모델링하는 칩에 기계 학습 알고리즘도 있습니다 . 그 정보로 무엇을해야할지 모릅니다.

두 개의 게시물은 모델링 데이터를 사용하여 PI를 온라인으로 튜닝 할 수있을뿐만 아니라 퍼지 로직을 사용하여 PI를 튜닝 할 수 있다고 제안 하는 랩 뷰 매뉴얼을 제안합니다.

질문은 이런 종류의 시나리오에 가장 적합한 방법은 무엇입니까 (예 : PID, 퍼지 pid, 컨볼 루션 등) 소프트웨어 / 실습에서 실제로 구현하는 방법은 무엇입니까?

나는 EE가 아니므로 어떤 의견이라도 크게 감사하겠습니다.


1
로봇 알고리즘 SE 에서 PID 컨트롤러를 자동 튜닝하기 위해 단순한 알고리즘을 사용하는 것에 대한 답변을 작성했습니다 .
embedded.kyle

@ embedded.kyle 훌륭합니다. 단순 / 최고의 경향을 이해합니다. 그가 x1, x2에 대해 무엇을 사용했는지 말할 수 있습니까? PID 상수와 관련하여 문제가 있습니다.
MandoMando

1
시간이 지났지 만 x1 = P, x2 = I, x3 = D와 같은 것을 사용했다고 생각합니다. 무게 중심 인 x0은 안정성 측정이 가장 중요한 것이 무엇이든간에 믿습니다. 내 응용 프로그램 인 모터 제어에는 두 개의 루프가 있습니다. 하나의 x0은 속도 였고 다른 하나의 x0은 전류였습니다. 자세한 내용은 여기 를 참조 하십시오 .
embedded.kyle

@ embedded.kyle 의견을 답변으로 바꾸시겠습니까? 원하는 경우 추가 정보를 추가하십시오. -thx
MandoMando

현상금? 오 소년! 완료했다.
embedded.kyle

답변:


7

PID를 구식이라고 부르기까지는 가지 않았습니다. 그러나 확실히 개선의 여지가 있습니다. PID 조정 루프를 자동 조정하는 한 가지 방법 은 언덕 오르기 단순 알고리즘 의 한 형태 인 Nelder-Mead 방법 을 사용 하는 것입니다 . 시간이 지남에 따라 이동하는 대상 매개 변수를 수렴 및 재 수렴 할 수 있다는 이점이 있습니다.

Nelder-Mead 방식의 언덕 등반

에서 이 논문 :

예를 들어 PID 파라미터 튜닝 {K P , K I , K D }의 경우 단면은 4 면체입니다. Nelder–Mead는 심플 렉스로 정렬 된 각 테스트 지점에서 측정 된 목적 함수의 동작을 추정하여 심플 렉스의 새로운 테스트 위치를 생성합니다. 그런 다음 알고리즘은 이러한 테스트 지점 중 하나를 새 테스트 지점으로 대체하도록 선택하므로 기술이 진행됩니다.

나의 특별한 응용은 모터 제어를위한 것이었다. PID 전류 제어 루프와 PI 속도 제어 루프의 두 가지 루프가있었습니다. 정점을 각각 P, I 및 D로 설정하고 루프 출력에 대한 통계를 실행했습니다. 그런 다음 생성 된 전류 또는 속도 제어 대상이 몇 가지 표준 편차 내에있을 때까지 반사, 확장, 수축 및 축소를 반복해서 실행했습니다.

우리 제품으로 VP는 모터가 어떻게 소리를 내는지에 매우 관심이있었습니다. 그리고 현재 목표가 수학적으로 최적보다 약간 튀었을 때 더 잘 들렸다. 따라서 튜닝은 "실시간"으로 이루어졌으며, 모터가 작동하는 동안 알고리즘이 탐색하도록하여 모터 사운드에 대한 사용자의 인식도 고려했습니다. 우리가 좋아하는 매개 변수를 찾은 후에는 하드 코딩되었으며 변경되지 않았습니다.

"자동 튜닝의 일부로 시스템을 진동시키는 것은 사용자가 받아 들일 수 없다"고 말했기 때문에 이것은 아마도 당신에게 이상적이지 않을 것입니다. 우리 시스템은 자동 튜닝하는 동안 가장 진동하고 다른 끔찍한 일을 할 것입니다.

그러나 PID 제어기의 사본 두 개를 실행할 수 있습니다. 하나는 "실시간"이었고 실제로 프로세스를 제어했습니다. 그리고 "라이브"컨트롤러와 동일한 입력을받는 동안 지속적으로 자동 튜닝되는 두 번째 시간입니다. 자동 튜닝 된 컨트롤러의 출력이 "더 좋거나"안정되면 계수를 "라이브"컨트롤러로 바꿀 수 있습니다. 그런 다음 컨트롤러는 원하는 성능이 달성 될 때까지 프로세스를 수정합니다. 이렇게하면 자동 조정 중에 사용자가 감지 할 수있는 진동이 방지됩니다. 그러나 입력이 급격히 변하고 PID 컨트롤러가 더 이상 최적이 아닌 경우 자동 조정 기능을 사용할 수있게되면 새 계수를 교체 할 수 있습니다.


NM 방법은 목적 함수 (즉, 사용자의 실제 세계)에 대해 와일드 포인트를 실행해야합니다. 그러나 센서 측정을 기반으로 마이크로 컨트롤러 자체에 조잡한 모델 (공간 상태?)을 구축 할 수 있다고 생각합니다. 그런 다음 제안 된 'shadow'PI 컨트롤러를 최적화 할 때 실행합니다. PI를 알려진 설정으로 조정 한 다음 가능할 수 있기 때문에 과잉 살인에 대해서는 잘 모르겠습니다. 확장 센서 판독 및 시스템 응답을 기반으로 한 KP 및 기입니다. 어느 쪽이든, 잘했습니다.
MandoMando

@MandoMando 대단히 감사합니다! 그리고 저는 '섀도우'PI 컨트롤러라는 용어를 정말 좋아합니다.
embedded.kyle

3

PID 제어기는 제어되는 시스템의 동작이 제어 자극의 합, 제어 자극의 적분 및 첫 번째 적분의 적분으로 합리적으로 추정 될 수있는 상황에서 유용합니다. 자극에 의해 균일하게 가열되는 물체가 있고, 물체가 온도 차이에 비례하는 속도로 다른 물체에 균일하게 열을 전달하는 경우, 일부 온도 제어 시스템은 이러한 기준을 만족시킬 수있다. 예를 들어, 공기가 단일의 균일 한 온도를 갖는 것으로 간주되기에 충분한 공기 순환이있는 경우, 제 1 물체는 가열 요소 일 수 있고, 제 2 물체는 실내에서 순환하는 공기 일 수있다. 그보다 더 복잡한 열 모델 (예 : 고체 매체 내에서 열 구배를 포함 할 수있는 모델)의 경우

히터를 켜면 출력을 즉시 끄면 조절되는 장치가 얼마나 뜨거워 질지 지속적으로 예측하고 온도가 낮아지면 냉각되는 온도를 지속적으로 추정하는 것이 좋은 방법입니다. 그 후 히터는 허용되는 즉시 스위치를 켰습니다. 또한 히터가 1 초, 2 초, 3 초 등의 시간 동안 켜져 있으면 그 값이 어떻게 될지 추정하십시오. 해당 값이 얻을 수있을 때 히터를 끄십시오. 그런 다음 히터가 꺼지면 유사한 계산을 시작하지만 켜기 / 끄기, 핫 / 콜드 등의 역할을 바꾸어 다시 켜는 시점을 결정하십시오. 시스템의 열 동작에 따라 '최소 / 최대'사전 예측 전략을 사용하여 한두 단계 앞당겨 야 할 수도 있습니다.


1

시간당 2-10 회 제어 상태 (켜기 또는 끄기)를 변경할 수 있다고해서 듀티 사이클 제어에 적합하지는 않습니다. PI 루프의 출력은 오류의 함수에 따라 크기가 변하는 제어 신호가 될 것이며, 제어의 '주파수'때문에 플랜트는 이진 입력 (실제로 만) 만 이진 입력 (off 또는 on) 만 수용 할 수 있습니다. 허용 가능한 듀티 사이클은 헤르츠의 일부입니다.

사물을 단순화하고 히스테리시스 제어를 수행 할 수 있습니다.

  • 온도가 하한을 넘으면 시스템이 켜집니다.
  • 온도가 상한을 초과하면 시스템이 꺼집니다.
  • 제어 출력의 수신 거부를 방지하기 위해 상한과 하한 사이에 충분한 거리가 있습니다

PI 출력을 60 %로 설정하고 30 분주기 동안 60 %의 온 타임 = 60 % 주기로 전환-> 0.6 x 30 분-> 18 분 켜기 및 12 분 끄기로 전환하는 것이 좋습니다. 권장하는 뱅뱅 컨트롤러는 필요한 사이클 속도 (시간당 n 번 이상 켜기)를 유지하고 동시에 낮은 오류를 유지하는 것을 보장하지 않습니다. 오프 타임 동안 손실의 균형을 맞추기 위해 시스템이 일정 시간 동안 일시적으로 오버 슈트해야 할 수도 있습니다.
MandoMando

1

일반적으로 (이를 수행하는 단순한 방법 임에도 불구하고) 게인 스케줄링이라고합니다. 시스템이 (스케줄링 매개 변수)로 변경되는 관찰 가능한 변수를 가질 때 비선형 제어에 대한 고전적인 접근 방식입니다. 시스템에서 해당 변수는 온도 일 가능성이 높습니다. 아이디어는 스케줄링 파라미터 (온도)의 다른 값으로 컨트롤러 게인 목록을 생성하고 스케줄링 파라미터가 변경됨에 따라 컨트롤러에서 해당 게인 (PI, PID, 상태 피드백 등)을 사용한다는 것입니다. 이것이 정말 간단하게 들리기 때문입니다. 그러나 작동하지만 매우 복잡한 시스템에서 사용됩니다.

화려하고 싶다면 머신 러닝 알고리즘을 구현하여 이득 매트릭스를 생성 할 수 있습니다. 이것은 당신이 설명하는 것처럼 진화하고 학습하는 컨트롤러를 초래할 것입니다. 그러나 시스템을 완전히 특성화 할 수 있다면 과잉이 될 수 있습니다.

편집 : 죄송합니다, 조금 잘못 읽었습니다. 당신이 말한 "환경 조건"이 스케줄링 매개 변수가되도록 온도를 제어하려고합니다.


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