인프런 커뮤니티 질문&답변

daejinuncommon님의 프로필 이미지
daejinuncommon

작성한 질문수

바닥부터 시작하는 STM32 드론 개발의 모든 것

8-8. FC 데이터 수신 - ID 0x10 PID 게인 요청 메시지

GCS -> PID Gain Setup 게인값 설정

작성

·

279

0

안녕하세요 크리스피님

8-8. FC 데이터 수신 - ID 0x10 PID 게인 요청 메시지

강의영상 47:00 부분에서

 

GCS -> PID Gain Setup

게인값을 설정하고 send를 누르면

Received from FC에 바로 나오는게 아니라

Request 버튼을 눌러야지 값이 뜨는데

이래도 문제 없을까요??

답변 부탁드립니다!

 

답변 2

1

ChrisP님의 프로필 이미지
ChrisP
지식공유자

안녕하세요!

해당 문제는 강의에서 설명한 non-blocking 방식을 사용하면서 드론이 센서데이터 등을 계속 송신하는 중에 게인 전송이 이뤄지기 때문에 일시적으로 데이터 수신 순서가 엉키면서 발생되는 현상입니다.

request 를 눌렀을 때 잘 수신됐다면 문제 없습니다.

근데 만약 보낸 게인이 아닌 다른 값이 수신된다면 소스코드에 문제가 있는 것일수도 있으니, 그때는 반드시 문제를 해결해야 합니다.

보낸 값이 잘 표시되는지 확인해보세요~

0

안녕하세요. 저도 동일하게 작동합니다.

GCS->FC로 보내면 부저음이 한번 울려서, 게인값이 EEPROM에 잘 저장되었음을 알 수 있습니다.

GCS에서 'request'버튼을 누를 때 EEPROM에 저장된 값을 불러와서 FC-->GCS로 전송하도록 구현 되었기 때문에 사용자가 GCS에서 게이값 요청 버튼을 누르기 전까지는 안보내지도록 현재 까지 구현되어 있습니다.

질문자님의 의도는 send버튼 누르면 그 값이 GCS에 자동으로 표현되기를 바라시는 것 같습니다. send버튼 눌렀을 때, request의 동작을 합치면 자동으로 현재 보낸 값이 GCS에 표현이 될텐데 그럴때 발생할 문제점은 고민이 필요할 것 같습니다. 강의자분이 따로 분리한 이유가 있을것 같습니다.

ChrisP님의 프로필 이미지
ChrisP
지식공유자

앞서 답변에도 달아드렸듯이,

드론의 상태데이터를 GCS로 non blocking mode로 보내면서 생기는 증상같습니다.

STM32 내부에서 UART를 송신할때와 수신할때 사용되는 데이터 레지스터가 같기 때문에, 데이터가 송신되는 중에 수신이 이뤄지면 해당 데이터는 처리되지 않아서 생기는 문제인 것으로 보입니다.

blocking 방식으로 송신하면 해당 문제는 발생하지 않는데, 그럼 1kHz로 드론 제어가 불가능해지기 때문에 지금 방식으로 그냥 진행하셔야 합니다.

어쨌든 게인을 send 한 후에 request 버튼을 눌렀을 때 보낸 게인이 잘 수신됐다면 해당 게인이 eeprom에 잘 저장되었다는 의미이므로 비행하는데에는 문제가 없습니다.

daejinuncommon님의 프로필 이미지
daejinuncommon

작성한 질문수

질문하기