Brise

엔코더 카운터 오버플로우, 언더플로우(Rollover, Rollunder) 대응 코드 본문

DIY/Motor

엔코더 카운터 오버플로우, 언더플로우(Rollover, Rollunder) 대응 코드

naudhizb 2021. 2. 11. 00:01
반응형

일반적으로 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)

반응형
Comments