@@ -39,12 +39,14 @@ void STM32HWEncoder::update() {
39
39
pulse_timestamp = _micros (); // micros() rollover is handled in velocity calculation
40
40
41
41
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 ))
47
47
--overflow_count;
48
+ if (prev_count > count && (prev_count - count > ticks_per_overflow / 2 ))
49
+ ++overflow_count;
48
50
}
49
51
50
52
@@ -110,8 +112,8 @@ void STM32HWEncoder::init() {
110
112
ticks_per_overflow = cpr * rotations_per_overflow;
111
113
112
114
// 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 );
115
117
if (InstanceA != InstanceB) {
116
118
initialized = false ;
117
119
return ;
@@ -143,6 +145,7 @@ void STM32HWEncoder::init() {
143
145
144
146
encoder_handle.Instance = InstanceA; // e.g. TIM4;
145
147
enableTimerClock (&encoder_handle);
148
+
146
149
if (HAL_TIM_Encoder_Init (&encoder_handle, &encoder_config) != HAL_OK) {
147
150
initialized = false ;
148
151
return ;
0 commit comments