极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14084|回复: 0

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

[复制链接]
发表于 2013-12-30 15:23:11 | 显示全部楼层 |阅读模式
本人新手,还在实验入门教程,根据教程的代码不管怎么写都只朝一个方向转,没弄明白,只好看Stepper.cpp源码。发现注释有这个玩意,应该是步进各相的时序吧(四拍?)
Step C0 C1 C2 C3
     1  1  0  1  0
     2  0  1  1  0
     3  0  1  0  1
     4  1  0  0  1
但网上只查到这种时序(八拍?),
橙   黄  粉 蓝 十六制
1  0  0  0  0x08  
1  1  0  0  0x0c  
0  1  0  0  0x04  
0  1  1  0  0x06  
0  0  1  0  0x02  
0  0  1  1  0x03
0  0  0  1  0x01  
1  0   0   1  0x09
于是在Stepper里加了个方法:
  1. void Stepper::stepMotor1(int thisStep){
  2. switch (thisStep) {
  3.       case 0:    // 0001
  4.       digitalWrite(motor_pin_1, LOW);
  5.       digitalWrite(motor_pin_2, LOW);
  6.       digitalWrite(motor_pin_3, LOW);
  7.       digitalWrite(motor_pin_4, HIGH);
  8.       break;
  9.       case 1:    // 0011
  10.       digitalWrite(motor_pin_1, LOW);
  11.       digitalWrite(motor_pin_2, LOW);
  12.       digitalWrite(motor_pin_3, HIGH);
  13.       digitalWrite(motor_pin_4, HIGH);
  14.       break;
  15.       case 2:    //0010
  16.       digitalWrite(motor_pin_1, LOW);
  17.       digitalWrite(motor_pin_2, LOW);
  18.       digitalWrite(motor_pin_3, HIGH);
  19.       digitalWrite(motor_pin_4, LOW);
  20.       break;
  21.       case 3:    //0110
  22.       digitalWrite(motor_pin_1, LOW);
  23.       digitalWrite(motor_pin_2, HIGH);
  24.       digitalWrite(motor_pin_3, HIGH);
  25.       digitalWrite(motor_pin_4, LOW);
  26.       break;
  27.       case 4:    //0100
  28.       digitalWrite(motor_pin_1, LOW);
  29.       digitalWrite(motor_pin_2, HIGH);
  30.       digitalWrite(motor_pin_3, LOW);
  31.       digitalWrite(motor_pin_4, LOW);
  32.       break;
  33.       case 5:    //1100
  34.       digitalWrite(motor_pin_1, HIGH);
  35.       digitalWrite(motor_pin_2, HIGH);
  36.       digitalWrite(motor_pin_3, LOW);
  37.       digitalWrite(motor_pin_4, LOW);
  38.       break;
  39.       case 6:    //1000
  40.       digitalWrite(motor_pin_1, HIGH);
  41.       digitalWrite(motor_pin_2, LOW);
  42.       digitalWrite(motor_pin_3, LOW);
  43.       digitalWrite(motor_pin_4, LOW);
  44.       break;
  45.       case 7:    //1001
  46.       digitalWrite(motor_pin_1, HIGH);
  47.       digitalWrite(motor_pin_2, LOW);
  48.       digitalWrite(motor_pin_3, LOW);
  49.       digitalWrite(motor_pin_4, HIGH);
  50.       break;
  51.     }
  52. }
复制代码

同时把step里面的代码改下
  1. //stepMotor(this->step_number % 4);
  2.           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:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 04:33 , Processed in 0.054503 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表