物联网开发131 - Micropython ESP32 C3连接TB6600驱动42BYGH39步进电机

一、目的

        这一节我们来学习如何使用合宙ESP32 C3连接TB6600驱动42BYGH39步进电机,实现控制步进电机正反转和旋转指定角度等。下面我们一起来学习一下吧!

二、环境

        ESP32 C3开发板(MicroPython v1.19.1 on 2022-06-18)+ 42BYGH39步进电机 + TB6600驱动 + 几根杜邦线 + Win10商业版

        ESP32 C3和各模块接线方法:

我们使用共阴极接法:

Tb6600电源和步进电机接线:

根据电动机的电流设置拨码开关:

我们使用的电动机电流是1.2A,我们拨码开关4设为On,5和6设为OFF。

细分开关,即拨码开关1,2,3,下面我们使用的是1600的,所以2设为ON,1和3设为OFF。

三、TB6600步进电机驱动

tb6600.py

from machine import Pin
import time

class TB6600:
    
    Pulse = 1600
    
    def __init__(self,Pul,Dir,Ena):
        
        self.Pul = Pin(Pul,Pin.OUT,Pin.PULL_UP)
        self.Dir = Pin(Dir,Pin.OUT,Pin.PULL_UP)
        self.Ena = Pin(Ena,Pin.OUT,Pin.PULL_UP)
        self.Reset()
        
    """
    设置旋转整圈数:
    Een = 1使能,Een = 0失能
    Dir = 1正转,Dir = 0反转
    Circle = 旋转圈数,一圈360°
    Freq = 频率 例如:一周期200us = 时间1/周期0.000200 = 频率5kHz
    """
    def Motor_Circle(self,Ean,Dir,Circle,Freq):
        
        for i in range(0,self.Pulse * Circle,1):
            
            self.Ena.value(Ean)
            
            if Dir:
                self.foreward()
            else:
                self.reversal()
            
            self.frequency(Freq)
            
    """
    设置旋转角度:
    Een = 1使能,Een = 0失能
    Dir = 1正转,Dir = 0反转
    Angle = 旋转角度,0 - 360°
    Freq = 频率 例如:一周期200us = 时间1/周期0.000200 = 频率5kHz
    """
    def Motor_Angle(self,Ean,Dir,Angle,Freq):
        
        for i in range(0,int((self.Pulse/360)*Angle),1):
            
            self.Ena.value(Ean)
            
            if Dir:
                self.foreward()
            else:
                self.reversal()
            
            self.frequency(Freq)
    
    #频率
    def frequency(self,freq):
        self.Pul.value(0)
        time.sleep_us(freq)
        self.Pul.value(1)
        time.sleep_us(freq)
        
    #复位
    def Reset(self):
        self.Pul.value(0)
        self.Dir.value(0)
        self.Close()
        
    #开启
    def Open(self):
        self.Ena.value(1)
    
    #关闭
    def Close(self):
        self.Ena.value(0)
        
    #正转
    def foreward(self):
        self.Dir.value(1)
        
    #反转
    def reversal(self):
        self.Dir.value(0)
        

四、示例

from machine import Pin
from tb6600 import TB6600
import time

tb = TB6600(Pul = 19,Dir = 18,Ena = 12)

def main():
 
    while True:
        
        tb.Motor_Angle(0,1,180,50) #10Kz
        time.sleep(1)
        tb.Motor_Angle(0,0,180,50)
        time.sleep(1)
        
        tb.Motor_Circle(0,1,5,50)
        time.sleep(1)
        tb.Motor_Circle(0,0,5,50)
        time.sleep(1)

        
if __name__ == "__main__":
    main()

五、不使用驱动库tb6600.py的示例

from machine import Pin
import time

PUL = Pin(19,Pin.OUT,Pin.PULL_UP)
DIR = Pin(18,Pin.OUT,Pin.PULL_UP)
ENA = Pin(12,Pin.OUT,Pin.PULL_UP)

Pulse = 1600

def Motor_Circle(Ena,Dir,Circle,freq):
    
    ENA.value(Ena)
    
    for i in range(0,int(Circle*1600),1):
        
        if Dir:
            DIR.value(1)
        else:
            DIR.value(0)
        
        Freq(freq)

def Motor_Angle(Ena,Dir,Angle,freq):
    
    ENA.value(Ena)
    
    for i in range(0,int((Pulse/360)*Angle),1):
        
        if Dir:
            DIR.value(1)
        else:
            DIR.value(0)
        
        Freq(freq)
        
def Freq(freq):
    
    PUL.value(0)
    time.sleep_us(freq)
    PUL.value(1)
    time.sleep_us(freq)

def Reset():
    
    PUL.value(0)
    DIR.value(0)
    ENA.value(1)
    time.sleep(1)
    
def main():
    Reset()
    
    while True:
        
        #角度
        Motor_Angle(0,1,360,100)
        time.sleep(1)
        Motor_Angle(0,0,180,200)
        time.sleep(1)
        
        #圈数
        Motor_Circle(0,1,5,200)
        time.sleep(1)
        Motor_Circle(0,0,5,200)
        time.sleep(1)

if __name__ == "__main__":
    main()

六、42BYGH39驱动 + TB6600步进电机介绍

七、模块购买

商品详情icon-default.png?t=N7T8https://detail.tmall.com/item.htm?id=708118352581&spm=a1z09.2.0.0.3eb62e8dQI8L7C&_u=fp01rcha8ea

https://item.taobao.com/item.htm?spm=a21n57.1.item.6.352d523cxoSrr1&priceTId=213e371917212247214892083ee2a9&utparam=%7B%22aplus_abtest%22:%2293f2d05844943c1ee026667c42867e6f%22%7D&id=45176939892&ns=1&abbucket=17&skuId=4192449429446icon-default.png?t=N7T8https://item.taobao.com/item.htm?spm=a21n57.1.item.6.352d523cxoSrr1&priceTId=213e371917212247214892083ee2a9&utparam=%7B%22aplus_abtest%22:%2293f2d05844943c1ee026667c42867e6f%22%7D&id=45176939892&ns=1&abbucket=17&skuId=4192449429446

当然你也可以使用其他型号的42步进电机,只需要根据步进电机的电流进行驱动器的对应的电流档设置即可。

八、步进电机发热问题

        步进电机的控制方式一般采用恒流控制,当电机不转时,因没有反电动势,电机流过的电流是驱动器所设定的电流,电机本身是有阻抗,所以此时电机发热会很大。如果想减少电机的发热,可以选择带自动半流功能的驱动器,如DM542,DM442驱动器等。

商品详情icon-default.png?t=N7T8https://detail.tmall.com/item.htm?id=630309761543&ali_refid=a3_430582_1006:1363570147:H:OraTaP0QRq9bJz%20/OXN8yb2Ozm4nW/My:f6628db07b62781550ac5a9e5e259489&ali_trackid=282_f6628db07b62781550ac5a9e5e259489&spm=a21n57.1.item.1&skuId=4660546151791


        步进电机作为一种数字式执行元件,在运动控制系统中得到广泛的应用,许多用户朋友在使用步进电机的时候,感觉电机工作时外壳烫手,想知道步进电机发热烫手什么原因,实际上发热是步进电机的一个普遍现象,但怎样的发热程度才算正常,以及如何尽量减小步进电机发热呢。

        首先,要了解步进电机发热烫手什么原因,对于各种步进电机而言,内部都是由铁芯和绕组线圈组成的,绕组有电阻,步进电机通电会产生损耗,损耗大小与电阻和电流的平方成正比,这就是我们常说的铜损,如果电流不是标准的直流或正弦波,还会产生谐波损耗,铁心有磁滞涡流效应,在交变磁场中也会产生损耗,其大小与材料,电流,频率,电压有关,这叫铁损,铜损和铁损都会以发热的形式表现出来,从而影响电机的效率。

        步进电机一般追求定位精度和力矩输出,效率比较低,电流一般比较大,且谐波成分高,电流步进电机交变的频率也随转速而变化,因而步进电机普遍存在发热情况,且情况比一般交流电机严重,步进电机在静态和低速下,电流会维持相对恒定,以保持恒力矩输出,速度高到一定程度,电机内部反电势升高,电流将逐步下降,力矩也会下降,因此,因铜损带来的发热情况就与速度相关了。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都飘雪

您的1毛奖励是我创作的源源动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值