inc_encoder.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2025 TU Dresden
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
85 #include <stdint.h>
86 
87 #include "periph/gpio.h"
88 #include "irq.h"
89 #include "periph/qdec.h"
90 #include "ztimer.h"
91 #include "ztimer/periodic.h"
92 #include "kernel_defines.h"
93 
94 #ifdef __cplusplus
95 extern "C" {
96 #endif
97 
101 typedef struct {
102 #if IS_USED(MODULE_INC_ENCODER_HARDWARE)
103  qdec_t qdec_dev;
104 #elif IS_USED(MODULE_INC_ENCODER_SOFTWARE)
105  gpio_t interrupt;
106  gpio_t direction;
107 #endif
109 
113 typedef struct {
115 #if IS_USED(MODULE_INC_ENCODER_SOFTWARE)
116  uint32_t delta_t;
117  int32_t pulse_counter;
118  uint32_t last_read_time;
119  bool cw;
120  bool stale;
121 #elif IS_USED(MODULE_INC_ENCODER_HARDWARE)
122  int32_t extended_count;
123  int32_t prev_count;
124  int32_t leftover_count;
125  int32_t last_rpm;
126  ztimer_periodic_t rpm_timer;
127 #endif
128 } inc_encoder_t;
129 
141 
151 int inc_encoder_read_rpm(inc_encoder_t *dev, int32_t *rpm);
152 
163 int inc_encoder_read_reset_milli_revs(inc_encoder_t *dev, int32_t *rev_counter);
164 
165 #ifdef __cplusplus
166 }
167 #endif
168 
Low-level GPIO peripheral driver interface definitions.
int inc_encoder_init(inc_encoder_t *dev, const inc_encoder_params_t *params)
Initialize the given device.
int inc_encoder_read_rpm(inc_encoder_t *dev, int32_t *rpm)
Read the current RPM of the motor.
int inc_encoder_read_reset_milli_revs(inc_encoder_t *dev, int32_t *rev_counter)
Read and reset number of revolutions since the last readout in thousands of a full revolution.
uint_fast8_t qdec_t
Default QDEC type definition.
Definition: qdec.h:107
IRQ driver interface.
Common macros and compiler attributes/pragmas configuration.
Low-level QDEC peripheral driver interface definitions.
Device initialization parameters.
Definition: inc_encoder.h:101
Device descriptor for the driver.
Definition: inc_encoder.h:113
inc_encoder_params_t params
configuration parameters
Definition: inc_encoder.h:114
ztimer periodic structure
Definition: periodic.h:94
Periodic ztimer API.
ztimer API