티스토리 뷰
표준 PID 제어기 알고리즘은 다음과 같습니다.
이 알고리즘을 코드로 간단하게 표현하자면 다음과 같습니다.
Error = Setpoint - Input;
PTerm = Kp * Error;
ITerm += Ki * Error * dt;
현재 오차(Error)는 설정(Setpoint) 값에서 현재 입력(Input) 값을 빼서 구합니다.
비례항(PTerm)은 비례항 이득값(Kp)에 현재 오차를 곱해서 구합니다.
적분항(ITerm)은 적분항 이득값(Ki)에 현재 오차와 주기(dt)를 곱해서 더해줍니다.
미분항(DTerm)을 구하기 위해서는 다음과 같이 구합니다.
dError = Error - prevError;
DTerm = Kd * (dError / dt);오차 변화(dError)는 현재 오차(Error)에서 이전 오차(prevError)를 뺀 값입니다.
미분이라는 것이, 그래프의 순간의 기울기(오차 변화율)를 알고자 하는 것이기 때문에 짧은 순간의 오차 변화량을 순간 시간 변화량(주기)으로 나눠줍니다.(dError / dt)
마지막으로, 미분항(DTerm)은 미분항 이득값(Kd)에 오차 변화율을 곱해서 구합니다.
출력 값은 다음과 같습니다.
미분이라는 것이, 그래프의 순간의 기울기(오차 변화율)를 알고자 하는 것이기 때문에 짧은 순간의 오차 변화량을 순간 시간 변화량(주기)으로 나눠줍니다.(dError / dt)
마지막으로, 미분항(DTerm)은 미분항 이득값(Kd)에 오차 변화율을 곱해서 구합니다.
출력 값은 다음과 같습니다.
Output = PTerm + ITerm + DTerm;
참고 문헌 : 아두이노로 드론 만들고 직접 코딩하기
'드론 개발 > PID' 카테고리의 다른 글
PID 제어기 - 미분항 설계 방법(수정해서 사용) (0) | 2018.05.02 |
---|---|
드론 프로젝트에 맞춰 변형한 PID 제어기 구조와 제어기 출력값을 이용한 모터의 제어 방법 (0) | 2018.05.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 초기화 리스트
- computer_science
- C++
- Effective C++
- DCM
- c
- 칼만필터
- 오실로스코프
- 터미널
- 로그
- STM32
- PID
- 멤버 초기화 리스트
- 컴파일
- pwm
- 컴퓨터구조
- compile
- SPI
- 고도필터
- teraterm
- UART
- 드론
- DMA
- 드론개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함