- PID (proportional integral derivative control) control
- PID 제어 라이브러리 다운
- PID 제어 코드 분석
PID (proportional integral derivative control) control
2020/09/20 - [정리, 공부해요/전기, 전자, 통신] - PID 제어 (Proportional Integral Derivative control) 원리/정리/튜닝
PID 제어에 관한 원리는 이전 포스팅에서 정리해 두었습니다.
PID 제어 라이브러리 다운
www.arduinolibraries.info/libraries/pid
PID 라이브러리 파일을 받을 수 있는 링크입니다.
혹은 아래에서 다운 받으시면 됩니다 :)
내PC – 문서 – Arduino – libraries
아두이노 라이브러리 폴더에, 알집을 푸시면 됩니다.
(libraries 폴더 안에 PID-1.2.0, 압축파일 안의 폴더를 푸시면 됩니다.)
PID 제어 코드 분석
/********************************************************
* PID Basic Example
* Reading analog input 0 to control analog PWM output 3
********************************************************/
#include <PID_v1.h>
#define PIN_INPUT 0
#define PIN_OUTPUT 3
//Define Variables we'll be connecting to
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
double Kp=2, Ki=5, Kd=1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup()
{
//initialize the variables we're linked to
Input = analogRead(PIN_INPUT);
Setpoint = 100;
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
void loop()
{
Input = analogRead(PIN_INPUT);
myPID.Compute();
analogWrite(PIN_OUTPUT, Output);
}
PID myPID(&Input ~~): 사용할 변수 설정
myPID.SetMode(AUTOMATIC): PID 세팅, PID모드 켜기
myPID.Compute(): 받은 Input을 Setpoint와 비교해서 Output값 계산
코드를 보고 궁금했던 부분:
1. Input 값과 Setpoint의 비교 비율
- Input 들어온 값을 곧이 곧대로 Setpoint와 비교하는 라이브러리 코드인지,
- 아니면 인풋 값인 0 ~ 1023을 특정 비율로 줄이거나 늘려서 Setpoint 값과 비교하는 것인지
2. Input과 Setpoint의 어떤 차이에 따라 Output 값이 결정 되는지
- 이부분은 Kp, Ki, Kd의 값에 따라 달라질 것이라 판단됨
- 코드를 돌려보니 DIRECT 와 REVERSE 에 따라 변화 확인
3. 아웃풋 값은 0~255 범위인지
우선 Input값을 쉽게 바꿔주기 위해 가변저항 연결
int pin = A0;
int val;
void setup(){
Serial.begin(9600);
pinMode(pin,INPUT);
}
void loop(){
val=analogRead(pin);
Serial.println(val);
delay(100);
}
화질이 별로지만,, 위의 궁금증 해결
DIRECT: Input 값이 Setpoint를 넘어서면 그 값을 줄여 맞추기 위해 Output 출력
REVERSE: Input 값이 Setpoint 보다 낮아지면 그 값을 늘려 맞추기 위해 Output 출력
(저는 실험 셋업 온도가 특정 지점 이상으로 올라가지 못하게 쿨링을 해주는 것이 목적이기에 REVERSE를 사용합니다.)
Setpoint: 500, DIRECT
Output 최대 255, Input값(시스템에서 센싱 값)이 Setpoint로 부터 100~200 차이만 나도 Output 출력은 최대가 됩니다.
Setpoint: 300, REVERSE
REVERSE의 경우 (DIRECT는 반대로 Input이 내려 갔을 시 발생), Input 값이 Setpoint보다 높아지면, 값이 더 올라가던가 변하지 않아도 빠르게 Output 값이 0에 수렴함을 볼 수 있습니다.
마무리
위의 내용을 참고해서 코드를 짜시면, 간단히 PID 컨트롤을 할 수 있지 않을까 합니다.
물론, Kp/Ki/Kd 값은 자신의 시스템에 맞게 튜닝 하셔야 합니다 :)
'공부 > 아두이노 & 회로구성' 카테고리의 다른 글
타겟 온도 - PID 컨트롤, Kp, Ki, Kd 값 조절 (w 아두이노) (1) | 2022.01.27 |
---|---|
회로 구성(파워연결/데이터로깅)에 있어 유용한 커넥터/어댑터/2핀/클림프 + 잘라 쓰는 기판/만능기판 (0) | 2021.07.04 |
아두이노 우노 펜 PWM 제어, 속도 제어 - heat sink, fan (4) | 2020.10.16 |
아두이노 우노, PWM 제어 라이브러리 활용 (0) | 2020.10.14 |
(저장용) 사용중인 써미스터 B값, 온도별 필요 기준저항값 (0) | 2020.10.12 |
댓글