全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

基于STM32单片机的控制步进电机实验

时间:2023-06-25 11:51

人气:

作者:admin

标签: STM32    控制  基于  单片机 

导读:基于STM32单片机的控制步进电机实验-五线四相步进电机,不同线圈得电会让步进电机的转子转动一个角度,按一定规律给不同的线圈通电,就可以让步进电机连续转动,下表就是步进电...

一、实验原理(以28BYJ48步进电机为例)和51控制步进电机原理一致

1、五线四相步进电机,不同线圈得电会让步进电机的转子转动一个角度,按一定规律给不同的线圈通电,就可以让步进电机连续转动,下表就是步进电机和拆解后的图片,以及四根线通电的顺序。

图片

注:总共五条线,一个是VCC,剩下四条分别接上ABCD相。

图片

2、每走一个位置,都要给一定的延时,不然还没等转子到位,下一个脉冲就进来了,肯定会引起错误,导致电机堵转、异常震动。

3、通过改变延时的时间,就可以控制电机的转速,不能太慢,也不要太快,不断调试到合理范围就行,转向用了一个枚举类型,控制转向。

4、单片机IO口和电机四条线连接时,一定不能错误,要按照顺序相连接。

5、调换得电的顺序,就可以控制电机的转向。

二、关键实验代码

//实验用到的引脚要先进行初始化
void ULN2003_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  GPIO_WriteBit(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_RESET);
}
//控制转向和速度    enum dir{Pos, Neg};   //Pos = 0, Neg = 1
void stepper(unsigned int dir, unsigned int speed)
{
  if(dir == Pos)
  {
    //step1:
    IN1_HIGH;
    IN2_LOW;
    IN3_LOW;
    IN4_LOW;
    Delay_us(speed);


    //step2:  
    IN1_HIGH;
    IN2_HIGH;
    IN3_LOW;
    IN4_LOW;
    Delay_us(speed);


    //step3:    
    IN1_LOW;
    IN2_HIGH;
    IN3_LOW;
    IN4_LOW;
    Delay_us(speed);


    //step4:
    IN1_LOW;
    IN2_HIGH;
    IN3_HIGH;
    IN4_LOW;
    Delay_us(speed);


    //step5:
    IN1_LOW;
    IN2_LOW;
    IN3_HIGH;
    IN4_LOW;
    Delay_us(speed);


    //step6:
    IN1_LOW;
    IN2_LOW;
    IN3_HIGH;
    IN4_HIGH;
    Delay_us(speed);


    //step7:
    IN1_LOW;
    IN2_LOW;
    IN3_LOW;
    IN4_HIGH;
    Delay_us(speed);


    //step8:
    IN1_HIGH;
    IN2_LOW;
    IN3_LOW;
    IN4_HIGH;
    Delay_us(speed);
  }
  else
  {
    //step1:
    IN1_HIGH;
    IN2_LOW;
    IN3_LOW;
    IN4_HIGH;
    Delay_us(speed);


    //step2:    
    IN1_LOW;
    IN2_LOW;
    IN3_LOW;
    IN4_HIGH;
    Delay_us(speed);


    //step3:    
    IN1_LOW;
    IN2_LOW;
    IN3_HIGH;
    IN4_HIGH;
    Delay_us(speed);


    //step4:
    IN1_LOW;
    IN2_LOW;
    IN3_HIGH;
    IN4_LOW;
    Delay_us(speed);


    //step5:
    IN1_LOW;
    IN2_HIGH;
    IN3_HIGH;
    IN4_LOW;
    Delay_us(speed);


    //step6:
    IN1_LOW;
    IN2_HIGH;
    IN3_LOW;
    IN4_LOW;
    Delay_us(speed);


    //step7:
    IN1_HIGH;
    IN2_HIGH;
    IN3_LOW;
    IN4_LOW;
    Delay_us(speed);


    //step8:
    IN1_HIGH;
    IN2_LOW;
    IN3_LOW;
    IN4_LOW;
    Delay_us(speed);
  }
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信