|
|
|
내 공부 > 프로그래밍
작성일 : 19-04-30 17:53
|
글쓴이 :
Minuk Y.
 조회 : 2,606
|
double Kp, Ki, Kd ; // 게인 값 : 수정 하면서 진행
double dt; // 샘플링 타임
double cmd_val, cur_val; // 목표값, 현재값
double P_err, prev_err; // 오차. 이전 오차
double I_err, D_err; // 오차적분. 오차미분
double Kp_term, Ki_term, Kd_term; // p항, i항, d항
double control; // 제어 결과 값
////////////////////////////////////////////////////////////////////////////////
// 게인 설정
Kp = 0.05;
Ki = 0.1;
Kd = 0.01;
// 샘플링 타임
dt = 0.01;
while(1)
{
P_err = cmd_val - cur_val; // 오차 = 목표치-현재값
// P_err 최대 최소 정의 및 필터링 필요...
Kp_term = Kp * P_err; // p항 = Kp*오차
I_err += P_err * dt; // 오차적분 += 오차*dt
// I_err 최대 최소 정의 및 필터링 필요...
Ki_term = Ki * I_err; // i항 = Ki*오차적분
D_err = (err-prev_P_err)/dt // 오차미분 = (현재오차-이전오차)/dt
// D_err 최대 최소 정의 및 필터링 필요...
Kd_term = Kd * D_err; // d항 = Kd*오차미분
prev_err = P_err; // 현재오차를 이전오차로
control = Kp_term + Ki_term + Kd_term; // 제어량 = p항+i항+d항
// control 최대 최소 정의 및 필터링 필요...
}
|
|
|
|