اطلاعیه

Collapse
No announcement yet.

راه اندازی موتور انکودر دار اثر هال

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

    راه اندازی موتور انکودر دار اثر هال

    سلام


    آقا یه سوال من یه موتور دی سی انکودر دار مدل emg 30 خریدم . برای راه اندازیش طبق دیتاشیت
    سیم ها به این صور ت معرفی شدند.
    Purple (1) Hall Sensor B Vout
    Blue (2) Hall sensor A Vout
    Green (3) Hall sensor ground
    Brown (4) Hall sensor Vcc
    Red (5) + Motor
    Black (6) - Motor
    مشخصات این موتور 12 ولت 170 rpm هست و انکودرش 360 پالس میده. سوال اینجاست برای اندازه گیری زوایا با استفاده از این انکودر الگوریتم برنامه نویسیشو باید چطوری بنویسم و تنها چیزی که میخوام بدونم اینه که چطور میشه زوایای بین 0 تا 90 رو مثلا کانت کرد. چون تنها چیزی که میدونم اینه که 2 کانال A و B دو تا موج مربعی با اختلاف فاز 90 درچه خروجی میده.

    من با انکودر های نوری (اپتو کانتر و شفت انکودر) زیاد کار کردم و از اینتراپت درون برنامه نویسی استفاده میکردم . اما طرز برنامه نویسیه این انکودر هال رو درست متوجه نمیشم . اگر کسی کار کرده یه راهنمایی کنه .


    با تشکر

    #2
    پاسخ : راه اندازی موتور انکودر دار اثر هال

    سلام
    اگر می خواهی جهت حرکت موتور را هم متوجه شوی از هر دو انکودر ان استفده کن ولی اگر خودت در برنامه متوجه می شوی یکی از انکودر های آن را به اینتراپت خارجی میکرو وصل کن و مثل همان انکودر های نوری از آن استفاده کن .فقط دقت کن یک مقاومت 4.7 کیلو به انکودر مورد نظر و بعد به 5 ولت وصل کن .
    باد می وزد ...
    میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
    تصمیم با تو است ...

    دیدگاه


      #3
      پاسخ : راه اندازی موتور انکودر دار اثر هال

      با avr معمولی استفاده از انکودر دو فاز یه مقدار سخته و پردازش زیادی از پروسسور می گیره. اما در Xmega و یا dsPIC ها سخت افزار جداگانه ای برای این کار وجود داره که کار را خیلی راحت می کنه.

      برای اینکه با avr راه بندازید باید خروجی یکی از انکودر ها را به پایه اینتراپت خارجی و انکودر دیگر را به یکی از پایه های دلخواه بدید.اینتراپت را مثلا روی لبه بالارونده تنظیم کنید. وقتی اینتراپت می خوره اون یکی انکودر را چک کنید. اگر صفر بود مقدار یک متغیر را زیاد کنید و اگر صفر بود کم کنید.

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

      دیدگاه


        #4
        پاسخ : راه اندازی موتور انکودر دار اثر هال

        خروجی A و B این انکودر ها با هم اختلاف 90 درجه ای دارند پس بنا بر این حالت حرف های همان دوستمان درست می شود یعنی یکی را به اینتراپت خارجی وصل کن و تعداد پالس ها بشمار و پایه ی دیگر را کنترل کن وقتی 0 است از متغیرت کم و زمانی 1 است به آن اضافه کن .

        باد می وزد ...
        میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
        تصمیم با تو است ...

        دیدگاه


          #5
          پاسخ : راه اندازی موتور انکودر دار اثر هال

          من یه نکته ابهام واسم مونده با انکودر 360 پالسی که تو دیتاشیت این موتور نوشته شده میشه موقعیت مکانیو تو هر زاویه ای بین 0 تا 360 ردجه در سرعت کم بدست آورد. سوال دوم اگر 2 تا از این موتور ها رو بخواهیم کنترل کنیم با 2 تا وقفه . برنامه تداخل وقفه ایجاد نمیکنه؟

          دیدگاه


            #6
            پاسخ : راه اندازی موتور انکودر دار اثر هال

            شما نمی تونید موقعیت مکانی را تشخیص بدید فقط می تونی بفهمید چند درجه چرخیده .
            باد می وزد ...
            میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
            تصمیم با تو است ...

            دیدگاه


              #7
              پاسخ : راه اندازی موتور انکودر دار اثر هال

              اگر 2 تا موتور رو emg 30 رو بخواهیم با هم راه اندازی کنیم میشه با 2 تا وقفه و 2 تا پین ازاد شمارش پالس کرد؟ من این کار رو کردم ولی پالس های موتور دوم روی ال سی دی پرش پیدا میکنه اما موتور اول خوبه.

              دیدگاه


                #8
                پاسخ : راه اندازی موتور انکودر دار اثر هال

                طرز استفاده از انکودرشو متوجه نشدم باز . الان من پالس های انکودر رو میخونم اما چند تا سوال دارم . 1- این پالس ها تا چه سرعتی قابل اعتباره. 2- منظورتون از درجه چیه که میشه خوند اما موقعیت مکانیو نه . میشه یه مثال بزنید.من از این 2 تا موتور برای ربات تعادل دارم استفاده میکنم .

                دیدگاه


                  #9
                  پاسخ : راه اندازی موتور انکودر دار اثر هال

                  سلام
                  تا سرعت نامی موتور خوب جواب میدن
                  دو تا رو هم میشه راه اندازه کرد فقط کدهای داخل وقفه رو تا جای ممکن برای کم در نظر بگیری
                  تا قبل از اتمام یکی از وقفه ها بعدی فعال نشه و فرکانس کاری میکرو رو هم تا جایی که میتونید بالا در نظر بگیرید
                  مثلا 16 مگا

                  دیدگاه


                    #10
                    پاسخ : راه اندازی موتور انکودر دار اثر هال

                    چجوری میشه تا قبل اتمام وفقه اول دومی فعال نشه. ؟

                    دیدگاه


                      #11
                      پاسخ : راه اندازی موتور انکودر دار اثر هال

                      سلام.
                      در این مورد که گفتید وقتی دوتا انکودر را راه انداختید پرش داشته باید برنامه را بذارید تا بررسی بشه. اگر مشکلی نداشته باشه حتما به خاطر افتادن وقفه ها روی همدیگه هست.

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

                      نوشته اصلی توسط 1270094513
                      طرز استفاده از انکودرشو متوجه نشدم باز . الان من پالس های انکودر رو میخونم اما چند تا سوال دارم . 1- این پالس ها تا چه سرعتی قابل اعتباره. 2- منظورتون از درجه چیه که میشه خوند اما موقعیت مکانیو نه . میشه یه مثال بزنید.من از این 2 تا موتور برای ربات تعادل دارم استفاده میکنم .
                      در مورد سوال اول با در نظر گرفتن یک موتور با توجه به اینکه سرعت موتور (170RPM) آنچنان بالا نیست مشکی به وجود نمیاد(من حساب کردم حدود 1020 پالس در هر ثانیه میشه که با در نظر گرفتن سرعت 8 مگاهرتزی میکرو ( ویا حتی بیشتر ) مشکلی پیش نمیاد)

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

                      برای ربات تعادلی همین مناسب هست. چون درواقع نیازی به این موضوع ندارید.

                      دیدگاه


                        #12
                        پاسخ : راه اندازی موتور انکودر دار اثر هال

                        سلام این یه نمونه برنامه ایه هست که با 2 وقفه int 0 و int 6 دو تا سنسور را کانت میکنم و تو زیر برنامه وفقه سنسورهای دوم که پایه های pine.7 و pind.1 هست رو چک میکنم . علاوه بر این من 5 تا کلید به میکرو که pina.7 و pina.3 (کم و زیاد کردن pwm) وpin a.6 و pina.4 و pina.5 (چپ-راست-استوپ) متصل کردم. مشکلی که دارم اینه که وقتی مدار رو روشن میکنم. روی ال سی دی 2 متغیر a ,b نشون میده که در حالت اول سرعت موتور ها ماکزیموم هستند و کانت صورت نمیگیره اما وقتی سرعتو خیلی پایین میارم اول متغیر b شروع میکنه به شمارش و متغیر a با اختلاف زیادی بسیار کند کانت میکنه در صورتی که ولتاژ 2 موتور یکسان هستند. الان نمیدونم تداخل وقفه ایجاد شده یعنی؟ ثانیا از مقادیر متغیر هایی که دریافت میکنم چطوری میتونم بفهمم موتور چند درجه چرخیده ؟


                        $regfile = "m128def.dat"
                        $crystal = 16000000
                        Config Lcd = 16 * 2
                        Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
                        Config Timer3 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Compare C Pwm = Clear Up , Prescale = 64
                        Config Timer2 = Pwm , Prescale = 8 , Pwm = On , Compare Pwm = Clear Up

                        Config Debounce = 1
                        '--------------------------(PWM)----------------------------------------------
                        Config Portb = Output

                        Config Int0 = Rising
                        Config Int6 = Rising

                        '--------------------------(LED RED)-------------------------------------------

                        Config Porta = Input
                        '-----------------------
                        Config Portd.0 = Input
                        Config Portd.1 = Input
                        Config Porte.6 = Input
                        Config Porte.7 = Input
                        '---------------------

                        Config Portd.2 = Output
                        Config Portd.3 = Output
                        Config Portd.4 = Output
                        Config Portd.5 = Output
                        '------------------------

                        Config Porte.7 = Input
                        Config Porte.6 = Input

                        Config Porte.3 = Output
                        Config Porte.4 = Output




                        '------------------------ (INTERRUPT)------------------------------------------
                        Enable Interrupts
                        Enable Int0
                        Enable Int6

                        On Int0 L1

                        On Int6 L2



                        '-----------------------------------------------------------------------------
                        Dim A As Integer
                        Dim B As Integer
                        Dim X As Byte


                        '---------------------------------

                        Do
                        '---------------------
                        If Pina.6 = 1 Then

                        Set Portd.2
                        Reset Portd.3

                        Set Portd.4
                        Reset Portd.5

                        End If

                        '--------------------
                        If Pina.4 = 1 Then

                        Reset Portd.2
                        Set Portd.3

                        Reset Portd.4
                        Set Portd.5

                        End If
                        '---------------------
                        If Pina.5 = 1 Then

                        Reset Portd.2
                        Reset Portd.3
                        Reset Portd.4
                        Reset Portd.5

                        End If
                        '----------------------
                        If Pina.7 = 1 Then

                        If X < 240 Then
                        X = X + 2
                        End If


                        Pwm3a = X
                        Pwm3b = X
                        Bitwait Pina.7 , Reset

                        End If

                        '-------------------------
                        If Pina.3 = 1 Then

                        If X > 2 Then
                        X = X - 2
                        End If


                        Pwm3a = X
                        Pwm3b = X
                        Bitwait Pina.3 , Reset

                        End If



                        Loop


                        '----------------------
                        L1:

                        If Pind.1 = 1 Then

                        Incr A

                        End If

                        If Pind.1 = 0 Then

                        Decr A

                        End If

                        Cls

                        Locate 1 , 1
                        Lcd "A="

                        Locate 1 , 3
                        Lcd A

                        Locate 2 , 1
                        Lcd "B="

                        Locate 2 , 3
                        Lcd B

                        '======================================
                        '---------------------
                        If Pina.6 = 1 Then

                        Set Portd.2
                        Reset Portd.3

                        Set Portd.4
                        Reset Portd.5

                        End If

                        '--------------------
                        If Pina.4 = 1 Then

                        Reset Portd.2
                        Set Portd.3

                        Reset Portd.4
                        Set Portd.5

                        End If
                        '---------------------
                        If Pina.5 = 1 Then

                        Reset Portd.2
                        Reset Portd.3
                        Reset Portd.4
                        Reset Portd.5

                        End If
                        '----------------------
                        If Pina.7 = 1 Then

                        If X < 240 Then
                        X = X + 2
                        End If


                        Pwm3a = X
                        Pwm3b = X
                        Bitwait Pina.7 , Reset

                        End If

                        '-------------------------
                        If Pina.3 = 1 Then

                        If X > 2 Then
                        X = X - 2
                        End If


                        Pwm3a = X
                        Pwm3b = X
                        Bitwait Pina.3 , Reset

                        End If




                        Return
                        '-----------------------
                        L2:

                        If Pine.7 = 1 Then

                        Incr B

                        End If

                        If Pine.7 = 0 Then

                        Decr B

                        End If

                        Cls

                        Locate 1 , 1
                        Lcd "A="

                        Locate 1 , 3
                        Lcd A

                        Locate 2 , 1
                        Lcd "B="

                        Locate 2 , 3
                        Lcd B

                        '====================================
                        '---------------------
                        If Pina.6 = 1 Then

                        Set Portd.2
                        Reset Portd.3

                        Set Portd.4
                        Reset Portd.5

                        End If

                        '--------------------
                        If Pina.4 = 1 Then

                        Reset Portd.2
                        Set Portd.3

                        Reset Portd.4
                        Set Portd.5

                        End If
                        '---------------------
                        If Pina.5 = 1 Then

                        Reset Portd.2
                        Reset Portd.3
                        Reset Portd.4
                        Reset Portd.5

                        End If
                        '----------------------
                        If Pina.7 = 1 Then

                        If X < 240 Then
                        X = X + 2
                        End If


                        Pwm3a = X
                        Pwm3b = X
                        Bitwait Pina.7 , Reset

                        End If

                        '-------------------------
                        If Pina.3 = 1 Then

                        If X > 2 Then
                        X = X - 2
                        End If


                        Pwm3a = X
                        Pwm3b = X
                        Bitwait Pina.3 , Reset

                        End If


                        Return
                        '------------------

                        دیدگاه


                          #13
                          پاسخ : راه اندازی موتور انکودر دار اثر هال

                          سلام

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

                          دیدگاه


                            #14
                            پاسخ : راه اندازی موتور انکودر دار اثر هال

                            برای فهمیدن اینکه چقدر چرخیده تعداد پالس را بر تعداد پالس در یک دور تقسیم کنید.(فقط حواستون باشه که متغیر باید عدد اعشاری هم قبول کنه)

                            اینجوری یه عدد اعشاری دارید که میزان چرخش را به شما میگه حالا اگه توی 360 ضربش کنید زاویه بدست میاد

                            دیدگاه


                              #15
                              پاسخ : راه اندازی موتور انکودر دار اثر هال

                              برای اتصال خروجی سنسور کانال a و b موتور احتیاجی به opamp و پتانسیومتر هست یا میشه مستقیم یا موازی کردن یه مقاومت 4.7کیلو به وقفه متصلش کرد؟

                              دیدگاه

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