源代码GIT链接:ESP32-STEPPING: 基于ESP-32 WROOM开发板+A4988控制四线两相式步进电机,并可通过web页面改变步进电机运行速度,开发环境:VSCode + PlatformIO
https://shop64022682.taobao.com/ DIY模块地址
1.打开VsCode,点击左边栏PlatformIO图标->点击”Create New Project”按钮->点击“+ New Project”按钮,新建工程。
2.在弹出的工程向导对话框中,填选相应信息。Name:工程名,Board:开发板类型,Framework:框架,Location:工程文件在PC的存放路径,可以选默认路径或者自己设置。
3.工程创建成功后,会自动生成默认源代码。在src目录下的main.cpp文件即为主程序文件。
setup()函数程序一启动便首先运行,且只运行一次,可以将系统的初始化代码放在这里面。
loop()函数是主函数,在setup()之后循环执行。
myFunction()函数是用户自定义程序,用户可以随意添加代码。
4.电路原理
电路图如上所示,ESP32通过A4988驱动步进电机动作,ESP32只需向A4988提供STEP步进信号和DIR电机转动方向信号即可。其中STEP步进信号为典型的方波信号,每一个信号周期驱动电机前进一步,信号频率控制电机的运动速度,在电机的速度范围之内,频率越高电机运动越快。
为更直观的反应电机的运动,本文采用步进电机驱动的微型滑台。
该滑台丝杆的导程是3mm,步进电机为两相四线制电机,步进角18°,即20步/圈。由3mm÷20步=0.15毫米/步 得出,电机每前进一步滑台前进 0.15毫米。
5.编写驱动步进电机的代码。
首先设置步进信号引脚为PIO27,方向信号引脚为PIO26。WIFI热点名称为“ESP32-STEPPING”,WIFI密码为“12345678”,服务器的端口号为HTTP服务的默认端口号80。
Time_Init()函数用于初始化定时器,设置定时器为中断模式,为了让步进电机在刚启动时不运动,Time_Init()默认不启动定时器。
timer_group0_isr()函数是中断响应回调函数,每次定时器中断,累加一次电机步数计数器,累加到800次(即滑台运动60毫米)之后,计数器清零,并切换一次运动方向。
SetStepFreq()函数用于设置步进信号的频率、启动定时器,即控制步进电机的运行速度。
Wifi_Init()函数用于初始化Wifi参数,将Wifi设置为AP模式,手机可直接连接该WiFi,并通过浏览器登录web控制页面,来控制步进电机的运动。在Wifi初始化完成后,会通过串口将Wifi的相关信息打印出来,方便用户连接。
在浏览器中输入”192.168.4.1”或者”http:// 192.168.4.1”即可登录控制页面。
在主循环中,循环检测是否有设备连接,若有链接,则将控制网页源码发送给客户端浏览器,并且检测用户GET请求中是否含有“/100Hz”、“/300Hz” 、“/500Hz”、“/STOP”字段,若有其中一个字段,则设置对应的步进引脚频率或停止定时器运行。
5.点击PlatformIO:Upload按钮,编译代码,并把程序烧录到开发板上,。
打开串口,便可以看到WIFI准备完成的信息。
根据输出的信息,使用手机WIFI连接WIFI热点“ESP32-STEPPING”,密码“12345678”,然后打开手机浏览器,输入网址”192.168.4.1”或者”http:// 192.168.4.1”即可登录控制页面。
点击相应控制按钮,便可以控制步进电机滑台的运动状态。