该项目使用 ESP32 控制步进电机的正反转,通过按钮触发电机的状态改变。项目使用 FreeRTOS 任务调度,利用定时器中断来实现步进电机的控制,并通过按钮触发电机的动作切换。
- IN1、IN2、IN3、IN4:连接步进电机的四个控制引脚,用于控制电机的旋转方向和步进。
- BUTTON_PIN:连接到 GPIO 0 引脚,用于触发电机状态的改变(暂停、正转、反转)。
IN1_PIN: GPIO 9IN2_PIN: GPIO 10IN3_PIN: GPIO 11IN4_PIN: GPIO 12BUTTON_PIN: GPIO 0
该系统使用一个定时器来周期性地控制步进电机的步进,每 5ms 更新一次步进状态。电机的四个控制引脚(IN1~IN4)根据当前步进序列的值来设置,步进序列通过 step_sequence 数组预设。
通过按钮(连接到 GPIO 0)触发电机状态的切换。每按下按钮一次,电机的状态会从暂停切换到正转,再到反转,最后再次暂停。
- 按钮按下时,电机会按顺序经历:正转 → 暂停 → 反转 → 暂停。
使用中断和队列来保证按钮按下事件的响应和电机控制状态的更新。
利用 ESP32 的硬件定时器,每隔 5ms 触发一次步进电机的更新,以控制电机的旋转。
-
初始化:
- 配置步进电机的控制引脚(GPIO 9、10、11、12)。
- 配置按钮引脚(GPIO 0)并启用中断。
- 初始化定时器,用于周期性更新电机的步进状态。
-
按钮事件:
- 按下按钮时,通过中断触发事件,将事件发送到队列中。
- 主任务从队列中接收事件,更新电机的状态(正转、反转、暂停)。
-
步进控制:
- 电机的步进序列是通过 8 步序列的方式实现的,根据当前的电机状态更新步进的引脚值。
初始化步进电机控制引脚的输入输出模式。
初始化定时器,用于定时更新步进电机的状态。定时器中断每 5 毫秒触发一次,调用 on_timer_isr() 更新步进电机的状态。
FreeRTOS 任务,负责接收按钮事件并根据当前的电机状态进行切换。电机状态按顺序循环:暂停 → 正转 → 暂停 → 反转 → 暂停。
定时器中断服务程序,每隔 5ms 更新电机的步进状态。
按钮中断服务程序,检测按钮按下事件,并将事件放入队列中进行处理。
- 将代码上传到 ESP32 开发板。
- 连接步进电机控制引脚(IN1~IN4)到相应的硬件。
- 将按钮连接到 GPIO 0 引脚。
- 编译并上传代码到 ESP32 开发板。
- 按下按钮,观察电机的旋转状态和日志输出。