نمایش نتایج: از 1 به 6 از 6

موضوع: کمک در رابطه با شمارش پالس های شفت انکودر

  1. #1
    Junior Member
    تاریخ عضویت
    Nov 2017
    نوشته ها
    4

    کمک در رابطه با شمارش پالس های شفت انکودر

    با سلام
    من میخوام به کمک انکودر مقدار چرخش موتور dc رو تعیین کنم یعنی با شفت مارپیچ یه خط کش درست کنم که با دادن سایز به میلیمتر موتور dc شفت رو به اندازه عقب ببره و در اخرشفت یه کلید برای نقطه صفر یا هوم بزارم
    اگر کسی کتابخوانه ای رو برای اینکار معرفی کنه ممنون میشم

  2. #2
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    45
    سلام دوست عزیزم ، اگه شما از موتوری استفاده میکنی که خودش مجهز به انکد اثر هال هست کافیه که با استفاده از اینتراپت یا همون وقفه یکی از خروجی های انکدر رو با اون یکی پایه مقایسه کنی و در صورتی که موتور راست گرده به پالس های خوانده شده بیفزاید و در صورتی که موتور چپگرد شد از پالس های خوانده شده کم بشه .
    اگه از از انکودر نوری استفاده میکنی باز روش به همین صورته با این تفاوت که نیاز به دو انکودر نوری و یک صفحه ی شیار دار که باید روی شافت موتور وصل بشه نیاز داری در لحظه ی اول به فرض راست گرد بودن موتور انکدر اول روی شیار قرار میگیره و مقدار 1 میشه و انکودر دوم خارج از شیار هست و مقدار 0 میشه در صورت چپ گرد شدن انکودر اول خارج از شیار و 0 و انکدر دوم روی شیار و مقدار 1 رو میده که اینجوری چپ گرد و راستگرد شدن موتور تشخیص داده میشه ،
    حالا شما میتونی با جمع کردن این پالس ها هم سرعت و هم موقعیت موتور رو کنترل کنی ، امیدوارم متوجه شده باشی ، موفق باشی

  3. #3
    Junior Member
    تاریخ عضویت
    Nov 2017
    نوشته ها
    4
    نقل قول نوشته اصلی توسط ashkan4818 نمایش پست ها
    سلام دوست عزیزم ، اگه شما از موتوری استفاده میکنی که خودش مجهز به انکد اثر هال هست کافیه که با استفاده از اینتراپت یا همون وقفه یکی از خروجی های انکدر رو با اون یکی پایه مقایسه کنی و در صورتی که موتور راست گرده به پالس های خوانده شده بیفزاید و در صورتی که موتور چپگرد شد از پالس های خوانده شده کم بشه .
    اگه از از انکودر نوری استفاده میکنی باز روش به همین صورته با این تفاوت که نیاز به دو انکودر نوری و یک صفحه ی شیار دار که باید روی شافت موتور وصل بشه نیاز داری در لحظه ی اول به فرض راست گرد بودن موتور انکدر اول روی شیار قرار میگیره و مقدار 1 میشه و انکودر دوم خارج از شیار هست و مقدار 0 میشه در صورت چپ گرد شدن انکودر اول خارج از شیار و 0 و انکدر دوم روی شیار و مقدار 1 رو میده که اینجوری چپ گرد و راستگرد شدن موتور تشخیص داده میشه ،
    حالا شما میتونی با جمع کردن این پالس ها هم سرعت و هم موقعیت موتور رو کنترل کنی ، امیدوارم متوجه شده باشی ، موفق باشی
    ممنون از شما دوست گرامی
    بله من همه این کارها رو کردم و اماده هست فقط دنبال یه sketch مربوط به این کار هستم

  4. #4
    Junior Member
    تاریخ عضویت
    Nov 2017
    نوشته ها
    4
    من یه sketch پیدا کردم که بدون انکودر و با استپ موتور کیبرد وال سی دی نوکیا این کار رو میکنه منم اینارو وصل کردم به شفت مارپیچ
    فقط یه مشکل دارم ما میتونیم تو کیبرد عدد وارد کنیم مثلا بزنیم 100 بره تو 10 سانت بایسته میره و کارشو انجام میده ولی یه مشکلی دارم
    که از عدد 163 بالاتر که میره موتور برعکس کار میکنه
    ابته من از اردوینو به درایور دو سیم فقط گرفتم یکی dir یکی step
    حالا میخواستم از شما دوستان کمک بگیرم که علتش چی میتونه باشه
    البته این عدد 1638 رو میدونم که فرکانس کاری میکروکنترل هست و تو حالت دیلی میکروثانیه نمیتونه این کنترل از این عدد بیشتر رو ساپورت کنه
    ولی به کار ما ربطش چیه نمیدونم

  5. #5
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    45
    نقل قول نوشته اصلی توسط farid_ejay نمایش پست ها
    من یه sketch پیدا کردم که بدون انکودر و با استپ موتور کیبرد وال سی دی نوکیا این کار رو میکنه منم اینارو وصل کردم به شفت مارپیچ
    فقط یه مشکل دارم ما میتونیم تو کیبرد عدد وارد کنیم مثلا بزنیم 100 بره تو 10 سانت بایسته میره و کارشو انجام میده ولی یه مشکلی دارم
    که از عدد 163 بالاتر که میره موتور برعکس کار میکنه
    ابته من از اردوینو به درایور دو سیم فقط گرفتم یکی dir یکی step
    حالا میخواستم از شما دوستان کمک بگیرم که علتش چی میتونه باشه
    البته این عدد 1638 رو میدونم که فرکانس کاری میکروکنترل هست و تو حالت دیلی میکروثانیه نمیتونه این کنترل از این عدد بیشتر رو ساپورت کنه
    ولی به کار ما ربطش چیه نمیدونم
    برای اینکه بتونم بهتر راهنماییتون کنم لطفا کدتون رو قرار بدین

  6. #6
    Junior Member
    تاریخ عضویت
    Nov 2017
    نوشته ها
    4
    بفرمایید اینم کد
    /* Arduino Control Stepper with Keypad and LCD

    #include <AccelStepper.h> // AccelStepper Library
    #include <Keypad.h> // Keypad Library
    #include "U8glib.h" // U8glib for Nokia LCD

    // Variables to hold entered number on Keypad
    volatile int firstnumber=99; // used to tell how many numbers were entered on keypad
    volatile int secondnumber=99;
    volatile int thirdnumber=99;

    // Variables to hold Distance and CurrentPosition
    int keyfullnumber=0; // used to store the final calculated distance value
    String currentposition = ""; // Used for display on Nokia LCD


    // Keypad Setup
    const byte ROWS = 4; // Four Rows
    const byte COLS = 4; // Four Columns
    char keys[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'}
    };
    byte rowPins[ROWS] = {22, 24, 26, 28}; // Arduino pins connected to the row pins of the keypad
    byte colPins[COLS] = {31, 33, 35, 37}; // Arduino pins connected to the column pins of the keypad
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Keypad Library definition


    // U8glib Setup for Nokia LCD
    #define backlight_pin 11
    U8GLIB_PCD8544 u8g(3, 4, 6, 5, 7); // Arduino pins connected to Nokia pins:
    // CLK=3, DIN=4, CE=6, DC=5, RST=7


    // AccelStepper Setup
    AccelStepper stepper(1, A0, A1); // 1 = Easy Driver interface
    // Arduino A0 connected to STEP pin of Easy Driver
    // Arduino A1 connected to DIR pin of Easy Driver



    void setup(void) {

    // Light up the LCD backlight LEDS
    analogWrite(backlight_pin, 0); // Set the Backlight intensity (0=Bright, 255=Dim)

    // AccelStepper speed and acceleration setup
    stepper.setMaxSpeed(1500); // Not to fast or you will have missed steps
    stepper.setAcceleration(400); // Same here

    // Draw starting screen on Nokia LCD
    u8g.firstPage();
    do {
    u8g.drawHLine(0, 15, 84);
    u8g.drawVLine(50, 16, 38);
    u8g.drawHLine(0, 35, 84);
    u8g.setFont(u8g_font_profont11);
    u8g.drawStr(0, 10, "ENTER DISTANCE");
    u8g.drawStr(62, 29, "MM");
    u8g.drawStr(4, 46, "cur-pos");
    }
    while( u8g.nextPage() );

    }


    void loop(){

    char keypressed = keypad.getKey(); // Get value of keypad button if pressed
    if (keypressed != NO_KEY){ // If keypad button pressed check which key it was
    switch (keypressed) {

    case '1':
    checknumber(1);
    break;

    case '2':
    checknumber(2);
    break;

    case '3':
    checknumber(3);
    break;

    case '4':
    checknumber(4);
    break;

    case '5':
    checknumber(5);
    break;

    case '6':
    checknumber(6);
    break;

    case '7':
    checknumber(7);
    break;

    case '8':
    checknumber(8);
    break;

    case '9':
    checknumber(9);
    break;

    case '0':
    checknumber(0);
    break;

    case '*':
    deletenumber();
    break;

    case '#':
    calculatedistance();
    break;
    }
    }

    }

    void checknumber(int x){
    if (firstnumber == 99) { // Check if this is the first number entered
    firstnumber=x;
    String displayvalue = String(firstnumber); // Transform int to a string for display
    drawnokiascreen(displayvalue); // Redraw Nokia lcd

    } else {
    if (secondnumber == 99) { // Check if it's the second number entered
    secondnumber=x;
    String displayvalue = (String(firstnumber) + String(secondnumber));
    drawnokiascreen(displayvalue);

    } else { // It must be the 3rd number entered
    thirdnumber=x;
    String displayvalue = (String(firstnumber) + String(secondnumber) + String(thirdnumber));
    drawnokiascreen(displayvalue);

    }
    }
    }


    void deletenumber() { // Used to backspace entered numbers
    if (thirdnumber !=99) {
    String displayvalue = (String(firstnumber) + String(secondnumber));
    drawnokiascreen(displayvalue);

    thirdnumber=99;
    }
    else {
    if (secondnumber !=99) {
    String displayvalue = String(firstnumber);
    drawnokiascreen(displayvalue);

    secondnumber=99;
    }
    else {
    if (firstnumber !=99) {
    String displayvalue = "";
    drawnokiascreen(displayvalue);

    firstnumber=99;
    }
    }
    }
    }

    void calculatedistance() { // Used to create a full number from entered numbers

    if (thirdnumber == 99 && secondnumber == 99 && firstnumber != 99) {
    keyfullnumber=firstnumber;
    movestepper(keyfullnumber);
    }

    if (secondnumber != 99 && thirdnumber == 99) {
    keyfullnumber=(firstnumber*10)+secondnumber;
    movestepper(keyfullnumber);
    }

    if (thirdnumber != 99) {
    keyfullnumber=(firstnumber*100)+(secondnumber*10)+ thirdnumber;
    movestepper(keyfullnumber);
    }

    resetnumbers(); // Reset numbers to get ready for new entry
    }


    void movestepper(int z) { // Move the stepper

    int calculatedmove=((z*1600)/80); // Calculate number of steps needed in mm
    stepper.runToNewPosition(calculatedmove);
    currentposition = String(z);
    u8g.firstPage();
    do {
    u8g.drawHLine(0, 15, 84);
    u8g.drawVLine(50, 16, 38);
    u8g.drawHLine(0, 35, 84);
    u8g.setFont(u8g_font_profont11);
    u8g.drawStr(0, 10, "ENTER DISTANCE");
    u8g.drawStr(62, 29, "MM");
    u8g.drawStr(4, 46, "cur-pos");
    u8g.setPrintPos(57,47);
    u8g.print(currentposition);
    }
    while( u8g.nextPage() );
    }

    void resetnumbers() { // Reset numbers for next entry
    firstnumber=99;
    secondnumber=99;
    thirdnumber=99;
    }


    void drawnokiascreen(String y) {

    u8g.firstPage();
    do {
    u8g.drawHLine(0, 15, 84);
    u8g.drawVLine(50, 16, 38);
    u8g.drawHLine(0, 35, 84);
    u8g.setFont(u8g_font_profont11);
    u8g.drawStr(0, 10, "ENTER DISTANCE");
    u8g.setPrintPos(0,29);
    u8g.print(y); // Put entered number on Nokia lcd
    u8g.drawStr(62, 29, "MM");
    u8g.drawStr(4, 46, "cur-pos");
    u8g.setPrintPos(57,47);
    u8g.print(currentposition); // Display current position of stepper
    }
    while( u8g.nextPage() );

    }

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO