物联网开发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((se
### 使用 STM32 HAL 库驱动 TB6600 控制 42 步进电机 为了实现使用 STM32 和 TB6600 驱动器来控制 42BYGH 步进电机,需深入了解 STM32 的外设编程、PWM 信号的生成和控制机制以及步进电机的工作原理[^1]。 #### 初始化硬件资源 配置 GPIO 口用于连接TB6600 的脉冲输入 (Pulse),方向选择 (DIR) 和使能端子 (EN)[^2]。对于 PWM 输出,则通过定时器 TIM 来完成,在此过程中可以利用 HAL 库简化操作流程: ```c // 定义GPIO引脚结构体变量并初始化它们对应于实际使用的物理引脚编号 static void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启PA口时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 设置 PA0, PA1, PA2 */ GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); } ``` #### 创建 PWM 波形输出 创建一个基于定时器中断服务函数的服务例程用来产生周期性的方波作为脉冲信号给定至 TB6600 输入端[PWM][^2]: ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance==TIM2){ static uint8_t count=0; if(count<STEPS_PER_REVOLUTION){ HAL_GPIO_TogglePin(STEP_PORT, STEP_PIN); // 切换STEP线电平状态 count++; }else{ count=0; } } } ``` 这里 `STEPS_PER_REVOLUTION` 表示每转所需步数;而 `STEP_PORT`, `STEP_PIN` 是指定了具体哪个 IO 端口被指定为发送脉冲命令的位置。 #### 方向与速度调整 改变 DIR 引脚的状态可切换旋转的方向,修改占空比则影响运动速率: ```c #define CW HIGH // Clockwise direction definition #define CCW LOW // Counter-clockwise direction definition /* Function to set the motor&#39;s rotation direction */ void SetMotorDirection(uint8_t dir){ HAL_GPIO_WritePin(DIR_PORT, DIR_PIN, dir ? CW : CCW ); } /* Adjust speed by changing duty cycle of PWM signal */ void AdjustSpeed(float percentage){ TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = ((uint32_t)(percentage*ARR)/100); sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH ; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE ; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC ,CHANNEL); } ``` 上述代码片段展示了如何借助 HAL 函数集中的 API 实现对步进马达的速度调节功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魔都飘雪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值