极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19121|回复: 8

怎么让步进电机转90度停下来

[复制链接]
发表于 2015-1-23 00:10:00 | 显示全部楼层 |阅读模式
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 11;

int _step = 0;

boolean dir = false;//正反转

int stepperSpeed = 1;//电机转速,1ms一步
//脉冲总数,或者说步的总数
int stepsum=0;
void setup()

{

  pinMode(Pin0, OUTPUT);
  pinMode(Pin1, OUTPUT);
  pinMode(Pin2, OUTPUT);
  pinMode(Pin3, OUTPUT); }



void loop()
{
//进步机的驱动方式,有八种
switch(_step){
    case 0:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;
    case 1:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, HIGH);
    break;

    case 2:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;

    case 3:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;

    case 4:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

    case 5:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
      break;

      case 6:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

    case 7:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;

    default:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;
  }


//判断是正转还是反转
  if(dir)
  {
    _step++;

  }else{

    _step--;
  }

//每八步一个驱动方式的循环
  if(_step>7){
   
    _step=0;

  }

  if(_step<0){
   
    _step=7;

  }
  
  delay(stepperSpeed);

//计算脉冲数,每4096个脉冲停1秒
  stepsum++;
  if(stepsum==4096)
  {
    Serial.println(stepsum);
    stepsum=0;
    delay(1000);
  }

}

这是我的代码。。。我是UNO R3   L298N  来控制28byj-48的。
如何只让它转90度就停下来啊。。。这个代码 他就是每隔一秒 转一次。
一直再转 怎么停啊。
回复

使用道具 举报

发表于 2015-1-23 06:03:53 | 显示全部楼层
Setup里加个Serial.begin
如果输到某字符则执行所有代码一次,否则不执行。

着一下4096个脉冲走几圈
如果走大致20.5圈,那么200个脉冲1圈
即改成100个脉冲走半圈
回复 支持 反对

使用道具 举报

发表于 2015-1-23 08:27:18 | 显示全部楼层
用舵机吧,严格和角度相关.
回复 支持 反对

使用道具 举报

发表于 2015-1-23 10:44:52 | 显示全部楼层
先要知道步距角是多少,假设步距角是3.6,那么转一圈就要100个脉冲,90度是1/4圈,那么所需要的脉冲数就是100*1/4=25pulse;如果步距角是1.8,那就是360/1.8=200;200*1/4=50pulse;如果有细分,再乘以细分数即可。

回复 支持 反对

使用道具 举报

发表于 2015-1-23 18:45:59 来自手机 | 显示全部楼层
野鬼{ABO} 发表于 2015-1-23 10:44
先要知道步距角是多少,假设步距角是3.6,那么转一圈就要100个脉冲,90度是1/4圈,那么所需要的脉冲数就是1 ...

正確,還要設置零位和檢測零位。還是建議用舵機
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-31 02:54:22 | 显示全部楼层
bacon6581 发表于 2015-1-23 06:03
Setup里加个Serial.begin
如果输到某字符则执行所有代码一次,否则不执行。

嗯嗯 问题已经解决啦。谢谢 要算的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-31 02:54:39 | 显示全部楼层
林定祥 发表于 2015-1-23 08:27
用舵机吧,严格和角度相关.

嗯嗯 问题已经解决啦。谢谢 要算的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-31 02:55:04 | 显示全部楼层
野鬼{ABO} 发表于 2015-1-23 10:44
先要知道步距角是多少,假设步距角是3.6,那么转一圈就要100个脉冲,90度是1/4圈,那么所需要的脉冲数就是1 ...

问题已经解决啦。谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-31 02:55:34 | 显示全部楼层
philip 发表于 2015-1-23 18:45
正確,還要設置零位和檢測零位。還是建議用舵機

嗯嗯 问题已经解决啦。谢谢 要算的。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 13:18 , Processed in 0.154132 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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