본문 바로가기

Side-Project/Drone

gy-86 활용기-1 개인적으로 쿼드콥터 만들기 프로젝트로 센서 통합부터 시작해보려고 한다. 센서는 gy-86 (mpu6050+ms5611+지자기) 이번에는 x축과 y축 센서값을 받아 상보필터로 받아오는것을 테스트 하였다. 아래는 x축 테스트 그래프. 검은색-x raw data 파란색 - mahonyfilter 빨간색 - 상보필터 검은색-y raw data 파란색 - mahonyfilter 빨간색 - 상보필터 아래는 atmega128에서 구동한 상보필터 처리 시간. High 구간동안이 처리하는시간이므로 1ms정도 걸리는것을 알수있다. 테스트용으로 변수선언과 코드를 좀 길게 늘여써서 생각보다 처리시간이 조금 길어지긴했지만, 1ms이내로 줄일수있을거라 예상된다. 아래는 mahonyfilter의 처리시간 1.6ms정도로 상보필터 .. 더보기
쿼드콥터 제어기 주기. 우리 쿼드콥터의 제어기의 주기는 2.5ms 즉 400hz이다. 아래는 오실로코프로 찍어본결과. 새로산오실로스코프 성능이 매우만족. 스크린샷도 usb로 깔끔하게 저장이된다!! 아래는 새로 추가할 예정인 초음파 오실로스코프 사진. 우리가 사용중인 SRF-02는 i2c 방식으로 updata주기가 약 70ms이다. 그전에 read하면 쓰래기값들이 나온다. 그래서 70ms주기로 데이터 받아오고 중간의 딜레이를 줄여 제어기를 최적화. high 부분이 데이터 받아오기까지 주기고. low가 다른 연산 처리이다. 더보기
gy-86 도착 알리에서 구매했던 gy -86이 도착했다 모듈구성은 mpu6050-HMC5883, 그리고 MS5611 로 구성되어있다. mpu6050과 HMC5883은 요즘 쓰이는 가속도자이로 지자기계로 일반적이지만 이에구성되어있는 MS5611은 기압센서중 성능이 bmp085보다 좋다. 스펙상 성능은 같지만 실제로 구동시 차이가 많이난다. ms5611은 구하기힘들지만.. 알리에선 이모듈을 14달러... 무료배송으로 8일만에 도착. 현재 고도 정보만 뽑은 스샷이다. real time으로 봤을땐 오차가 0.5m정도 난다 그래서 50샘플단위로 평균 필터사용결과 0.1m정도 오차가있는걸 볼수있엇다.. 매우만족!! 더보기
대기압 센서로 고도 측정하기 bmp085 의 data sheet의 있는식을 변환해서 적어본다. altitude = 44330 * (1.0 - pow(pressure /sealevelPressure,0.1903)); 아래는 github에 올라와있는 압력 읽어오는 part. arduino 코드라 128에 맞게 포팅시키면 될듯. int32_t Adafruit_BMP085::readPressure(void) { int32_t UT, UP, B3, B5, B6, X1, X2, X3, p; uint32_t B4, B7; UT = readRawTemperature(); UP = readRawPressure(); #if BMP085_DEBUG == 1 // use datasheet numbers! UT = 27898; UP = 23843; ac6.. 더보기
모터 동작 개념및 코드 우리가 사용하는 모터드라이버는 500HZ까지 인식한다. 500HZ->1/500 = 2ms 이므로 2ms 주기까지 인식한다는 뜻이다. atmega128로 짠 코드로는 Sensor update 가 200hz, 모터 제어주기는 400hZ로 동작한다. 이것이 의미하는 바는 센서 센서값이 1번들어올때 모터 동작을 2번 해준다는 것이다. (물론 생각대로 정확할진 모름...) 이 모터드라이버의 시동방법은 최소 스로틀 입력을 주면 삐~ 하는소리와함께 시동이 걸린다. 그후 원하는 pwm을 입력하면 그에 맞는 모터출력이 나오게된다. 타이머1,3를 사용했으며 분주비는 1/8 따라서 1count 당 2Mhz -> 0.5us 이다. 모터출력부분 코드는 아래와같다. while(set1) { duty1 = 1800; duty2 =.. 더보기
printf printf...... 센서값이 정확한지 눈으로 보기위해 일반적으로 쓰는 printf.. 이게 atmega128의 연산능력을 엄청나게 잡아먹는걸 최근에서야 알았다. 센서값 통신에서 가끔가다 값자체가 튀는 현상이 발생한다 분명히 checksum으로 통신 에러를 검출해냈음에도 센서값오류가 발생.. 겨우 센서값 통신오류를 잡았다고 생각했을때! 센서값은 정상적으로 보이는데 pid값만 확 튀어버리는값 발생.. 이로인해 pwm duty비가 너무올라가 모터가 갑자기 멈추어버리는현상이나왓다... 문제가 해결되지않아 printf 출력부분을 다 제거하였더니 이거왠걸.. 너무 정확하게 제어가 잘되었다... 그래서 초기 셋팅 할때에만 serial로 값을받아보고 호버링 시킬때는 값 출력을 빼는게 좋겠다는 결론이 나왓다. 더보기
atmega128 사용기 atmega128 은 8bit processor로 동작속도는 16MHz 를 사용했다. 학부과정에서 주로 다루어 오는 MCU이다. 그래서 쿼드콥터 제작에도 128을 사용하기로 하고 제작에 들어갔다. 수업외 MCU 사용은 처음이기에 코딩 프로그램이 필요하였다. 그래서 ATMEL사에서 제공하는 최신버젼인 ATMEL Studio 6.1버젼으로 진행하였다. 수업시간에 다루던 방법대로 uart통신 및 타이머인터럽트 관련 소스들을 긁어서 동작테스트를 진행하였었다. 하지만 뿜어내는 error.... 분명 학교에서 할땐 잘되던것이었는데??? 알아보니 인터럽트 허용 sreg 명령이 듣질않는다... 라이브러리를 펼쳐보니 sreg부분은 누락되어있네??? 그래서 sei(),cli()로 사용.. 그리고 avredit에서 사용하던.. 더보기
쿼드콥터 부품선정-2 -센서파트- FB155BC(SPP+HID) http://www.devicemart.co.kr/1111784 MPU6050 6축 자이로 가속도 센서 모듈 http://www.devicemart.co.kr/38329 테스트용으로 사용하다 실사용은 새로구매 IMU AHRS 10DOF Dragon http://www.devicemart.co.kr/38331 더보기