目录

1 步进电机驱动原理2 程序快速配置3 注意事项

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 注意事项

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

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。