اطلاعیه

Collapse
No announcement yet.

ارتباط atmega با encoder

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

    ارتباط atmega با encoder

    میخواستم بدونم پالسهای ایجاد شده توسط encoder که بر شفت موتور dcسوار شده را atmega 32یا atmega 16 میتونه بشماره؟
    ویا نیاز به یک مدار شمارشکر است .

    #2
    پاسخ : ارتباط atmega با encoder

    بسته به فرکانس خروجی (سرعت چرخش x دقت انکودر) انکودر داره. تو فرکانسهای پایین(زیر 100 کیلوهرتز) براحتی میشه با پایه های INT0 و INT1 انکودر راخواند. ایند پایه را روی اینتراپت any change تنظیم کنید و روتینهای اینتراپت آنرا بصورت زیر ینویسید:

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    if (ENC_A==ENC_B) ENC--; else ENC++;
    }

    // External Interrupt 1 service routine
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    if (ENC_A==ENC_B) ENC++; else ENC--;
    }

    متغیر ENCآ‌ همان مقدار انکودر است که بسته به بزرگی عدد مورد نیاز می تواند int یا long int تعریف شود. ENC_A و ENC_B هم همان پایه های اینتراپت INT0آ‌ و INT1 هستند که بسته به میکرو باید PINx.y تعریف شوند.
    دقت کنید در این حالت دقت شفت انکودر شما 4 برابر می شود. مثلا اگر انکودر 360 پالس داشته باشید به ازای هر دور چرخش متغیر ENC مقدار 1440 تا کم یا زیاد می شود.

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

    روش دیگر استفاده از میکروهای dsPic است که ورودی شفت انکودر هم دارند.

    اگر نمی خواهید میکروی خودتان را تغییری دهید و به AVR عادت کردید می توانید از CPLDآ‌ های موجود بازار استفاده کنید و خودتان یک چیپ انکودر طراحی کنید:

    www.atmel.com/dyn/resources/prod_documents/DOC3037.PDF

    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

    دیدگاه

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