فهرست مطالب:

نحوه اندازه گیری چرخه فرکانس بالا و وظیفه ، به طور همزمان ، با استفاده از میکروکنترلر: 4 مرحله
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه ، به طور همزمان ، با استفاده از میکروکنترلر: 4 مرحله

تصویری: نحوه اندازه گیری چرخه فرکانس بالا و وظیفه ، به طور همزمان ، با استفاده از میکروکنترلر: 4 مرحله

تصویری: نحوه اندازه گیری چرخه فرکانس بالا و وظیفه ، به طور همزمان ، با استفاده از میکروکنترلر: 4 مرحله
تصویری: حرکات زشت سحر قریشی در باشگاه مردانه در دبی#سحرقریشی #امیرتتلو #تتلو #سحر_قریشی 2024, نوامبر
Anonim
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه همزمان ، با استفاده از میکروکنترلر
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه همزمان ، با استفاده از میکروکنترلر
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه همزمان ، با استفاده از میکروکنترلر
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه همزمان ، با استفاده از میکروکنترلر
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه همزمان ، با استفاده از میکروکنترلر
نحوه اندازه گیری چرخه فرکانس بالا و وظیفه همزمان ، با استفاده از میکروکنترلر

من می دانم که شما چه فکر می کنید: "اوه؟ دستورالعمل های زیادی در مورد نحوه استفاده از میکروکنترلرها برای اندازه گیری فرکانس سیگنال وجود دارد. خمیازه کشیدن." اما منتظر بمانید ، یک مورد جدید در این مورد وجود دارد: من روشی را برای اندازه گیری فرکانس های بسیار بیشتر از آنچه که میکروکنترلر (MCU) می تواند تحمل کند و چرخه عملکرد سیگنال را توصیف می کنم - همه در یک زمان!

محدوده فرکانس دستگاه از 43 هرتز تا 450 کیلوهرتز است ، در حالی که چرخه کار از 1 تا 99 درصد متغیر است.

اجازه دهید قسمت "تحمل می کند" را توضیح دهم: یک MCU با ردیابی زمان بین دو رویداد انتقال بعدی ، یک دوره سیگنال موج مربعی ، T را اندازه گیری می کند. به عنوان مثال ، ولتاژ کم تا زیاد روی یکی از پین های ورودی/خروجی آن می پرد. این کار را با شمارش تعداد نبض های ساعت داخلی خود انجام می دهد. ساده اندیشی ، حد بالایی برای فرکانس های اندازه گیری شده باید از قضیه نمونه گیری نیکویست-شانون اطاعت کند. یعنی تقریباً با نیمی از فرکانس ساعت MCU برابر است. در واقع محدودیت بسیار بسیار کمتر است ، زیرا MCU باید کد را برای مدیریت وقفه ها ، ذخیره متغیرها ، انجام عملیات حساب ، نمایش نتایج و غیره اجرا کند. در آزمایشات من با MCU 48 مگاهرتز حداقل تعداد چرخه ساعت بین انتقال های قابل اندازه گیری بود. حدود 106. بنابراین ، حد بالایی محدوده فرکانس قابل اندازه گیری در این مورد 48 ، 000 /212 /2 = 226.4 کیلوهرتز خواهد بود.

در حالی که MCU دوره سیگنال را اندازه گیری می کند ، می تواند عرض نبض آن را نیز تعیین کند ، P: زمان ولتاژ سیگنال بالا باقی می ماند. به عبارت دیگر ، زمان بین انتقالهای کم به زیاد و زیاد به کم. سپس چرخه وظیفه سیگنال به عنوان درصد زیر تعریف می شود:

وظیفه = 100٪ * P / T

درست مانند فرکانس ، محدودیت عملی در عرض پالس وجود دارد. با استفاده از مثال بالا ، 106 چرخه ساعت عرض پالس را به کمتر از 2.21 میکروثانیه محدود نمی کند. یا ، کمتر از 50 at در 226.4 کیلوهرتز.

یکی از راههای افزایش حد فرکانس بالای سیگنالهای موج مربع ، استفاده از تقسیم کننده های دیجیتالی است که از فلیپ فلاپ استفاده می کند. تقسیم فرکانس ورودی بر n ، محدوده بالایی قابل اندازه گیری را n برابر می کند. این یک خبر عالی است ، تقسیم کننده های دیجیتال دارای یک نقص اساسی هستند: سیگنال تقسیم شده اطلاعات پالس (و چرخه وظیفه) را از دست می دهد! به دلیل نحوه عملکرد تقسیم کننده ها ، خروجی آنها همیشه 50 درصد چرخه وظیفه دارد. آزاردهنده…

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

مرحله 1: بخش فرکانس دیجیتال

بخش فرکانس دیجیتال
بخش فرکانس دیجیتال
بخش فرکانس دیجیتال
بخش فرکانس دیجیتال
بخش فرکانس دیجیتال
بخش فرکانس دیجیتال

تقسیم کننده های فرکانس دیجیتال سنتی از فلیپ فلاپ استفاده می کنند. این آموزش اصول نحوه ساخت تقسیم کننده را با استفاده از فلیپ فلاپ های استاندارد JK توضیح می دهد. این مشکل فرکانس های ورودی را برای MCU بسیار بالا حل می کند ، اما یک اشکال عمده دارد: سیگنال تقسیم شده بدون در نظر گرفتن وظیفه سیگنال ورودی دارای 50٪ چرخه وظیفه است! برای درک علت این امر به دو شکل اول نگاه کنید. سیگنال اصلی با دوره T و عرض پالس P در پین ساعت یک فلیپ فلاپ JK تغذیه می شود در حالی که پایه های J و K آن همیشه بالا نگه داشته می شوند (شکل اول). منطق 3.3V در سراسر فرض شده است. بیایید فرض کنیم که فلیپ فلاپ توسط لبه مثبت (یعنی افزایش) ساعت فعال می شود. در این شرایط ، هر بار که پین ساعت از پایین به بالا می رود ، تغییراتی در وضعیت پین خروجی ("تلنگرها" و "فلاپس" های فردی) رخ می دهد. انتقال زیاد به پایین ساعت (یعنی لبه منفی) کاملاً نادیده گرفته می شود. شکل دوم را ببینید. پین خروجی ، Q ، سیگنالی را منتشر می کند که دوره آن دو برابر دوره اولیه است ، یعنی فرکانس آن نصف می شود. عرض پالس خروجی همیشه برابر با T. در نتیجه ، عرض پالس اصلی ، P ، از بین می رود.

افزودن یک فلیپ فلاپ JK دیگر در پیکربندی نشان داده شده در شکل سوم ، فرکانس اصلی را بر 4 تقسیم می کند. افزودن فلیپ فلاپ بیشتر به همان ترتیب متوالی ، فرکانس را بر توان های بعدی 2: 8 ، 16 ، 32 و غیره تقسیم می کند.

مشکل: چگونه می توان فرکانس یک موج مربعی را با حفظ عرض پالس آن تقسیم کرد؟

ایده این است که به درستی یک لبه منفی تحریک شده JK را به مخلوط اضافه کنید. بگذارید آن را "Neg FF" بنامیم. شکل چهارم را ببینید در اینجا ، "به درستی" به این معنی است که پایه های J و K فلیپ فلاپ جدید به ترتیب با پایه های خروجی Q و Qbar از تقسیم کننده بر 4 ("Pos FF") که در شکل قبلی نشان داده شده است ، گره خورده اند. (در اینجا ، "نوار" نوار افقی روی نماد Q است که نشان دهنده نفی منطقی است.) برای دیدن این که چه چیزی به آن می رسد ، به جدول عملکردهای "Neg FF" در شکل پنجم نگاه کنید: پین های خروجی Neg ، Q و Qbar ، وضعیت پین های ورودی آن ، به ترتیب J و K را نشان می دهد. این بدان معناست که آنها وضعیت P و Qbar را نشان می دهند. اما ، عمل فلیپ فلاپ نگ باید منتظر لبه منفی سیگنال اصلی باشد که پس از لبه مثبت در زمان P می رسد. آها!

شکل موج حاصله در شکل ششم نشان داده شده است. سیگنال خروجی "Pos Q" در فرکانس 1/4 است ، "Pos Qbar" معکوس است ، "Neg Q" به دنبال "P Q" که عرض پالس P تغییر کرده است ، و "Neg Qbar" عکس آن است. می توانید تأیید کنید که منطقی AND از "Pos Qbar" و "Neg Q" یک قطار پالس تولید می کند که با عرض پالس اصلی P و 1/4 فرکانس مشخص می شود. بینگو!

در ابتدا من دقیقاً از این سیگنال خروجی برای تغذیه MCU استفاده کردم. با این حال ، به دلیل محدودیت 106 چرخه MCU که در مقدمه ذکر شد ، برای عرضهای پالس بسیار کوتاه مشکل ساز شد. من این مشکل کوچک را با انتخاب خروجی دیگری حل کرده ام: به جای آن "Pos Qbar" و "Neg Qbar". یک نگاه به شکل موج باید شما را متقاعد کند که عرض نبض این شکل موج خاص ، P '، بین T و 2T بجای محدوده (0 ، T) برای P. متغیر است. P را می توان به راحتی از P' با استفاده از موارد زیر بازیابی کرد:

P = 2T - P '

مرحله 2: سخت افزار توصیه شده

سخت افزار توصیه شده
سخت افزار توصیه شده
سخت افزار توصیه شده
سخت افزار توصیه شده
سخت افزار توصیه شده
سخت افزار توصیه شده

من واقعاً تازه وارد نسبت به علاقه مندان الکترونیکی را دوست دارم: MCU های Atmel SAM D21 بر اساس پردازنده 32 بیتی ARM Cortex M0+ با سرعت کلاک 48 مگاهرتز ، بسیار بالاتر از Atmels های قدیمی تر. برای این پروژه خریدم:

  • برد ItsyBitsy M0 Express MCU از Adafruit
  • من اتفاقی یک باتری لیپو قابل شارژ از Adafruit داشتم
  • صفحه نمایش تک رنگ 128x32 SPI OLED (حدس زده اید: Adafruit)
  • فلیپ فلاپ JK SN74HC109 دو طرفه با لبه مثبت از Texas Instruments
  • فلیپ فلاپ JK SN74HC112 دو طرفه با لبه منفی از Texas Instruments
  • Quadruple AND gate CD74AC08E از Texas Instruments
  • Quadruple OR gate CD74AC32E از Texas Instruments

مرحله 3: مدار

مدار
مدار
مدار
مدار

شکل اول یک طرح ساده از فرکانس/وظیفه سنج را نشان می دهد. منطق CMOS 3.3 ولت در سراسر فرض شده است. در نتیجه ، دامنه موج مربع ورودی باید بین V مربوطه باشدIH سطح (یعنی 2 ولت) و 3.3 ولت. در غیر این صورت ، باید متناسب با آن ، آن را بالا یا پایین ببرید. در بیشتر موارد یک تقسیم کننده ولتاژ ساده کافی است. اگر می خواهید نسخه متر خود را در سطح منطقی متفاوتی طراحی کنید ، باید از میکروکنترلر دیگر (MCU) ، باتری و نمایشگری استفاده کنید که در سطح دلخواه کار می کند. دروازه های منطقی و فلیپ فلاپ های مورد استفاده در این پروژه با سطوح منطقی در هر نقطه بین 2 ولت تا 6 ولت کار می کنند و در اکثر موارد باید خوب باشند.

همانطور که نشان داده شده است ، ItsyBitsy MCU از پین های 9-13 برای ارتباط با صفحه نمایش از طریق پروتکل SPI نرم افزار استفاده می کند. پین 3V قدرت را به کل مدار می رساند. پین ورودی دیجیتال 3 سیگنال تجزیه و تحلیل شده را می پذیرد ، در حالی که پایه های 2 و 4 منبع سیگنال را کنترل می کنند: یا سیگنال مستقیم از طریق دروازه AND3 (فرکانس های ورودی کم) ، یا سیگنال تقسیم شده توسط 4 از طریق دروازه AND4 (فرکانس های ورودی بالا) همانطور که در مرحله 2 توضیح داده شده است. کد ، که در مرحله بعد مورد بحث قرار می گیرد ، به طور خودکار محدوده فرکانس ورودی را تشخیص داده و منبع سیگنال را به طور مناسب تغییر می دهد.

شماتیک پیچیدگی واقعی اتصالات تراشه های دیجیتال را نشان نمی دهد. تصویر دوم نشان می دهد که پروژه روی تخته نان چگونه به نظر می رسد. سیگنال ورودی از طریق سیم قرمز به پین 2CLK فلیپ فلاپ لبه مثبت دوگانه وارد می شود. احتیاط: به طور معمول ، همه پایه های J و K این فلیپ فلاپ باید بالا نگه داشته شوند ، اما SN74HC109 به طور خاص دارای پین Kbar - یک پین K معکوس - است. بنابراین ، این پین باید زمین گیر شود! اولین فلیپ فلاپ لبه منفی در SN74HC112 دارای پین 1K و 1J است که به پین های 1Q و 1Qbar SN74HC109 متصل است. فلیپ فلاپ دوم در SN74HC112 بلااستفاده است و پین های ورودی آن (2K ، 2J ، 2CLRbar) متصل می شوند. سایر پین های اضافی PREbar (از پیش تعیین شده) و CLRbar (روشن) در همه فلیپ فلاپ ها باید به ارتفاع منطقی متصل شوند. ساعت های استفاده نشده و پین های خروجی بدون اتصال باقی می مانند. به طور مشابه ، پین های ورودی بلااستفاده در همه دروازه ها متصل می شوند ، در حالی که پین های خروجی استفاده نشده بدون اتصال باقی می مانند. همانطور که در "قاتل نامرئی حلقه تلفن" خود در مورد دستورالعمل بحث کردم ، اتصال پایه های ورودی بلا استفاده تراشه های منطقی نوسانات تصادفی را از بین می برد و در مصرف باتری صرفه جویی می کند.

مرحله 4: کد و اندازه گیری فرکانس های پایین

به طور طبیعی ، همه اقدامات در کد پیوند داده شده در زیر انجام می شود. هنگامی که ورودی ورودی روی پین 3 از حالت دیجیتال کم به زیاد تغییر می کند ، MCU شروع به شمارش پالس های ساعت داخلی 48 مگاهرتز خود می کند. این لحظه از انتقال زیاد به پایین را یادداشت می کند و شمارش را تا تغییر بعدی کم به زیاد ادامه می دهد ، زمانی که مجدداً کل فرایند را دوباره شروع می کند. اولین شمارش نشان دهنده عرض پالس است ، در حالی که کل شمارش نشان دهنده دوره سیگنال است. و این تمام راز است.

CPU این تغییرات را از طریق وقفه های سخت افزاری یادداشت می کند. SAMD21 دارای چندین ساعت است. کد من از TC3 one استفاده می کند. در ابتدا ، با خواندن برگه اطلاعات M0 برای تلاش زیاد در کدگذاری کنترل کننده وقفه ، شروع کردم ، اما به زودی یک کد بسیار مرتبط در پست های انجمن Arduino توسط کاربران electro_95 ، MartinL و Rucus کشف کردم که سهم آنها به درستی تصدیق شد کد ترکیبی آنها را در کد من وارد کردم و تغییر دادم. صرفه جویی زیادی در زمان من!

همانطور که قبلاً اشاره کردم ، وضوح سیگنال 106 ~ چرخه CPU برای اجرای کد بین وقفه ها محدود شده است. تقسیم دیجیتال با حفظ عرض پالس از فرکانس های بالا مراقبت می کند. از طرف دیگر ، فرکانس های پایین چالش دیگری را ایجاد می کند: از آنجا که شمارنده ساعت TC3 16 بیت طول دارد ، پس از عبور از محدوده شمارش 65 ، 536 سرریز می شود. می توان با افزودن وقفه سرریز این وضعیت را حل کرد ، اما راه حل دیگری را انتخاب کرد: TC3 می تواند از ساعت CPU از پیش تعیین شده (یعنی نرم افزاری تقسیم شده) به جای سخت افزار 48 مگاهرتز استفاده کند. بنابراین ، اگر دوره سیگنال به حد سرریز نزدیک شود ، کد می تواند به TC3 دستور دهد تا از تعداد 24 مگاهرتز برای دوره بعدی استفاده کند ، و voila ، شمارنده به زیر 32 ، 768 تعداد کاهش می یابد. برای فرکانسهای حتی پایین تر ، می توان به TC3 دستور داد تا تعداد پالسهای 12 مگاهرتز و … را شمارش کند. پیش شمارشکننده مناسب بطور خودکار بر اساس فرکانس سیگنال و با پسماند تعیین می شود تا شمارنده TC3 در محدوده سرریز حفظ شود. در نتیجه ، قسمت پایینی محدوده دستگاه حدود 43 هرتز است.

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

پیوند به کد.

توصیه شده: