avi:
차후에 상수를 맞추기 위해 웹 그래픽을 이용할 예정임.
아래는 활용한 소스임.
0.5초 마다 제어하고 dt는 0.5초로함.
===============================================================
#define Kp(2)// configurable value.
#define Ki(1)// configurable value.
#define Kd(1)// configurable value.
#define dt 0.01
double pid_con(double val_in)
{
static double P_err_prv;// Prev P error to get D_err.
double P_err, I_err, D_err;// Basic Error values.
P_err = AIM - val_in;
I_err += P_err * dt;
D_err = (P_err - P_err_prv) / dt;
P_err_prv = P_err;// backup P_err.
val_out = (Kp * P_err) + (Ki * I_err) + (Kd * D_err);
return val_out;// Calculated.
}
출처: 위키에 있는 내용임.
serial oscilloscope를 이용하여
p=0.6을 선택함.
팬의 전원은 처음에 제어를 안하므로 처음값은 무시함.
초록색은 제어량임.
아래테이블방식으로 일반성능이라면,
실험에의해 pu=0.5주기
ku = 0.6 / 0.2=3로 정함.
kp = 0.25 x 3=0.75
ki = 0.5 x 0.5 =0.25
kd = 0.12x0.5=0.06
여전히 과도응답있슴.
팬이 굉장히 센서티브함.
Ziegler-Nichols 폐루프/주파수 응답 방법
다음 테이블은 비례 컨트롤에서의 여러 타입의 루프 성능에 대한 튜닝 식을 보여줍니다. 여기서 Ku는 컨트롤러 게인이고, Tu 진동 주기입니다.
빠른 성능 | |||
---|---|---|---|
컨트롤러 | Kc | Ti | Td |
P | 0.5Ku | — | — |
PI | 0.4Ku | 0.8Tu | — |
PID | 0.6Ku | 0.5Tu | 0.12Tu |
일반 성능 | |||
---|---|---|---|
컨트롤러 | Kc | Ti | Td |
P | 0.2Ku | — | — |
PI | 0.18Ku | 0.8Tu | — |
PID | 0.25Ku | 0.5Tu | 0.12Tu |
느린 성능 | |||
---|---|---|---|
컨트롤러 | Kc | Ti | Td |
P | 0.13Ku | — | — |
PI | 0.13Ku | 0.8Tu | — |
PID | 0.15Ku | 0.5Tu | 0.12Tu |