쿼드콥터 제작기 09 - LPF(Low Pass Filter)구현

Posted by dw0rdptr
2015. 10. 15. 00:52 IoT/QuadCopter

저번글[동]에서 시소테스트를 하는데 모터출력이 튀는 원인인 센서진동을 잡기위해 LPF를 구현하려고 한다


LPF(Low Pass Filter)

저역통과필터라고도 하며, 특정값 이하의 저주파는 통과시키고 그이상 고주파를 걸러내는 필터이다.

다.


MPU6050의 DLPF_BW LPF다.

http://hs36.tistory.com/search/lpf


D제어에만 저역통과필터링을 하는 이유는...

센서값 진동은 D뿐만 아니라 P나 I제어에도 영향을 주지만, 순간적인 값변화에 영향을 제일 많이 받는 D제어에만 저역통과필터를 구현해도

안정화 될 것이고 쿼드제어의 생명이 응답속도인데 저역통과필터를 거치면 딜레이가 생기기도 해서.. ㅠㅠ

아무튼, PID튜닝도 어느정도 됐고 이문제만 해결하면 드디어 첫비행 테스트를 할 수 있다!




 출처 - http://pinkwink.kr/437

 코드로 변환하면


val = (tau*pre_val + ts*x)/(tau + ts);

예상외로 간단하다. 여기서 val은 저역통과필터의 결과이고 pre_val은 이전결과값, x가 입력값, ts는 샘플링주파수이다.  

tau는 시정수라고하는데 이값이 크면 클수록 데이터가 깔끔하게 나오지만 그만큼 지연시간이 길어진다.


-

프 - 수(tau) 0.001

한눈에 봐도 노이즈가 많이 줄었긴 하지만 시정수를 좀 더 크게 줘야 할 것 같다.


노란색 그래프 - 시정수(tau) 0.001
녹색 그래프 - 시정수(tau) 0.01

 이정도면 괜찮겠지..? 약간의 지연이 있지만 진동하는것보다야 훨씬 나을 것 같다.