드론

1-15 드론의 PID 계산 결과 ESC 입력 과정

coding art 2017. 11. 1. 17:48
728x90


calculate_pid() 루틴을 불러 각각이 드론 모터를 제어하기 위해서 4,5,6,7번 채널에 연결되어 있는 ESC 에 적절한 펄스입력을 제공해 주어야 한다.

loop()문 첫 회에 loop_timer 의 값이 영이면서 micros()- loop_timer의 값이 4000 μsec  보다 작으면 참이므로
다음번의 loop() 계산을 위해 loop_timer 현재 값을 micros()를 불러 찍어 저장해  둔다.


PORTD 명령에 의해 디지털 핀 4,5,6,7 번을 현재의 loop_timer 시각에 HIGH 로 출력한다. 아울러 동시에 채널별로 HIGH 상태에서 LOW 로 상태를 바꾸어 주게 될 경과 시각을 계산하는데 이는 현재의 loop_timer  시각에 앞서 계산된 1000∼2000 사이의 값을 가지는 esc_1,∙∙∙  값들을 더하여 계산한다.

PORTD의 값이 16이란 2진법으로 0001 0000 즉 1X24+ 0X23+0X22+0X21+0X20 을 뜻한다.따라서 0001 0000, 0010 0000, 0011 0000,∙∙∙,1111 0000 까지는 10진법으로 환산하면 모도 16 이상이 된다. 따라서 (PORTD>=16) 이 참일 동안에 PORTD의 디지털 핀 4,5,6,7 번들이 모두 LOW 가 될 때까지 시간을 체크한다. 그 방법은 지속적으로 micros()를 불러 앞에서 계산해 두었던 timer_channel_1,∙∙∙과 micros() 가 같아지는 시점에서 해당 채널의 값을 LOW 로 내린다.

이러한 과정을 통해서 각 채널별로 esc_1,∙∙∙  값들에 해당하는 HIGH 상태의 펄스 길이가 ESC 에 입력된다.

입력이 끝나고도 4000 μsec 이 경과되지 않았으면 갈색으로 표시된 while() 문을 만족할 때까지 지속한다.