在这里插入图片描述

步距角公式

速度控制关系

步进电机结构原理图

接线图

实物接线

include <Stepper.h>
// 这里设置步进电机旋转一圈是多少步
#define STEPS 100
//设置步进电机的步数和引脚(就是注意点2里面说的驱动板上IN1~IN4连接的四个数字口)。
Stepper stepper(STEPS, 2, 4, 3, 5);//引脚要互换

void setup()
{
  // 设置电机的转速:每分钟为90步
  stepper.setSpeed(90);
  // 初始化串口,用于调试输出信息
  Serial.begin(9600);
}

void loop()
{
    // 顺时针旋转一周
    Serial.println("shun");
    stepper.step(2048); //4步模式下旋转一周用2048 步。
    delay(500);

    // 逆时针旋转半周
    Serial.println("ni");
    stepper.step(-2048); //4步模式下旋转一周用2048 步。
    delay(500);
}

3.自定义驱动Stepper函数

步进电机电压5V,步距角5.625,减速比1:64
计算A-B-C-D通电一次转动的角度5.625X2X4/64=0.703125 (2是表示1相励磁方式每步是2倍的步距角,4表示走了4步, 64指电机减速比)
转动360度循环ABCD通电的次数360/0.7031=512
新建sketch,拷贝如下代码替换自动生成的代码并进行保存。
代码如下(示例):

/*
   Stepper_Motor(int num, int spd)  
   步进电机驱动,num正负实现正反转角度,旋转一周大小为512;spd决定速度大小反比例调节,速度最大为3
   参考博客:https://blog.csdn.net/TonyIOT/article/details/88605767?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161164488616780299066123%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161164488616780299066123&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-26-88605767.pc_search_result_hbase_insert&utm_term=arduino驱动步进电机&spm=1018.2226.3001.4187
*/
void setup() {
  // put your setup code here, to run once:
  for (int i = 2; i < 6; i++) {
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
}

void Stepper_Motor(int num, int spd)
{
  if (spd < 3)
    spd = 3;
  if (num > 0)
    for (int count = 0; count < num; count++)
    {
      for (int i = 2; i < 6; i++)
      {
        digitalWrite(i, HIGH);
        delay(spd);
        digitalWrite(i, LOW);
      }
    }
  else
    for (int count = 0; count < abs(num); count++)
    {
      for (int i = 5; i > 1; i--)
    {
      digitalWrite(i, HIGH);
      delay(spd);
      digitalWrite(i, LOW);
    }
    }
}

void loop() {
  // put your main code here, to run repeatedly:
  unsigned long time0 = millis();
  Stepper_Motor(100,3);//顺时针
  unsigned long time1 = millis();
  Serial.print("time11:");
  Serial.println(time1 - time0);
  Stepper_Motor(-100,3);//逆时针
  unsigned long time2 = millis();
  Serial.print("time22:");
  Serial.println(time2 - time1);

}

总结