رمز گشایی پالس های انکودر

مقدمه:

برای رمز گشایی پالس های یک انکودر(quadrature encoder)  می توان از آی سی های  آماده برای این منظور استفاده کرد، این آی سی ها خروجی انکودر افزایشی را به یک پالس قابل شمارش و یک خروجی برای تعیین جهت تبدیل می کنند. در این مقاله الگوریتمی ارائه خواهد شد که بر اساس آن می توان به جای استفاده از این آی سی ها به طور مستقیم با استفاده از یک میکروکنترلر رمزگشایی پالس ها را انجام داد که این تکنیک باعث افزایش انعطاف پذیری و کاهش قیمت می شود.

انکودر quadrature:

این گونه از انکودرها معمولا شامل چهار سیم می باشند به طوری که دو سیم از آنها مربوط به تغذیه انکودر یعنی Vcc و GND بوده و دوتای دیگر پالس هایی تولید می کنند که ۹۰ درجه با یکدیگر اختلاف فاز داشته و با رمزگشایی این پالس ها می­ توان جهت چرخش، موقعیت، سرعت و حتی شتاب شفت موتوری که به آن متصل می باشد را تعیین کرد. در شکل زیر شکل موج این دو پالس آورده شده است(به اختلاف فاز ۹۰ درجه بین پالس های A و B دقت کنید).

quadrature-encoder-pulse

شکل(۱): شکل موج خروجی یک انکودر افزایش

فرکانس هر یک از این پالس ها به سرعت موتور بستگی دارد، به طور مثال در یک موتوری که دارای انکودری  می باشد که هر یک از خروجی هایش در هر دور ۶۰۰ پالس تولید می کنند، چنانچه این موتور با سرعت ۱۰۰rpm  در حال چرخش باشد فرکانس هر یک از پالس ها به صورت زیر قابل محاسبه می باشد:

frequency

بنابراین فرکانس هر یک از خروجی ها ۱۰۰۰ هرتز می باشد.

رمز گشایی پالس های انکودر با استفاده از آی سی LS7184:

به صورت شماتیک زیر با استفاده از آی سی LS7184 که یکی از آی سی های آماده برای رمزگشایی پالس های انکودر می باشد و یک میکروکنترلر(برد Adruino) می توان پالس های فوق را به دو خروجی Clock و Direction تبدیل کرد.  خروجی های Clock و   Direction به برد Adruino متصل شده اند. از روی این دو خروجی می توان موقعیت و جهت موتور را بدست آورد.

quad-encoder-schematic

شکل(۲)

می توان پالس های یک انکودر را با دقتی برابر با دقت نامی آن و یا با دقت دو برابر و  یا حتی چهار برابر شمرد که در این آی سی این امکان با استفاده از پایه Mode میسر می باشد بدین صورت که با اتصال آن به GND (پایه Vss)دقت همان دقت نامی می باشد(با اتصال این پایه به پایه Vdd دقت دوبرابر و در صورت رها گذاشتن این پایه دقت چهار برابر خواهد شد).  همان طور که در شکل۲ مشخص است پایه Mode به زمین وصل شده است بنابراین پایه   Clock دارای شکل موجی مشابه هر یک از ورودی های A و B و با همان فرکانس می باشد.

عملکرد پایه Direction به دین صورت است که در حالت حرکت  موتور در جهت مستقیم در سطح یک قرار داشته و با تغیر جهت، حالت آن به صفر انتقال می یابد. می توان با استفاده از حالت پایه Direction و پالس تولید شده در پایه Clock موقعیت و جهت حرکت موتور را در هر لحظه محاسبه کرد.  یکی از کارایی های انکودر quadrature علاوه بر امکان تشخیص جهت و تعیین موقعت؛ محاسبه سرعت و شتاب موتور با استفاده از همان اختلاف فاز موجود بین پالس های A و  B می باشد که  با استفاده از این گونه آی سی ها علاوه بر افزایش قیمت  این دو قابلیت را از دست می دهیم.

رمز گشایی پالس های انکودر با استفاده از میکروکنترلر

یک راه ساده برای شمارش، اتصال کانال A  به یک پایه کانتر در میکرو می باشد، اما این روش هیچ گونه اطلاعاتی درباره جهت موتور نمی دهد، به عبارتی با تغییر جهت موتور چون فقط داریم از یک کانال استفاده می کنیم بنابراین از اختلاف فاز دوکانال خبر نداریم و نمی توانیم جهت را تشخیص دهیم. پیش تر گفتیم که کانال های A و B  به میزان ۹۰ درجه با یکدیگر اختلاف فاز دارند حال برای درک بیشتر موضوع  خروجی شکل موج کانال­ها را در هر دوره تناوب به صورت شکل زیر به چهار   قسمت تقسیم می­کنیم.

pulse-quadrature encoder

شکل(۳)

اگر خروجی دو کانال را از چپ به راست در نظر بگیریم در اولین قسمت از اولین دوره تناوب، کانال های A و B در حالت صفر قرار دارند که این وضعیت را با {۰ ۰} نشان داده ایم. در دومین قسمت از اولین دوره تناوب، کانال A در حالت یک و کانال B در حالت صفر قرار دارد که این وضعیت را با {۰ ۱} نشان داده ایم در… اگر در حالت چرخش در جهت مستقیم خروجی کانال ها مشابه شکل۴ از چپ به راست و در حالت چرخش در جهت برعکس از راست به چپ باشند مشاهده می کنیم که وضعیت­ها در دو حالت چرخش در جهت مستقیم و برعکس مطابق دیاگرام زیر تکرار می شوند.

direction

شکل(۴)

الف)رمز گشایی با دقت یک برابر(دقت مندرج در انکودر)

 حال حالتی را در نظر بگیرید که کانال A را به یکی از وقفه های خارجی میکرو و کانال B  را به یکی از پایه های I/O میکرو متصل کنیم. اگر فراخوانی وقفه را به آمدن لبه بالارونده یا پایین رونده تنظیم کنیم و همزمان نیز در داخل تابع وقفه وضعیت کانال B را چک کنیم می توانیم کانال A را با دقت یک برابر بشماریم.

روش شمارش به این صورت می باشد که با آمدن هر لبه بالا رونده پالس کانال A  به داخل تابع وقفه   آن می رویم حال اگر وضعیت کانال های A  و B را در درون تابع وقفه چک کنیم در صورت داشتن وضعیت مخالف({۱ ۰}  و یا {۰ ۱}) چرخش در جهت مستقیم بوده و در صورت داشتن وضعیت مشابه({۰ ۰} و یا {۱ ۱}) چرخش در جهت معکوس می باشد.

ب)رمزگشایی با دقت دوبرابر

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

در این حالت دو تا از وقفه های خارجی را فعال می کنیم که یکی از آنها باید حساس به لبه بالارونده و دیگری حساس به لبه پایین رونده تنظیم گردند. کانال A را به هردوی این وقفه ها  و کانال B را به یکی از پایه های I/O میکرو متصل می نماییم. با آمدن هر لبه بالا رونده  پالس کانال A به داخل تابع وقفه مربوطه رفته و وضعیت کانال B را بررسی می نماییم، در صورت داشتن وضعیت مخالف چرخش در جهت مستقیم و در صورت داشتن وضعیت مشابه چرخش در جهت برعکس خواهد بود.

هم چنین با آمدن هر لبه پایین رونده پالس کانال A نیز در صورت داشتن وضعیت مخالف چرخش در جهت مستقیم و در صورت داشتن وضعیت مشابه چرخش در جهت برعکس خواهد بود. در روش رمز گشایی با دقت دوبرابر  به عنوان مثال انکودری که رزولوشن آن ۵۰۰ پالس در هر دور می باشد را می تواند با دقت دو برابر یعنی ۱۰۰۰ پالس در هر دور شمرد.

ج)رمز گشایی با دقت چهار برابر

در صورت اتصال کانال A به دوتا از وقفه های خارجی میکرو و هم چنین اتصال کانالB نیز به دوتا از وقفه های خرجی میکرو و استفاده از لبه های پایین رونده  و بالا رونده در هر یک از کانال ها می توان دقت شمارش را به چهار برابر افزایش داد.

شاید این مطالب را هم دوست داشته باشید

30 پاسخ

  1. رضا می‌گه:

    سلام خسته نباشید
    چگونه میتوان از دو پورت ورودی. پالس های مربعی pwm بشمارد//پالس a یک پورت وپالسb یک پورت دیگر وهر گاه a جلوتر از b بود مدار صعودی بشمارد واگر عکس این بود نزولی بشمارد***ممنون میشم کمکم کنید لطفا اگر امکان دارد جواب را برام ایمیل کنید ممنون

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

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

  2. hosein می‌گه:

    با عرض سلام خدمت شما
    مطلبتون خیلی خوب بود و خیلی کمکم کرد.
    ممنون از زحماتتون

  3. عباس می‌گه:

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

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

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

      • yhyrmz می‌گه:

        سلام
        منظورت از مدار های محافظ برای پایه اینت چیه؟

        • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

          با سلام
          پالس هایی که از طرف انکودر به پایه اینتراپت اعمال میشه دارای نویزهای فرکانس بالا هستش که میتونه باعث ایجاد اختلال در شمارش بشه و هم به مدار ورودی پایه اینتراپت صدمه بزنه. به منظور حذف این نویزها لازمه که از یک فیلتر پایین گذر با پهنای باند مناسب استفاده استفاده بشه. یکی از فیلترهای پایین گذر مناسب و ساده فیلتر پایین گذر RC هستش و بایستی در مسیر اعمال سیگنال انکودر به پایه اینتراپت قرار بگیره. هم چنین استفاده از یک دیود زنر بعد از فیلتر نیز پیشنهاد میشه. به عنوان مثال اگه از میکرو ATmega8 استفاده می کنین میتونین از یک زنر ۵٫۱ ولت که بعد از مدار فیلتر قرار می گیره استفاده کنین تا در صورتی که سطح ولتاژ بیشتر از ۵ ولت بشه از پایه اینتراپت محافظت کنه.
          جهت بدست آوردن مقادیر پارامترهای فیلتر RC میتونین به لینک زیر مراجعه کنین:
          http://sim.okawa-denshi.jp/en/PWMtool.php
          در طراحی فیلتر حتما دقت کنین که فرکانس قطع فیلترتون دو تا سه برابر بیشترین فرکانس پالس انکودر باشه.
          با تشکر
          تیم فنی مهندسی ربات سازان

  4. محمد قاسمی می‌گه:

    ضمن عرض سلام و تشکر از مطالب خوبتون
    نحوه خوندن انکدرهای مطلق ۱۰ بیت را در صورت امکان بفرمایید به چه شکلی هستش؟

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

      با سلام
      به طور کلی انکودرهای به دو دسته مطلق و افزایشی تقسیم میشن:
      ۱-توی انکودر افزایشی موقعیت و جهت چرخش از روی دو پالس با اختلاف فاز ۹۰ درجه تشخیص داده میشه که با قطع تغذیه انکودر موقعیت را از دست میدیم.
      ۲- توی انکودر مطلق موقعیت و جهت چرخش بر اساس یک سری کدهای باینری ۴ تا ۱۶ بیتی بدست میاد. این کدها به وسیله یک دیسک که بر روی اون حلقه های مشکی و سفید با نظم خاصی قرار گرفتند تولید میشه. تعداد بیت بیان کننده رزولوشن انکودره. خوبی انکودر مطلق اینه که با قطع برق موقعیت رو از دست نمی دین.
      از اونجایی که انکودر مطلق شما ۱۰ بیتی هستش بنابراین میتونین با دقت ۰٫۳۵۱۵ درجه موقعیت رو داشته باشین. برای تشخیص موقعیت انکودر یک عدد ۱۰ بیتی در اختیار شما قرار میده به طوری که عدد ۱۱۱۱۱۱۱۱۱۱ باینری معادل موقعیت بین ۰ تا ۰٫۳۵۱۵ درجه، عدد ۱۱۱۱۱۱۱۱۱۰ باینری معادل موقعیت بین ۰٫۳۵۱۵ تا ۰٫۷۰۳۱، … و در نهایت عدد ۰۰۰۰۰۰۰۰۰۰ معادل موقعیت ۳۵۹٫۶۴۸۴ تا ۳۶۰ درجه خواهد بود.

  5. سارا می‌گه:

    سلام و خسته نباشید
    ببخشید فرکانس پالس انکودر رو چطوری میتونم به دست بیارم؟

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

      سلام
      واسه اینکار سه روش زیر وجود داره:
      ۱- اگه موتورتون سرعتش پاییه بیاین به صورت دستی زمان تعداد دور مشخصی رو محاسبه کنین(به صورت چشمی!). به عنوان مثال اگه شما یه انکودر ۱۰۰ پالس و یه موتور با نسبت گیربکس ۱ به ۹ داشته باشین و در مدت زمان ۲۰ ثانیه ۱۰۰ دور زده باشه، پس تو یک ثانیه ۵ دور میزنه و این یعنی شفت اصلی موتور(اون طرف گیربکس) که به انکودر وصله ۴۵ دور زده(۵*۹). چون انکودرتون ۱۰۰ پالسه پس شما تو یک ثانیه ۴۵۰۰ پالس(۴۵*۱۰۰) دریافت می کنین و این یعنی اینکه فرکانس پالس انکوردتون ۴٫۵ کیلوهرتز هستش.
      ۲- روش دوم اینه که بیاین با تاکومتر سرعت شفت خروجی موتور رو محاسبه کنین و با انجام محاسباتی مشابه بالا میتونین فرکانس پالس انکودر رو بدست بیارین.
      ۳- روش سوم اینکه که پالس انکودر رو به پایه اینتراپت یه پردازنده(میکروکنترلر و یا بردهای آردوینو و …) وصل کنین و با استفاده از واحد تایمر فرکانس رو بدست بیارین.

      • سارا می‌گه:

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

  6. علی می‌گه:

    سلام و خسته نباشید
    معذرت میخام انکودر من مدل E50S8-2500-6-L-5 هست.و خروجی LINE DRIVER هست. میخاستم بپرسم چطوری باید راه اندازیش کنم؟

  7. محسن می‌گه:

    سلام جناب مهندس ي سوال داشتم،بايد توضيح كامل بدم،اين شماره تماسمه ممنون ميشه راهنماييم بفرماييد
    ۰۹۰۳۰۴۶۵۵۴۰

  8. hadi می‌گه:

    من آی سی ۷۱۸۴ توی بازار (جمهوری) پیدا نکردم میشه یکی راهنمایی کنه از کجا دقیقا میتونم تهیه کنم و آیا آی سی جایگزین داره؟

  9. بابک می‌گه:

    لطف میکنید بفرمایید IC 7184 رو از کجا میتونم تهیه کنم . جمهوری رو زیر و رو کردم ولی این آی سی رو پیدا نکردم.

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

      با سلام
      سايت پايا الکترونيک قبلا داشت ولي فعلا موجود نداره. اگه با ميکروهاي STM32 کار کرده باشين واحد تايمرشون قابليت شمارش پالس انکودر رو داره اگرم تعداد بالا ميخواين ميتونين با شرکت تماس بگيرين که براتون وارد کنيم.
      با تشکر
      تيم فني مهندسي ربات سازان

  10. بابک می‌گه:

    آیا مداری موجود دارید که دور اینکدرهای با پالس مثبت و منفی رو بخونه و نویز نگیره. +A , A- , B- , B+ .

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

      سلام
      یه روش استفاده از میکروی STM32F031F4P6 هست. به این صورت که تایمر۲ و تایمر۳ رو روی مد Combined Channels تنظیم کنین و پالس های مثبت انکودر رو به تایمر۲ و پالس های منفی انکودر رو به تایمر۳ اعمال کنین(یا برعکس).
      با تشکر
      تیم فنی مهندسی ربات سازان

  11. فاطمه می‌گه:

    سلام اینکه یکی از پالس های A یا B انکدر رو به ی فلیپ فلاپ تاخیری میدن بعد خروجیه فلیپ فلاپ رو ب میکرو میدن به چه منظوریه؟

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

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

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

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

  12. مجید می‌گه:

    با سلام خدمت مهندس پوردهوندی بنده یک انکودر با اسم E50S8-5000-3-N-24در اختیار دارم من میخواستم با استفاده از برد Pci1710u واستفاده از قسمت سیمولینک نرم افزار متلب زاویه رو با این انکودر حساب کنم اما نتونستم این کار رو کنم و با مطلب شما مواجه شدم لازم به ذکره بنده با آردیونو و یه برنامه ای که روی آردیونو آپلود کردم تونستم این کارو بکنم اما به دلیل سرعت پایین آردیونو و رزولوشون بالای انکودر اکثر پالس ها از دست میرفت و دقت نامناسبی در زاویه ی نمایش داده شده داشتیم میخواستم بدنم میتونم با این روش اینکارو انجام بدم یا نه؟؟

    لطفا در مورد پایه ی clock آی سی LS7184 هم یکم بیشتر توضیح بدید

    با تشکر

  13. mostsfs می‌گه:

    سلام
    کسی پالس اینکورقیمت پایین سراغ داره

  14. Saeid می‌گه:

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

  15. Saeid می‌گه:

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

    • محمود حسن پور دهنوی محمود حسن پور دهنوی می‌گه:

      سلام
      انکودرتون از چه نوعی هست؟ تک پالسه یا کوادریچر(دو یا سه خروجی پالس)؟ اگه انکودرتون تک پالس باشه میتونین به راحتی با اتصال خروجی پالسش به ورودی یکی از تایمرهای آردوینو یا اینترایپ هاش پالس ها رو شمارش کنین. ولی اگه پالسهاش کوادریچر هست دو راه حل دارین: ۱- از یه آی سی شمارش پالس استفاده کنین و خروجی آی سی رو به آردوینو وصل کنین ۲- اگه برد آردوینوتون از نوع آرم هست به راحتی با اتصال مستقسیم پالس های انکودر به واحد شمارش انکودر در آردوینو میتونین پالسها رو شمارش کنین ۳- اگه برد آردوینوتو AVR هست میتونین یکی از پالسهای انکودر رو به اینتراپت و اون یکی شو به ورودیهای دیجیتال وصل کنین و با یه سری تکنیکهای نرم افزاری پالس ها رو شمارش کنین. اگه جایی ابهام داشتین بفرمایین بیشتر راهنمایی کنیم.
      با تشکر

  16. amin_teh می‌گه:

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

  17. amin_teh می‌گه:

    یک از دوستان لطف کنه بگه چطوری عکس بزارم

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

CLOSE
CLOSE