← index #5216PR #720
Related · high · value 3.990
QUERY · ISSUE

ESP32 Pulse Counter Driver

openby nevercastopened 2019-10-16updated 2021-12-13
port-esp32

Add a driver for ESP32 Pulse Counter Hardware.

Related to: #5214

CANDIDATE · PULL REQUEST

Add Stepper Motor PWM-Counter driver.

openby IhorNehrutsaopened 2023-08-21updated 2023-09-03

image
The main feature of this driver is that the generation and counting of pulses are performed by hardware, which frees up time in the main loop. PWM will start pulses and Counter will stop pulses in irq handler.

View the README
Motor speed acceleration/deceleration video

This driver requires PR's:
esp32/PWM: Reduce inconsitencies between ports. #10854
ESP32: Add Quadrature Encoder and Pulse Counter classes. #8766

8 comments
IhorNehrutsa · 2023-08-25

@jonathanhogg
May you test esp32/esp32_pcnt: Add PCNT class and Counter/Encoder shims in machine #7582 with this PR?

IhorNehrutsa · 2023-08-25

@robert-hh
May you test mimxrt: Add Quadrature Encoder and Pulse Counter classes. #7911 with this PR?

robert-hh · 2023-08-25

Sorry, I do not have any motor and /or driver hardware for testing.

jonathanhogg · 2023-08-25

@jonathanhogg
May you test esp32/esp32_pcnt: Add PCNT class and Counter/Encoder shims in machine #7582 with this PR?

This code won't work with my version of Counter() as I don't support an .irq() method – I've only implemented the basic #8072 API – on the assumption that anyone who needed to do something more low level would use my PCNT() class directly.

As I currently use IRQs to implement wide-value counting, it'll be hard – though probably not impossible – to extend Counter() to support a threshold callback. I'd not look at doing this unless there was a decent cross-port API for it though, which at the least is going to need to decide on what to call the IRQ constant and how to specify the threshold.

IhorNehrutsa · 2023-08-25

@jonathanhogg
I think you remember the
docs\machine: Add Counter and Encoder classes. #8072

jonathanhogg · 2023-08-25

@jonathanhogg
I think you remember the
docs\machine: Add Counter and Encoder classes. #8072

I'm sorry, I don't know what you mean.

IhorNehrutsa · 2023-08-25

Sorry,
I relied on the API in which you also participated in the discussion. I have no complaints.

jonathanhogg · 2023-08-25

Sorry,
I relied on the API in which you also participated in the discussion. I have no complaints.

Yes, but we didn't arrive at a standard API for .irq() in that discussion. This code uses .irq():

self._counter.irq(handler=self.irq_handler, trigger=Counter.IRQ_MATCH1, value=self._match)

and thus won't work with my implementation.

As far as I can tell, @robert-hh's MIMXRT implementation doesn't have an IRQ_MATCH1 and so I don't think it'll work with his code either.

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied