Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。
Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台
Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。
Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。
ESP32(MicroPython) 步进电机调速
不同于常见的步进电机调速程序,本程序实现了更多级调速并且提供了毫秒延时与微秒延时的切换(KEY4),由于本人使用的步进电机(28BYJ48)最少使用600微秒延时(使用500微秒延时不能正常运行),微秒延时做成最短600微秒。另外,毫秒延时最多46毫秒。
代码如下
'''
接线说明:电机模块-->ESP32 IO
(IN1-IN4)-->(15,2,0,4)
电机模块输出-->28BYJ-48步进电机
(5V)-->红线
(O1)-->依次排序
按键模块-->ESP32 IO
(K1-K4)-->(14,27,26,25)
按键功能:KEY1切换正反转,KEY2加速,KEY3减速,KEY4切换高、低速模式
'''
#导入Pin模块
from machine import Pin
import time
#定义按键控制对象
key1=Pin(14,Pin.IN,Pin.PULL_UP)
key2=Pin(27,Pin.IN,Pin.PULL_UP)
key3=Pin(26,Pin.IN,Pin.PULL_UP)
key4=Pin(25,Pin.IN,Pin.PULL_UP)
#定义步进电机控制对象
motor_a=Pin(15,Pin.OUT,Pin.PULL_DOWN)
motor_b=Pin(2,Pin.OUT,Pin.PULL_DOWN)
motor_c=Pin(0,Pin.OUT,Pin.PULL_DOWN)
motor_d=Pin(4,Pin.OUT,Pin.PULL_DOWN)
#定义按键键值
KEY1_PRESS,KEY2_PRESS,KEY3_PRESS,KEY4_PRESS=1,2,3,4
key_en=1
#按键扫描函数
def key_scan():
global key_en
if key_en==1 and (key1.value()==0 or key2.value()==0 or
key3.value()==0 or key4.value()==0 ):
time.sleep_ms(10)
key_en=0
if key1.value()==0:
return KEY1_PRESS
elif key2.value()==0:
return KEY2_PRESS
elif key3.value()==0:
return KEY3_PRESS
elif key4.value()==0:
return KEY4_PRESS
elif key1.value()==1 and key2.value()==1 and key3.value()==1 and key4.value()==1:
key_en=1
return 0
#步进电机发送脉冲函数
def step_motor_send_pulse(step,fx):
temp=step
if fx==0:
temp=7-step
if temp==0:
motor_a.value(1)
motor_b.value(0)
motor_c.value(0)
motor_d.value(0)
elif temp==1:
motor_a.value(1)
motor_b.value(1)
motor_c.value(0)
motor_d.value(0)
elif temp==2:
motor_a.value(0)
motor_b.value(1)
motor_c.value(0)
motor_d.value(0)
elif temp==3:
motor_a.value(0)
motor_b.value(1)
motor_c.value(1)
motor_d.value(0)
elif temp==4:
motor_a.value(0)
motor_b.value(0)
motor_c.value(1)
motor_d.value(0)
elif temp==5:
motor_a.value(0)
motor_b.value(0)
motor_c.value(1)
motor_d.value(1)
elif temp==6:
motor_a.value(0)
motor_b.value(0)
motor_c.value(0)
motor_d.value(1)
elif temp==7:
motor_a.value(1)
motor_b.value(0)
motor_c.value(0)
motor_d.value(1)
#程序入口
if __name__=="__main__":
key=0
fx1=1
speed1=1
step1=0
while True:
if speed1<4:
key=key_scan()
if key==KEY1_PRESS:
fx1=not fx1
elif key==KEY2_PRESS:
if speed1>1:
speed1-=1
elif key==KEY3_PRESS:
speed1+=1
elif key==KEY4_PRESS:
speed1=900
step_motor_send_pulse(step1,fx1)
step1+=1
if step1==8:
step1=0
time.sleep_ms(speed1)
elif 3<speed1<10:
key=key_scan()
if key==KEY1_PRESS:
fx1=not fx1
elif key==KEY2_PRESS:
speed1-=2
elif key==KEY3_PRESS:
speed1+=2
elif key==KEY4_PRESS:
speed1=900
step_motor_send_pulse(step1,fx1)
step1+=1
if step1==8:
step1=0
time.sleep_ms(speed1)
elif 9<speed1<22:
key=key_scan()
if key==KEY1_PRESS:
fx1=not fx1
elif key==KEY2_PRESS:
speed1-=4
elif key==KEY3_PRESS:
speed1+=4
elif key==KEY4_PRESS:
speed1=900
step_motor_send_pulse(step1,fx1)
step1+=1
if step1==8:
step1=0
time.sleep_ms(speed1)
elif 21<speed1<47:
key=key_scan()
if key==KEY1_PRESS:
fx1=not fx1
elif key==KEY2_PRESS:
speed1-=8
elif key==KEY3_PRESS:
if speed1<46:
speed1+=8
elif key==KEY4_PRESS:
speed1=900
step_motor_send_pulse(step1,fx1)
step1+=1
if step1==8:
step1=0
time.sleep_ms(speed1)
elif speed1>599:
key=key_scan()
if key==KEY1_PRESS:
fx1=not fx1
elif key==KEY2_PRESS:
if speed1>600:
speed1-=100
elif key==KEY3_PRESS:
if speed1<900:
speed1+=100
elif key==KEY4_PRESS:
speed1=1
step_motor_send_pulse(step1,fx1)
step1+=1
if step1==8:
step1=0
time.sleep_us(speed1)
————————————————
版权声明:本文为CSDN博主「路易斯720」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_74155302/article/details/130954164
Copyright © 2014 ESP56.com All Rights Reserved
执行时间: 0.0079960823059082 seconds