STM32通过TB6600驱动步进电机实现梯形加减速

 

目录

 

1 注意事项

1.1 接线

1.2 电源选择

1.3 支架选择与转向

 

2 STM32的控制代码

2.1 输入参数

2.2 运行距离的计算

2.3 STM32与TB6600接线

2.4 代码

 

 


1 注意事项

1.1 接线

       使用梯形加减速能够使步进电机快速达到运行速度,适用于响应要求高,运行速度快的要求场景,在比赛中,步进电机也是常用的电机种类之一,是开环中运行精度最高的一档。实验中使用的步进电机为42步进电机,接线方式采用共阳极接线,即将TB6600驱动器的脉冲正(PUL+)、方向正(DIR+)、使能正(ENA+)三者接在一起、最后有使能正(ENA+)引出,其余的脉冲负(PUL-)、方向负(DIR-)、使能负(ENA-)各自接到控制信号的引脚上,即可完成步进电机的接线(接线图如下)。

       最后接电源线至TB6600即可,电源线应当注意正负极之分、不可反接,实验中的42步进电机使用的步进电机工作电压为24V、额定电流为

1.2 电源选择

       最后接电源线至TB6600即可,电源线应当注意正负极之分、不可反接,实验中的42步进电机使用的步进电机工作电压为24V、额定电流为1.5A、扭矩0.7nm。42步进电机的工作较小,网上购买的24V电池默认的DC接头都能输出最大3a的电流,可直接接入TB6600的电源接口。

       当使用的步进电机的运行电流超过3A时,普通的DC接头则不再满足使用需求,需要更换为XT60航空公母头接线的方式,更粗壮的电线在保证电池的额定输出电流时,也能保证步进电机的扭矩能正常。当电流过低,电压不足时,电机的扭矩会下降,因此,更换大功率步进电机后,电池也需要更换,电池输出线也要更换。

1.3 支架选择与转向

        步进电机的固定支架,小型的42步进电机,可直接选用购买时的默认支架,当使用体积的庞大,重量大的57(单电机质量5KG)、86(单电机质量10KG)步进电机时,需要考虑支架的强度,且在使用大体积,大质量步进电机时,单靠步进电机的差速无法实现转向,需要引进专门的转向机构。转向机构的选择可参考舵轮的转向结构


 

2 STM32的控制代码

2.1 输入参数

     stm32端的控制代码输入端较为简单,需要输入的参数有:运行距离、加速度、减速度、稳定运行时的速度,一般来说,比赛中需要变更的只有运行距离即可,通过上位机下发命令,运行指定的距离,为了抵达指定的运行距离而减少丢步。需要考虑步进电机的负载不可过大,步进电机的加速度,减速度和运行速度均不可过大,一旦过大,就会存在严重的丢步,导致运行距离达不到理想的位置。

2.2 运行距离的计算

       使用的步进电机为42步进电机,额定扭矩0.7Nm、步距角1.8度,额定电压24V,额定电流1.5A,假使输入的电压、电流都达到了额定值,负载在步进电机的承受范围内,则可根据代码调整TB6600的细分数,我使用的细分数是1600,即1600个脉冲旋转一圈。在代码中,步进电机的细分数为8细分。其计算值为

脉冲数=(圈数/步距角)*细分数

### STM32 控制 TB6600 步进电机教程 #### 硬件配置 为了实现STM32TB6600步进电机的有效控制,需选用合适的主控芯片与驱动模块。推荐采用Stm32C8T6或Stm32ZET6作为控制器,并搭配TB6612驱动器用于保护电路安全性和提高效率[^2]。 #### 接线方法 具体接线方案如下: - 将STM32的PWM输出端口连接至TB6600的脉冲输入(PUL+); - 方向控制信号(DIR+)应接到STM32的一个GPIO引脚上以便于程序中改变其状态从而切换旋转方向; - 同样地,使能端(ENB)也应当链接到另一个独立的GPIO接口,在不需要运转的时候可以关闭电源节省能耗; - 对于GND则要确保所有设备共地良好接触以保障通信稳定可靠; 此外还需注意的是,对于42BYGH这类型号的具体参数设置,比如电流调节旋钮位置调整等细节操作也要依据实际需求来进行优化处理[^5]。 #### 软件编程实例 下面是简化后的`main.c`文件中的部分核心逻辑片段展示如何初始化并操控上述提到过的硬件资源完成基本动作指令发送给目标器件执行相应任务: ```c // main.c 文件 (极简版) #include "stm32f1xx_hal.h" #include "step_motor.h" int main(void){ HAL_Init(); SystemClock_Config(); // 初始化系统时钟 MX_GPIO_Init(); // GPIO初始化函数调用 MX_TIMx_PWM_Init(); // PWM定时器初始化, TIMx代表具体的定时器编号 StepMotor_Init(); // 步进电机库函数初始化 while (1){ /* 用户自定义业务逻辑 */ // 设置转动角度和速度后启动单次运动 SetStepAngleAndSpeed(STEP_ANGLE_90_DEGREE, STEP_SPEED_SLOW); StartSingleMove(); HAL_Delay(DELAY_TIME); // 延迟一段时间 // 改变转向再做一次相同幅度的动作 ChangeDirection(); StartSingleMove(); HAL_Delay(DELAY_TIME); } } ``` 而针对专门负责管理步进马达行为特性的辅助源代码,则可以在单独创建好的`.h/.c`配对文档里找到更为详尽的功能描述与实现方式。这里给出一个非常基础版本的例子供参考学习之用: ```c // step_motor.c 文件 (极简版) void StepMotor_Init(){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启对应外设时钟 // 配置DIR+管脚为推挽输出模式 GPIO_InitStruct.Pin = DIR_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DIR_PORT, &GPIO_InitStruct); // ...其他必要的初始化工作... } void SetPulseFrequency(uint16_t freq){ // 根据频率计算占空比并通过TIMx->CCR寄存器写入新的比较值来更新PWM波形周期 uint32_t CCRValue = CalculateDutyCycleFromFreq(freq); __HAL_TIM_SET_COMPARE(&htimX, TIM_CHANNEL_X, CCRValue); } /* 更多功能省略... */ ``` ```c // step_motor.h 文件 (极简版) #ifndef __STEP_MOTOR_H__ #define __STEP_MOTOR_H__ #include "stm32f1xx_hal.h" extern void StepMotor_Init(void); extern void SetPulseFrequency(uint16_t freq); // 定义更多对外公开的方法... #endif /* __STEP_MOTOR_H__ */ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值