@@ -39,12 +39,14 @@ void STM32HWEncoder::update() {
3939 pulse_timestamp = _micros (); // micros() rollover is handled in velocity calculation
4040
4141 prev_overflow_count = overflow_count;
42- if (prev_count > (ticks_per_overflow - overflow_margin) &&
43- prev_count <= ticks_per_overflow && count < overflow_margin)
44- ++overflow_count;
45- if (prev_count >= 0 && prev_count < overflow_margin &&
46- count >= ( ticks_per_overflow - overflow_margin ))
42+ // if (prev_count > (ticks_per_overflow - overflow_margin) && count < overflow_margin)
43+ // ++overflow_count;
44+ // if (prev_count < overflow_margin && count >= (ticks_per_overflow - overflow_margin))
45+ // --overflow_count;
46+ if (prev_count < count && ( count - prev_count > ticks_per_overflow / 2 ))
4747 --overflow_count;
48+ if (prev_count > count && (prev_count - count > ticks_per_overflow / 2 ))
49+ ++overflow_count;
4850}
4951
5052
@@ -110,8 +112,8 @@ void STM32HWEncoder::init() {
110112 ticks_per_overflow = cpr * rotations_per_overflow;
111113
112114 // GPIO configuration
113- TIM_TypeDef *InstanceA = (TIM_TypeDef *)pinmap_peripheral (_pinA, PinMap_PWM );
114- TIM_TypeDef *InstanceB = (TIM_TypeDef *)pinmap_peripheral (_pinB, PinMap_PWM );
115+ TIM_TypeDef *InstanceA = (TIM_TypeDef *)pinmap_peripheral (_pinA, PinMap_TIM );
116+ TIM_TypeDef *InstanceB = (TIM_TypeDef *)pinmap_peripheral (_pinB, PinMap_TIM );
115117 if (InstanceA != InstanceB) {
116118 initialized = false ;
117119 return ;
@@ -143,6 +145,7 @@ void STM32HWEncoder::init() {
143145
144146 encoder_handle.Instance = InstanceA; // e.g. TIM4;
145147 enableTimerClock (&encoder_handle);
148+
146149 if (HAL_TIM_Encoder_Init (&encoder_handle, &encoder_config) != HAL_OK) {
147150 initialized = false ;
148151 return ;
0 commit comments