久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

Arduino 控制多路步進(jìn)電機(jī)

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月25日   【字體:

 前面用一片arduino控制一個(gè)步進(jìn)電機(jī),但是控制多路步進(jìn)電機(jī)容易互相干擾,主要是每個(gè)脈沖延時(shí)用了delay函數(shù)。

 
一路兩相的步進(jìn)電機(jī)需要占用4個(gè)i/o口,因此一片arduino最多控制3個(gè)步進(jìn)電機(jī)(不算模擬i/o)。
一個(gè)l298模塊只能接一個(gè)步進(jìn)電機(jī)。下面實(shí)驗(yàn)接2路電機(jī)的情況,3路時(shí)情況差不多。
 
(1)實(shí)驗(yàn)了一下arduino自帶的stepper庫(kù),發(fā)現(xiàn)連接兩個(gè)電機(jī)只能一個(gè)一個(gè)按順序動(dòng),不能同時(shí)動(dòng)。但是電機(jī)都能動(dòng),工作沒(méi)有問(wèn)題。這顯然不是我們想要的
(2)改了一下自己編的步進(jìn)電機(jī)程序,可以同時(shí)動(dòng)了,但是兩個(gè)電機(jī)的速度不好設(shè)置,變量太多。
最后做了個(gè)艱難的決定,自己編庫(kù)文件。好久沒(méi)動(dòng)c語(yǔ)言了,忘得差不多了,只好在原有庫(kù)函數(shù)的基礎(chǔ)上改。改了一個(gè)晚上,終于沒(méi)問(wèn)題了,并且把原來(lái)庫(kù)函數(shù)中的四拍的方法改成八拍,控制更準(zhǔn)確,運(yùn)動(dòng)更平穩(wěn)了。庫(kù)函數(shù)在我的網(wǎng)盤(pán)下載,這幾天沒(méi)空了,等有空再改一下傳到官網(wǎng)上去:
 
 
例子程序:
#include
const int stepsPerRevolution = 400;  // 對(duì)于兩相四線的電機(jī),一般步距角是1.8度,這里如果是四拍就寫(xiě)200,八拍就寫(xiě)400
                                    
 
// initialize the stepper library on pins 8 through 11:
Stepper myStepper1(stepsPerRevolution, 4,5,6,7);       //兩個(gè)電機(jī)分別占四個(gè)腳     
Stepper myStepper2(stepsPerRevolution, 8,9,10,11);    
 
void setup() {
  // set the speed at 60 rpm:
  myStepper1.setSpeed(60);
   myStepper2.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}
 
void loop() {
  
 
int r;
 for(int i=0; i<400;)
   { 
     r= myStepper1.stepOneStep(0);
     myStepper2.stepOneStep(1);//括號(hào)中的參數(shù)是方向,0和1代表不同轉(zhuǎn)動(dòng)方向
     if(r==2) i++;
   }
   
 
  delay(500);
  
  
}
 

StepperM.h:

 
/*
  Stepper.h - - Stepper library for Wiring/Arduino - Version 0.4
  
  Original library     (0.1) by Tom Igoe.
  Two-wire modifications   (0.2) by Sebastian Gassner
  Combination version   (0.3) by Tom Igoe and David Mellis
  Bug fix for four-wire   (0.4) by Tom Igoe, bug fix from Noah Shibley
  Muliti-motor modifications (0.5) by Xu Pei.
 
  Drives a unipolar or bipolar stepper motor using  2 wires or 4 wires
 
  When wiring multiple stepper motors to a microcontroller,
  you quickly run out of output pins, with each motor requiring 4 connections. 
 
  By making use of the fact that at any time two of the four motor
  coils are the inverse  of the other two, the number of
  control connections can be reduced from 4 to 2. 
 
  A slightly modified circuit around a Darlington transistor array or an L293 H-bridge
  connects to only 2 microcontroler pins, inverts the signals received,
  and delivers the 4 (2 plus 2 inverted ones) output signals required
  for driving a stepper motor.
 
  The sequence of control signals for 4 control wires is as follows:
 
  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
 
  The sequence of controls signals for 2 control wires is as follows
  (columns C1 and C2 from above):
 
  Step C0 C1
     1  0  1
     2  1  1
     3  1  0
     4  0  0
 
  The circuits can be found at 
  http://www.arduino.cc/en/Tutorial/Stepper
*/
 
// ensure this library description is only included once
#ifndef Stepper_h
#define Stepper_h
 
// library interface description
class Stepper {
  public:
    // constructors:
    Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2);
    Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4);
 
    // speed setter method:
    void setSpeed(long whatSpeed);
 
    // mover method:
    void step(int number_of_steps);
 
    // mover 1 step:
// dir:direction, 0 negtive; else positive.
//if return 0, the motor start move; else if return 1, waiting; return 2, move complete;
    int stepOneStep(int dir);
 
    int version(void);
 
  private:
    void stepMotor(int this_step);
    
    int direction;        // Direction of rotation
    int speed;          // Speed in RPMs
    unsigned long step_delay;    // delay between steps, in us, based on speed
    int number_of_steps;      // total number of steps this motor can take
    int pin_count;        // whether you're driving the motor with 2 or 4 pins
    int step_number;        // which step the motor is on
    
    // motor pin numbers:
    int motor_pin_1;
    int motor_pin_2;
    int motor_pin_3;
    int motor_pin_4;
    
    unsigned long last_step_time;      // time stamp in ms of when the last step was taken
 
int isWaiting; //signal of waiting
int isEightShot; //Eight-shot two-phase stepper motor 
};
 
#endif
 
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 91精品国产91久久久久久 | 欧美精品在欧美一区二区少妇 | 美女在线一区二区 | 色噜噜亚洲男人的天堂 | 亚洲精品电影网在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 99久久免费精品国产免费高清 | 激情黄色在线观看 | 在线观看视频福利 | 久久黄色网 | av网站免费观看 | 欧洲色综合| 成人久久18免费网站图片 | 国产69精品久久99不卡免费版 | 日韩在线精品视频 | 久久久久一区 | 欧美久久一级 | 精品一级毛片 | 99亚洲 | 国产成人99久久亚洲综合精品 | 荷兰欧美一级毛片 | 国产内谢| 日韩在线看片 | 91色网站 | 紧缚调教一区二区三区视频 | www312aⅴ欧美在线看 | 一级黄色日本片 | 中文字幕一区二区三区乱码在线 | 国产精品久久久久久久免费大片 | 亚洲一区二区精品视频 | 99久久久国产精品 | 成人国产精品久久久 | 色视频一区二区 | 亚洲天堂色 | 久久久久久国产精品免费免费 | 天天视频一区二区三区 | 国产精品一区二区三区久久久 | 亚洲精品乱码久久久久久按摩 | 一级毛片视频 | 欧美久久久久久久久 | 中文字幕一区二区三区不卡 |