BASIC4MCU | 질문게시판 | 아두이노 고분해능 엔코더 모터 질문
페이지 정보
작성자 모터무 작성일2019-08-23 18:50 조회16,305회 댓글3건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=9781
작성일
작성일
본문
안녕하세요. DC 엔코더 모터 사용하고 있으며 512CPR 에 128 감속기 모터를 사용하고 있습니다..
아두이노 듀 를 사용하고 인터럽트를 통해서 엔코더 A,B 신호를 받습니다.현재 모터에 무부하로 제어중에 있어 9930RPM 의 모터속도가 나옵니다.문제는 엔코더의 카운트 수를 제대로 읽히지 않아 위치가 많이 틀어집니다.오실로스코프로 측정시 엔코더 출력 주파수는 80khz 인데 듀가 제대로 인식하지 못하진 않을꺼 같고엔코더 입력 코드 부분에서 문제가 있는거 같아 도저히 해결할수 있는 방안이 떠오르지 않아 질문합니다.엔코더 코드는 아래에 있습니다.void doEncoderA(){ encoderPos += (digitalRead(encoderPinA)==digitalRead(encoderPinB))?1:-1;}void doEncoderB(){ encoderPos += (digitalRead(encoderPinA)==digitalRead(encoderPinB))?-1:1;}pinMode(encoderPinA, INPUT_PULLUP);attachInterrupt(3, doEncoderA, CHANGE);pinMode(encoderPinB, INPUT_PULLUP);attachInterrupt(2, doEncoderB, CHANGE);이외의 나머지 제어 코드들이 있는데 인터럽트 입력에 지연이 생겨서 제대로 된 값을 못읽는 것일까요?너무 빠르고 고분해능 이다보니 놓치게 되는 걸까요?조언 부탁 드리겠습니다.
댓글 3
조회수 16,305master님의 댓글
master 작성일
https://www.google.com/search?q=%EC%97%94%EC%BD%94%EB%8D%94+74LS193&pws=0&gl=us&source=lnms&tbm=isch&sa=X&ved=0ahUKEwistNb_hZnkAhUJfd4KHWjpCiMQ_AUIESgB&biw=1434&bih=938#imgrc=Dew5Vs8WrBJWvM:
엔코더 신호로 무엇을 하려는지 모르겠지만
외부에 게이트 추가하면 간단합니다.
모터무님의 댓글
모터무
감사합니다~
master님의 댓글
master
엔코더는 보통 인터럽트 안에서 처리를 하고 있는데요
다른 인터럽트의 영향을 많이 받습니다.
80KHz 면 100KHz가 10us이므로 이보다 조금 길 것으로 생각되는데요
계산기 두들기기는 귀찮고 12us라고 한다면
모든 인터럽트 함수안의 코드 실행시간을 합한 것이 12us보다 짧아야합니다.
듀에가 빠르긴 해도 여러개의 인터럽트를 사용한다면 놓치기 쉽습니다.
게이트를 사용해서 처리하는 것이 좋습니다.