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为需要输出脉冲个数文章来源:https://www.toymoban.com/news/detail-741627.html
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 注意事项
电机转动的角度通过控制输出脉冲个数来控制,电机转速通过控制输出的脉冲频率来控制
脉冲频率越高、电机转速越快,其输出扭矩越低
脉冲频率越低、电机转速越慢,其输出扭矩越大
脉冲过高、过低都有可能无法驱动电机;若电机只发出声音不转动,极有可能是脉冲频率设置不合理,则需要重新设置分频系数、重装载值,最后别忘了设置占空比!文章来源地址https://www.toymoban.com/news/detail-741627.html
到了这里,关于步进电机简单使用:STM32 PWM输出固定数目的脉冲数(基于CubeMX)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!