전자공학

PID제어중에 P제어란?

원원 2019. 10. 6. 19:57


안녕하세요 오늘은 PID제어중에 P제어에 대해 자세히 알아보겠습니다


 P제어는 비례제어이고 CLOSE-LOOP 제어의 일종입니다/ CLOSE-LOOP제어란 지령치를 주고 그 지령치에 대한 피드백을 받은 다음에 그 피드백을 반영해서 지령치를 주는 것입니다.

예) 목표값이 500인 상태

입력값을 500을 줬는데 출력값이 300이나왔고 오차는 200입니다. (출력값은 예를든 상태, 오차 = 목표값-출력값)

그러면 다시 입력값 200을  줍니다

출력값이 300이였는데 입력값을 200줬으니 출력값이 500이 나왔고 목표값과 일치합니다

P제어(Proportional)로 해결한 상태이고 비례적입니다



이제 실제로 코드구현을 아두이노를 통해서 테스트를 해보겠습니다

테스트방법은 목표값을 설정해놓고 가변저항을 현재값이라고 봅니다



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
double Kp = 5; //게인
double error_value; //에러값 
double goal_value= 0; //목표값
double current_value;  //입력값(현재값)
double P_control; //지령값
int hardwareError_value; //가변저항 에러
 
 void setup() {
 
    Serial.begin(9600);
 
    
}
void loop() {
  current_value = analogRead(A0);
  
  if(hardwareError_value==1023) //가변저항 돌릴때 노이즈 방지
  {
  }
  else
  {
   Serial.print(goal_value);
   Serial.print(" ");
   Serial.print(current_value);
   Serial.print(" ");
   Serial.print(P_control);
   Serial.print(" ");
   Serial.println(error_value);
  }
 
  
  error_value = goal_value -current_value; //에러값은 목표값에서 현재값을 뺀 값이다.
  P_control = Kp * error_value;
 
 
 delay(100);
}


빨강 : 입력값(현재값 current_value)
파랑 : 목표값(goal_value)
주황 : 에러값(error_value)
초록 : 지령값(P_control)

위의 그래프를 보면 입력값에 따라서 오차값이 나오고 오차값에 따라서 P제어를 하는 모습입니다

여기서 Kp를 게인값이라고 하는데 게인값에 따라서 목표값에 도달하는 속도가 달라집니다

  P_control = Kp * error_value;

위의 코드에서 Kp가 커진다면 P_control값도 커질 것입니다

Kp(P게인)값을 높이면 목표값에 도달하는 시간이 짧아집니다

그러나 값이 너무 크면 오버슈트가 발생하게 됩니다



그래서 튜닝을 통해서 Kp의 값을 적절하게 조절해야 합니다

위의 그래프를 보면 목표값이 있고 Kp의 값에 따라서 현재값이 달라지는걸 볼 수 있습니다

Kp의 값이 0.5로 가장 작을때 Reference에 도달하는 속도가 느립니다

그러나 Kp의 값이 1.6으로 가장 클때 Reference로 도달하는 시간이 짧고 오버슈팅이 생깁니다

Kp가 1.1일때는 오버슈팅이 적어졌고 도달시간도 적당해 보입니다




일반적으로 P제어만 사용하지않고 PI, PID등 다른 제어들과 같이 사용하는데 다른 제어들은 다음에 알아보겠습니다




P제어-현재


'전자공학' 카테고리의 다른 글

PNP,NPN 트랜지스터란?  (1) 2021.06.19
PID제어중 I제어란?  (0) 2019.10.21
다이오드란 무엇인가?  (1) 2017.10.19