Skip to content

Add Stepper Motor PWM-Counter driver.#720

Open
IhorNehrutsa wants to merge 1 commit into
micropython:masterfrom
IhorNehrutsa:stepper_motor_pwm_counter
Open

Add Stepper Motor PWM-Counter driver.#720
IhorNehrutsa wants to merge 1 commit into
micropython:masterfrom
IhorNehrutsa:stepper_motor_pwm_counter

Conversation

@IhorNehrutsa

@IhorNehrutsa IhorNehrutsa commented Aug 21, 2023

Copy link
Copy Markdown

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:
ESP32: Add Quadrature Encoder and Pulse Counter classes. #19239

@IhorNehrutsa

Copy link
Copy Markdown
Author

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

@IhorNehrutsa

Copy link
Copy Markdown
Author

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

@robert-hh

Copy link
Copy Markdown
Contributor

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

@jonathanhogg

Copy link
Copy Markdown

@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

Copy link
Copy Markdown
Author

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

@jonathanhogg

Copy link
Copy Markdown

@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

Copy link
Copy Markdown
Author

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

@jonathanhogg

Copy link
Copy Markdown

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.

@IhorNehrutsa IhorNehrutsa force-pushed the stepper_motor_pwm_counter branch from 81f1acc to abdab7d Compare September 3, 2023 18:27
@IhorNehrutsa IhorNehrutsa force-pushed the stepper_motor_pwm_counter branch 5 times, most recently from 29005df to b33b95d Compare June 17, 2026 09:05
Signed-off-by: Ihor Nehrutsa <IhorNehrutsa@gmail.com>
@IhorNehrutsa IhorNehrutsa force-pushed the stepper_motor_pwm_counter branch from b33b95d to 15220eb Compare June 17, 2026 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants