Brise
엔코더 카운터 오버플로우, 언더플로우(Rollover, Rollunder) 대응 코드 본문
일반적으로 HW에서 지원하는 엔코더 카운터는 [0 max] 값의 범위에서 작동한다.
모터를 단방향으로 제어할 때에는 새 값에서 이전 값을 빼는 방식으로(만약 현재 값이 이전값보다 작다면 max만큼을 더하고..) 차이를 구할 수 있다. 이 때 결과값은 [0 max-1]이 된다.
하지만, 양방향으로 제어할 때에는 결과값이 [-max/2 max/2]범위로 구해져야 하며, 이 때 타이머가 오버플로우되거나 언더플로우 되는 것에 대한 대응 코드가 필요하다.
해당 코드를 만들기 위한 참고 코드는 아래와 같다.
int32_t NumOp_GetDiff(uint32_t curr, uint32_t prev, uint32_t max){
int32_t diff = 0;
const uint32_t half_max = max/2;
diff = (int32_t)curr - (int32_t)prev;
diff += half_max;
if(diff < 0){
diff += max;
}
diff %= max;
diff -= half_max;
return diff;
}
forums.parallax.com/discussion/102700/absolute-encoder-rollover
[Absolute Encoder Rollover
For one application, I am useing a 10bit absolute encoder as an HID device. I need absolute positioning, but I need to figure out someway to stop the rollover.
forums.parallax.com](https://forums.parallax.com/discussion/102700/absolute-encoder-rollover)
electronics.stackexchange.com/questions/410350/how-to-handle-rotary-encoder-overflow
[How to handle rotary encoder overflow
I am using a magnetic rotary encoder(AS5048B) to detect the rotation angle of a motor shaft. This is fed to a pid loop to calculate the PWM value for motor position control. The encoder has a 14Bit
electronics.stackexchange.com](https://electronics.stackexchange.com/questions/410350/how-to-handle-rotary-encoder-overflow)
'DIY > Motor' 카테고리의 다른 글
모터 피니언 기어 장착 및 제거 방법 (0) | 2017.06.30 |
---|---|
BLDC 모터 감속기 설치기 (0) | 2017.06.25 |
풀브릿지 마이크로 모터 (0) | 2015.03.25 |
마이크로 모터 제작에 앞서; 모터의 종류에 대한 설명 (0) | 2014.10.09 |