تعمیر فیوز AVR. بازیابی پیکربندی فیوز بیت کوچک AVR (HVSP).

نمودار شماتیک یک دستگاه خانگی که به احیای MK و بازیابی مقادیر بیت های FUSE پس از برنامه ریزی متوالی کمک می کند.

چندین سال است که میکروکنترلرهای Atmel AVR در بین آماتورهای رادیویی محبوبیت زیادی پیدا کرده اند. یکی از ویژگی های این MK این است که می توانید در آنها به صورت موازی و سریال "firmware" بنویسید.

در تمرین رادیویی آماتور، برنامه نویسان سریال (SPI - Serial Peripheral Interface) به طور گسترده ای مورد استفاده قرار می گیرند که دارای تعدادی مزیت هستند:

  • مدارهای آنها معمولا ساده تر از مدارهای برنامه نویس های موازی هستند (حتی می توانید با پنج هادی و دو مقاومت از آن عبور کنید).
  • گزینه های زیادی هم برای خود برنامه نویسان و هم برای کنترل برنامه های سیستم عامل های مختلف وجود دارد.
  • برای اتصال برنامه نویس، می توانید تقریباً هر پورت را در رایانه خود انتخاب کنید - طرح هایی برای برنامه نویسان LPT و COM و USB وجود دارد.

علاوه بر این، چنین برنامه نویسی به شما امکان می دهد MK را بدون لحیم کردن آن از دستگاه (ISP - In System Programmable) "فلش" کنید.

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

رایج ترین مشکل برنامه نویسی متوالی عدم توانایی انجام هر گونه عملکرد با MK است در صورتی که سلول های فیوز خاصی از این MK از مقادیر پیش فرض خود تغییر کرده باشند - در این مورد، تراشه "اعتصاب" را اعلام می کند و با آن ارتباط برقرار نمی کند. کامپیوتر: با برنامه نویس سریال دیگر نمی توان آن را نه خواند و نه "فلش" کرد.

و به نظر می رسد که از کار افتاده است، در حالی که برنامه PonyProg، برای مثال، پیغام خطای زیر را می دهد: "دستگاه گم شده یا دستگاه ناشناخته (24-) ، اگرچه این MK ممکن است در مدار نهایی کاملاً عادی کار کند.

دلیل این "غیر ارتباطی" می تواند به عنوان مثال، تنظیم روی صفر (و صفر در فیوز بیت ها برای AVR به این معنی است که این بیت برنامه ریزی شده است) بیت RSTDISBL - که منجر به خاموش کردن ورودی تنظیم مجدد خارجی می شود و تبدیل آن به یک خط ورودی/خروجی معمولی؛ و بدون ریست خارجی، MK نمی تواند وارد حالت برنامه نویسی SPI شود و برای کامپیوتر غیر قابل دسترسی خواهد بود.

دلیل دیگری که باعث می شود MCU برای برنامه نویس SPI "نامرئی" شود، فقدان کلاک است: بیت های فیوز کنترل کننده ژنراتور ساعت (CKSEL0-3) را می توان به گونه ای تنظیم کرد که MCU مدارهای ساعت داخلی را غیرفعال کند و نیاز به یک ساعت خارجی - منبع پالس های ساعت؛ و بدون کلاک، برنامه نویسی SPl غیر ممکن است.

علاوه بر این، فیوز بایت های نادرست "سیم دار" می تواند نتیجه نه تنها بی توجهی یا ناآگاهی باشد - خرابی های سخت افزاری در حین "چشمک زدن" نیز بسیار محتمل است، به خصوص اگر آنها از طریق یکی از تغییرات موضوع "پنج سیم" "دوخته شوند" " - بنابراین، از "افتاده شده توسط "MK، که در یک قفسه دراز کشیده و منتظر شفای معجزه آسا است، هیچ کس بیمه نیست (و اگر به اینترنت اعتقاد دارید، تقریباً هر دومین طرفدار AVR این کار را انجام داده است - و نه لزوماً از مبتدیان ...).

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

با این وجود، ساخت یا خرید یک برنامه نویس موازی جدید (یا علاوه بر این، یک کیت اشکال زدایی) فقط برای "درمان" چند MK "کماتوزه" اصلاً ضروری نیست، به خصوص اگر برنامه نویس قدیمی SPI کاملا راحت باشد - برای این کار راحت تر است. از یک دستگاه ساده استفاده کنید که نمودار آن در شکل 1 نشان داده شده است.

مدار

این دستگاه برای "درمان" MK ATtiny2313 طراحی شده است، اما می تواند برای هر مدل AVR دیگری - هم Tiny و هم Mega - بازسازی شود که یک "منبع" خوب از میان افزار به آن ضمیمه شده است، که امکان بازنویسی آن را در رابطه فراهم می کند. به MK که در حال حاضر به آمبولانس نیاز دارید.

ماهیت عملکرد چنین دستگاهی وارد کردن "بیمار" به حالت برنامه ریزی موازی و شبیه سازی در خطوط او سیگنال های برنامه نویس "واقعی" است که مسئول تغییر وضعیت سلول های فیوز هستند. و سپس مقادیر پیش فرض سلول فیوز را در این MK بنویسید.

این دستگاه مقادیر کارخانه را برای تمام بایت های فیوز تنظیم می کند: زیاد، کم و اضافی. و علاوه بر این حافظه برنامه ها و داده ها را نیز از "بیمار" پاک می کند - در نتیجه او حالت یک ریز مدار "تمیز" را به دست می آورد.

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

چنین دستگاه هایی قبلاً در ادبیات رادیویی آماتور و اینترنت (با نام های Fuse Doctor، AVR Doctor، AVR Reanimator، AVR Aibolit و غیره) توضیح داده شده است، اما این یکی دارای چندین ویژگی است که کار با آن را کمی دلپذیرتر می کند.

یعنی خطوط PB0-PB7 - به خطوط PB0-PB7، خط PD6 - به خط PD6 و غیره. که در مورد مونتاژ مدار به روش چاپی، نصب را بسیار پیچیده کرد - به پرش های زیادی یا سیم کشی دو طرفه نیاز بود (اما برخی از نویسندگان پیشنهاد کردند که به سادگی ریزمدارها را روی هم نصب کنید، لیدهای غیر متصل را خم کنید. مقاومت ها / هادی های جانبی و لحیم کاری روی آنها؛ اما تماس قابلیت اطمینان با چنین "میکروکنترلر کاما سوترا" زیر سوال است؛ و همه ما به خوبی می دانیم که خمش-خم شدن پین های ریز مدار منجر به چه چیزی می شود ...

در اینجا، ریز مدارها، همانطور که بود، "در کنار هم"، "جک" قرار دارند، که طرح بندی برد مدار چاپی را بسیار ساده می کند. در نسخه نویسنده، که در شکل 2 نشان داده شده است، تا حد زیادی نمودار مدار را تکرار می کند و تنها شامل سه پرش کوچک است. اندازه تخته - 60x60 میلی متر.

در مرحله دوم، برخی از دستگاه ها به دو ولتاژ نیاز دارند: 5 ولت برای تغذیه MK، و 12 ولت به خط تنظیم مجدد "بیمار" برای وارد شدن به حالت برنامه ریزی.

این مدار فقط به یک ولتاژ نیاز دارد که می تواند در محدوده نسبتاً گسترده ای پخش شود - نکته اصلی این است که حداقل 12 ولت باشد. ثالثاً، اکثر دستگاه های شرح داده شده اجازه نمی دهند که "بیماران" جایگزین "گرم" شوند. شما باید چندین MK را پشت سر هم "درمان" کنید - پس از هر "چشمک زدن" آنها باید برق را خاموش کنند، "بیمار" را جایگزین کنند، سپس دوباره برق را روشن کنند و غیره.

این دستگاه تمام خروجی ها را پس از هر "چشمک زدن" روی log.O تنظیم می کند، که به شما امکان می دهد ریزمدارها را با "نقاله" "درمان" کنید - برق را وصل کنید، "بیمار" را نصب کنید، دکمه "شروع" را فشار دهید، به نتیجه نگاه کنید. مربوط به "درمان" توسط HL1، حذف، قرار دادن یک "بیمار" جدید، کلیک کردن، نگاهی به HL1، حذف، درج و غیره. و همه اینها بدون قطع برق (حداقل «چادر» را در بازار رادیو باز کنید!).

و چهارم، اغلب در چنین دستگاه هایی هیچ تأییدی از فیوز بیت های ضبط شده و نشانه ای از نتیجه "درمان" وجود ندارد (مانند "موفق / ناموفق"). در این طرح، تایید ارائه شده است و از LED HL1 برای نشان دادن نتایج آن استفاده می شود که می تواند سه حالت داشته باشد:

  1. ثابت روشن - برنامه نویسی "بیمار" موفقیت آمیز بود، فیوز بایت های خوانده شده مطابق با موارد نوشته شده است. دستگاه منتظر "بیمار" بعدی است.
  2. چشمک زدن در فرکانس 2 گیگاهرتز - یک خطا در برنامه نویسی "بیمار": فیوز بایت های خوانده شده با موارد نوشته شده مطابقت ندارند. "بیمار" وارد حالت برنامه نویسی نشده است، نصب نشده است یا معیوب است (برنامه بررسی حضور "بیمار" را ارائه می دهد - یک AVR کار log.1 را در خط BSY / RDY تنظیم می کند (پین 3 برای ATtiny2313 ) هنگام ورود به حالت برنامه نویسی موازی)؛ دستگاه منتظر "بیمار" بعدی است.
  3. خاموش - فرآیند برنامه نویسی و تأیید در حال انجام است. برنامه ریزی یک "بیمار" سالم کمتر از یک ثانیه طول می کشد و این حالت LED در شرایط عادی نباید قابل توجه باشد. اگر LED برای مدت زمان نسبتاً طولانی در حالت خاموش باشد، به احتمال زیاد، فرآیند "چشمک زدن" به دلیل این واقعیت است که "بیمار" معیوب در حالت ضبط گیر کرده است و BSY / RDY را تنظیم نمی کند. سیگنال آماده مورد انتظار "پزشک".

همانطور که قبلاً ذکر شد، دستگاه کاملاً همه کاره است و برای "درمان" تقریباً هر MK از سری AVR قابل استفاده است.

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

آداپتور یک سوکت DIP-20 است که با "پاهای" خود به پانل "بیمار" روی برد دستگاه وارد می شود.

از بالا، به چنین سوکتی (به مخاطبین خروجی های ریزمدار)، هادی ها در مکان هایی که خطوط برق و کنترل برای "بیمار" روی برد قرار می گیرند، لحیم می شوند (یا به سادگی وارد می شوند).

انتهای دیگر این هادی ها به نتایج سوکت دوم لحیم می شوند - تحت MK که نیاز به "درمان" دارد - مطابق با محل خطوط کنترل آن که می تواند در برگه داده اختصاصی مشخص شود.

به نظر می رسد نوعی اتصال دهنده، دوشاخه (فقط یک سوکت DIP-20) که برای "بیمار" روی برد در سوکت DIP-20 قرار می گیرد، و یک "بیمار" جدید در سوکت آن قرار می گیرد (دیگری سوکت).

در مورد برنامه، ممکن است نیاز به اصلاح داشته باشد، زیرا. مدل های مختلف AVR اغلب برای ورود به حالت برنامه نویسی و تغییر فیوز بایت ها به مراحل مختلفی نیاز دارند.

علاوه بر این، فیوز بایت ها (از جمله تعداد آنها) برای مدل های مختلف MK متفاوت است - اطلاعات دقیق تر را می توان در [L.1,2,3] یا در اسناد شرکت به دست آورد. و برای سهولت در درک برنامه اصلی، نظرات مفصلی برای آن ارائه کردم.

به عنوان یک "پزشک" در این دستگاه، همان "بیمار"، از میکروکنترلر ATtiny2313 استفاده می شود - همچنین روی سوکت نصب می شود تا پس از بازگردانی همه ریز مدارهای "بیمار" آن را جدا کرده و در پروژه های دیگر استفاده کنید.

برای کار در این دستگاه، تمام فیوز بیت های "دکتر" باید همان هایی باشند که به طور پیش فرض در آن تنظیم شده اند (از کارخانه). تنها چیز - برای عملکرد پایدارتر (مخصوصاً با ولتاژ تغذیه ناپایدار)، در "دکتر" می توانید سیستم BOD را با تنظیم آن روی 2.7 ولت (با تنظیم فیوز بیت BODLEVEL1 روی صفر) روشن کنید. کوارتز خارجی "دکتر" مورد نیاز نیست، از ژنراتور RC داخلی کار می کند.

جزئیات

تراشه DA1 (78L05) را می توان با آنالوگ داخلی KR1157EN502 یا قدرتمندتر 7805 جایگزین کرد - اما بسیار گران تر است و قدرت آن برای این مدار مورد نیاز نیست.

ترانزیستور VT1 در اینجا در حالت کلید کار می کند و می تواند هر ساختار NPN باشد - به عنوان مثال، KT315، 2SC1815، 2SC9014، 2SC1749S، و غیره. اما برای برخی از مدل ها، شما باید چیدمان برد را تغییر دهید.

برنج. 2. برد مدار دستگاه بازیابی فیوز.

دیود ایمنی VD1 می تواند هر چیزی باشد، برای جریان حداقل 150 میلی آمپر، وظیفه آن محافظت از مدار در برابر برگشت برق تصادفی است.

تمام مقاومت های مدار دارای اندازه کوچک هستند، 0.125 وات - مقدار آنها ممکن است با مقدار نشان داده شده در محدوده نسبتاً گسترده متفاوت باشد. LED HL1 - هر نشانگر.

سرانجام

و در پایان، من می خواهم در مورد ویژگی جالب رفتار برخی از نمونه های ATtiny2313 MK در طول برنامه نویسی SPI با استفاده از برنامه PonyProg2000 به شما بگویم (مدل های دیگر MK نیز ممکن است رفتار کنند، از جمله با برنامه های دیگر - اما نویسنده این کار را نکرده است. اما با هر چیزی غیر از بسته نرم افزاری ATtiny2313-PonyProg2000 آزمایش کرده بودم).

ماهیت مشکل به شرح زیر است: گاهی اوقات، هنگام تلاش برای خواندن یا نوشتن MK، برنامه PonyProg یک پیغام خطا می دهد "دستگاه گم شده یا دستگاه ناشناخته (24-)" - و این با وجود این واقعیت است که هیچ فیوز بیتی در این وجود ندارد. MK تغییر کرده است - علاوه بر این، ریز مدار حتی می تواند جدید باشد، هنوز "دوخته نشده"! "درمان" با استفاده از دستگاهی که در بالا توضیح داده شد هیچ نتیجه ای نمی دهد - هنگامی که سعی می کنید دوباره بخوانید / بنویسید، پیام خطا دوباره ظاهر می شود. به نظر می رسد که MK از کار افتاده است و بدون دلیل ظاهری ...

اما اگر دکمه "نادیده گرفتن" را در این پیام فشار دهید، در نتیجه "پونی" را مجبور کنید که عدم پاسخ MK را نادیده بگیرد، و همچنان سعی در خواندن / نوشتن تراشه داشته باشد، این MK خوانده یا "فلش" می شود. به طور معمول

پس از چنین "چشمک زدن" اجباری، اکثر MK های "تظاهر به مرده" کاملاً عادی کار می کنند، علاوه بر این، بدون هیچ گونه خرابی (به جز پیامی که در بالا در هنگام تلاش برای برقراری ارتباط با رایانه شخصی توضیح داده شد)!

ظاهراً نکته اینجاست که برخی از نمونه‌های MK در پاسخ به درخواست برنامه‌نویس تأیید صحیحی را ایجاد نمی‌کنند، در نتیجه PonyProg به این نتیجه می‌رسد که عملکرد آنها نادرست است. در عین حال، این MKها دستورات باقی مانده برنامه نویس را به طور معمول درک می کنند و به درستی انجام می دهند.

کاملاً ممکن است که این یک ویژگی (یا بهتر است بگوییم، یک "بیماری") AVR MK باشد (این فقط این نیست که PonyProg چنین دکمه ای را گنجانده است - "نادیده گرفتن") - نویسنده این مقاله از هر ده MK سه رفتار داشته است. به روشی مشابه، و بیشتر اوقات شروع می شود نه بلافاصله، بلکه پس از چند "فلش ووک".

یا شاید ولتاژ ساکن در دستان انسان مقصر باشد... اما، به هر حال، در ساختارهای حیاتی (مانند دستگاه های احتراق، گرمایش خودکار، آبیاری، آلارم ها و غیره) چنین "اعتماد تضعیف شده" MK وجود دارد. استفاده از آن توصیه نمی شود

اما در اسباب بازی ها، گلدسته های درخت کریسمس، زنگ درها و سایر وسایل کمکی، آنها برای سالیان متمادی به خوبی کار خواهند کرد - و علاوه بر این، بدون هیچ مشکلی.

سیستم عامل برای میکروکنترلر - دانلود (9 کیلوبایت).

متین ع RK-08-16.

ادبیات:

  1. Evstifeev A.V. - میکروکنترلرهای AVR از خانواده Tiny. راهنمای کاربر. 2007. Cmp.386 - برنامه نویسی موازی;
  2. Evstifeev A.V. - میکروکنترلرهای AVR از خانواده مگا. راهنمای کاربر. 1386. ص526 - برنامه نویسی موازی;
  3. Evstifeev A.V. - میکروکنترلرهای AVR خانواده Tiny و Mega از ATMEL. 2008. ص.498 - برنامه نویسی موازی.

نمونه ساده دیگری از ساخت برد اشکال زدایی، اما این بار برای دستگاه هایی که از میکروکنترلر ATTiny2313 استفاده می کنند. محل قرارگیری پایه ها برای برنامه نویسی در ATTiny2313 با ATTiny13 یکسان است. بر این اساس، تابلوها مشابه ظاهر خواهند شد. تفاوت با وجود یک اسیلاتور اصلی خارجی (کوارتز) خواهد بود. به طور پیش فرض، ATTiny2313 از کارخانه با ژنراتور داخلی روشن می آید، بنابراین اگر قرار نیست میکروکنترلر از یک ژنراتور خارجی کار کند، نمی توان آن را نصب کرد. در صورت اتصال پروگرامری که از مدار تغذیه می کند به برد کانکتور برق را کپی می کنیم (به یک کانکتور برق می دهیم و پروگرامر را از دیگری تغذیه می کنیم).


برای ایجاد یک برد اشکال زدایی برای دستگاه های ATTiny2313، ما نیاز داریم:


ما برد اشکال زدایی را مطابق شکل مونتاژ می کنیم:

1 لحیم کاری به سوکت برای میکرو مدار و پین ها (مانند شکل)؛
2 همانطور که در شکل نشان داده شده است (خط قرمز) در قسمت جلوی تخته یک جامپر درست می کنیم. ما یک جامپر دیگر در طرف دیگر می سازیم.
با 3 جامپر - "snot" پین ها و پایه های پانل را به هم وصل می کنیم (نقاط لحیم کاری به رنگ سبز دایره شده اند).

برد رفع اشکال ما آماده است!

نتیجه.

- برای اتصال صحیح پاور و پروگرامر روی GND، SCK برچسب می زنیم.
- هر چیز دیگری روی برد اشکال زدایی مطابق با طرح دستگاه انتخاب شده لحیم می شود. (به عنوان یک گزینه، می توانید پین هایی را به هر پایه میکروکنترلر برای اتصال سایر بردها و لوازم جانبی اضافه کنید).
- برای عملکرد مطمئن تر در شرایط افزایش نویز، بسیار مطلوب است که مدار را با پایه تنظیم مجدد کشش، یک مقاومت تکمیل کنید (مقاومت کشش داخلی مقاومتی در حدود 10 کیلو اهم دارد - این کافی نیست) و یک خازن سرامیکی فیلتر کننده روی پایه های برق (در عرض 0.1 uF)؛
-حالا میکروکنترلر را وارد سوکت می کنیم و ATtiny2313 را با فریمور مورد نیاز فلش می کنیم.

(بازدید شده 16 038 بار، 1 بازدید امروز)

بخش: برچسب ها:

ناوبری پست

یک برد اشکال زدایی ساده برای دستگاه های AVR ATTiny2313 با کوارتز.: 70 نظر


  1. نویسنده پست GetChiper

    فازی لمس کرد؟
    آیا tini2313 دیگری را بررسی کرده اید؟

  2. Toxa12345

    برای مدت طولانی عذاب می‌دادم: "کدام zhe mk را انتخاب کنم" من در tinka 2313 متوقف شدم زیرا ارزان تر از atmega است و به اندازه tinka 13 آتش نمی گیرد، همچنین به دلیل وجود خطوط RxD و TxD که امکان برقراری ارتباط را فراهم می کند. از طریق YuART
    Z.Y. خرید MK از ما در کورسک مشکلی نیست. tinka 2313 - 130 روبل هزینه دارد. و atmega8 در حال حاضر 200 روبل در مورد tinka 13 به رسمیت نمی شناسد


  3. نویسنده پست GetChiper

    یا شاید ATmega88 یا ATmega48؟

  4. آندری 1979

    وقت خوش.
    من برد را طبق طرح پیشنهادی مونتاژ کردم ، آن را به USBasp وصل کردم ، 2313 را وصل کردم ، 5 ولت را اعمال کردم. Extreme Burner Chip Incorrect Found را می دهد. بر این اساس، هیچ چیز قابل فلش یا شمارش نیست. هنگام تعویض tinki همان چیزی است.
    کسی چیزی مشابه تجربه کرده است؟
    شاید این به دلیل تداخل است؟

    "- برای عملکرد مطمئن تر در شرایط افزایش نویز، بسیار مطلوب است که مدار را با پایه تنظیم مجدد کشش، یک مقاومت تکمیل کنید (مقاومت کشش داخلی مقاومتی در حدود 10 کیلو اهم دارد - این کافی نیست) و یک خازن سرامیکی فیلتر کننده روی پایه های برق (در عرض 0.1 uF)؛ »

    و همچنین به خصوص برای آدمک ها، آیا می توان این اعمال را به صورت نمودار منعکس کرد.


  5. نویسنده پست GetChiper

    چه چیزی در آنجا نمایش داده شود.
    خازن به موازات منبع تغذیه (یعنی بین پایه های 10 و 20) قرار می گیرد.
    یک مقاومت 10 کیلو اهم بین Vcc و ریست قرار می گیرد (یعنی بین پایه های 1 و 20)

  6. آندری 1979

    بابت پاسخ متشکرم. من 4.7 KΩ و 220pF گذاشتم. کمی سرگرم کننده تر شد. اکستریم برنر همونطور که بود مینویسه. اما Khazama بار دیگر گزارش می دهد که امضای تراشه 0x1e000 است. عدم تطابق امضای مورد انتظار برای ATTiny 2313 1e 91 0a است. در موارد دیگر خطای اتصال را نیز می نویسد.

    من از تخته نان بدون لحیم استفاده می کنم، بنابراین لحیم کاری نامرتب نباید مشکلی ایجاد کند. کجا دیگر می توانید نگاه کنید؟


  7. نویسنده پست GetChiper

    220pF کافی نیست. لازم است 0.1 uF - سرامیک (غیر قطبی) و 10-100 uF الکترولیتی (قطبی) به صورت موازی قرار دهید.

  8. ددریک

    ظهر بخیر))) من کوارتز 20000 را به جای آن پیدا نکردم، فقط کوارتز 4000 را پیدا کردم. اگه کوارتز 4000 بذارم میکرو آر آهسته دارم؟ و برای کوارتز 4000 همون خازن ها باید عوض بشه؟ من در سمرقند با قطعات یدکی رادیو زندگی می کنم، مشکل داریم ((حتی نمی دانم سوکت میکرو r را از کجا پیدا کنم (((می توانم سوکت میکرو r را خودم بسازم؟

  9. ددریک

    حداقل یکی جواب بده)))


  10. نویسنده پست GetChiper

    آرام باش - آخر هفته بود 🙂

    اگر قصد مطالعه و ساخت وسایل خود را دارید می توانید هر کوارتزی را روی این روسری قرار دهید (نیازی به تعویض خازن برای کوارتز ندارید). یا اصلاً نمی توانید کوارتز قرار دهید - از ژنراتور RC داخلی استفاده کنید.

    در مورد ساخت سوکت - شاید فقط MK را در تخته نان لحیم کنید؟

  11. ددریک

    با تشکر از کمک شما))) من یک سوال دیگر از شما دارم، اما نمی دانم کجا می توانم خارج از موضوع را بپرسم (((امروز یک کنتور الکترونیکی برای تعمیر Holley DDS28 برای من آوردند. برای خواندن کنتور. کل رکورد تو micro-re ذخیره میشه میشه بگید چطوری براش پروگرامر درست کنم که بتونی دیتای microra رو بخونی و ویرایش کنی؟؟؟و چطوری مستقیم برات بنویسم؟؟؟


  12. نویسنده پست GetChiper

    FM24C02 یک حافظه سریالی غیر فرار (EEPROM) است.
    من فکر می کنم توری ها و برنامه های زیادی برای این تجارت وجود دارد (اگر از موتور جستجو بپرسید) - اینجا اولین موردی است که با http://www.msplata.ru/teleprog.html برخورد کرد.

  13. ددریک

    با تشکر برای کمک:-)

  14. کیهان

عکس. 1

T = T0 + T1. دوره نبض

T = 1/F

S=T/T1

چرخه ی وظیفه

فاکتور پر کردن D=1/Sیا بیشتر D=T1/T*100%

دستگاه های دیجیتال، به عنوان مثال، یک میکروکنترلر تنها می توانند با دو سطح سیگنال کار کنند، به عنوان مثال. صفر و یک یا خاموش و روشن. بنابراین، می توانید به راحتی از آن برای کنترل وضعیت بار، مانند روشن یا خاموش کردن LED استفاده کنید. همچنین می توانید از آن برای کنترل هر وسیله الکتریکی با استفاده از درایورهای مناسب (ترانزیستور، تریاک، رله و غیره) استفاده کنید، اما گاهی اوقات به چیزی بیش از «روشن کردن» و «خاموش کردن» دستگاه نیاز دارید. بنابراین اگر می خواهید روشنایی یک LED (یا لامپ) یا سرعت یک موتور DC را کنترل کنید، سیگنال های دیجیتال نمی توانند این کار را انجام دهند. این وضعیت در فناوری دیجیتال بسیار رایج است و به نام مدولاسیون عرض پالس (PWM).

تقریباً همه میکروکنترلرهای مدرن دارای سخت افزار تخصصی برای تولید سیگنال PWM هستند. در این آموزش اصول اولیه تکنیک PWM را می آموزیم و در ادامه نحوه پیاده سازی PWM با استفاده از میکروکنترلرهای AVR را خواهیم دید.

دستگاه‌های دیجیتال مانند میکروکنترلر تنها می‌توانند دو سطح در خطوط خروجی تولید کنند، high=5V و low=0V. اما اگر بخواهیم 2.5 یا 3.1 یا هر ولتاژی بین 0-5 ولت داشته باشیم چه؟ برای انجام این کار، به جای ایجاد یک ولتاژ DC ثابت در خروجی، یک موج مربعی تولید می کنیم که دارای سطوح بالا = 5 ولت و پایین = 0 ولت است (شکل 1 را ببینید).

عکس. 1

شکل نشان می دهد که سیگنال برای مدتی به طور متناوب در سطح پایین و بالا باقی می ماند. T0 - سطح پایین، T1 - سطح بالا. دوره سیگنال خواهد بود T = T0 + T1. دوره نبض- این فاصله زمانی بین دو نقطه مشخصه دو پالس مجاور است. به طور معمول، دوره بین دو جبهه یا دو سقوط پالس های مجاور اندازه گیری می شود و با یک حرف لاتین بزرگ T نشان داده می شود.

دوره تکرار پالس مستقیماً با فرکانس توالی پالس مرتبط است و می توان آن را با فرمول محاسبه کرد: T = 1/F

اگر طول پالس T1 دقیقاً برابر با نصف دوره T باشد، چنین سیگنالی اغلب "موج مربع" نامیده می شود.

چرخه وظیفه پالس نسبت دوره تکرار پالس به مدت آنها است و با حرف S نشان داده می شود: S=T/T1

چرخه وظیفه یک کمیت بدون بعد است و واحد اندازه گیری ندارد، اما می تواند به صورت درصد بیان شود. این اصطلاح اغلب در متون انگلیسی یافت می شود. چرخه ی وظیفه، این به اصطلاح چرخه وظیفه یا چرخه وظیفه PWM است. چرخه وظیفه D متقابل چرخه وظیفه است.

فاکتور پر کردنمعمولاً به صورت درصد بیان می شود و با استفاده از فرمول محاسبه می شود: D=1/Sیا بیشتر D=T1/T*100%

در شکل بالا (شکل 1) می بینید که T1 = T0، این برابر با نیمی از دوره زمانی است. بنابراین چرخه وظیفه PWM 50٪ است. اگر فرکانس چنین پالس هایی به اندازه کافی زیاد باشد (مثلاً 5000 هرتز) ، نیمی از 5 ولت به دست می آوریم. 2.5 ولت بنابراین، اگر خروجی کنترلر به موتور متصل شود (با استفاده از درایورهای مناسب) با 50 درصد سرعت کامل خود کار می کند. تکنیک PWM از این واقعیت برای ایجاد ولتاژ بین دو سطح (مثلاً بین 0-12 ولت) استفاده می کند. ترفند این است که وقتی مقدار چرخه وظیفه را بین 0-100٪ تغییر می دهید، همان درصد ولتاژ ورودی را در خروجی دریافت می کنیم. در زیر چند نمونه از سیگنال PWM با چرخه های کاری مختلف آورده شده است.

اگر یک فیلتر R / C را در خروجی قرار دهید، می توانید یک سطح سیگنال DC خالص و نه امواج مربعی دریافت کنید. اما این برای موتورهای کموتاتور یا کنترل روشنایی LED ها لازم نیست. برای انجام این کار، می توانید سیگنال PWM را مستقیماً به درایور اعمال کنید (به عنوان مثال، یک ترانزیستور دوقطبی، ماسفت و غیره).

تحت حالت عملکرد 16 بیتی. تایمر به عنوان الگوریتم شمارش آن و رفتار خروجی شکل دهنده پالس مرتبط با آن درک می شود که با ترکیب بیت هایی که حالت عملکرد تایمر (WGMn3-0) و حالت تولید سیگنال خروجی (COMnx1:0) را مشخص می کند، تعیین می شود. ). در این مورد، بیت های تنظیم حالت تولید سیگنال خروجی بر الگوریتم شمارش تأثیر نمی گذارد، زیرا الگوریتم شمارش فقط به وضعیت بیت های تنظیم حالت تایمر بستگی دارد. در حالت‌های PWM، بیت‌های COMnx1:0 وارونگی را در خروجی PWM تولید شده فعال/غیرفعال می‌کنند (یعنی PWM با وارونگی یا PWM بدون وارونگی را انتخاب کنید). برای حالت‌های غیر PWM، بیت‌های COMnx1:0 تعیین می‌کنند که در صورت وقوع یک تطابق چه اقدامی انجام دهند: بازنشانی، تنظیم یا معکوس کردن خروجی (همچنین به «تنظیم‌کننده خروجی» و «نمودارهای زمان‌سنجی 16 بیتی/مدت شمار» مراجعه کنید).

عملکرد عادی

ساده ترین حالت کار حالت عادی است (WGMn3-0 = 0b0000). در این حالت، شمارنده به صورت جمع (افزاینده) کار می کند، در حالی که شمارنده تنظیم مجدد نمی شود. سرریز شمارنده زمانی رخ می دهد که حداکثر مقدار 16 بیتی ارسال شود. مقدار (0xFFFF) تا حد شمارش پایین (0x0000). در عملکرد عادی، زمانی که TCNTn صفر شود، پرچم سرریز تایمر/ شمارنده TOVn در همان چرخه ساعت تنظیم می شود.

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

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

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

حالت بازنشانی تایمر مطابقت (CTC)

در حالت CTC (WGM01، WGM00 = 0b10)، رجیستر OCR0 برای تنظیم وضوح شمارنده استفاده می شود. اگر حالت CTC تنظیم شده باشد و مقدار شمارنده (TCNT0) با مقدار رجیستر OCR0 مطابقت داشته باشد، شمارنده به صفر تنظیم می شود (TCNT0=0). بنابراین، OCR0 بالای شمارش شمارنده، و در نتیجه، وضوح آن را تعیین می کند. در این حالت، محدوده وسیع تری از تنظیم فرکانس پالس های مستطیلی تولید شده ارائه می شود. همچنین کار شمارنده رویداد خارجی را ساده می کند.

در تنظیم مجدد تایمر در حالت مطابقت (WGMn3-0 = 0b0100 یا 0b1100)، وضوح تایمر توسط رجیسترهای OCRnA یا ICRn تنظیم می شود. در حالت CTC، شمارنده (TCNTn) در صورتی که مقدار آن با مقدار ثبات OCRnA (WGMn3-0 = 0b0100) یا ICRn (WGMn3-0 = 0b1100) مطابقت داشته باشد، بازنشانی می شود. مقدار ثبت OCRnA یا ICRn حد بالای شمارش و در نتیجه وضوح تایمر را تعیین می کند. در این حالت، محدوده وسیع تری از تنظیم فرکانس پالس های مستطیلی تولید شده ارائه می شود. همچنین کار شمارنده رویداد خارجی را ساده می کند. نمودار زمان سنج در حالت CTC در شکل 1 نشان داده شده است. شمارنده (TCNTn) وضعیت خود را تا زمانی افزایش می دهد که با مقدار OCRnA یا ICRn مطابقت داشته باشد و سپس شمارنده (TCNTn) تنظیم مجدد می شود.

شکل 1 - نمودار زمان بندی برای حالت STS

هنگامی که به حد بالای تعداد رسید، می توان با استفاده از پرچم های OCFnA یا ICFn مربوط به رجیسترهای مورد استفاده برای تنظیم حد شمارش بالا، وقفه ایجاد کرد. اگر وقفه فعال باشد، می‌توان از روال وقفه برای به‌روزرسانی حد شمارش بالا استفاده کرد. با این حال، تنظیم مقدار بالای شمارش نزدیک به مقدار محدود شمارش پایین هنگامی که شمارنده بدون پیش مقیاس یا با مقدار پیش مقیاس پایین کار می کند، باید با احتیاط بسیار انجام شود، زیرا در حالت CTC هیچ بافر مضاعفی وجود ندارد. اگر مقدار نوشته شده به OCRnA یا ICRn کمتر از مقدار فعلی TCNTn باشد، پس از رسیدن به حداکثر مقدار (0xFFFF)، شمارنده تطبیق بازنشانی می‌شود، سپس به 0x0000 بازنشانی می‌شود و به مقدار جدید OCRnA یا ICRn می‌رسد. در بسیاری از موارد این وضعیت مطلوب نیست. روش دیگر، حالت سریع PWM را می توان استفاده کرد، جایی که رجیستر OCRnA حد بالایی تعداد را تعیین می کند (WGMn3-0 = 0b1111)، زیرا. در این مورد OCRnA دو بافر است.

برای تولید سیگنال در حالت CTC، خروجی OCnA می تواند برای تغییر سطح منطقی در هر مسابقه با تنظیم حالت سوئیچینگ (COMnA1، COMnA0 = 0b01) استفاده شود. مقدار OCnA تنها در صورتی روی پین پورت وجود خواهد داشت که جهت خروجی برای آن پین تنظیم شده باشد. اگر OCRnA = 0x0000 باشد، حداکثر فرکانس سیگنال تولید شده fOC0 = fclk_I/O/2 است. برای سایر مقادیر OCRn، فرکانس سیگنال تولید شده را می توان با فرمول تعیین کرد:

که در آن متغیر N ضریب تقسیم پیش مقیاس کننده را مشخص می کند (1، 8، 32، 64، 128، 256، یا 1024).

در مورد عملکرد عادی، پرچم TOV0 زمانی که مقدار آن از 0xFFFF به 0x0000 تغییر می کند، روی همان تیک تایمر تنظیم می شود.

حالت PWM سریع (FAST PWM)

حالت مدولاسیون پهنای پالس سریع (PWM) (WGMn3-0 = 0b0101, 0b0110, 0b0111, 0b1110, 0b1111) برای تولید پالس های PWM با فرکانس بالا طراحی شده است. بر خلاف سایر حالت های عملیات، این یکی از عملیات شمارنده یک طرفه استفاده می کند. حساب در جهت از حد پایین به بالای حساب انجام می شود.

اگر حالت خروجی غیر معکوس تنظیم شده باشد، هنگامی که TCNTn و OCRnx مطابقت دارند، سیگنال OCnx تنظیم می‌شود و در حد بالای شمارش مجدداً تنظیم می‌شود. اگر حالت معکوس مشخص شده باشد، خروجی OCnx در یک مسابقه بازنشانی می شود و روی حد تعداد بالا تنظیم می شود. با توجه به شمارش یک طرفه، فرکانس کاری این حالت در مقایسه با حالت PWM اصلاح شده فاز که از شمارش دو طرفه استفاده می کند، دو برابر بیشتر است. توانایی تولید سیگنال های PWM با فرکانس بالا استفاده از این حالت را در وظایف تثبیت توان، تصحیح و تبدیل دیجیتال به آنالوگ مفید می کند. فرکانس بالا، در همان زمان، امکان استفاده از عناصر خارجی با اندازه های فیزیکی کوچک (سلف، خازن) را فراهم می کند، در نتیجه هزینه کلی سیستم را کاهش می دهد.

وضوح PWM را می توان 8، 9 یا 10 بیت ثابت کرد یا توسط رجیستر ICRn یا OCRnA تنظیم کرد، اما نه کمتر از 2 بیت (ICRn یا OCRnA = 0x0003) و نه بیشتر از 16 بیت (ICRn یا OCRnA = 0xFFFF). وضوح PWM در یک مقدار حد بالا (UP) به صورت زیر محاسبه می شود:

در حالت PWM سریع، شمارنده تا زمانی افزایش می‌یابد که مقدار آن با یکی از مقادیر ثابت 0x00FF، 0x01FF، یا 0x03FF مطابقت داشته باشد (اگر WGMn3:0 = 0b0101، 0b0110، یا 0b0111، به ترتیب)، مقدار ICRn (اگر WGMn3: 0 = 0b1110)، یا مقدار در OCRnA (اگر WGMn3:0 = 0b1111) و سپس در چرخه ساعت بعدی تایمر تنظیم مجدد شود. نمودار زمان بندی برای حالت PWM سریع در شکل 2 نشان داده شده است. شکل حالت PWM سریع را زمانی نشان می دهد که از ثبت OCRnA یا ICRn برای تنظیم حد بالایی استفاده می شود. مقدار TCNTn در نمودار زمان بندی به عنوان نمودار تابع برای نشان دادن شمارش یک جهته نشان داده شده است. نمودار خروجی PWM معکوس و غیر معکوس را نشان می دهد. خط افقی کوتاه، نقاطی را در نمودار TCNTn نشان می دهد که در آن مقادیر OCRnx و TCNTnx مطابقت دارند. پرچم وقفه OCnx زمانی تنظیم می شود که یک تطابق رخ می دهد.

شکل 2 - نمودار زمان بندی برای حالت PWM سریع

پرچم سرریز تایمر شمارشگر (TOVn) زمانی تنظیم می شود که شمارنده به حد بالایی خود برسد. علاوه بر این، اگر به ترتیب از ثبت OCRnA یا ICRn برای تنظیم حد بالایی استفاده شود، پرچم‌های OCnA یا ICFn را می‌توان روی یک پالس ساعت همراه با پرچم TOVn تنظیم کرد. اگر یکی از این وقفه‌ها فعال باشد، روال وقفه می‌تواند حد بالای شمارش را به‌روزرسانی کند و آستانه‌ها را با هم مقایسه کند.

اگر مقدار حد بالایی شمارش تغییر کند، آنگاه باید شرایطی برقرار شود که مقدار جدید حد بالایی که نوشته می‌شود بزرگ‌تر یا مساوی با مقادیر موجود در همه رجیسترهای آستانه مقایسه باشد. در غیر این صورت، تطابق بین TCNTn و OCRnx هرگز رخ نخواهد داد. توجه داشته باشید که هنگام استفاده از مقادیر حد بالایی ثابت، بیت‌های استفاده نشده هنگام نوشتن روی رجیسترهای OCRnx روی 0 پوشانده می‌شوند.

مکانیزم تغییر رجیستر ICRn با OCRnA اگر برای تنظیم حد بالایی استفاده شود متفاوت است. رجیستر ICRn دارای دو بافر نیست. این بدان معناست که اگر مقدار کوچکی در ICRn نوشته شود در حالی که شمارنده با یا بدون پیش مقیاس پایین در حال اجرا است، این خطر وجود دارد که مقداری کمتر از مقدار فعلی TCNTn در ICRn نوشته شود. در نتیجه مسابقه بالای امتیاز در چنین شرایطی از دست خواهد رفت. در این حالت، شمارنده به حداکثر مقدار (0xFFFF) می رسد، از 0x0000 مجدداً راه اندازی می شود و تنها پس از آن یک تطابق رخ می دهد. ثبت OCRnA شامل یک طرح بافر دوگانه است، بنابراین می توان آن را در هر زمان تغییر داد.

class="eliadunit">

اگر یک آدرس OCRnA نوشته شود، مقدار در واقع در بافر ثبات OCRnA قرار می گیرد. اگر بین TCNTn و بالای شمارش تطابق وجود داشته باشد، سیکل همگام‌سازی تایمر بعدی، ثبت بافر را در ثبت آستانه مقایسه OCRnA کپی می‌کند. به روز رسانی ثبت در همان چرخه تنظیم مجدد TCNTn و تنظیم پرچم TOVn انجام می شود.

توصیه می شود از ثبات ICRn برای تنظیم حد بالایی استفاده کنید اگر حد بالای شمارش ثابت است. در این حالت، رجیستر OCRnA نیز برای تولید سیگنال PWM در خروجی OCnA آزاد می شود. با این حال، اگر فرکانس PWM به صورت پویا در حال تغییر است (با تغییر حد بالایی)، در این صورت استفاده از ثبات OCRnA برای تنظیم حد بالایی سودمندتر است، زیرا. از بافر دوگانه پشتیبانی می کند.

در حالت PWM سریع، بلوک‌های مقایسه به شما امکان می‌دهند سیگنال‌های PWM را روی پین‌های OCnx تولید کنید. اگر COMnx1:0 =0b10، PWM بدون وارونگی خروجی تنظیم شده است، و اگر COMnx1:0 = 0b11، حالت PWM با وارونگی خروجی تنظیم می شود (جدول 59 را ببینید). اگر در جهت خروجی (DDR_OCnx) تنظیم شده باشد، مقدار واقعی OCnx روی پین پورت قابل مشاهده است. سیگنال PWM با تنظیم (تنظیم مجدد) رجیستر OCnx هنگامی که تطابق بین OCRnx و TCNTn رخ می دهد، و با تنظیم مجدد (تنظیم) ثبات OCnx همراه با تنظیم مجدد شمارنده (حد بالا به حد کم انتقال) تولید می شود.

فرکانس PWM سیگنال خروجی برای یک مقدار معین از حد بالایی (UP) با عبارت:

که در آن N متغیری است که مقدار ضریب پیش مقیاس را مشخص می کند (1، 8، 32، 64، 128، 256، یا 1024).

نوشتن مقادیر حدی در رجیستر OCRnx با موارد خاصی در تولید پالس های PWM همراه است. اگر OCRnx برابر با حد پایین (0x0000) تنظیم شود، در هر (VP+1) امین سیکل همگام‌سازی تایمر، یک پالس کوتاه در خروجی رخ می‌دهد. نوشتن مقداری به OCRnx برابر با حد بالایی، یک سطح گزارش ثابت را تعیین می کند. 1 یا 0 در خروجی (بسته به قطبیت سیگنال خروجی انتخاب شده با بیت COMnx1:0).

اگر می خواهید یک موج مربعی (پالس های مستطیلی با چرخه کاری 2 یا 50٪ پر شدن) با فرکانس بالا تولید کنید، باید از حالت PWM سریع با مجموعه بیت COMnA1:0 = 0b01 استفاده کنید که باعث ایجاد سطح منطقی می شود. برای سوئیچ کردن (معکوس کردن) در خروجی OCnA در هر مسابقه. این فقط در صورتی قابل اعمال است که OCRnA برای تنظیم حد بالایی (WGMn3-0 = 0b1111) استفاده شود. حداکثر فرکانس موج مربعی تولید شده در این مورد fOCnA = fclk_I/O/2 است اگر OCRnA = 0x0000. این ویژگی مانند سوئیچینگ OCnA در حالت CTC است، به جز بافر دوگانه که در حالت سریع PWM موجود است.

حالت مدولاسیون عرض پالس با تصحیح فاز (Phase Correct)

مدولاسیون عرض پالس با تصحیح فاز (PWM PK) (WGMn3-0 = 0b0001، 0b010، 0b0011، 0b1010 یا 0b1011) برای تولید سیگنال PWM اصلاح شده فاز با وضوح بالا طراحی شده است. حالت PWM FC بر اساس عملکرد تایمر-شمارگر دو جهته است. شمارنده از طریق شمارش از حد پایین (0x0000) به حد بالا و سپس از حد بالا به حد پایین باز می گردد. اگر حالت غیر معکوس خروجی شکل‌دهنده پالس تنظیم شده باشد، زمانی که مقادیر TCNTn و OCRnx در طول شمارش بالا/پایین مطابقت داشته باشند، خروجی OCnx بازنشانی/تنظیم می‌شود. اگر حالت خروجی معکوس تنظیم شود، برعکس، در طول شمارش رو به جلو، تنظیم رخ می دهد و در حین شمارش معکوس، خروجی OCnx تنظیم مجدد می شود. در عملکرد دو طرفه، حداکثر فرکانس سیگنال PWM کمتر از عملکرد یک طرفه است، اما به دلیل وجود ویژگی مانند تقارن در حالت های PWM با عملکرد دو طرفه، ترجیح داده می شود از این حالت ها در هنگام حل مشکلات کنترل درایو استفاده شود.

وضوح PWM در این حالت می تواند ثابت شود (8، 9 یا 10 بیت) یا با استفاده از ثبات ICRn یا OCRnA تنظیم شود. حداقل وضوح 2 بیت (ICRn یا OCRnA = 0x0003) و حداکثر 16 بیت است (ICRn یا OCRnA = 0xFFFF). اگر حد بالایی تنظیم شده باشد، وضوح PWM در این حالت به صورت زیر تعیین می شود:

در حالت PWM FC، شمارنده افزایش می یابد تا به یکی از مقادیر ثابت 0x00FF، 0x01FF یا 0x03FF برسد (به ترتیب برای WGMn3-0 = 0b0001، 0b0010 یا 0b0011)، و همچنین مقداری برابر با ICRn3-0 (اگر WGM) = 0b1010) یا OCRnA (اگر WGMn3 :0 = 0b1011). علاوه بر این، هنگامی که به حد بالایی رسید، شمارنده جهت شمارش را تغییر می دهد. مقدار TCNTn برابر با حد بالایی برای یک سیکل ساعت تایمر باقی می ماند. نمودار زمان بندی حالت PWM FC در شکل 3 نشان داده شده است. شکل حالت PWM FC را با استفاده از رجیستر OCRnA یا ICRn برای تنظیم حد بالایی نشان می دهد. حالت TCNTn به عنوان یک نمودار تابع برای نشان دادن دو جهتی بودن تعداد ارائه شده است. شکل خروجی PWM غیر معکوس و معکوس را نشان می دهد. خطوط افقی کوتاه نقاطی را در نمودار تغییر TCNTn نشان می‌دهند که تطابق با مقدار OCRnx رخ می‌دهد. پرچم وقفه OCnx زمانی تنظیم می شود که یک تطابق رخ می دهد.

شکل 3 - نمودار زمان بندی برای حالت PWM FC

پرچم سرریز تایمر شمارشگر (TOVn) زمانی تنظیم می شود که شمارنده به حد پایین برسد. اگر از رجیستر OCRnA یا ICRn برای تنظیم حد بالایی استفاده شود، پرچم OCnA یا ICFn بر همین اساس روی همان پالس ساعتی که رجیستر OCRnx از ثبات بافر (در بالای شمارش) به روز شده است، تنظیم می شود. از پرچم های وقفه می توان برای ایجاد وقفه زمانی که شمارنده به حد کم یا زیاد می رسد استفاده کرد.

هنگام تغییر مقدار حد شمارش بالا، باید اطمینان حاصل کنید که بزرگتر یا مساوی با مقادیر موجود در تمام ثبت های مقایسه است. در غیر این صورت، تطابق بین TCNTn و OCRnx هرگز رخ نخواهد داد. توجه داشته باشید که هنگام استفاده از مقادیر ثابت برای حد شمارش بالا، بیت‌های استفاده نشده هنگام نوشتن در رجیسترهای OCRnx روی صفر تنظیم می‌شوند. دوره سوم در شکل 53 حالتی را نشان می دهد که یک تغییر دینامیکی در حد بالایی شمارش منجر به تولید یک پالس نامتقارن می شود. این ویژگی بر اساس زمان به روز رسانی رجیستر OCRnx است. از آنجایی که به روز رسانی OCRnx در بالای شمارش رخ می دهد، دوره PWM در بالای شمارش شروع و به پایان می رسد. این بدان معناست که مدت زمان شمارش رو به پایین با مقدار حد بالایی قبلی تعیین می شود و مدت زمان شمارش رو به جلو با مقدار حد بالایی جدید تعیین می شود. اگر این دو مقدار متفاوت باشند، مدت زمان شمارش رو به جلو و عقب نیز متفاوت خواهد بود. تفاوت در مدت زمان منجر به عدم تقارن پالس های خروجی می شود.

اگر وظیفه تغییر حد بالایی در حین کار کردن شمارنده است، به جای این حالت، توصیه می شود از حالت PWM FCH (تصحیح فاز و فرکانس) استفاده کنید. اگر از یک مقدار حد بالایی ثابت استفاده شود، عملاً هیچ تفاوتی بین این حالت ها وجود ندارد.

در حالت PWM FC، بلوک‌های مقایسه به شما امکان می‌دهند سیگنال‌های PWM را روی پین‌های OCnx تولید کنید. اگر COMnx1:0 = 0b10 را تنظیم کنید، خروجی PWM بدون وارونگی خواهد بود و اگر COMnx1:0=0b11، با وارونگی خواهد بود. اگر جهت خروجی (DDR_OCnx) در رجیستر جهت داده برای آن پایه پورت تنظیم شده باشد، مقدار واقعی OCnx را می توان روی یک پایه پورت مشاهده کرد. سیگنال PWM با تنظیم (تنظیم مجدد) رجیستر OCnx زمانی که مقادیر OCRnx و TCNTn در حین شمارش بالا مطابقت دارند و با پاک کردن (تنظیم) رجیستر OCnx هنگام تطبیق بین OCRnx و TCNTn در حین شمارش معکوس ایجاد می شود. فرکانس حاصل از سیگنال PWM در حالت PWM FC در حد بالایی معین (UP) را می توان با استفاده از عبارت زیر محاسبه کرد:

نوشتن مقادیر حدی در رجیستر OCRnx به دلیل موارد خاص در تولید سیگنال های PWM در حالت PWM FK است. اگر حالت PWM را بدون وارونگی تنظیم کنید و OCRnx را برابر با حد پایین تنظیم کنید، خروجی به طور مداوم روی ورود تنظیم می شود. 0، و اگر برابر با حد بالایی باشد، لاگ به طور مداوم در خروجی وجود دارد. 1. برای PWM با وارونگی، سطوح نشان داده شده باید با سطوح مخالف جایگزین شوند.

اگر از OCnA به عنوان حد بالایی استفاده کنید (WGMn3:0 = 0b1011) و COMnA1:0 =0b01 را تنظیم کنید، یک موج مربعی در خروجی OCnA ایجاد می شود.

حالت مدولاسیون عرض پالس با اصلاح فاز و فرکانس (فاز و فرکانس صحیح)

مدولاسیون عرض پالس با تصحیح فاز و فرکانس (PWM PFC) (WGMn3-0 = 0b1000 یا 0b1001) برای تولید پالس های PWM با وضوح بالا با اصلاح فاز و فرکانس طراحی شده است. مانند حالت PWM FC، حالت PWM FC بر اساس عملکرد دو طرفه شمارنده است. شمارشگر به صورت دوره ای از حد پایین (00000×0) تا حد بالا و سپس از حد بالا به حد پایین برمی گردد. اگر حالت PWM غیر معکوس تنظیم شده باشد، خروجی OCnx بازنشانی می شود اگر تطبیقی ​​بین TCNTn و OCRnx در حین شمارش بالا رخ دهد، و اگر تطابق در حین شمارش معکوس رخ دهد تنظیم می شود. در حالت معکوس، عملکرد معکوس است. عملکرد دو طرفه، در مقایسه با عملیات یک طرفه، با تولید فرکانس‌های پایین‌تر همراه است. با این حال، به دلیل تقارن در حالت های PWM با شمارش دو طرفه، استفاده از آنها در کارهای کنترل درایو ارجحیت دارد.

تفاوت اصلی بین حالت های PWM FC و PWM PFC زمانی است که رجیستر OCRnx از ثبت بافر OCRnx به روز می شود (شکل 3 و شکل 4 را ببینید).

وضوح PWM در این حالت را می توان با استفاده از ثبات ICRn یا OCRnA تنظیم کرد. حداقل وضوح 2 بیت (ICRn یا OCRnA = 0x0003) و حداکثر وضوح 16 بیت است (ICRn یا OCRnA = 0xFFFF). وضوح PWM در بیت را می توان با استفاده از عبارت زیر محاسبه کرد:

در حالت PWM LFC، شمارنده تا زمانی افزایش می‌یابد که با مقدار ICRn (WGMn3:0 = 0b1000) یا OCRnA (WGMn3:0 = 0b1001) مطابقت پیدا کند. این به معنای رسیدن به بالای شمارش است که پس از آن تغییری در جهت شمارش ایجاد می شود. مقدار TCNTn برابر با بالای شمارش برای یک چرخه ساعت از ساعت تایمر باقی می ماند. نمودار زمان بندی حالت PWM PFC در شکل 54 نشان داده شده است. شکل حالت PWM PFC را زمانی نشان می دهد که بالای شمارش توسط رجیستر OCRnA یا ICRn تنظیم شده باشد. مقدار TCNTn به عنوان یک نمودار تابع برای نشان دادن دو جهتی بودن تعداد نشان داده می شود. نمودار خروجی PWM غیر معکوس و معکوس را نشان می دهد. خطوط افقی کوتاه نقاطی را در نمودار TCNTn نشان می دهد که در آن تطابق بین OCRnx و TCNTn رخ می دهد. پرچم وقفه OCnx پس از وقوع مسابقه تنظیم می شود.

شکل 4 - نمودار زمان بندی حالت PWM با اصلاح فاز و فرکانس

پرچم سرریز تایمر شمارشگر (TOVn) در همان چرخه ای تنظیم می شود که رجیسترها با مقدار ثبت بافر (در حد تعداد کم) به روز شدند. اگر از رجیستر OCRnA یا ICRn برای تنظیم حد بالایی استفاده شود، هنگامی که شمارنده به حد بالایی رسید، به ترتیب پرچم OCnA یا ICFn تنظیم می شود. از پرچم های وقفه می توان برای ایجاد وقفه زمانی که شمارنده به حد بالا یا پایین می رسد استفاده کرد.

هنگام تغییر حد بالایی، باید اطمینان حاصل کنید که مقدار جدید بزرگتر یا مساوی با مقادیر موجود در همه رجیسترهای آستانه مقایسه است. در غیر این صورت، اگر مقدار حد بالایی کمتر از هر یک از مقادیر ثبت آستانه مقایسه باشد، تطابق بین TCNTn و OCRnx هرگز رخ نخواهد داد.

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

اگر مقدار حد بالا ثابت باشد، استفاده از ثبات ICRn برای تنظیم حد بالا توصیه می شود. در این مورد، رجیستر OCRnA نیز برای مدولاسیون عرض پالس پالس‌های روی پین OCnA آزاد می‌شود. با این حال، اگر می خواهید به صورت پویا فرکانس PWM را با تغییر حد بالایی تغییر دهید، توصیه می شود از ثبات OCRnA برای تنظیم حد بالایی به دلیل بافر مضاعف آن استفاده کنید.

در حالت PWM PFC، مقایسه کننده ها به شما اجازه می دهند پالس های PWM را روی پین OCnx تولید کنید. اگر COMnx1:0 = 0b10، یک خروجی PWM غیر معکوس تنظیم می شود، و اگر COMnx1:0=0b11، یک خروجی معکوس تنظیم می شود (جدول 60 را ببینید). مقدار OCnx فقط در صورتی روی پین پورت مربوطه وجود دارد که روی یک جهت خروجی تنظیم شده باشد. سیگنال PWM با تنظیم (پاک کردن) رجیستر OCnx در تطابق بین OCRnx و TCNTn در حین شمارش بالا و تنظیم مجدد (تنظیم) رجیستر OCnx در تطابق بین OCRnx و TCNTn در طول شمارش معکوس تولید می شود. فرکانس PWM در این حالت با حد بالایی (VP) شمارش به صورت زیر تعیین می شود:

که در آن N ضریب تقسیم پیش مقیاس کننده است (1، 8، 32، 64، 128، 256 یا 1024).

نوشتن مقادیر حدی در رجیستر OCRnx با موارد خاصی در تولید سیگنال های PWM در این حالت مرتبط است. اگر OCRnx را برابر با حد پایین (0x0000) تنظیم کنید، در حالت غیر معکوس خروجی دائماً کم خواهد بود و وقتی مقداری برابر با حد بالایی بنویسید، خروجی برای همیشه بالا خواهد بود. در حالت معکوس، سطوح داده شده مخالف خواهند بود.

اگر از OCRnA برای تنظیم حد بالایی (WGMn3:0 = 0b1001) و COMnA1:0 = 0b01 استفاده شود، آنگاه یک موج مربعی در خروجی OCnA تولید می شود.

پیاده سازی سخت افزاری PWM مزایای بی قید و شرطی را نسبت به نرم افزار فراهم می کند، زیرا پردازنده را با کدهای غیر ضروری و دست و پا گیر و زمان برای نگهداری آن تخلیه می کند و همچنین فرصت های بیشتری را برای استفاده از PWM فراهم می کند. کافی است تایمر / شمارنده را مقداردهی اولیه کنید (مقادیر لازم را در رجیسترهای استفاده شده توسط تایمر / شمارنده قرار دهید) زیرا تایمر / شمارنده می تواند مستقل از پردازنده کار کند، به ترتیب، پردازنده می تواند کارهای دیگری را انجام دهد، فقط گاهی اوقات می چرخد. به لحظه لازم برای تنظیم یا تغییر حالت یا دریافت نتایج از تایمر / شمارنده.

شرح پرچم های وقفه

T1 می تواند یک وقفه ایجاد کند زمانی که:

  1. سرریز ثبت شمارش TCNT1؛
  2. هنگامی که ثبت شمارش TCNT1 و ثبت مقایسه OCR1A و OCR1B برابر هستند (به طور جداگانه برای هر ثبات).
  3. در حین ذخیره رجیستر شمارش در ثبت ثبت ICR1.

T2 می تواند یک وقفه ایجاد کند زمانی که:

  1. سرریز ثبت شمارش TCNT2؛
  2. هنگامی که ثبت شمارش TCNT2 و ثبت مقایسه OCR2 برابر باشند.

پرچم‌ها برای همه وقفه‌ها در رجیستر TIFR و وقفه‌های فعال/غیرفعال در رجیستر TIMSK هستند.

بیت های موجود در ثبات TIMSK
ثبت نام7 6 5 4 3 2 1 0
TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0* TOIE0
  • OCIE2- پرچم برای فعال کردن وقفه در رویداد "تصادف" تایمر / شمارنده T2
  • TOIE2- وقفه سرریز تایمر/ شمارنده پرچم T2 را فعال می کند
  • TICIE1- پرچم برای فعال کردن وقفه در رویداد "گرفتن" تایمر / شمارنده T1
  • OCIE1A- پرچم برای فعال کردن وقفه در رویداد "تصادف A" تایمر / شمارنده T1
  • OCIE1B- پرچم برای فعال کردن وقفه در رویداد "تصادف B" تایمر / شمارنده T1
  • TOIE1- وقفه سرریز تایمر/ شمارنده پرچم T1 را فعال می کند
  • OCIE0*- پرچم برای فعال کردن وقفه در رویداد "تصادف" تایمر / شمارنده T0 (* - در ATmega8 وجود ندارد)
  • TOIE0- وقفه سرریز تایمر/ شمارنده پرچم T0 را فعال کنید
  • OCF2- پرچم وقفه در رویداد "تصادف" تایمر / شمارنده T2
  • TOV2- پرچم وقفه سرریز تایمر/ شمارنده T2
  • ICF1- پرچم وقفه در رویداد "گرفتن" تایمر / شمارنده T1
  • OCF1A- پرچم وقفه در رویداد "تصادف A" تایمر / شمارنده T1
  • OCF1B- پرچم وقفه در رویداد "تصادف B" تایمر / شمارنده T1
  • TOV1- پرچم وقفه تایمر / شمارنده سرریز T1
  • OCF0- پرچم وقفه در رویداد "تصادف" تایمر / شمارنده T0
  • TOV0- پرچم وقفه سرریز تایمر/ شمارنده T0

شرح عملکرد تایمر / شمارنده T1 در کنترلر ATmega8 / 16

تایمر/ شمارنده شانزده بیتی T1 را می توان برای تشکیل فواصل زمانی، شمارش تعداد سیگنال های خارجی، و تولید سیگنال های PWM با چرخه های کاری و مدت زمان های مختلف در پین های OC1A و OC1B استفاده کرد. علاوه بر این، در یک سیگنال خارجی از پایه ICP1 یا یک مقایسه کننده آنالوگ، T1 می تواند وضعیت فعلی خود را در یک ثبت ضبط جداگانه ICR1 ذخیره کند.

بیت های ثبت نام TCCR1A:TCC1B:TCNT1:OCR1A:OCR1B:ICR1
ثبت نام7 6 5 4 3 2 1 0
TCCR1A COM1A1 COM1A0 COM1B1 COM1BO FOC1A FOC1B WGM11 WGM10
TCCR1B ICNC1 ICES1 * WGM13 WGM12 CS12 CS11 CS10
TCNT1: H R/W R/W R/W R/W R/W R/W R/W R/W
TCNT1: L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A:H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A:L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B:H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B:L R/W R/W R/W R/W R/W R/W R/W R/W
ICR1:H R/W R/W R/W R/W R/W R/W R/W R/W
ICR1:L R/W R/W R/W R/W R/W R/W R/W R/W

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

TCCR1A:TCCR1B- ثبت تایمر/کنترل 8 بیتی T1

TCNT1- ثبت تایمر / شمارنده 16 بیتی T1. بسته به نحوه عملکرد، محتویات این رجیستر با هر پالس ساعت شمارنده/تایمر صفر، افزایش (افزایش 1) یا کاهش (کاهش 1) می شود.

OCR1A:OCR1B- رجیسترهای مقایسه 16 بیتی

ICR1- ثبت ضبط 16 بیتی، مقدار TCNT1 را هنگامی که یک لبه فعال به پین ​​ICP1 یا از مقایسه کننده اعمال می شود، ذخیره می کند.

تخصیص بیت

COM1A1:COM1A0:COM1B1:COM1B0- این بیت ها رفتار خروجی OC1A:OC1B را زمانی که مقدار ثبات شمارشگر TCNT1 و ثبات مقایسه OCR1A:OCR1B مطابقت دارند تعیین می کنند.

FOC1A:FOC1B- این بیت ها برای تغییر وضعیت خروجی OC1A:OC1B استفاده می شوند

ICNC1- بیت کنترل مدار اختلال، اگر بیت "0" باشد، گرفتن در اولین لبه فعال خواهد بود، اگر "1" ضبط بعد از چهارمین نمونه مشابه سیگنال ضبط خواهد بود.

ICES1- بیت انتخاب لبه فعال، اگر مقدار آن "0" باشد، ذخیره رجیستر شمارش TCNT1 در ثبت ثبت OCR1 در لبه سقوط سیگنال خواهد بود، اگر "1" در حال افزایش باشد.

WGM13:WGM12:WGM11:WGM10- این بیت ها نحوه عملکرد تایمر / شمارنده T1 را تعیین می کنند

CS22:CS21:C20- بیت هایی که منبع سیگنال ساعت شمارنده/تایمر T1 را تعیین می کنند.

انتخاب حالت کار تایمر / شمارنده T1
WGM13WGM12WGM11WGM10حالت کارماژول حساب (TOP)
0 0 0 0 معمولی $FFFF
0 0 0 1 PWM فاز صحیح

8 بیتی

$00FF
0 0 1 0 PWM فاز صحیح

9 بیتی

$01FF
0 0 1 1 PWM فاز صحیح

10 بیت

$03FF
0 1 0 0 CTC (بازنشانی در بازی) OCR1A
0 1 0 1 PWM سریع

8 بیتی

$00FF
0 1 1 0 PWM سریع

9 بیتی

$01FF
0 1 1 1 PWM سریع

10 بیت

$03FF
1 0 0 0 ICR1
1 0 0 1 Phase and Freguensy Correct PWM OCR1A
1 0 1 0 PWM فاز صحیح ICR1
1 0 1 1 PWM فاز صحیح OCR1A
1 1 0 0 CTC (بازنشانی در بازی) ICR1
1 1 0 1 رزرو شده است *
1 1 1 0 PWM سریع ICR1
1 1 1 1 PWM سریع OCR1A

انتخاب منبع ساعت

حالت عادی

ساده ترین حالت کار T1 است. برای هر پالس سیگنال ساعت، رجیستر شمارش TCNT1 افزایش می یابد (مقدار را 1 افزایش می دهد). هنگام عبور از مقدار $FFFF ماژول شمارنده (TOP)، یک سرریز رخ می دهد و چرخه بعدی شروع به شمارش از مقدار $0000 می کند، در همان لحظه ای که پرچم TOV1=1 در ثبات TIFR تنظیم می شود، و می توان یک وقفه ایجاد کرد. اگر پرچم TOIE1=1 در ثبات TIMSK تنظیم شده باشد، ایجاد می شود. برای تولید سیگنالی با فرکانس معین در این حالت، باید روی بیت ها COM1A1=0:COM1A0=1 برای خروجی OC1A یا COM1B1=0:COM1B0=1 برای خروجی OC1B کنترلر بنویسید.

علاوه بر این، برای هر چرخه، رجیستر شمارش TCNT1 و رجیستر مقایسه OCR1A:OCR1B با هم مقایسه می شوند، در صورت تنظیم، پرچم وقفه OCF1A=1:OCF1B=1 تنظیم می شود و اگر بیت OCIE1A=1:OCIE1B= 1 از ثبات TIMSK، یک وقفه ایجاد می شود. در عین حال، وضعیت پین OC1A:OC1B بسته به تنظیمات بیت های COM1A1:COM1A0:COM1B1:COM1B0 قابل تغییر است.

حالت CTC (بازنشانی در بازی)

در این حالت، T1 با همان اصل در حالت عادی کار می کند. تفاوت این است که حداکثر مقدار ممکن رجیستر شمارنده TCNT1 با مقدار ثبت مقایسه OCR1A یا ICR1 محدود می شود (جدول انتخاب حالت تایمر/ شمارنده را ببینید). وقتی TCNT1 به OCR1A یا ICR1 رسید، مقدار TCNT1 به TCNT1=0000$ بازنشانی می‌شود و همزمان پرچم TOV1=1 تنظیم می‌شود.

حالت PWM سریع (PWM سریع)

با این حالت می توانید سیگنال PWM با فرکانس بالا تولید کنید. اصل و روش کار با حالت عادی تفاوتی ندارد، به جز وجود بافر دوگانه رجیستر OCR1A: OCR1B که ظاهر پالس های سیگنال نامتقارن را حذف می کند و همچنین در رفتار پین های OS1A: OC1B متفاوت است. جدول را ببینید).


حالت PWM صحیح فاز (PWM با فاز دقیق)

تفاوت این حالت با حالت های قبلی در این است که رجیستر شمارش به عنوان یک شمارنده برگشت پذیر عمل می کند. از آنجایی که اتمل این حالت را به عنوان مناسب ترین حالت برای تنظیم موتورها توصیه می کند، در ادامه به بررسی آن خواهیم پرداخت. هنگامی که رجیستر شمارشگر TCNT1 به مقدار مدول شمارنده (TOP) می رسد (یا مقدار رجیستر ICR1 یا مقدار ثبات OCR1A، جدول انتخاب حالت تایمر/ شمارنده را ببینید)، جهت شمارش معکوس می شود. هنگامی که رجیستر شمارش TCNT1 به حداقل مقدار (0000 دلار) رسید، جهت شمارش نیز تغییر می کند و در همان لحظه پرچم وقفه TOV1 رجیستر TIFR تنظیم می شود. همچنین اگر محتویات رجیستر شمارش TCNT1 و رجیستر مقایسه OCR1A:OCR1B برابر باشد، طبق جدول، پرچم OCF1A:OCF1B رجیستر TIFR تنظیم شده و وضعیت خروجی OC1A:OC1B تغییر می کند.

برای جلوگیری از انتشار نامتقارن در حین نوشتن یک مقدار در رجیستر OCR1A:OCR1B، بافر مضاعف نوشتن در این حالت اجرا می شود. با توجه به این، تغییر واقعی در مقدار ثبات زمانی تغییر می کند که رجیستر شمارنده TCNT1 به مقدار ماژول شمارنده (TOP) برسد (یا مقدار ثبات ICR1 یا مقدار ثبات OCR1A، به تایمر مراجعه کنید. / جدول انتخاب حالت شمارنده). بنابراین، در همان ابتدا، هنگامی که تایمر/شمارگر مقدار دهی اولیه می شود، خروجی OC1A:OC1B تا زمانی که ثبات به مقدار (TOP) نرسد، وضعیت خود را در یک مسابقه تغییر نمی دهد.

یک وظیفه:بیایید برنامه ای برای کنترل روشنایی یک لامپ رشته ای 12 ولتی با استفاده از PWM ایجاد کنیم. با فشار دادن دکمه "بیشتر" روشنایی لامپ افزایش می یابد و با فشار دادن دکمه "کمتر" روشنایی کاهش می یابد. نمودار دستگاه آینده ما در شکل نشان داده شده است. طبق معمول از میکروکنترلر Atmega8 استفاده می کنیم که از یک نوسانگر داخلی 4 مگاهرتز کلاک می شود. در واقع، ما یک دیمر دریافت می کنیم، این دستگاه ها برای تنظیم روشنایی وسایل روشنایی طراحی شده اند. در حال حاضر گسترده ترین دیمر LED.

برای سادگی، شما همچنین می توانید یک LED را به مدار ما متصل کنید، اما با یک لامپ روشن تر خواهد بود. دکمه های متصل به پین ​​ها PD0, PD1. بار را به خروجی وصل می کنیم PB1 (OC1A)از طریق یک مقاومت و یک ترانزیستور اثر میدانی ماسفت، که برای ما به عنوان یک کلید (در حالت کلید) کار می کند. ترانزیستور اثر میدان ارجح است زیرا گیت آن از مدار قدرت جدا شده و کنترل توسط میدان الکتریکی انجام می شود و جریان کنترل به میکرو آمپر می رسد. این اجازه می دهد تا با استفاده از یک یا دو ترانزیستور، یک بار قدرت عظیم (تا ده ها آمپر و ده ها تا صدها ولت) را بدون بارگذاری میکروکنترلر کنترل کنید. همچنین با در نظر گرفتن این واقعیت که ترانزیستورهای اثر میدانی را می توان به صورت موازی متصل کرد (برخلاف ترانزیستورهای دوقطبی)، می توان یک آبشار حتی قدرتمندتر با صدها آمپر به دست آورد.

حالا بیایید بفهمیم که چگونه میکروکنترلر PWM را پیاده سازی کرده و یک برنامه بنویسیم. همانطور که قبلا ذکر شد، MK ما دارای 3 تایمر است و همه آنها می توانند در حالت PWM کار کنند. ما با یک تایمر / شمارنده 16 بیتی کار خواهیم کرد. بیت ها WGM13-10تایمر خود را برای کار با FastPWM با محدودیت تعداد بالا تنظیم کنید ICR1. اصل برنامه این است که تایمر ما از 0 تا 65535 (0xFFFF) در رجیستر می‌شمارد. ICR1ما عدد 255 را وارد می کنیم، این حد بالای شمارش تایمر (TOP) خواهد بود، فرکانس سیگنال PWM ثابت خواهد بود. همچنین، تایمر ما به گونه‌ای پیکربندی شده است که وقتی رجیستر شمارش و رجیستر مقایسه مطابقت دارند (TCNT1 = OCR1A)، خروجی کنترلر تغییر می‌کند. OC1A. چرخه وظیفه PWM را می توان با نوشتن در ثبت مقایسه تغییر داد OCR1Aیک عدد معین از 0 تا 255، هر چه این عدد بزرگتر باشد، چرخه کار بیشتر باشد، لامپ روشن تر خواهد سوخت. بسته به اینکه کدام دکمه را فشار دهید، متغیر تغییر می کند. من، و سپس در رجیستر نوشته می شود OCR1A.

متن کامل برنامه در زیر ارائه شده است. نظرات عملکرد برنامه را با جزئیات بیشتری شرح می دهد.

/*** درس شماره 8. تولید سیگنال های PWM***/ #include #عبارتند از int main(void) (unsigned int i=0; //define i متغیر /***تنظیم پورت های ورودی/خروجی***/ PORTB = 0x00؛ DDRB |= (1<< PB1); PORTD |= (1 << PD1)|(1 << PD0); // подключаем внутренние нагрузочные резисторы DDRD = 0x00; /***Настройка таймера***/ TCCR1A |= (1 << COM1A1)|(0 << COM1A0) // Установим биты COM1A1-COM1A0:0b10, означает сброс вывода канала A при сравнении |(1 << WGM11)|(0 << WGM10); // Установим биты WGM13-10:0b1110, согласно таблице это TCCR1B |= (1 << WGM13)|(1 << WGM12) // будет режим - FAST PWM, где верхний предел счета задается битом ICR1 |(0 << CS12)|(0 << CS11)|(1 << CS10); // Битами CS12-10:0b001 задаем источник тактового сигнала для таймера МК, включен без делителя TCNT1 = 0x00; // начальная установка счетчика ICR1 = 0xFF; // задаем период ШИМ, здесь у нас число 255, // по формуле fPWM=fclk_I/O/N*(1+ICR1)// вычисляем частоту ШИМ, она будет равна 15625 Hz OCR1A = 0x00; // начальный коэффициент заполнения ШИМ /***Основной цикл программы***/ while(1) { if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата { if (i < 254) { // коэффициент заполнения ШИМ изменяется от 0 до 255 i=i+1; // увеличиваем i на единицу OCR1A = i; // записываем переменную в регистр сравнения _delay_ms(30); // задержка 30ms } } if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата { if (i >0) // چرخه وظیفه PWM از 255 به 0 تغییر می کند (i--؛ // i را یک بار کاهش دهید (این را نیز می توان نوشت) OCR1A = i؛ // متغیر را در ثبات مقایسه بنویسید _delay_ms(30)؛ // تاخیر 30 میلی ثانیه ))))

توجه!ابتدا به میکروکنترلر برق می‌دهیم، سپس باید مطمئن شوید که ترانزیستور به خروجی MK متصل است و تنها پس از آن با لامپ و ترانزیستور اثر میدان برق را به مدار اعمال کنید. در غیر این صورت می توانید ترانزیستور را بسوزانید. واقعیت این است که در حالت خاموش، "پاهای" MK "در هوا آویزان می شوند" - آنها به هیچ چیز متصل نیستند و تداخل روی آنها رخ می دهد. این پیکاپ های ضعیف برای باز کردن جزئی ترانزیستور اثر میدان بسیار حساس کافی هستند. سپس مقاومت آن بین تخلیه و منبع از چند مگا اهم به چند اهم یا کسری از اهم کاهش می یابد و جریان زیادی از آن به لامپ می گذرد. اما ترانزیستور به طور کامل باز نمی شود، زیرا برای این کار شما باید نه پیکاپ های 1-3 ولتی را روی دروازه، بلکه 5 ولت پایدار اعمال کنید و مقاومت آن بسیار بالاتر از حداقل خواهد بود. این امر منجر به انتشار مقدار زیادی گرما روی آن می شود و دود می کند و احتمالاً می سوزد.

به طور کلی، تایمر دارای یک ثبت مقایسه است OCR**و زمانی که مقدار در تایمر با مقدار ثبات مقایسه مطابقت داشته باشد OCR** 2 چیز ممکن است رخ دهد:

  • قطع کنید
  • تغییر وضعیت پین مقایسه خارجی OC**

حالا می توانیم راه اندازی کنیم PWMوقتی شمارنده به مقدار رسید OCR**ولتاژ روی پایه ای که انتخاب کرده ایم OC**از 5 به 0 تغییر دهید. وقتی تایمر تا آخر می شمرد و شروع به شمارش می کند، ابتدا ولتاژ را از 0 به 5 تغییر دهید، در خروجی پالس های مستطیلی خواهیم داشت.

3 حالت کار وجود داردPWM

STS(بازنشانی در مسابقه) - این را می توان نامید CHIMسیگنال مدل‌سازی شده با فرکانس پالس زمانی که تایمر به مقدار می‌شمرد OCR**تنظیم مجدد و تغییر مقدار OC**برعکس بنابراین چرخه وظیفه PWMهمیشه همینطور

این زمانی استفاده می‌شود که شما نیاز به شمارش دوره‌های دقیق یا ایجاد وقفه‌ها پس از یک زمان معین دارید.

PWM سریع(PWM سریع) - شمارنده از 0 تا 255 شمارش می شود و پس از آن به 0 بازنشانی می شود.

زمانی که مقدار تایمر مطابقت دارد OCR**خروجی مربوطه به 0 بازنشانی می شود و در هنگام تنظیم مجدد روی 1 تنظیم می شود.

اغلب به عنوان معمولی استفاده می شود PWM.

PWM فاز صحیح(Phase Precise PWM) - در این حالت شمارنده از 0 تا 255 شمارش می کند و سپس تا صفر شمارش معکوس می کند. در اولین مسابقه با OCR**خروجی به 0 بازنشانی می‌شود، با 2 مسابقه (وقتی شمارنده به عقب برمی‌گردد)، روی 1 تنظیم می‌شود.

آنها به منظور از دست ندادن فاز هنگام تغییر چرخه کار استفاده می شوند.



اگر بخواهیم با خروجی کار کنیم OC1Aضربات را وارد کنید COM1A1 COM1A0
به طور کلی "/" به معنای OR است. TCNT1= OCR1Aبرای PWMروی خروجی OC1A

حالت عملکرد تایمر / شمارنده- حالت عملکرد تایمر / شمارنده.

بالا- مقدار TCNT1 که در آن مقدار خروجی سوئیچ می شود OC**.

TOV1 Flag تنظیم شد- بیت ثبات GIFR در چه مقادیری تنظیم شده است

ما از آخرین جدول حالت مورد نیاز خود را انتخاب می کنیم، به آن نگاه نکنید بالا. از 2 جدول، یکی از 2 گزینه آخر را انتخاب کنید. تنها به ترتیب بیت های لازم در ثبات ها باقی می ماند.

#تعریف F_CPU 8000000UL #شامل #عبارتند از int main() (DDRD = 0xFF; OCR1A=0xC0; // مقایسه با این مقدار OCR1B=0x40؛ //تنظیم PWM و تایمر TCCR1A|=(1<CS10با تنظیم روی 1، او با فرکانس MK در مورد نحوه تنظیم فرکانس تایمر حساب می کند

یکی از بهترین کامپایلرها برای یک زبان Basic مانند برای سری AVR میکروکنترلرهای هشت بیتی.

محیط توسعه FastAVR با یک رابط راحت و متفکر مشخص می شود و شامل یک ویرایشگر، اسمبلر، کامپایلر و برنامه نویس میکروکنترلر است. این برنامه دارای برجسته سازی دستورات، رابط کاربری دوستانه و بسیاری از راه حل های دیگر است که برای تسهیل فرآیند ایجاد و اشکال زدایی برنامه ها طراحی شده اند. FastAVR از آدرس دهی هشت بیتی به جای شانزده بیت استفاده می کند و با تولید کد بسیار فشرده (مخصوصاً برای کنترلرهایی با کمتر از 256 بایت رم) با سایر کامپایلرها مقایسه می کند. علاوه بر این، عملکردهای اضافی یک مولد کاراکتر برای LCD، یک ماشین حساب تایمر و یک ترمینال در برنامه تعبیه شده است. لیست دستگاه‌های میکروکنترلر پشتیبانی شده از AVR شامل سری‌های: 2313، 2323، 2333، 4433، 8515، 8535، ATiny13، ATiny26، ATmega163، Atmega8، Atmega16، Atmega32، ATme many.

زبان مورد استفاده در FastAVR از دستورات اولیه آشنا تشکیل شده است که با عملکردهای مفید اضافی (I2C، 1-Wire، LCD و برخی دیگر) به شدت بهبود یافته است. کامپایلر از برنامه نویسی ساخت یافته پشتیبانی می کند که خوانایی برنامه ها را بهبود می بخشد. این برنامه برنامه واقع در پنجره ویرایشگر فعال را با استفاده از اسمبلر رایگان Atmel در کد اسمبلی استاندارد AVR کامپایل می کند (بخشی از در نتیجه کامپایل و در صورت عدم وجود خطایی در متن منبع، فایلی با پسوند *.asm ایجاد می شود. محیط برنامه نویسی کد تولید شده را در اسمبلر خروجی می دهد که برای توسعه دهندگان با تجربه مفید است.

FastAVR می تواند تقریباً از هر برنامه نویس موجود در مدار برای کنترلرهای AVR متصل به یک پورت سریال یا موازی استفاده کند. کد منبع برنامه مانند متن معمولی به صورت نماد در ویرایشگر داخلی این نرم افزار تایپ شده است. ویرایشگر FastAVR علاوه بر نمایش متن منبع، به طور مستقل برنامه را ویرایش می کند، دستورات، متغیرها و سایر داده ها را با رنگ برجسته می کند. همچنین از قابلیت تعویض برای تراز کردن بلوک های متن پشتیبانی می کند. کد برنامه را می توان در هر ویرایشگر معمولی مشاهده و ویرایش کرد. با این حال، هنگام نوشتن یک برنامه، باید تعدادی از قوانین ارائه شده توسط سینتکس FastAVR را دنبال کنید. به عنوان مثال، در هر برنامه، کامپایلر باید نوع کنترلر مورد استفاده، سرعت ساعت و اندازه پشته برنامه را مشخص کند. چنین دستورالعمل های خاصی (متا دستورالعمل ها) به کد اسمبلی تبدیل نمی شوند.

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

FastAVR توسط Bojan Ivancic از اسلوونی ساخته شده است و محصول MicroDESIGN است. متأسفانه نویسنده پروژه خود را رها کرده، وب سایت او کار نمی کند و تلفن های پشتیبانی پاسخ نمی دهند. خود برنامه مدت زیادی است که به روز نشده است و در نتیجه کامپایلر آخرین مدل های کنترلرهای Atmel را پشتیبانی نمی کند.

برنامه FastAVR پرداخت شد. بدون وارد کردن کد ثبت نام، محیط توسعه تنها در حالت دمو شروع می شود که محدودیت های قابل توجهی دارد. در حال حاضر اپلیکیشن را می توان از لینک زیر دانلود کرد. مجموعه ارائه شده شامل آخرین نسخه کاری برنامه، فایل های راهنما به زبان انگلیسی، نمونه هایی است.

این محصول به زبان انگلیسی نوشته شده است. هیچ روسیفایری برای آن وجود ندارد.

FastAVR تحت ویندوز مایکروسافت اجرا می شود. این برنامه در سیستم عامل های 98SE، NT4، 2000 و XP به درستی عمل می کند.