본문 바로가기

Lab./Quadcopter

20110812 쿼드콥터 진행사항2 (PID 제어)

한동안 밀렸으니 열심히 써야겠다.

주기를 줄이고 분해능을 늘리기 전에는 P제어가 전혀 되지 않았다.
 
하지만 타이머의 주기를 2.5ms로 변경하고 분해능을 1로 변경후 그제서야 P 제어가 됨을 확인하였다.

얼마나 기뻤는지.....

그리고 한동안 PID 를 가지고 테스트를 하였는데......

글쎄... 맘에 쏙!!! 드는 정답같은 PID 파형은 나오지 않았다.

다만 테스트를 하면서 경험한걸 풀어보면.....

P 값이 크면 발진한다....

P 값이 적당한 상테에서 D 값을 조금 크게하면 0도 부근에서 떨림이 매우 크다.
P 값이 적당한 상테에서 D 값을 크게하면...(D값 적정 이상) 매우 빠르게 진동하며 무섭게 발진한다.

어느정도 안정된 PD 제어에서 P 값을 크게할경우 처음에는 빠른진동.....그리고 그 이후에 발진한다.

I 값 역시 잘못 설정하면 진동에 도움을 많이 준다.
특히 I 값 같은 경우 0에 수렴해가야 하는데 수렴을 하지 못하고 0 부근에서 진동한다.  (그러다 발진할수도.....)


나같은 경우는 P 제어값에 의한 동작보다 D 제어값에 의한 동작이 큰것처럼 느껴진다.

P제어만으로는 RPM의 변화가 그리 크지 않은데
D제어의 경우 기울기가 변하면(외부충격시) P 제어값에 비하여 어마어마한 값들이 출력되며 빠른속도로 제 자리로 돌아온다.

그럼에도 P 값을 크게하면 I 값과 상호보정관계를 가진다고 할까?.....

한쪽모터출력이 크기 때문에 항상 한쪽으로 기울어져 있는 상테인데.... P 제어값에 의해 한쪽으로 출력이 크게나와 기울기를 유지하면 I 값이 기걸 따라가며 P 값이 줄어드는것을 볼수 있다.

모터 출력이 다르기 때문에 생기는 현상.... 그렇다면 I 값을 크게 하면 그 보정을 빨리 한다는건데......
얼마까지 크게해도되려나......

아니면 I제어값을  모터 추력에 더해주면 그것도 하나의 방법이 되려나????
I 값을 기본 모터 추력에 더해주고 I값을 0 으로 변경하는거지......
이거 잘못하면.... 값이 튈수도 있긴 하겠네....  그래도 그러면 실시간으로 모터 추력을 보정해주는건데....


생각보다 좋은 아이디어인듯....

하여튼 그렇게 PID 를 제어함으로 1축 테스트도 어느정도 마무리단계에 와간다.

나의 PID 제어상수는 P를 최대로 하는것이 아니라 P를 최대값에서 좀 많이 줄였다.

주기와 분해능을 변경하기 전에는 P를 키우면 상당히 안정되었는데 이제는 P를 키우면 반대로 진동하며 수렴한다.

그럼에도 P 값을 키우려고만 했는데...  어느정도 과감히 줄여버리니 더욱 수렴 효과가 좋아졌다.

다만 모터 출력이 달라 한쪽으로 기울어져있는 상테가 심하다는것......
(예전에는 P 값으로 어느정도 보정이 되었다면 지금은 I 값만으로 보정을 해야하해 수렴이 느린 단점이 있다.)

그래서 반대로 I 값을 좀 많이 키워줬다....  기울기 값이 변하면 그나마 빨리 수렴할수 있도록....

I 값을 키웠음에도 P 값이 작아서인지 그닥 진동이나 오버슈트가 그렇게 까진 크진 않은데.......

기울기 값을 변화시키면... 오버슈트가 상당히 크게 발생한다는것....수렴속도도 좀 느리다는게 문제.......


하여간 어느정도 마무리단계....  다음단계로 넘어가서 동시진행해야겠다....


어차피 2축 구조물도 만들어 놨겠다...ㅋㅋㅋ