zoukankan      html  css  js  c++  java
  • Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)

    下面上一些代码,是没有用任何库的.

    仅仅是将步进点击链接到arduino不同的8, 9, 10 , 11口上的

    Arduino 控制步进电机 2012-06-11 12:44:44
    原帖:http://blog.chinaunix.net/uid-23686726-id-3238613.html
     
    代码让我给改了改, 还是推荐装个motor shield吧.不然这样折腾 单片机肯定是不撑的.
     
    看样子是4步8相的.

    分类: 嵌入式

            int Pin0 = 8;
            int Pin1 = 9;
            int Pin2 = 10;
            int Pin3 = 11;
            int _step = 0;
            boolean dir = true;//正反转的 flag
            int stepperSpeed = 1;//电机转速,1ms一步
            void setup()
            {
              pinMode(Pin0, OUTPUT);
              pinMode(Pin1, OUTPUT);
              pinMode(Pin2, OUTPUT);
              pinMode(Pin3, OUTPUT);
            }
             //用下面的代码仿照PWM输出,看看类不累..哈哈.._step 从0 加到7 再变成0, 就这样一直循环下去.
            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> 7的时候,已经是在上面的那个判断里面从7加到8了.但是, 最后一次执行的时候,还是7 !!!
                _step=0;      //所以这里变成0 是必须的.
              }
              if(_step<0){       //同理
                _step=7;
              }
              delay(stepperSpeed);        //电机休息一下,用来调速用的.
            }

    这里,还转了一些别人做过的一些实验. 对步进电机介绍的比较详细:

    原帖地址:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=101

    步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的 方向转动一个固定的角度(及步进角)。你可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时你也可以通过控制脉冲频率来控制电机转动的速 度和加速度,从而达到调速的目的。

    下面这个就是本次实验使用的步进电机


    IMGP0641_调整大小.JPG

    工业使用的步进电机与本次实验使用的不同,下面图式两种不同款式的工业用步进电机

    步进电机_调整大小.jpg

    使用步进电机前一定要仔细查看说明书,确认是四相还是两相,各个线怎样连接,本次实验使用的步进电机是四相的,不同颜色的线定义如下图:

    Snap2.jpg

    下面是电机的端口结构图,1,3为一组,2,4为一组,5号是共用的VCC。

    28BYJ48内部结构图.jpg

    因本次使用的步进电机功率很小,所以可以直接使用一个ULN2003芯片进行驱动,如果是大功率的步进电机,是需要对应的驱动板的。

    IMGP0596_调整大小.JPG

    ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。可以用来驱动步进电机。

    其结构图如下


    Snap3.jpg

    硬件连接图如下

    Snap1.jpg

    IMGP0590_调整大小.JPG

    把代码下载到arduino控制板中看看效果

        /*
         * 步进电机跟随电位器旋转
         * (或者其他传感器)使用0号模拟口输入
         * 使用arduino IDE自带的Stepper.h库文件
         */
         
        #include <Stepper.h>
         
        // 这里设置步进电机旋转一圈是多少步
        #define STEPS 100
         
        // attached to设置步进电机的步数和引脚
        Stepper stepper(STEPS, 8, 9, 10, 11);
         
        // 定义变量用来存储历史读数
        int previous = 0;
         
        void setup()
        {
          // 设置电机每分钟的转速为90步
          stepper.setSpeed(90);
        }
         
        void loop()
        {
          // 获取传感器读数
          int val = analogRead(0);
         
          // 移动步数为当前读数减去历史读数
          stepper.step(val - previous);
         
          // 保存历史读数
          previous = val;
        }

     电流芯片文档下载地址:

    http://www.ti.com/lit/ds/symlink/uln2003a.pdf

  • 相关阅读:
    UGUI组件之Slider组件简单笔记
    UGUI事件之Drag拖拽事件
    C#的数据类型之最常用的几种类型
    UGUI组件之Text文本组件简单笔记
    UGUI组件之Toggle 组件简单笔记
    Print 与Debug.Log的区别
    Unity脚本用VS打开出现 "以下文件中的行尾不一致,要将行尾标准化吗?"
    UGUI组件之Image 组件简单笔记
    UGUI事件之Pointer指针事件
    定制自己的Unity脚本模板
  • 原文地址:https://www.cnblogs.com/spaceship9/p/3012780.html
Copyright © 2011-2022 走看看