اطلاعیه

Collapse
No announcement yet.

اتصال شفت انکودر به میکرو!

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

    اتصال شفت انکودر به میکرو!

    سلام دوستان

    من یه سوال در مورد اتصال شفت انکودر به میکرو دارم!بازم مثل همیشه ما رو از الطافتون بی نصیب نزارید.
    ممنون از همه شما !

    یه شفت انکودر داریم که که در دوجهت می چرخه راست گرد و چپ گرد

    با توجه به جهت چرخش دو نوع خروجی داره!AوB این دو تا خروجی دو تا پالس دارن که با هم 90 در جه اختلاف فاز دارن!اگه A جلوتر باشه راست کرده و میکرو باید اینو تشخیص بده و با استفاده از یه کانتر بشماره! و مثلا اگه 200 پالس شفتمون تولید کنه میکرو باید از 1 تا 200 بشماره و اگه B جلوتر باشه میکرو باید از 200 تا 1 به صورت پایین رونده بشماره؟

    حالا برا up/down counter تو کتاب کاهه نوشته بود باید از کانتر در مد pwm استفاده کنید.و دو تا بیت رو برایup/down counter گفته بود باید ست و ریست کنید تا بالا رونده و پایین رونده بشماره! ولی بیسکام اینا رو نمی شناسه!
    Com1x1و Com1x0 تو کتاب نوشته بود با توجه به این دو تا میکرو وقتی تو مد pwm باشه می فهمه که بالارونده یا پایین رونده بشماره
    من یه برنامه ای نوشتم ببینید اشکالش چیه!




    $regfile = "m32def.dat"
    $crystal = 8000000

    Config Pina.0 = Input
    Config Pind.5 = Output
    Config Int0 = Rising
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1

    Enable Interrupts
    Enable Int0
    On Int0 Lable1 Nosave
    Do
    Loop
    End

    Lable1:
    If Pina.0 = 0 Then
    Com1a1 = 1
    Com1a0 = 0
    Counter1 = 0
    Do
    Print Counter1
    Loop Until Counter1 >= 200

    Else
    Com1a1 = 1
    Com1a0 = 1
    Counter1 = &HC8
    Do
    Print Counter1
    Loop Until Counter1 = 0
    End If

    Return


    گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
    نماشد... ولی ما هنوز صادق ترینیم

    #2
    پاسخ : اتصال شفت انکودر به میکرو!

    خب احتمالا up/down counter در PWM رو با چیزی که به عنوان کانتر و شمارنده لازم داری اشتباه گرفتی.
    برای شمارش نیازی به PWM نداری. کافیه با هر بار تشخیص جهت چرخش مقدار یک متغیر رو تغییر بدی.
    من این برنامه رو پیشنهاد می کنم:

    $regfile = "m32def.dat"
    $crystal = 8000000

    Config Pina.0 = Input
    Config Pind.5 = Output
    Config Int0 = Rising

    Enable Interrupts
    Enable Int0
    On Int0 Lable1

    Dim Count As Byte

    Main:


    Do
    Print Count
    Loop

    End

    Lable1:
    If Pina. = 1 Then
    Incr Count
    Else
    Decr Count
    End If

    Return


    البته هنوز با توجه به برنامه ای که نوشتی دقیقا متوجه کاری که کردی نشدم . اما این برنامه ای که اینجا گذاشتم با هر وقفه ای که وارد میشه ، ابتدا جهت حرکت رو تشخیص میده و در نهایت با توجه به جهت چرخش ، مقدار متغیر Count رو زیاد یا کم می کنه.

    دیدگاه


      #3
      پاسخ : اتصال شفت انکودر به میکرو!


      ممنون از برنامتون :nerd:
      من می خوام با اومدن هر وقفه مقدار متغییر count اگه بالا رونده باشه از 0 تا مثلا 200 بشماره و اگه پایین رونده باشه از 200 تا صفر بشماره!
      تو کتاب کاهه نوشته بود .جمله دقیق کتا ب اینه :
      تایمر یا کانتر یک در مد pwm به صورت up/down counter کار می کند .تایمر/کانتر یک در زمان up- counter از 0000$ تا top و در زمان down -counter از top تا 0000$ میشمارد.
      این تو قسمت تایمر یا کانتر در حالت pwm کتاب کاهه صفحه 228 هست.

      حالا من می خوام بعد از تشخیص از 0 تا 200 یا از 200 تا صفر بشماره!
      گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
      نماشد... ولی ما هنوز صادق ترینیم

      دیدگاه


        #4
        پاسخ : اتصال شفت انکودر به میکرو!

        خب من فکر می کنم هنوز مفهوم و نحوه عملکرد PWM رو نمی دونی.من به کتاب دسترسی ندارم. ولی تا اونجا که یادمه در مورد PWM یه سری توضیحات با شکل موج داشت. ( یه شکل پلکانی و یه شکل مثلثی) . اگه اونا رو دقیق بررسی کنی حتما منظور از Up-Down Counter رو می فهمی. برای اطلاعات بیشتر تو انجمن سرچ کن.
        اما راجع به چیزی که خواستی باید یه توضیح بدی.
        من هنوز نمی فهمم چرا باید بعد از هر چرخش ، شمارنده 200 تا بشمره( صعودی یا نزولی) .اگه فرض کنیم ( فقط فرض کنیم) که انکدر موجود با 200 پالس یک دور رو نشون میده بنابراین با چرخش اون به میزان یک پالس( در واقع دو تا پالس با تقدم و تاخر ) باید شمارنده 200 تا بشمره. حالا چرا باید همچین اتفاقی بیفته؟ به نظر میرسه که مثلا اگه انکدر 1/4 دور در جهت راستگرد بچرخه باید عدد 50 رو داشته باشیم ، نه اینکه 50 بار از صفر تا 200 بشمره.

        امیدوارم منظورمو خوب بیان کرده باشم.

        دیدگاه


          #5
          پاسخ : اتصال شفت انکودر به میکرو!



          شما که می دونید من یکم زیادی حرفه ایم! :mrgreen:
          بزارید یکم تفکرات کنم رو حرفاتون .الان که خوندم نفهمیدم چی به چی شد :eek:
          گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
          نماشد... ولی ما هنوز صادق ترینیم

          دیدگاه


            #6
            پاسخ : اتصال شفت انکودر به میکرو!

            حالا فهمیدم شاید من نظورمو بد بیان کردم !ببین ما فرض می کنیم انکودر در هر درو 200 پالس تولید کنه .من منظورم این نیست که اگه 100 پالس در هر دور تولید می کنه هم عدد 200 رو نشون بده.تو تولید 100 پالس میکرو به صورت بالا رونده و پایین رونده عدد متناظر به همون پالس تولیدی رو باید نشون بده. من تو دیتا شیتش دیدم هم 100 تایی بود هم 200 تایی!حالا دقیقا همون حرف خودتون !یعنی با توجه به جهت چرخش و تعداد پالس های تولیدی عدد مربوط به اون پالس رو نشون بده!مثلا اگه نصف دور زده باشه پالس 100 رو تولید میکنه و عدد 100 رو میکرو نشون بده!درسته؟حالا اگه اینجا دقیقا جهت چرخش عوض شه میکرو باید به صورت پایین رونده عدد مربوط به هر پالسو نشون بده!من تا اونجایی که فهمیدم منظور این بود حالا اگه تو تعریف برنامه مشکلی هست بگید تا به طرف بگم!وای خودم هم گیج زدم!
            شما درست می گید من مفهوم pwm رو دقیق مطالعه نکردم احتمالا اشتباه متوجه شدم ولی منظوره کلی اینه!
            گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
            نماشد... ولی ما هنوز صادق ترینیم

            دیدگاه


              #7
              پاسخ : اتصال شفت انکودر به میکرو!

              برنامه ای که اون بالا گذاشتم دقیقا همین کارو می کنه.
              به ازای هر پالس وارد شده در جهت CW یکی به مقدار Count اضافه میشه و برای هر چرخش در حهت CCW یکی از Count کم میشه.
              نهایتا اگه 100 تا پالس راستگرد بره و بعد 40 تا چپگرد برگرده باید عدد 60 رو نشون بده که همین طور هم هست.

              دیدگاه


                #8
                پاسخ : اتصال شفت انکودر به میکرو!

                پس اصلا نیازی به کانتر نداره!

                خوب این که خیلی برنامش راحت شد!فکر کنم سر کارم یکم:mrgreen:

                ممنون از برنامتون من اگه اشکال داشتم بازم همین جا مطرح می کنم! :nerd:
                گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                نماشد... ولی ما هنوز صادق ترینیم

                دیدگاه


                  #9
                  پاسخ : اتصال شفت انکودر به میکرو!

                  سلام .............

                  در لینک زیر در مورد PWM بحث شده. شاید به کارتون اومد . موفق باشید .

                  http://www.eca.ir/forum2/index.php?topic=5671.60
                  دوستان! مدتی کمتر به سایت میام ..

                  دیدگاه


                    #10
                    پاسخ : اتصال شفت انکودر به میکرو!

                    یه سوال:

                    شما گفتید که:به ازای هر پالس وارد شده در جهت CW یکی به مقدار Count اضافه میشه و برای هر چرخش در حهت CCW یکی از Count کم میشه.نهایتا اگه 100 تا پالس راستگرد بره و بعد 40 تا چپگرد برگرده باید عدد 60 رو نشون بده که همین طور هم هست.

                    حالا اگه شفت 100 پالسه باشه و یک دورو نیم بزنه count عدد 150 رو نشون می ده بعد اگه 40 تا چپ گرد بره می شه 110 در صورتی که باید 10رو شون بده!

                    نباید شرط دیگه اون پایین بزاریم که اگه از 100 بیشتر شد count رو صفر کنه و اگه به صفر رسید count رو صد کنه!
                    گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                    نماشد... ولی ما هنوز صادق ترینیم

                    دیدگاه


                      #11
                      پاسخ : اتصال شفت انکودر به میکرو!

                      درسته. این برنامه کامل نیست. اگه می خوای کاملتر بشه باید یه دستور IF هم براش بذاری.
                      مسلما وقتی یه دور کامل زد باید مقدار Count صفر بشه. یا اگه به اندازه یک پالس در جهت مخالف چرخید باید 100 بشه.
                      نوشتن برنامش با خودت.
                      مشکلی بود مطرح کن.

                      دیدگاه


                        #12
                        پاسخ : اتصال شفت انکودر به میکرو!

                        سلام
                        یه سوال دیگه!

                        من می خوام یک کلاک به یک پورت بدم .بعد توی هر دو تا دوره تناوب این کلاک بیاد مقدار صفر و یک هاشو با هم جمع و تقسیم کنه .اگه مخالف 0.5 بود یه پورت دیگه رو ست کنه!چه طوری باید مقدار های قیلی پورت رو ذخیره کنم ؟آرایه !!!
                        این برنامه قبلی یه مشکل داره و اینه که اگه پایه ای که خروجی b انکودر بهش وصل شده به هر دلیل قطع بشه جهت چرخش گم می شه.مثلا اگه پایه b یک باشه ،شفت ccw می شه حالا اگه این پایه قطع بشه میکرو فکر می کنه پایه b صفر شده و دستور چرخش cw رو می ده!من گفتم اگه بیام تو هر دو تا دوره تناوب 0 و 1 هاشو با هم چمع کنیمو تقسیم بر 4 کنیم اگه مساوی 0.5 باشه که درست کار می کنه و اگه مخالف 0.5 باشه بعنی جایی خرابی داریم که پالس b رو نمی گیره و همش صفر یا همش یک نشون می ده !
                        یه روش دیگه هم اینه که سیگنال hand shaking براش در نظر بگیریم اگه در این مورد چیزی به ذهنتون می رسه یکم برام توضیح بدیدممنون می شم!
                        گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                        نماشد... ولی ما هنوز صادق ترینیم

                        دیدگاه


                          #13
                          پاسخ : اتصال شفت انکودر به میکرو!

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

                          راستی اون دستور بیسکام که گفته بودم اسمش اینه: Encoder
                          تو Help یه نگاه بنداز. البته به صورت وقفه نیست .

                          دیدگاه


                            #14
                            پاسخ : اتصال شفت انکودر به میکرو!

                            با سلام
                            دوست عزیز من قبلا یک توضیح مختصری در اینجا داده بودم شاید مفید باشه.
                            http://www.eca.ir/forum2/index.php?topic=15858
                            http://www.eca.ir/forum2/index.php?topic=13543
                            من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

                            دیدگاه


                              #15
                              پاسخ : اتصال شفت انکودر به میکرو!

                              سلام بر همه دوستان.
                              من تا به حال چند پروژه با انکدر انجام دادم. و به این نتیجه رسیدم برای استفاده مطمئن از انکدر یا باید به صورت سخت افزاری از آی سی کانتر یا FPGA و ... استفاده کرد و یا از کانتر میکرو. زیرا همه شیوه های نرم افزاری در دور های بالای انکدر ( فرکانس زیاد ورودی) و همچنین در مدت زمان زیاد دچار خطا میشوند.

                              دیدگاه

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