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() 문을 만족할 때까지 지속한다.
'드론' 카테고리의 다른 글
홍익대학교 기계정보공학과 졸업작품 드론 보호대 설계제작 시험 동영상 (0) | 2017.11.22 |
---|---|
1-16 MPU 6050 센서에 의한 YMFC-AL 아두이노 250 사이즈 드론 리모델링 동영상 (0) | 2017.11.08 |
1-14 드론의 비행 제어:PID 제어를 위한 setpoint 값 결정, 제어 오차 계산 및 ESC 펄스 값 계산 (0) | 2017.11.01 |
1-12 자이로 센서 데이터 LOW PASS FILTERING (0) | 2017.11.01 |
1-11 YMFC-3D_V2 PID 값과 시험비행 동영상 (0) | 2017.11.01 |