极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21718|回复: 10

步进电机驱动问题,懂的帮忙解决下

[复制链接]
发表于 2012-6-28 01:55:55 | 显示全部楼层 |阅读模式
本帖最后由 BlackCat 于 2012-6-29 17:15 编辑

先上代码。
  1. #include <Stepper.h>
  2. const int stepsPR = 200;

  3. Stepper myStepper1(stepsPR,30,31,32,33);
  4. Stepper myStepper2(stepsPR,50,51,52,53);

  5. int xpotPin = 2;
  6. int ypotPin = 3;
  7. int bpotPin = 4;
  8. int xval = 0;
  9. int yval = 0;
  10. int bval = 0;

  11. void setup(){
  12.   myStepper1.setSpeed(60);
  13.   myStepper2.setSpeed(60);
  14.   Serial.begin(9600);
  15. }

  16. void loop(){
  17. xval = analogRead(xpotPin);
  18. yval = analogRead(ypotPin);
  19. bval = analogRead(bpotPin);

  20. if (xval<250){
  21.     Serial.print("go");
  22.    myStepper1.step(stepsPR);
  23.    myStepper2.step(stepsPR);
  24. }
  25.   if (xval>650){
  26.     Serial.print("back");
  27.    myStepper1.step(-stepsPR);
  28.    myStepper2.step(-stepsPR);
  29. }
  30.   if (yval<250){
  31.     Serial.print("left");
  32.    myStepper1.step(stepsPR);
  33.    myStepper2.step(-stepsPR);
  34. }
  35.    if (yval>650){
  36.     Serial.print("right");
  37.    myStepper1.step(-stepsPR);
  38.    myStepper2.step(stepsPR);
  39. }
  40. }
复制代码
目的,PS2摇杆控制2个步进电机A和B
PS2      电机A    电机B
x+       +            +
x-        -              -
y+       +            -
y-         -             +


也就是说
摇杆x轴向上,A,B电机同时正向转动
摇杆X轴向下,A,B电机同时反向转动
摇杆Y轴向左,A电机反转,B电机正转
摇杆Y轴向右,A电机正转,B电机反转

但是实际操作中,当A电机 转动完成后B电机才转。

问题:如何让两个电机同步转动。

希望懂的朋友帮忙解答一下,谢谢。
回复

使用道具 举报

发表于 2012-6-28 09:35:40 | 显示全部楼层
算法不对,冲突了吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-28 12:17:28 | 显示全部楼层
能解释的详细点吗?
回复 支持 反对

使用道具 举报

发表于 2012-6-28 19:31:10 | 显示全部楼层
本帖最后由 pww999 于 2012-6-28 19:43 编辑

假设这2个同时工作,  摇杆x轴向上摇杆Y轴向左
会出现什么问题?

改成这样试试
if

else if

else if


else
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-28 20:34:33 | 显示全部楼层
pww999 发表于 2012-6-28 19:31
假设这2个同时工作,  摇杆x轴向上摇杆Y轴向左
会出现什么问题?

没效果,还是一个转完了另一个才转。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-28 20:37:58 | 显示全部楼层
自己写成这样的话,两个步进电机可以同时转动,估计是库的运行问题吧

不知道谁能帮忙,用自带库写出同时驱动两个电机的办法,不然得自己写库了。
  1. #include "Arduino.h"

  2. void setup (){

  3.   pinMode(50,OUTPUT);
  4.   pinMode(51,OUTPUT);
  5.   pinMode(52,OUTPUT);
  6.   pinMode(53,OUTPUT);
  7.   pinMode(30,OUTPUT);
  8.   pinMode(31,OUTPUT);
  9.   pinMode(32,OUTPUT);
  10.   pinMode(33,OUTPUT);

  11. }

  12. void loop(){
  13.   int i = 4;
  14.   while(1)
  15.   {
  16.     unsigned char z;
  17.     for(z=0;z<4;z++){
  18.       if (z=1){
  19.         digitalWrite(50, HIGH);
  20.         digitalWrite(51, LOW);
  21.         digitalWrite(52, HIGH);
  22.         digitalWrite(53, LOW);
  23.         digitalWrite(30, HIGH);
  24.         digitalWrite(31, LOW);
  25.         digitalWrite(32, HIGH);
  26.         digitalWrite(33, LOW);
  27.         delay(i);
  28.       }
  29.       if (z=2){
  30.         digitalWrite(50, LOW);
  31.         digitalWrite(51, HIGH);
  32.         digitalWrite(52, HIGH);
  33.         digitalWrite(53, LOW);
  34.         digitalWrite(30, LOW);
  35.         digitalWrite(31, HIGH);
  36.         digitalWrite(32, HIGH);
  37.         digitalWrite(33, LOW);
  38.         delay(i);
  39.       }
  40.       if (z=3){
  41.         digitalWrite(50, LOW);
  42.         digitalWrite(51, HIGH);
  43.         digitalWrite(52, LOW);
  44.         digitalWrite(53, HIGH);
  45.         digitalWrite(30, LOW);
  46.         digitalWrite(31, HIGH);
  47.         digitalWrite(32, LOW);
  48.         digitalWrite(33, HIGH);
  49.         delay(i);
  50.       }
  51.       if (z=4){
  52.         digitalWrite(50, HIGH);
  53.         digitalWrite(51, LOW);
  54.         digitalWrite(52, LOW);
  55.         digitalWrite(53, HIGH);
  56.         digitalWrite(30, HIGH);
  57.         digitalWrite(31, LOW);
  58.         digitalWrite(32, LOW);
  59.         digitalWrite(33, HIGH);
  60.         delay(i);
  61.       }
  62.     }
  63.   }
  64. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-29 17:13:41 | 显示全部楼层
整了会,这样用自带库也可以,并且附带了PS2摇杆控制。
  1. #include "Arduino.h"
  2. #include <Stepper.h>

  3. const int stepsPerRevolution = 200;
  4. int buttonPinX = 2;
  5. int buttonPinY = 3;
  6. Stepper myStepper1(stepsPerRevolution, 50,51,52,53);   
  7. Stepper myStepper2(stepsPerRevolution, 33,32,31,30);
  8. int stepCount = 0;         // number of steps the motor has taken
  9. int buttonState = 0;

  10. void setup(){
  11.   Serial.begin(9600);
  12.   pinMode(buttonPinX,INPUT);
  13.   pinMode(buttonPinY,INPUT);

  14. }

  15. void loop(){
  16.   int i,j;
  17.   i = analogRead(buttonPinX);
  18.   j = analogRead(buttonPinY);
  19.   if (i>850){
  20.     myStepper1.step(-1);
  21.     myStepper2.step(-1);
  22.     Serial.print("go:" );
  23.     Serial.println(stepCount);
  24.     stepCount++;
  25.     delay(1);
  26.   }
  27.   if (i<250){
  28.     myStepper1.step(1);
  29.     myStepper2.step(1);
  30.     Serial.print("back:" );
  31.     Serial.println(stepCount);
  32.     stepCount++;
  33.     delay(5);
  34.   }
  35.   if (j>650){
  36.     myStepper1.step(-1);
  37.     myStepper2.step(1);
  38.     Serial.print("left:" );
  39.     Serial.println(stepCount);
  40.     stepCount++;
  41.     delay(5);
  42.   }
  43.   if (j<250){
  44.     myStepper1.step(1);
  45.     myStepper2.step(-1);
  46.     Serial.print("right:" );
  47.     Serial.println(stepCount);
  48.     stepCount++;
  49.     delay(5);
  50.   }
  51. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-29 17:14:43 | 显示全部楼层
问题已解决,希望能帮到用得着的朋友。
回复 支持 反对

使用道具 举报

发表于 2012-6-29 17:36:54 | 显示全部楼层
本帖最后由 pww999 于 2012-6-29 17:49 编辑

我也在弄,回头试下

stepCount++;  
这个是速度递加吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-30 11:05:14 | 显示全部楼层
我也是初学,不过串口发送的数据来看,应该是步数。你可以翻步进电机的库文件看看。
回复 支持 反对

使用道具 举报

发表于 2013-4-19 10:33:39 | 显示全部楼层
记号起来好学习。
谢谢分享!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-6-2 00:50 , Processed in 0.056602 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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