اطلاعیه

Collapse
No announcement yet.

( quadrature decoder ( QDEC

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

    ( quadrature decoder ( QDEC

    اگر امکان دارد در ( doc8109(QDEC توضیحی درباره موارد زیر دهید :
    1- QDINDX چیست و نبود آن در استفاده از ولوم هرزگرد ممکن است چه مشکلی پیش آورد ؟ (صفحه 4 خصوصا مطلب Index error و Index ok )
    2- در صفحه 5 مبحث Index signal and error states را خواندم ولی دقیقا منظور مبحث فوق درک نکردم خصوصا جدول QDIRM Bit Settings.


    #2
    پاسخ : ( quadrature decoder ( QDEC

    در پروژه طراحی شده از ولوم هرزگرد استفاده کردم تنظیمات را به شکل زیر انجام دادم (البته با استفاده از مثال مهندس کی نژاد ):
    PORTE_PIN6CTRL=PORT_ISC_LEVEL_gc; // QDPH0
    PORTE_PIN7CTRL=PORT_ISC_LEVEL_gc; // QDPH90

    TCC1_PER=11;
    TCC1_CNT=0;
    EVSYS_CH0MUX=EVSYS_CHMUX_PORTE_PIN6_gc;
    EVSYS_CH0CTRL=EVSYS_QDEN_bm|EVSYS_DIGFILT_2SAMPLES _gc;
    TCC1_CTRLD=TC_EVACT_QDEC_gc|TC_EVSEL_CH0_gc;
    TCC1_CTRLA=TC_CLKSEL_DIV1024_gc;




    void check_display(void)
    {
    if((TCC1_CNT%2)==0)
    {
    encode_new_a=TCC1_CNT/2;
    if(encode_new_a != encode_old_a)
    {
    uint8_t temp2;

    if(encode_new_a > encode_old_a)
    {
    if(encode_new_a==5 && encode_old_a==0)
    {
    TCC1_CNT=0;
    encode_new_a=0;
    encode_old_a=1;
    menu_end=true;
    }
    else
    {
    if(highlight_text == 1)
    highlight_text = 2;
    else if (highlight_text == 2)
    highlight_text = 3;
    else
    {
    line_3=encode_new_a;
    temp2=encode_new_a;
    line_2=--temp2;
    line_1=--temp2;
    }
    }
    }
    else
    {
    if(encode_new_a==0 && encode_old_a==5)
    {
    TCC1_CNT=10;
    encode_new_a=5;
    encode_old_a=4;
    menu_end=true;
    }
    else
    {
    if(highlight_text == 3)
    highlight_text = 2;

    else if(highlight_text == 2)
    highlight_text = 1;

    else
    {
    line_1=encode_new_a;
    temp2=encode_new_a;
    line_2=++temp2;
    line_3=++temp2;
    }
    }
    }
    if(!menu_end)
    {
    encode_old_a = encode_new_a;
    line_1run(line_1);
    line_2run(line_2);
    line_3run(line_3);
    scroll_main();
    }
    else menu_end=false;
    }
    }
    }

    در برنامه بالا یک صفحه LCD گرافیکی که 6 منو ( text ) از شماره 1 تا 6 وجود دارد که هر لحظه 3 منو در lcd نمایش داده می شود و در همان لحظه یکی از همین یه منو انتخاب شده ( highlight ) که با چرخش ولوم هر لحظه یک منو highlight شده بصورت یک طرفه از 1 تا 6 و از 6 به 1 در صفحه حرکت میکنند سه تابع ( line_1run ( line_1 در هرلحظه سه خط را روی lcd نمایش می دهند و در متغییر line_1 0 معرف منوی 1و 1 معرف منوی 1و .... 5 معرف منوی 6 می باشد . و با ولوم هرزگرد با راحتی منوها highlight شده ودر صفحه میچرخند.
    و حالا مشکل :
    اگر ولوم را با حدودا 20 پله در ثانیه یا بالاتر حرکت دهم طبق برنامه بالا بسته به جهت چرخش ابتدا یا انتهای منو highlight شده و در همان منوی 1 یا 6 می ماند حالا از این پس اگر ولوم را یک پله عکس چرخش سریع قبلی حرکت دهیم همیشه اولین پله هرز بوده و منو تغییری نمیکند حالا به هر جهت راست یا چپ که باشد یا باید میکرو ریست شود یا ولوم با این سرعت چرخش نکند !
    به نظر شما این اشکال با تغییر در تنظیمات xmega حل می شود یا اشکال نرم افزاری خودم می باشد ؟
    فرکانس CPU=16MHz

    دیدگاه


      #3
      پاسخ : ( quadrature decoder ( QDEC

      QDINDX در هر یک دور چرخش انکودر با عرض محدودی یک میشود و می تواند به عنوان یک مرجع مکانی مورد استفاده قرار بگیرد. در تنظیمات مربوط به QDEC این امکان وجود دارد که با فعال شدن این پالس، مقدار شمارنده بصورت خودکار صفر شود تا صفر شدن آن با این پالس سنکرون باشد. حال اگر مقدار PER انتخاب شده بگونه ای باشد که با دقت انکودر مطابقت نداشته باشد، بعد از یکبار چرخش، وقوع این پالس با صفر شدن تایمر در یک نقطه نخواهد بود و بنابراین شرایط خطای تایمر بوجود خواهد آمد. به عبارت دیگر وقوع این خطا نشان می دهد که مقدار انتخاب شده برای PER با دقت واقعی انکودر هماهنگ نیست. بیت های QDIRM هم با توجه به شکل 4-6 در XMEGA A Manual تعیین کننده این است که کدام یک از چهار وضعیتی که پالس QDINDX در آن فعال می شوند، به عنوان نقطه مرجع و صفر شدن تایمر در نظر گرفته شود.
      در مورد مشکل بوجود آمده و با فرض صحیح فرض کردن روتین های نوشته شده، یک دلیل می تواند خواندن مقدار مستقیم TCC1_CNT در طول روتین باشد و این در حالی است که اگر در بین روتین تغییری در مقدار آن حاصل شود می تواند منجر به خطا شود. به همین دلیل بهتر است در ابتدای روتین یک کپی از این رجیستر را در متغیری قرار دهید و تا انتهای روتین تمام قضاوت ها را بر اساس همان متغیر و نه TCC1_CNT انجام دهید.
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه


        #4
        پاسخ : ( quadrature decoder ( QDEC

        سلام خدمت دوستان
        من یک سوال راجع به بدست آوردن سرعت انکودر با استفاده قابلیت qdec دارم.
        انکودرم از نوع 3 پالس A,B,Z هست. و 500 پالس . حداکثر دور هم 6500 دور بر دقیقه و حدودا 50 کیلوهرتز در ثانیه.
        حالا من می خوام با استفاده از QDEC سرعت چرخش را بدست بیارم.
        خوشحال می شم دوستان، بنده را در این امر راهنمایی کنند.

        با تشکر

        دیدگاه


          #5
          پاسخ : ( quadrature decoder ( QDEC

          با فرض تنظیم صحیح QDEC برای اتصال به انکودر، در فواصل زمانی مشخص مقدار تایمر کانتری را که بصورت سخت افزاری توسط انکودر تغییر داده می شود در برنامه بخوانید و از روی میزان تغییرات در واحد زمان می توانید سرعت حرکت را محاسبه کنید. مثلا اگر در 0.1 ثانیه، مقدار شمارنده 5000 واحد تغییر کرد (با فرض چرخش در یک جهت) نشان دهنده 50000 پالس در یک ثانیه است که از روی آن سرعت معادل هم بر حسب مشخصات مکانیکی سیستم، قابل محاسبه است.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه

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