BASIC4MCU | 질문게시판 | 기어드 모터 외부인터럽트 사용하여 1초 동안 펄스 세는 법
페이지 정보
작성자 바밤 작성일2024-07-04 17:02 조회546회 댓글3건본문
안녕하세요! 졸업작품을 하다가 궁금증이 생겨 글을 남겨봅니다.
ATmega128로 RA-35GM 07/09 엔코더장착형 감속기어모터를 사용하는데 microschip Studio 프로그램을 사용하여 소스코드를 작성하는데
외부인터럽트를 사용하여 1초동안 펄스를 세서 펄스로 모터 한 바퀴를 아는 소스코드를 짜고 싶은데
타이머/카운터와 외부인터럽트를 사용하여 짜는 법 좀 알려주세요 ㅜㅜ
댓글 3
조회수 546master님의 댓글
master 작성일
https://www.devicemart.co.kr/goods/view?no=1326678
약 800rpm 모터군요
13펄스(A,B 합하면 26펄스) 엔코더
26펄스 * 800rpm= 분당 20800 펄스 = 초당 347펄스 = 주기 2.88ms
최고속도는 AVR에서 다루기에 큰 문제는 없는 것으로 보입니다.
최저속도가 얼마인지 모르겠지만 저속도 체크 해봐야 합니다.
master님의 댓글
master 작성일
인터럽트 사용하려면
#include <avr/interrupt.h>
헤더파일 선언해야하고
//
ISR(INT0_vect){} // A상 신호
ISR(INT1_vect){} // B상 신호
인터럽트 함수도 필요하겠죠
EICRA=0xAA; EIMSK=0x03; //falling edge
인터럽트 설정입니다.
//
ISR(TIMER1_COMPA_vect){}
1초 타이머 인터럽트용 함수도 준비해야하고
TCCR1B=0x0D; OCR1A=15624; TIMSK=0x10; //1sec
타이머 설정은 이렇게 합니다.
//
SREG=0x80;
전역인터럽트 이네이블 시켜주면 인터럽트 함수가 실행될 수 있습니다.
master님의 댓글
master 작성일
정/역 회전을 하는지 아닌지에 따라서 코드가 달라집니다.
기본적인 모터 구동 코드를 작성하고, 코드를 첨부해보세요
작성한 코드에 추가하는 식으로 도움을 드리죠