쿼드콥터 제작기 09 - LPF(Low Pass Filter)구현
저번글[이동]에서 시소테스트를 하는데 모터출력이 튀는 원인인 센서진동을 잡기위해 LPF를 구현하려고 한다
LPF(Low Pass Filter)
저역통과필터라고도 하며, 특정값 이하의 저주파는 통과시키고 그이상 고주파를 걸러내는 필터이다.
센서진동과 같은 노이즈는 고주파이므로 이 저역통과필터를 이용해 노이즈를 제거할 수 있다.
MPU6050의 DLPF_BW 레지스터에서도 LPF를 지원하기도 한다. 자세한 내용은
http://hs36.tistory.com/search/lpf
D제어에만 저역통과필터링을 하는 이유는...
센서값 진동은 D뿐만 아니라 P나 I제어에도 영향을 주지만, 순간적인 값변화에 영향을 제일 많이 받는 D제어에만 저역통과필터를 구현해도
안정화 될 것이고 쿼드제어의 생명이 응답속도인데 저역통과필터를 거치면 딜레이가 생기기도 해서.. ㅠㅠ
아무튼, PID튜닝도 어느정도 됐고 이문제만 해결하면 드디어 첫비행 테스트를 할 수 있다!
먼저 저역통과필터 수식을 보자
코드로 변환하면
val = (tau*pre_val + ts*x)/(tau + ts);
예상외로 간단하다. 여기서 val은 저역통과필터의 결과이고 pre_val은 이전결과값, x가 입력값, ts는 샘플링주파수이다.
tau는 시정수라고하는데 이값이 크면 클수록 데이터가 깔끔하게 나오지만 그만큼 지연시간이 길어진다.
파란색 그래프 - 저역통과필터 적용 전
노란색 그래프 - 시정수(tau) 0.001 저역통과필터 적용
한눈에 봐도 노이즈가 많이 줄었긴 하지만 시정수를 좀 더 크게 줘야 할 것 같다.
노란색 그래프 - 시정수(tau) 0.001
녹색 그래프 - 시정수(tau) 0.01
이정도면 괜찮겠지..? 약간의 지연이 있지만 진동하는것보다야 훨씬 나을 것 같다.
'IoT > QuadCopter' 카테고리의 다른 글
쿼드콥터 제작기 10 - 쿼드콥터 프로젝트 reboot (2) | 2016.01.25 |
---|---|
쿼드콥터 제작 근황 (0) | 2015.12.17 |
쿼드콥터 제작기 08 - PID 튜닝, 시소테스트 (6) | 2015.10.13 |
쿼드콥터 제작기 07 - PID제어 (0) | 2015.09.09 |
쿼드콥터 제작기 06 - mpu9250(6050) 가속도와 자이로센서 (19) | 2015.08.25 |