الستيب موتور

الموضوع في 'برمجة الاشياء arduino' بواسطة ابوفارس, بتاريخ ‏3 فبراير 2020.

  1. ابوفارس

    ابوفارس ادارة المنتدى إداري

    إنضم إلينا في:
    ‏12 يوليو 2014
    المشاركات:
    583
    الإعجابات المتلقاة:
    191
    نقاط الجائزة:
    43
    الجنس:
    ذكر
    [​IMG]


    البرمجيات
    • اردوينو IDE (الإصدار 1.6.4+)

    عن السائر موتور
    Stepper Motor هو محرك يتم التحكم فيه بواسطة سلسلة من الملفات الكهرومغناطيسية. يحتوي العمود الأوسط على سلسلة من المغناطيسات المثبتة عليه ، ويتم إعطاء التيار المتردد للملفات المحيطة بالعمود الحالية أم لا ، مما يخلق مجالات مغناطيسية تقوم بصد أو جذب المغناطيس على العمود ، مما يؤدي إلى تدوير المحرك.

    هذا التصميم يسمح للسيطرة ثمينة جدا من السيارات، وهناك نوعان أساسيان من المحركات السائر، السائر القطب الواحد و السائر القطبين .

    في هذا الدرس ، سنتحدث عن محرك أحادي القطب Stepper Motor 28-BYJ48.


    [​IMG]




    أحادي القطب السائر المحركات

    يحتوي المحرك السائر أحادي القطب على خمسة أو ستة أسلاك وأربعة ملفات (في الواقع ملفان مقسومان على الوصلات المركزية في كل ملف). يتم ربط الوصلات المركزية للملفات معًا واستخدامها كاتصال الطاقة. يطلق عليهم السائر أحادي القطب لأن القوة تأتي دائمًا في هذا القطب الواحد. يمكنك الحصول على ورقة بيانات محرك 28-BYJ48 هنا.

    [​IMG]

    إن أبسط طريقة لربط السائر أحادي القطب مع Arduino هي استخدام اندلاع لرقاقة صفيف الترانزستور ULN2003A. يحتوي ULN2003A على سبعة برامج تشغيل الترانزستور دارلينجتون ويشبه إلى حد ما وجود سبعة الترانزستورات TIP120 كل في حزمة واحدة. يمكن أن يمرر ULN2003A ما يصل إلى 500 مللي أمبير لكل قناة ولديه انخفاض في الجهد الداخلي يبلغ حوالي 1 فولت عند التشغيل. كما أنه يحتوي على الثنائيات المشبك الداخلية لتبديد الطفرات الجهد عند القيادة الأحمال التعريفي. للسيطرة على السائر ، وتطبيق الجهد على كل من لفائف في تسلسل معين.

    [​IMG]

    فيما يلي مخططات توضح كيفية ربط محرك السائر أحادي القطب بأربعة دبابيس تحكم باستخدام ULN2003A ، وتظهر كيفية التفاعل باستخدام أربعة TIP120. إليكم ورقة بيانات ULN2003.

    [​IMG]

    الإتصال
    الأسلاك بين لوحة سائق Stepper Motor و Osoyoo Uno:

    سائق السائر المحركاتOsoyoo أونو
    في 18
    في 29
    في 310
    IN411
    GNDGND
    VCC5V
    إشعار: من الأفضل تشغيل محركات السائر لديك من مصدر خارجي مزود بقدرة 5 فولت إلى 500 مللي أمبير على الأقل ، حيث يسحب الأشخاص كثيرًا بحيث لا يمكن تشغيلهم مباشرة من لوحة Arduino.





    [​IMG]




    كود:
    #define IN1 8
    #define IN2 9
    #define IN3 10
    #define IN4 11
    int Steps = 0;
    boolean Direction = true;// gre
    unsigned long last_time;
    unsigned long currentMillis ;
    int steps_left=4095;
    long time;
    void setup() {
    Serial.begin(115200);
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    // delay(1000);
    }
    void loop() {
    while(steps_left>0){
    currentMillis = micros();
    if(currentMillis-last_time>=1000){
    stepper(1);
    time=time+micros()-last_time;
    last_time=micros();
    steps_left--;
    }
    }
    Serial.println(time);
    Serial.println("Wait...!");
    delay(2000);
    Direction=!Direction;
    steps_left=4095;
    }
    
    void stepper(int xw){
    for (int x=0;x<xw;x++){
    switch(Steps){
    case 0:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    break;
    case 1:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, HIGH);
    break;
    case 2:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    break;
    case 3:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    break;
    case 4:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    case 5:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    case 6:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    case 7:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    break;
    default:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    }
    SetDirection();
    }
    }
    void SetDirection(){
    if(Direction==1){
    Steps++;
    }
    if(Direction==0){
    Steps--;
    }
    if(Steps>7){
    Steps=0;
    }
    if(Steps<0){
    Steps=7;
    }
    }


    [​IMG]
     

مشاركة هذه الصفحة