yorkbarney 发表于 2025-4-24 22:30

控制28BYJ-48步进电机按指定的角度进行正转和反转




// 定义28BYJ-48步进电机的相序
unsigned char stepSequence = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09};

// 定义步进电机当前位置和角度
unsigned char currentPosition = 0;
unsigned int currentAngle = 0;

// 延时函数
void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++) {
      for (j = 0; j < 120; j++);
    }
}

// 步进电机正转函数
void stepForward(unsigned int angle) {
    unsigned int steps = angle / 5;// 每步转动角度为5度
    unsigned int i;
   
    for (i = 0; i < steps; i++) {
      currentPosition++;
      if (currentPosition >= 8) {
            currentPosition = 0;
      }
      
      P1 = stepSequence;
      delay(10);// 控制步进电机转速,可调整延时时间
    }
   
    currentAngle += angle;
}

// 步进电机反转函数
void stepBackward(unsigned int angle) {
    unsigned int steps = angle / 5;// 每步转动角度为5度
    unsigned int i;
   
    for (i = 0; i < steps; i++) {
      if (currentPosition == 0) {
            currentPosition = 8;
      }
      
      currentPosition--;
      
      P1 = stepSequence;
      delay(10);// 控制步进电机转速,可调整延时时间
    }
   
    currentAngle -= angle;
}

// 主函数
void main() {
    while (1) {
      // 正转180度
      stepForward(180);
      delay(1000);// 停顿1秒钟
      
      // 反转90度
      stepBackward(90);
      delay(1000);// 停顿1秒钟
    }
}

页: [1]
查看完整版本: 控制28BYJ-48步进电机按指定的角度进行正转和反转