ESP32+micropython+TB6600控制器+42步进电机
TB6600控制器的拨码开关设置
SW1- OFF
SW2-ON
SW3-OFF
SW4-ON
SW5-ON
SW6-OFF
步进电机需要考虑带负载加速过程。以下程序是空载时正常运行的代码,反复调整 脉冲宽度。继续探索,仅供参考,非专业
import machine import time # TB6600 两相混合式步进电机驱动器说明书 #要点: 脉冲宽度不小于1.2us # 方向信号先于脉冲信号不少于5us # 方向控制 STEP_MOTOR_DIR = machine.Pin(2, machine.Pin.OUT) # 脉冲信号,即PWM波,频率和脉冲数可设置 STEP_MOTOR_PUL = machine.Pin(1, machine.Pin.OUT) # 步进电机 转动一个步进角 def ONE_STEP_FUN(): STEP_MOTOR_PUL.value(1) time.sleep_us(100) STEP_MOTOR_PUL.value(0) time.sleep_us(100) return # 步进电机 变更方向 def DIR_STEP_FUN( unclockwise=1): time.sleep_us(10) #方向信号先于脉冲信号不少于5us STEP_MOTOR_DIR.value(unclockwise) time.sleep_us(10) #方向信号先于脉冲信号不少于5us return time.sleep(1) while True: print("unclockwise=1") DIR_STEP_FUN(1) for i in range(4000): ONE_STEP_FUN() time.sleep(1) print("unclockwise=0") DIR_STEP_FUN(0) for i in range(4000): ONE_STEP_FUN() time.sleep(1)
进一步增加程序功能,考虑加速-匀速-减速过程,按照脉冲控制距离
import machine import time # TB6600 两相混合式步进电机驱动器说明书 #要点: 脉冲宽度不小于1.2us # 方向信号先于脉冲信号不少于5us # 方向控制 STEP_MOTOR_DIR = machine.Pin(2, machine.Pin.OUT) # 脉冲信号,即PWM波,频率和脉冲数可设置 STEP_MOTOR_PUL = machine.Pin(1, machine.Pin.OUT) # 步进电机 转动一个步进角 def ONE_STEP_FUN(half_period_us): STEP_MOTOR_PUL.value(1) time.sleep_us(half_period_us) STEP_MOTOR_PUL.value(0) time.sleep_us(half_period_us) return # 步进电机 变更方向 def DIR_STEP_FUN( unclockwise=1): time.sleep_us(10) #方向信号先于脉冲信号不少于5us STEP_MOTOR_DIR.value(unclockwise) time.sleep_us(10) #方向信号先于脉冲信号不少于5us return # 按照加速-匀速-减速过程控制步进电机,参数:步数、脉冲控制 def STEP_ROTATE_FUN(freq,steps): half_period_us_target = 1000000/freq # 1000 000 us/1000Hz steps_now = 0 half_period_us = 200 # us speed_up_steps =0 # 记录加速的步数 for i in range(steps): ONE_STEP_FUN(half_period_us) if(half_period_us > half_period_us_target) and(i*2<=steps) and(half_period_us !=10): half_period_us = half_period_us-10 # 加速过程 speed_up_steps =speed_up_steps+1 # 记录加速的步数 if half_period_us< 10: half_period_us =10 if(steps-i<= speed_up_steps)and(i*2>steps) : half_period_us = half_period_us+10 # 减速过程 return time.sleep(1) while True: print("unclockwise=1") DIR_STEP_FUN(1) # for i in range(4000): # ONE_STEP_FUN() STEP_ROTATE_FUN(8000,8000) time.sleep(1) print("unclockwise=0") DIR_STEP_FUN(0) # for i in range(4000): # ONE_STEP_FUN() STEP_ROTATE_FUN(8000,8000) time.sleep(1)
arduino 代码-2025年3月增补
// 定义电机的步数(800 个脉冲为一圈) const int stepsPerRevolution = 800; // TB6600 设置800,就是800脉冲一圈360度 // TB6600 设置电流,根据电机铭牌设置 // 定义控制引脚 const int pulPin = 1; // 共阴极接法 const int dirPin = 2; // 共阴极接法 int stepsFor180Degree = (180 * stepsPerRevolution) / 360; // 计算转动 180 度所需的步数 bool isRotating = true; // 标志位,用于控制是否继续转动 void setup() { // 将引脚设置为输出模式 pinMode(pulPin, OUTPUT); pinMode(dirPin, OUTPUT); // 设置转动方向 digitalWrite(dirPin, HIGH); } void loop() { if (isRotating) { digitalWrite(pulPin, HIGH); delayMicroseconds(100); // 100us digitalWrite(pulPin, LOW); delayMicroseconds(100); // 100us if (--stepsFor180Degree == 0) { isRotating = false; // 达到 180 度后停止转动 } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)