STM32基于CubeMX实现步进电机简单使用:PWM输出固定脉冲数

目录

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

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

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32基于CubeMX实现步进电机简单使用:PWM输出固定脉冲数

    发表评论