BASIC4MCU | 질문게시판 | 아두이노 고정밀 서보모터 구동
페이지 정보
작성자 master 작성일2019-12-10 17:12 조회3,261회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=11117
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-12-10 오후 5:12:19// by Ok-Hyun Park//float a=0.;//void RC_Motor(){OCR1A=int(a*20.0+1200.0); //PB1(9번핀)}//void setup(){DDRB=2; // 9번핀 출력TCCR1A=0xAA; // FAST PWMTCCR1B=0x1A; // 8분주=0.5usecOCR1A=1200; // 600usec=0도ICR1=39999; // 0.5usec*40000=20000usec=50Hz}//void loop(){for(int i=0;i<61;i++){ a=(float)i*0.173; RC_Motor(); _delay_ms(217); } //0도에서 10.7도까지 2.174초 간격으로 +0.173도씩 회전for(int i=61;i>0;i--){ a=(float)i*0.173; RC_Motor(); _delay_ms(217); } //10.7도에서 0도까지 2.174초 간격으로 -0.173도씩 회전}10us가 약 1도이므로 0.5us 단위로 제어하는 것은 0.05도 의 정밀도로 출력하는 것입니다.
서보모터 내부의 콘트롤러가 읽어들이는 정밀도가 얼마나 정밀한가에 따라서 달라집니다.
OCR1A=1200; // 0도OCR1A=3000; // 90도OCR1A=4800; // 180도간혹 양쪽 끝에서 모터가 브라킷에 부딪쳐서 긁는 소음이 발생하면OCR1A=int(a*20.0+1200.0); //PB1(9번핀)20을 18 정도로 줄여주고 (회전 각도 범위를 좁힘)OCR1A=int(a*20.0+1200.0); //PB1(9번핀)0도 위치를 1200 보다 조금 큰 1300 정도로 높여주면 됩니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-12-10 오후 5:48:06// by Ok-Hyun Park//float a=0.;//void RC_Motor(){OCR1A=int(a*20.0+1200.0); //PB5(11번핀)}//void setup(){DDRB=0x20; // 11번핀 출력TCCR1A=0xAA; // FAST PWMTCCR1B=0x1A; // 8분주=0.5usecOCR1A=1200; // 600usec=0도ICR1=39999; // 0.5usec*40000=20000usec=50Hz}//void loop(){for(int i=0;i<61;i++){ a=(float)i*0.173; RC_Motor(); _delay_ms(217); } //0도에서 10.7도까지 2.174초 간격으로 +0.173도씩 회전for(int i=61;i>0;i--){ a=(float)i*0.173; RC_Motor(); _delay_ms(217); } //10.7도에서 0도까지 2.174초 간격으로 -0.173도씩 회전}메가 경우는 11번핀입니다.
댓글 0
조회수 3,261등록된 댓글이 없습니다.