步进电机简单使用:STM32 PWM输出固定数目的脉冲数(基于CubeMX)

8 篇文章 9 订阅
8 篇文章 2 订阅

1 步进电机驱动原理

使用步进电机之前,我们需要了解步距角的概念:步进电机接收到一个脉冲转动的角度,步进电机步距角通常
为1.8°,即步进电机接收到一个脉冲转动1.8°,则若步进电机接收到360°/1.8°=200个脉冲,步进电机就能转动一圈

步进电机通过驱动器控制,驱动器如下图所示(都比较相似)
在这里插入图片描述

驱动器侧面有拨码开关,根据图中1、2部分可以修改驱动器细分数和电流大小
细分数:类似于将步进电机的分辨率扩大,若将SW1设置为ON、SW2设置为OFF、SW3设置为OFF、SW4设置为OFF,即将驱动器细分数设置为2后,此时步进电机的分辨率扩大为200*2=400,即步进电机接收到400个脉冲才能转动一整圈,一个脉冲只能转动0.9°
图中4处与步进电机相连,连接顺序步进电机上面一般会标明,通常为黑线接A+、绿线接A-、红线接B+、蓝线接B-
图中3处为控制信号接口,分为共阴接线法、共阳接线法
在这里插入图片描述
上图为购物网站提供的资料

共阳极接法:分别将PUL+,DIR+,EN+连接到控制系统的电源上, 如果此电源是+5V 则可直接接入,如果此电源大于+5V,则须外部另加限流电阻R,PUL-接脉冲引脚、DIR-接方向引脚、ENA-接使能引脚

共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端,PUL+接脉冲引脚、DIR+接方向引脚、ENA+接使能引脚

2 程序快速配置

本文以共阳接线法为例,用一个引脚A来连接ENA-,引脚B来连接DIR-,引脚A的高低电平输出就能控制电机使能与否,引脚B的高低电平输出控制电机的正转、反转,本文重点讲解如何利用CubeMX快速实现PWM输出固定数目个脉冲数,从而实现对步进电机的精确控制
本文以f407igt6为例,打开CubeMX选择完芯片后首先进行SYS、RCC配置,具体配置其他文章均详细描述过,此处不再赘述
在这里插入图片描述
选择定时器8的通道1,输出模式为PWM(在2处如果找不到图示选项,就转动鼠标轮,当初作者也在此处绕了很多弯),然后设置分频系数(不同定时器最高频率可能不同)和计数周期,

在这里插入图片描述
最后别忘记设置占空比,否则输出的脉冲全为高电平或者低电平

在这里插入图片描述
最后打开定时器更新中断

在这里插入图片描述
设置时钟频率

在这里插入图片描述
设置项目名称以及生成项目格式MDK

在这里插入图片描述
将c文件单独放置于一文件夹,最后生成并打开项目加入如下代码(记得在USER CODE BEGIN-END之间添加,防止重新生成代码时将内容覆盖了)
在这里插入图片描述

函数void PWM_Output(uint32_t pwm_num)即为输出脉冲的函数,参数pwm_num为需要输出脉冲个数

uint32_t Pulse_Cnt=0;
uint32_t Pulse_exp_Cnt=0;
void PWM_Output(uint32_t pwm_num)
{
		/*开启定时器更新中断*/
		HAL_TIM_Base_Start_IT(&htim8);
		/*开始输出PWM*/
		HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1);
		Pulse_exp_Cnt=pwm_num;
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	/*每输出一个脉冲进入一次中断,Pulse_Cnt用于计数已经产生的脉冲个数*/
	/*Pulse_exp_Cnt为需要产生的脉冲个数*/
	/*当Pulse_Cnt与Pulse_exp_Cnt为相等时,表示已经产生了预期数目的脉冲数,从而停止PWM输出*/
	if(htim==(&htim8))
	{
		Pulse_Cnt++;
		if(Pulse_Cnt==Pulse_exp_Cnt)
		{
			 HAL_TIM_Base_Stop_IT(&htim8);
			 HAL_TIM_PWM_Stop(&htim8,TIM_CHANNEL_1);
			 Pulse_Cnt=0;
		}
	}
}

3 注意事项

电机转动的角度通过控制输出脉冲个数来控制,电机转速通过控制输出的脉冲频率来控制
脉冲频率越高、电机转速越快,其输出扭矩越低
脉冲频率越低、电机转速越慢,其输出扭矩越大
脉冲过高、过低都有可能无法驱动电机;若电机只发出声音不转动,极有可能是脉冲频率设置不合理,则需要重新设置分频系数、重装载值,最后别忘了设置占空比!

  • 15
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sense_long

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值