로터리 엔코더를 사용하여 Arduino를 얼마나 정확하게 얻을 수 있습니까?


15

스테퍼 모터는 종종 대형 모터의 가격이 비쌉니다. 그러나 강력한 표준 DC 모터와 로터리 엔코더를 사용하면 스테퍼 모터를 "시뮬레이션"할 수 있습니다. Arduino를 사용하는 로터리 엔코더는 기본 루프 만 있고 다른 코드는 얼마나 정확합니까? "펄스를 놓치고"자주 회전을 기록하지 않습니까? 더 많은 코드로 이것을 어떻게 처리 할 수 ​​있습니까? 더 좋은 방법이 있습니까? 방해가 도움이 되겠습니까? 이 문제에 도움이되는 회로가 있습니까?

참고 : 아마도 초당 4 회전을 초과하지 않을 것입니다 ... (많이있을 수 있지만 선형 모션 인치 당 10 회전이있는 경우 분당 24 인치 인 리드 스크류 유형 메커니즘을 수행하는 경우. )


회전 속도가 빠르면 제대로 작동하지 않는 로터리 엔코더를 사용했습니다. 가격에 따라 다릅니다.
jippie

답변:


10

이 상황에서 인터럽트가 사용됩니다.

언급 한 속도 는 루프 내부에서 계산할 수 있을 정도로 충분히 느리지 만 일반적인 루프는 완료하는 데 많은 클럭 사이클이 필요하며 루프 당 인스 트루먼 트 수에 따라 권장되지 않습니다. , 일부 카운트를 놓칠 수 있습니다.

루프 상태에 관계없이 언제든지 트리거 될 수 있으므로 이러한 목적으로 인터럽트가 발생합니다.

attachInterrupt()세 개의 인수를 취하는 함수 가 있습니다.

  1. 인터럽트 핀
  2. 인터럽트 서비스 루틴
  3. 방법

아래는 인터럽트를 계산하는 예입니다

volatile int myCounter = 0;

void setup(){
    attachInterrupt(0, count, RISING);
}

void count(){
    myCounter++;
}

모드는 다음과 같습니다.

낮음, 변경, 상승, 하강

인터럽트 사용에 대한 자세한 내용은 여기를 참조하십시오 .

사용하는 엔코더에 따라 필요에 따라 코드를 조정하고 위치를 결정하기 위해 더 많은 계산을 수행해야하지만 좋은 출발점이되어야합니다.

편집 다음 은 로터리 엔코더를 사용하기위한 Arduino Sandbox의 코드 예입니다.


1
Duemilanove의 인터럽트 구동 에지 검출기는 초당 100 개의 에지 (모터에서 6500rpm)를 쉽게 처리합니다.
Wayfaring Stranger

@WayfaringStranger 그렇다면 Uno에는 아무런 문제가 없습니다. 감사!
익명 펭귄

1
@AnnonomusPerson-얼마나 많은 일을 하시겠습니까? 알몸 ISR_NAKED()으로 이동하면 ( ) 자동 C 컨텍스트 저장을 건너 뛰고 문제없이 100-500 Khz 인터럽트 속도를 제거 할 수 있지만 기본적으로 그 시점에서 C로 어셈블리를 작성합니다.
코너 울프

1
인터럽트 응답에서 절대 크랩을 최적화하는 방법에 대한 완전한 바나나 문서를 보려면 여기를 참조하십시오 . 인터럽트 대기 시간을 더욱 줄이기 위해 인터럽트 테이블에 직접 코드를 배치하십시오!
코너 울프

1
또한 지연 시간이 짧은 인터럽트를 사용하려는 경우 arduino attachInterrupt 함수는 인터럽트를 ISR()직접 사용하는 것보다 전체적인 추가 함수 호출 오버 헤드를 주입합니다 .
코너 울프

3

이미 작성된 라이브러리 및 예제에 대한 참조를 추가하여 다양한 접근 방식과 누락 된 단계에 대한 속도 대 취약성에 대한 경험을 비교할 수 있습니다.

로터리 엔코더 읽기 : http://playground.arduino.cc/Main/RotaryEncoders

Arduino에 너무 빠른 Quadrature Encoder (솔루션 포함) : http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/

Teensy Encoder 라이브러리 : https://www.pjrc.com/teensy/td_libs_Encoder.html

Arduino에서 로터리 엔코더 읽기 : http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.