اطلاعیه

Collapse
No announcement yet.

استفاده از کانتر و ماژول QEI یا Quadrature_Encoder_Interface

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

    استفاده از کانتر و ماژول QEI یا Quadrature_Encoder_Interface

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

    #2
    پاسخ : استفاده از کانتر

    سلام
    در مورد شمارنده های PIC خیلی اطلاعات ندارم که خودشون میتونند کاهشی بشمارند یا نه اما یه راهکار ساده استفاده همزمان از دو کانتر هست که یکی در حالت افزایشی(فعال بودن بیت ) و یکی در حالت کاهشی شمارش انجام بده و در هر لحظه تفاضل مقدار دوکانتر به عنوان مقدار نهایی مورد استفاده قرار بگیره

    دیدگاه


      #3
      پاسخ : استفاده از کانتر

      نوشته اصلی توسط akamseda
      سلام
      در مورد شمارنده های PIC خیلی اطلاعات ندارم که خودشون میتونند کاهشی بشمارند یا نه اما یه راهکار ساده استفاده همزمان از دو کانتر هست که یکی در حالت افزایشی(فعال بودن بیت ) و یکی در حالت کاهشی شمارش انجام بده و در هر لحظه تفاضل مقدار دوکانتر به عنوان مقدار نهایی مورد استفاده قرار بگیره
      تشکر از جوابی که دادید
      من تفاضل کانتر رو نمیخوام، فقط میخوام کانتر به این صورت عمل کنه، پالس دوم همیشه باید چک بشه اگه یک بود تعداد پالسهای ورودی رو به صورت افزایشی بشمره مثلا پالس دوم یک هست کانتر تعداد پالسهای ورودی رو میشمره و به مثلا به 1200 برسه به محض اینکه پالس دوم صفر شد این بار از 1200 به صورت کاهشی بشمارد

      (یک سوال مبتدیانه: کانتر چگونه به صورت کاهشی میتواند بشمارد) :eek:

      دیدگاه


        #4
        پاسخ : استفاده از کانتر

        سلام
        ببخشید من فکر کردم برای avr می خواهید اما به هرحال نظر می دم شاید بتونه به راهنما خوبی باشه:
        1- اگر جابجایی نسبی برات مهمه (یعنی جایی که الان هست مثلا نسبت به مبدا):
        توی سر ریز مقدار یه پین(همون ورودی دوم پالس ) رو چک کن و با توجه به اون بشمار یعنی: (برای avr احتمالا برای شما هم حدودا همینجوری باشه!)
        کد:
        ISR(){
        if(PORTA==0x01){
        counter++;
        }
        else:
        counter--;
        }
        که متغییر کانتر همون شمارنده هست و پالس دوم به a0 میکرو وصل شده
        2-اگر جابجایی مطلق برات مهم هست (یعنی مثلا اگه شفت جلو رفت و برگشت میزان مسیر کل رفت + برگشت رو می خوای) نیازی نیست و همینجوری مقدار افزایشی رو می خونی

        دیدگاه


          #5
          پاسخ : استفاده از کانتر

          کار سختی نیست . اگر لزومی نداره اصلا نمی خواد از کانتر هم استفاده کنی.
          خروجی سنسور رو بدین به دو پایه از میکرو . همین .
          بعد روال برنامه رو هم اینطور بنویسید:
          1- منتظر ماندن برای تغییر وضعیت پین 1 یا 2
          2- اگر پین 1 تغییر وضعیت داد----> منتظر ماندن برای تغییر وضعیت پین 2------> اگر تغییر وضعیت داد افزایش متغیر
          3- اگر پین 2 تغییر وضعیت داد----> منتظر ماندن برای تغییر وضعیت پین 1------> اگر تغییر وضعیت داد کاهش متغیر
          برنامه اش هم اینطور میشه(برای picc):
          کد:
          while(1)
          {
            if(input(pin_b0))
            {
             while(1)
             {
               if(input(pin_b1))
               {
                variable++;
               }
             }
            }
            if(input(pin_b1))
            {
             while(1)
             {
               if(input(pin_b0))
               {
                variable--;
               }
             }
            }
          }
          البته این کد ها ضعف داره که بستگی به نیاز شما باید خودتون تغییرش بدید.
          موفق باشید
          دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

          دیدگاه


            #6
            پاسخ : استفاده از کانتر

            سلام دوست عزیز جناب yadegari

            شفت انکدر عملکردش دقیقا مشابه ولوم هرزگرد هست.(جهت چرخش که100% عین همینه-تعداد چرخش هم قابل اضافه شدن با 2-3 خط کد)
            شما به همین لینک یه بار دیگه عمیقاً یه نگاه بنداز و اندکی روش فکر کن :nerd:

            http://www.eca.ir/forum2/index.php?topic=77568.0

            نوشته اصلی توسط yadegari
            (یک سوال مبتدیانه: کانتر چگونه به صورت کاهشی میتواند بشمارد) :eek:
            اونطوری که میدونم کانتر به شکل سخت افزاری،مد کاهشی نداره.میتونین تو برنامه تغییرش بدین.

            دیدگاه


              #7
              پاسخ : استفاده از کانتر

              نوشته اصلی توسط شاهرخ
              سلام دوست عزیز جناب yadegari

              شفت انکدر عملکردش دقیقا مشابه ولوم هرزگرد هست.(جهت چرخش که100% عین همینه-تعداد چرخش هم قابل اضافه شدن با 2-3 خط کد)
              شما به همین لینک یه بار دیگه عمیقاً یه نگاه بنداز و اندکی روش فکر کن :nerd:

              http://www.eca.ir/forum2/index.php?topic=77568.0
              اونطوری که میدونم کانتر به شکل سخت افزاری،مد کاهشی نداره.میتونین تو برنامه تغییرش بدین.
              سلام مهندس شاهرخ
              چند تا سوال داشتم
              1-دلیل استفاده از مقاومت پول پ در مدارات میکرو چیست؟
              2-من از خروجی شفت انکدر استفاده میکنم، آیا باید اون رو به مقاومت پول پ به vcc و خازن به زمین وصل کنم و این کار مشکلی برای شفت انکدر به وجود نمی آورد؟
              من از شفت انکدر autonics rotary encoder model: E50S8-6-L-5 استفاده میکنم که دیتاشیتش رو اینجا میزارم
              http://s4.picofile.com/file/7792880856/1599245.pdf.html
              من از خروجی A,B استفاده میکنم،آیا باید به مقاومت پول پ و خازن وصل بشه

              دیدگاه


                #8
                پاسخ : استفاده از کانتر

                نوشته اصلی توسط yadegari
                سلام مهندس شاهرخ
                چند تا سوال داشتم
                1-دلیل استفاده از مقاومت پول پ در مدارات میکرو چیست؟
                2-من از خروجی شفت انکدر استفاده میکنم، آیا باید اون رو به مقاومت پول پ به vcc و خازن به زمین وصل کنم و این کار مشکلی برای شفت انکدر به وجود نمی آورد؟
                من از شفت انکدر autonics rotary encoder model: E50S8-6-L-5 استفاده میکنم که دیتاشیتش رو اینجا میزارم
                http://s4.picofile.com/file/7792880856/1599245.pdf.html
                من از خروجی A,B استفاده میکنم،آیا باید به مقاومت پول پ و خازن وصل بشه
                سلام.
                1-اگه پایه ای ورودی بشه و روی هوا بمونه؛ طبیعتا انتظار داریم که موقع خوندن اون پایه مقدار 0 رو برگردونه، درسته؛ اما چون به جایی وصل نیست احتمال داره ولتاژی که میکرو میخونه بالاتر از سطح 0 و پایین تر از سطح 1 باشه و اشتباهی رخ بده.پس جهت اطمینان، پایه ای که ورودی هست رو Pull up یا Pulldown میکنن.صرفا به خاطر اطمینان از عملکرد صحیح
                2-تو همین فایل دیتاشیت، صفحه دوم بخش Output Waveform سمت چپ یه عکس هست که دقیقا بیانگر عملکردیه که مدنظر من هست.مشابه ولوم هرزگرد.
                شما به کمک فازهای A و B و با روشی که اشاره کردم تو اون تاپیک(دقیقا همون کد و همون سخت افزار برای ورودی اینتراپت و ورودی غیر اینتراپت) میتونین جهت چرخش رو تشخیص بدین.فاز Z هم اگه اشتباه نکنم برای شمارش دفعات چرخش هست که بدین به ورودی شمارنده میکرو(به عنوان مثال ورودی تایمر صفر که میشه پایه A.4)
                شفت انکودر شما اگه پایه ی Z نداره، یه خرده نرم افزارش بیشتر میشه.بدین ترتیب که هر بار پالسهای A و B رو پشت سر هم تشخیص دادین یه متغیر زیاد بشه.(پشت سر هم بودن پالسها اهمیت داره،چون ممکنه شفت یه جا وایسته و برعکس بچرخه-البته به سخت افزارتون هم وابسته هست،ممکنه برعکس نچرخه.)
                شرمنده دیر جواب دادم.
                امیدوارم توضیحات مفید باشه و ایرادی نداشته باشه.

                دیدگاه


                  #9
                  پاسخ : استفاده از کانتر

                  نوشته اصلی توسط شاهرخ
                  1-اگه پایه ای ورودی بشه و روی هوا بمونه؛ طبیعتا انتظار داریم که موقع خوندن اون پایه مقدار 0 رو برگردونه، درسته؛ اما چون به جایی وصل نیست احتمال داره ولتاژی که میکرو میخونه بالاتر از سطح 0 و پایین تر از سطح 1 باشه و اشتباهی رخ بده.پس جهت اطمینان، پایه ای که ورودی هست رو Pull up یا Pulldown میکنن.صرفا به خاطر اطمینان از عملکرد صحیح
                  فرمودید پایه ای که روی هوا بمونه باید پول پ بشه،اما منظور من اینه فاز A که باید به میکرو وصل بشه باید پول پ بشه یا نه؟
                  اما من مشکلم رو در این قسمت مطرح کردم که کسی جواب نداد
                  http://www.eca.ir/forum2/index.php?topic=77874.msg469658#msg469658
                  من از بخش QEI که دو سیگنال A,B با هم اختلاف فاز 90 درجه دارند که این اختلاف فاز جهت حرکت رو نشان میدهند جواب گرفتم،مشکل من این است اگر نوع دیگری از سیگنال خروجی را در نظر بگیریم که یکی جهت حرکت را نشان دهد و دیگری سرعت حرکت را نشان دهد به مشکل خورده ام
                  حال اگر از روش شما استفاده کنم باید هر دو سیگنالی که عرض شد که به میکرو وصل میشود باید با پول پ به میکرو وصل کرد یا نه؟
                  با تشکر

                  دیدگاه


                    #10
                    پاسخ : استفاده از کانتر

                    خب این بستگی به ساختار شفت انکودر داره.
                    البته الان متوجه شدم که یه جا سوتی دادم! شفت انکدر مورد استفاده ی شما تغذیه داره(5ولت) پس نیازی به Pull up یا Pulldown نیست.
                    و یه سوال:
                    شما شفت انکدری که داری چندتا خروجی داره؟
                    چون تو این دیتاشیت مدلهای مختلفی وجود داره...
                    ضمنا تو دیتاشیت صفحه ی اول توی جدول، بخش Control Output رو نگاه دوباره ای بندازین و جریان هایی که نوشته رو بررسی کنین.البته احتیاطا عرض میکنم.چون توی تاپیک نوشتین که تا جاهایی جواب گرفتین.
                    انشاالله راهش میندازیم.... :nerd:

                    دیدگاه


                      #11
                      پاسخ : استفاده از کانتر

                      نوشته اصلی توسط yadegari
                      تشکر از جوابی که دادید
                      من تفاضل کانتر رو نمیخوام، فقط میخوام کانتر به این صورت عمل کنه، پالس دوم همیشه باید چک بشه اگه یک بود تعداد پالسهای ورودی رو به صورت افزایشی بشمره مثلا پالس دوم یک هست کانتر تعداد پالسهای ورودی رو میشمره و به مثلا به 1200 برسه به محض اینکه پالس دوم صفر شد این بار از 1200 به صورت کاهشی بشمارد

                      (یک سوال مبتدیانه: کانتر چگونه به صورت کاهشی میتواند بشمارد) :eek:
                      ظاهرا اصلا متوجه منظورم نشدید یه بار دیگه با دقت جوابم رو بخون همون چیزیه که شما میخای

                      دیدگاه


                        #12
                        پاسخ : استفاده از کانتر

                        نوشته اصلی توسط akamseda
                        ظاهرا اصلا متوجه منظورم نشدید یه بار دیگه با دقت جوابم رو بخون همون چیزیه که شما میخای
                        ببخشید من هنوز منظور شما رو از تفاضل دو کانتر متوجه نمی شوم
                        اما هدف من راه اندازی قسمت QEI میکرو است که دیتاشیت آن را خدمت سروران گرامی قرار میدهم
                        http://s4.picofile.com/file/7794241933/Section_15_Quadrature_Encoder_Interface_QEI_dsPIC3 3F_FRM.pdf.html
                        همانگونه که ملاحظه میکنید بخش QEI یک ماژول Dspic است که به دو صورت کاربرد دارد
                        یکی وظیفه quadrature encoder که من آن را در مد x4 به خوبی جواب گرفتم که برای سیگنالهایی است که به اصطلاح A/B phase گویند
                        قسمت بعد استفاده از این ماژول در مد تایمر کانتر است، این مد برای سیگنالهای به اصطلاح pulse direction میتواند کاربرد داشته باشد
                        سیگنال pulse dirction دو سیگنال است که یکی فقط جهت را نشان میدهد (direction) و دیگری سرعت را نشان میدهد(pulse)
                        حال من از این قسمت در مد کانتر وقتی سیگنال direction صفر است یعنی کانتر باید تعداد پالسهای ورودی از سیگنال pulse را به صورت کاهشی بشمارد خوب جواب میگیرم اما وقتی سیگنال dirction یک میشود و کانتر باید به صورت صعودی بشمارد دچار مشکل میشوم و اعداد به صورت نویزی ( یعنی کم و زیاد،یا پرت و پلا) میشمارد
                        ببخشید که برای رساندن منظور خودم توضیحات اضافه خدمت شما دوستان ارائه دادم
                        با تشکر از توجه شما

                        دیدگاه


                          #13
                          پاسخ : استفاده از کانتر

                          جناب yadegari عزیز... :nerd:
                          آقا من این قسمت رو اشتباه کردم، چون تا حالا از سری dsPIC استفاده نکرده بودم و ماژول QEI رو هم نمیدونستم چجوریاست! این ماژول قابلیت Up/Down Counter رو داره
                          یکی هم اینکه منظورتون رو از:
                          نوشته اصلی توسط yadegari
                          سیگنال pulse dirction دو سیگنال است که یکی فقط جهت را نشان میدهد (direction) و دیگری سرعت را نشان میدهد(pulse)
                          حال من از این قسمت در مد کانتر وقتی سیگنال direction صفر است یعنی کانتر باید تعداد پالسهای ورودی از سیگنال pulse را به صورت کاهشی بشمارد خوب جواب میگیرم اما وقتی سیگنال dirction یک میشود و کانتر باید به صورت صعودی بشمارد دچار مشکل میشوم و اعداد به صورت نویزی ( یعنی کم و زیاد،یا پرت و پلا) میشمارد
                          دقیق متوجه نمیشم.
                          سیگنال direction از کجا میاد؟ واسه همین شفت انکدر هست؟ پس اونموقع سیگنالهای A/B چی میشه؟ و یکی هم اینکه همین سوال رو قبلا پرسیدم:
                          نوشته اصلی توسط شاهرخ
                          و یه سوال:
                          شما شفت انکدری که داری چندتا خروجی داره؟
                          چون تو این دیتاشیت مدلهای مختلفی وجود داره...

                          دیدگاه


                            #14
                            پاسخ : استفاده از کانتر

                            نوشته اصلی توسط شاهرخ
                            جناب yadegari عزیز... :nerd:
                            آقا من این قسمت رو اشتباه کردم، چون تا حالا از سری dsPIC استفاده نکرده بودم و ماژول QEI رو هم نمیدونستم چجوریاست! این ماژول قابلیت Up/Down Counter رو داره
                            یکی هم اینکه منظورتون رو از:دقیق متوجه نمیشم.
                            سیگنال direction از کجا میاد؟ واسه همین شفت انکدر هست؟ پس اونموقع سیگنالهای A/B چی میشه؟ و یکی هم اینکه همین سوال رو قبلا پرسیدم:
                            ببخشید توضیحم یک مقدار گنگ بود، من از خاصیت Up/Down Counter که فرمودید می خواهم استفاده کنم
                            سیگنال pulse direction خروجی این نوع شفت انکدر نیست و خروجی چیز دیگری است.
                            شما فرض کنید وسیله ای دو تا سیگنال که یکی جهت (چپ گرد یا راست گرد) و یکی سرعت( تعداد دور) را نشان میدهد تولید کرده و به QEI این میکرو وصل میشود.
                            میخواهیم تعداد دور را وقتی چپ گرد است به صورت کاهشی و وقتی به صورت راست گرد است به صورت افزایشی بشماریم.
                            QEI در مد Up/Down Counter این قابلیت رو به ما میدهد اما حال اگر نخواهیم از QEI استفاده کنیم و به صورت معمولی از دو تا پایه میکرو بخواهیم استفاده کنیم چه روشی به نظر شما میرسد، به نظر باید از اینتراپت استفاده کرد.
                            من از شفت انکدر در مد A/B phase جواب گرفتم اما در توضیح سوال شما این نوع شفت انکدر شش خروجی دارد که شامل سه فاز A,B,Z به همراه NOT آنها میباشد و به اصطلاح line drive می باشد
                            فاز A,B همان سیگنالهایی است که اطلاع دارید و فاز Z نشان دهنده یک دور کامل می باشد که من استفاده نکردم.
                            حال مشکل من در همان قسمت اول است چون از QEI در مد Up/Down Counter جواب مناسب نمی گیرم میخواهم از روشهای دیگر استفاده کنم
                            ممنون که به این حقیر توجه میکنید
                            با تشکر

                            دیدگاه


                              #15
                              پاسخ : استفاده از کانتر

                              دوست عزیز شما باید تو ماژول QEI از خروجی Z هم استفاده کنین(البته تا جایی که سوادم قد میده!) طبق توضیحات صفحه 2 دیتاشیت QEI.
                              اگه از این ماژول نخاین استفاده بکنین، اون موقع میشه مثل روتاری سوئیچ که یه پایه اینتراپتی و پایه ی دیگه غیر اینتراپتی و ماجرایی که توی تاپیک مربوطه گذاشتم. خروجی Z هم میدی به کانتر میکرو که تعداد دور رو بشماره. یا اینکه به شکل نرم افزاری هر پالس B بعد از A (یا قبل از A ) میشه یه دور کامل و یه افزایش(یا کاهش ) تعداد دور...

                              دیدگاه

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