اطلاعیه

Collapse
No announcement yet.

کنترل موقعیت موتور با استفاده از Reed Switch

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کنترل موقعیت موتور با استفاده از Reed Switch

    سلام؛
    من یه موتور dc دارم که با چرخدنده حرکتش به صورت خطی شده در و اقع یه Linear Actuator هستش، روی قسمت چرخان موتور یه حلقه آهنربایی هست و روبروی اون یه رید سوئیچ قرار داره و وقتی موتور جلو و عقب حرکت میکنه این رید سوئیچ قطع و وصل میشه، که اینجوری با شمارش این پالس ها میشه موقعیت موتور رو تشخیص داد. من دو پایه خروجی سنسور رو مثل شکل مقابل وصل کردم و در نهایت خروجی اشمیت تریگر رو به اینتراپت صفر یه میکروکنترلر مگا32 وصل کردم.

    میخوام موتور با دو تا دکمه هر چقدر عقب و جلو رفت در نهایت با زدن یه دکمه بره و توی یه جای مشخص شده قرار بگیره. مثلا اونجایی که مشخص شده وقتیه که موتور رو به جلو حرکت کرده و 100 پالس فرستاده (اینتراپت روی Falling Edge تنظیم کردم)، حالا هر چقدر جلو و عقب میره پالس ها میشماره ولی وقتی یه دکمه رو زد میره و توی همون موقعیت قرار میگیره.
    ولی مشکل اینه که بعد از چند بار عقب و جلو رفتن خطا داره و سر جای خودش قرار نمیگیره و هر بار یکم جلو تر یا عقب تر قرار میگیره. حدسم اینه که توی شمارش پالس ها اتفاق می افته.
    به نظرتون مشکل چیه؟؟
    اینم برنامه:

    کد:
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here
        if(state == 1){
            i++;
        }
        else if(state == 2 && i > 0){
            i--;
        }
    }
    
    while (1)
          {
          // Place your code here    
          
          if(PINB.7 == 0){   
            delay_ms(10);
            if(PINB.7 == 0){ // Forward
    		    state = 1;
                PORTA.1 = 1;
                PORTA.2 = 0;
                PORTA.3 = 1;
            }
          }
          else if(PINB.6 == 0){ // Backward 
            delay_ms(10);
            if(PINB.6 == 0){
            state = 2;
            PORTA.1 = 1;
            PORTA.2 = 1;
            PORTA.3 = 0;   
            }
          }            
          else{
            PORTA.1 = 0;
            PORTA.2 = 0;
            PORTA.3 = 0;
          }   
          
         
          if(PINB.5 == 0){ // Back to Save Position
            
            PORTA.0 = 1;
            
            while(i > 100){
                state = 2;
                PORTA.1 = 1;
                PORTA.2 = 1;
                PORTA.3 = 0;
            }
            while(i < 100){
                state = 1;
                PORTA.1 = 1;
                PORTA.2 = 0;
                PORTA.3 = 1;
            }   
            if(pos == 100){ 
                PORTA.1 = 0;
                PORTA.2 = 0;
                PORTA.3 = 0;
            } 
    
    
          }              
            
        }
    جدیدترین ویرایش توسط yaser1373; ۱۰:۴۴ ۱۳۹۶/۱۰/۰۹.
    تاريک ترين وقت شب درست قبل از طلوعـــــــــــه ....

    #2
    پاسخ : کنترل موقعیت موتور با استفاده از Reed Switch

    برنامتو نخوندم ولی اخرش با این روش نمیتونی دقت رفت و برگشت بگیری.
    یه مورد رو میگم شاید هم عمل کرده باشی . وقتی متور را متوقف کردی یه مقدار تاخیر بده بعد جهت را عوض کن و در زمان تاخیر توقف پالسها را بخوان که در جهت عکس مقدارش را تو برنامت لحاظ کنی. هر چند باز هم میگم با یک عدد سویچ نمیشه دقت رفت و برگشت بگیری باید دوتا سویچ بزاری که با حدود 90 درجه اختلاف فار نسبت به هم خاموش روشن بشن و مثل سیگنال روتاری انکودر باهاش رفتار کنی اونوقت میتونی نسیت به تعداد پاس بر دور دقت بگیری

    دیدگاه


      #3
      پاسخ : کنترل موقعیت موتور با استفاده از Reed Switch

      نوشته اصلی توسط kamy007 نمایش پست ها
      برنامتو نخوندم ولی اخرش با این روش نمیتونی دقت رفت و برگشت بگیری.
      یه مورد رو میگم شاید هم عمل کرده باشی . وقتی متور را متوقف کردی یه مقدار تاخیر بده بعد جهت را عوض کن و در زمان تاخیر توقف پالسها را بخوان که در جهت عکس مقدارش را تو برنامت لحاظ کنی. هر چند باز هم میگم با یک عدد سویچ نمیشه دقت رفت و برگشت بگیری باید دوتا سویچ بزاری که با حدود 90 درجه اختلاف فار نسبت به هم خاموش روشن بشن و مثل سیگنال روتاری انکودر باهاش رفتار کنی اونوقت میتونی نسیت به تعداد پاس بر دور دقت بگیری
      ممنون از جوابتون
      نه به نظرم میشه، چون این سنسور رو به صورت داخلی برای همین کار در این موتور در نظر گرفتن.
      این چیزی گفتین رو من متوجه نشدم میشه یکم بیشتر توضیح بدین؟
      تاريک ترين وقت شب درست قبل از طلوعـــــــــــه ....

      دیدگاه


        #4
        پاسخ : کنترل موقعیت موتور با استفاده از Reed Switch

        نوشته اصلی توسط yaser1373 نمایش پست ها
        نه به نظرم میشه، چون این سنسور رو به صورت داخلی برای همین کار در این موتور در نظر گرفتن.
        این چیزی گفتین رو من متوجه نشدم میشه یکم بیشتر توضیح بدین؟
        امیدوارم بشه در مورد روتاری انکودر هم یه عکس برات ارسال میکنم شاید مفید باشه

        دیدگاه

        لطفا صبر کنید...
        X