mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
80 lines
4.4 KiB
Markdown
80 lines
4.4 KiB
Markdown
| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S3 |
|
|
| ----------------- | -------- | -------- | -------- | -------- | -------- |
|
|
|
|
# RMT Based Stepper Motor Smooth Controller
|
|
|
|
(See the README.md file in the upper level 'examples' directory for more information about examples.)
|
|
|
|
One RMT TX channel can use different encoders in sequence, which is useful to generate waveforms that have obvious multiple stages.
|
|
|
|
This example shows how to drive a stepper motor with a **STEP/DIR** interfaced controller (e.g. [DRV8825](https://www.ti.com/lit/ds/symlink/drv8825.pdf)) in a [smooth](https://en.wikipedia.org/wiki/Smoothstep) way. To smoothly drive a stepper motor, there're three phases: **Acceleration**, **Uniform** and **Deceleration**. Accordingly, this example implements two encoders so that RMT channel can generate the waveforms with different characteristics:
|
|
|
|
* `curve_encoder` is to encode the **Acceleration** and **Deceleration** phase
|
|
* `uniform_encoder` is to encode the ***Uniform** phase
|
|
|
|
## How to Use Example
|
|
|
|
### Hardware Required
|
|
|
|
* A development board with any supported Espressif SOC chip (see `Supported Targets` table above)
|
|
* A USB cable for Power supply and programming
|
|
* A two-phase four-wire stepper motor
|
|
* A DRV8825 stepper motor controller
|
|
|
|
Connection :
|
|
|
|
```
|
|
+---------------------------+ +--------------------+ +--------------+
|
|
| ESP Board | | DRV8825 | | 4-wire |
|
|
| GND +-------------+ GND | | Step |
|
|
| | | | | Motor |
|
|
| 3V3 +-------------+ VDD A+ +------+ A+ |
|
|
| | | | | |
|
|
| STEP_MOTOR_GPIO_DIR +------------>+ DIR A- +------+ A- |
|
|
| | | | | |
|
|
| STEP_MOTOR_GPIO_STEP +------------>+ STEP B- +------+ B- |
|
|
| | | | | |
|
|
| | 3V3----+ nSLEEP B+ +------+ B+ |
|
|
| | | | +--------------+
|
|
| | 3V3----+ nRST VM +-------------------+
|
|
| | | | |
|
|
| | 3V3|GND----+ M2 GND +----------+ |
|
|
| | | | | |
|
|
| | 3V3|GND----+ M1 | | |
|
|
| | | | | |
|
|
| | 3V3|GND----+ M0 | +---+--------+-----+
|
|
| | | | | GND +12V |
|
|
| STEP_MOTOR_GPIO_EN +------------>+ nEN | | POWER SUPPLY |
|
|
+---------------------------+ +--------------------+ +------------------+
|
|
```
|
|
|
|
The GPIO number used in this example can be changed according to your board, by the macro `STEP_MOTOR_GPIO_EN`, `STEP_MOTOR_GPIO_DIR` and `STEP_MOTOR_GPIO_STEP` defined in the [source file](main/stepper_motor_example_main.c).
|
|
|
|
### Build and Flash
|
|
|
|
Run `idf.py -p PORT flash monitor` to build, flash and monitor the project.
|
|
|
|
(To exit the serial monitor, type ``Ctrl-]``.)
|
|
|
|
See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html) for full steps to configure and use ESP-IDF to build projects.
|
|
|
|
|
|
## Example Output
|
|
|
|
```
|
|
I (0) cpu_start: Starting scheduler on APP CPU.
|
|
I (325) example: Initialize EN + DIR GPIO
|
|
I (325) gpio: GPIO[16]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
|
|
I (335) gpio: GPIO[17]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
|
|
I (345) example: Create RMT TX channel
|
|
I (365) example: Set spin direction
|
|
I (365) example: Enable step motor
|
|
I (375) example: Create motor encoders
|
|
I (405) example: Start RMT channel
|
|
I (405) example: Spin motor for 6000 steps: 500 accel + 5000 uniform + 500 decel
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
For any technical queries, please open an [issue] (https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon.
|