步进电机实验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]