X_X 发表于 2013-12-30 15:23:11

步进电机实验28BYJ-48 5V DC转向和转速问题

本人新手,还在实验入门教程,根据教程的代码不管怎么写都只朝一个方向转,没弄明白,只好看Stepper.cpp源码。发现注释有这个玩意,应该是步进各相的时序吧(四拍?)
Step C0 C1 C2 C3
   11010
   20110
   30101
   41001
但网上只查到这种时序(八拍?),
橙   黄粉 蓝 十六制
10000x08
11000x0c
01000x04
01100x06
00100x02
00110x03
00010x01
10   0   10x09
于是在Stepper里加了个方法:
void Stepper::stepMotor1(int thisStep){
switch (thisStep) {
      case 0:    // 0001
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
      case 1:    // 0011
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
      case 2:    //0010
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 3:    //0110
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 4:    //0100
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 5:    //1100
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 6:    //1000
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
      case 7:    //1001
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    }
}
同时把step里面的代码改下
//stepMotor(this->step_number % 4);
          stepMotor1(this->step_number % 8);
OK, 这下调用step()方法两个方向都能转了。。虽然可以通过调整调用stepMotor1的频率来控制转速,
但还是不清楚28BYJ-48一圈到底是多少步,于是又实验下,发现外围转一圈大概调用四千多次方法,难道步数就是360除以步进角度吗?查了下28BYJ-48步进角度5.625/64,是那不就是360/(5.625/64)=4096步吗?跟实验不谋而合,求证实,因为没看到一个教程说28BYJ-48一圈是4096步。。。{:soso_e132:}{:soso_e103:}
页: [1]
查看完整版本: 步进电机实验28BYJ-48 5V DC转向和转速问题