إصلاح الصمامات AVR. Tiny AVR (HVSP) استعادة تكوين فتيل

رسم تخطيطي لجهاز محلي الصنع يساعد في إحياء MK واستعادة قيم بتات FUSE بعد البرمجة المتسلسلة.

منذ عدة سنوات ، كانت وحدات التحكم الدقيقة Atmel AVR تحظى بشعبية كبيرة بين هواة الراديو. ميزة هذه MK هي أنه يمكنك كتابة "البرامج الثابتة" فيها بالتوازي وفي الوضع التسلسلي.

في ممارسة راديو الهواة ، يتم استخدام المبرمجين التسلسليين (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 هذا.

يعيّن هذا الجهاز قيم المصنع لجميع وحدات بايت الصمامات: عالية ومنخفضة وإضافية ؛ بالإضافة إلى أنه يمحو ذاكرة البرامج والبيانات من "المريض" - ونتيجة لذلك يكتسب حالة الدائرة الدقيقة "النظيفة".

أرز. 1. رسم تخطيطي لجهاز لمعالجة بتات الصمامات في متحكم AVR.

تم وصف هذه الأجهزة بالفعل في الأدبيات الإذاعية للهواة والإنترنت (تحت الأسماء Fuse Doctor و AVR Doctor و AVR Reanimator و AVR Aibolit وما إلى ذلك) ، ولكن هذا الجهاز يحتوي على العديد من الميزات التي تجعل العمل معها أكثر متعة.

أي ، الخطوط PB0-PB7 - إلى السطور PB0-PB7 ، والخط PD6 - إلى السطر PD6 ، إلخ. الأمر الذي ، في حالة تجميع الدائرة بطريقة مطبوعة ، أدى إلى تعقيد التثبيت إلى حد كبير - فقد تطلب الأمر الكثير من وصلات العبور ، أو الأسلاك على الوجهين (ومع ذلك ، اقترح بعض المؤلفين ببساطة تركيب دوائر صغيرة فوق بعضها البعض ، وثني يؤدي غير متصل إلى المقاومات / الموصلات الجانبية واللحام عليها ؛ لكن الاتصال الموثوق به مع "متحكم دقيق كاما سوترا" مشكوك فيه ؛ ونعلم جميعًا جيدًا ما الذي يؤدي إليه الانحناء والانحناء لدبابيس الدائرة الدقيقة ...

هنا ، توجد الدوائر الدقيقة ، كما كانت ، "جنبًا إلى جنب" ، "جاك" ، مما يجعل تخطيط لوحة الدوائر المطبوعة بسيطًا للغاية. في إصدار المؤلف ، الموضح في الشكل 2 ، يكرر إلى حد كبير مخطط الدائرة ، ويحتوي فقط على ثلاثة وصلات عبور صغيرة. حجم اللوحة - 60x60 مم.

ثانيًا ، تتطلب بعض الأجهزة جهدين: 5 فولت لتشغيل MK ، و 12 فولت لخط إعادة تعيين "المريض" للدخول إلى وضع البرمجة.

تتطلب هذه الدائرة جهدًا واحدًا فقط ، والذي يمكن أن ينتشر ضمن نطاق واسع إلى حد ما - الشيء الرئيسي هو أنه لا يقل عن 12 فولت. ثالثًا ، لا تسمح معظم الأجهزة الموصوفة بالاستبدال "الساخن" لـ "المرضى" في حالة تحتاج إلى "علاج" العديد من أعضاء الكنيست على التوالي - بعد كل "وميض" يحتاجون إلى إيقاف تشغيل الطاقة ، واستبدال "المريض" ، ثم إعادة تشغيل الطاقة مرة أخرى ، إلخ.

يضبط هذا الجهاز جميع المخرجات على log.O بعد كل "وميض" ، مما يسمح لك "بمعالجة" الدوائر الدقيقة باستخدام "ناقل" - قم بتوصيل الطاقة ، وتركيب "المريض" ، والضغط على زر "البدء" ، والنظر إلى النتيجة من "العلاج" بواسطة HL1 ، تمت إزالته ، إدخال "مريض" جديد ، النقر عليه ، النظر إلى HL1 ، إزالته ، إدخاله ، إلخ. وكل هذا دون انقطاع التيار الكهربائي (على الأقل افتح "الخيمة" في سوق الراديو!).

رابعًا ، غالبًا في مثل هذه الأجهزة لا يوجد تحقق من فتيل الصمامات المسجلة وبيان نتيجة "العلاج" (مثل "ناجح / غير ناجح"). في هذا التصميم ، يتم توفير التحقق ، ويتم استخدام HL1 LED للإشارة إلى نتائجه ، والتي يمكن أن تحتوي على ثلاث حالات:

  1. صلبة على - برمجة "المريض" كانت ناجحة ، قراءة فتيل بايت تتوافق مع تلك المكتوبة ؛ الجهاز ينتظر "المريض" التالي ؛
  2. وميض بتردد 2 جيجاهرتز - خطأ في برمجة "المريض": بايتات الفتيل المقروءة لا تتطابق مع تلك المكتوبة ؛ لم يدخل "المريض" في وضع البرمجة ، أو لم يتم تثبيته أو كان معيبًا (يوفر البرنامج فحصًا لوجود "مريض" - يقوم AVR العامل بتعيين السجل 1 على خط BSY / RDY (دبوس 3 لـ ATtiny2313 ) عند الدخول في وضع البرمجة المتوازية) ؛ الجهاز ينتظر "المريض" التالي ؛
  3. متوقف - عملية البرمجة والتحقق جارية. تستغرق برمجة "مريض" سليم أقل من ثانية ، ويجب ألا تكون حالة LED هذه ملحوظة في الظروف العادية. إذا كان مؤشر LED في حالة إيقاف التشغيل لفترة طويلة نسبيًا ، فمن المرجح أن يتم تكرار عملية "الوميض" نظرًا لحقيقة أن "المريض" المعيب عالق في وضع التسجيل ولا يقوم بتعيين إشارة الاستعداد BSY / RDY يتوقعه "الطبيب".

كما ذكرنا سابقًا ، فإن الجهاز متعدد الاستخدامات تمامًا ، وهو قابل للتطبيق من أجل "معالجة" أي MK تقريبًا من سلسلة AVR.

في الوقت نفسه ، ليس من الضروري على الإطلاق تصنيع نسخة منفصلة من الجهاز لمختلف المتحكمات الدقيقة التي تختلف في عدد وترتيب المسامير - فقط أضف ، حسب الضرورة ، محولات من أجل pinout لـ "المريض" التالي وأعد الكتابة وفقًا لبرنامج التحكم.

المحول عبارة عن مقبس 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 لا تولد التأكيد الصحيح استجابة لطلب المبرمج ، ونتيجة لذلك يخلص PonyProg إلى أنها معطلة ؛ في الوقت نفسه ، يدرك أعضاء MK هؤلاء الأوامر المتبقية للمبرمج بشكل طبيعي وسيعملون بشكل صحيح.

من المحتمل تمامًا أن تكون هذه ميزة (أو بالأحرى "مرض") لـ AVR MK (ليس الأمر فقط أن PonyProg يتضمن مثل هذا الزر - "تجاهل") - مؤلف هذا المقال كان لديه ثلاثة تصرفات من أصل عشرة أعضاء من أعضاء الكنيست بطريقة مماثلة ، وفي كثير من الأحيان بدأ هذا ليس على الفور ، ولكن بعد بضع "مقالي فلاش".

أو ربما يقع اللوم على الجهد الساكن على يد الإنسان ... ولكن ، مهما كان الأمر ، في الهياكل الحرجة (مثل أجهزة الإشعال ، والتدفئة الأوتوماتيكية ، والري ، وأجهزة الإنذار ، وما إلى ذلك) مثل "الثقة المنقوصة" من MK ، فهي كذلك لا ينصح باستخدامه.

لكن في الألعاب وأكاليل شجرة الكريسماس وأجراس الأبواب والأجهزة المساعدة الأخرى ، ستعمل بشكل جيد لسنوات عديدة - علاوة على ذلك ، دون أي مشاكل.

برنامج ثابت لوحدة التحكم الدقيقة - تنزيل (9 كيلوبايت).

ماتين أ. RK-08-16.

المؤلفات:

  1. Evstifeev A.V. - الميكروكونترولر AVR من عائلة Tiny. دليل المستخدم. 2007. Cmp.386 - البرمجة الموازية ؛
  2. Evstifeev A.V. - الميكروكونترولر AVR من عائلة ميجا. دليل المستخدم. 2007. ص 526 - البرمجة الموازية؛
  3. Evstifeev A.V. - الميكروكونترولر AVR لعائلات Tiny و Mega من ATMEL. 2008. ص 498 - البرمجة الموازية.

مثال بسيط آخر على صنع لوحة تصحيح الأخطاء ، ولكن هذه المرة للأجهزة التي تستخدم متحكم ATTiny2313. موقع أرجل البرمجة في ATTiny2313 مطابق لموقع ATTiny13. وفقًا لذلك ، ستخرج الألواح متشابهة. سيكون الاختلاف عن وجود مذبذب رئيسي خارجي (كوارتز). بشكل افتراضي ، يأتي ATTiny2313 من المصنع مع تشغيل المولد الداخلي ، لذلك إذا لم يكن من المخطط أن يعمل المتحكم الدقيق من مولد خارجي ، فلا يمكن تثبيته. نقوم بتكرار موصل الطاقة في حالة توصيل مبرمج مدعوم من الدائرة باللوحة (نحن نوفر الطاقة لموصل واحد ، ونقوم بتشغيل المبرمج من الآخر).


لإنشاء لوحة تصحيح للأجهزة ATTiny2313 ، نحتاج إلى:


نقوم بتجميع لوحة التصحيح وفقًا للشكل:

1 لحام في المقبس للدائرة الدقيقة والدبابيس (كما في الشكل) ؛
2 كما هو موضح في الشكل (الخط الأحمر) نصنع رابطًا على الجانب الأمامي من اللوحة. نصنع قفزة أخرى على الجانب الآخر ؛
3 وصلات عبور - "مخاط" تربط دبابيس وأرجل اللوحة (نقاط اللحام محاطة بدائرة باللون الأخضر).

لوحة التصحيح لدينا جاهزة!

خاتمة.

- وضعنا ملصقات على GND و SCK للتوصيل الصحيح للطاقة والمبرمج ؛
- سيتم لحام كل شيء آخر على لوحة التصحيح وفقًا لنظام الجهاز المحدد. (كخيار ، يمكنك إضافة دبابيس لكل ساق من وحدة التحكم الدقيقة لتوصيل اللوحات والأجهزة الطرفية الأخرى) ؛
- من أجل تشغيل أكثر موثوقية في ظروف الضوضاء المتزايدة ، من المستحسن جدًا استكمال الدائرة بساق إعادة الضبط القابلة للسحب ، والمقاوم (مقاومة السحب الداخلي تبلغ حوالي 10 كيلو أوم - وهذا لا يكفي) و مكثف ترشيح سيراميك على أرجل الطاقة (في حدود 0.1 درجة فهرنهايت) ؛
- الآن نقوم بإدخال المتحكم الدقيق في المقبس ووميض ATTiny2313 بالبرامج الثابتة المطلوبة.

(وزار 16038 مرات، 1 عدد زيارات اليوم)

القسم: العلامات:،

آخر الملاحة

لوحة تصحيح بسيطة لأجهزة AVR ATTiny2313 مع الكوارتز.: 70 تعليقًا


  1. كاتب مشاركة GetChiper

    تطرق غامض؟
    هل راجعت على tini2313 آخر؟

  2. توكسا 12345

    لقد تعذبت لفترة طويلة حول: "أيهما تختار" توقفت عند tinka 2313 لأنها أرخص من atmega ، وليست مشتعلة مثل tinka 13 ، وأيضًا بسبب وجود خطوط RxD و TxD ، مما يسمح بالاتصال عبر YuART
    Z.Y. شراء MK منا في كورسك ليس مشكلة. تينكا 2313 تكلف 130 روبل. و atmega8 بالفعل 200 روبل حول تينكا 13 لم يعترف


  3. كاتب مشاركة GetChiper

    أو ربما ATmega88 أو ATmega48؟

  4. أندري 1979

    وقت جيد.
    قمت بتجميع اللوحة وفقًا للمخطط المقترح ، وقمت بتوصيلها بـ USBasp ، وتوصيل 2313 ، وتطبيق 5 فولت. يعطي Extreme Burner رقاقة غير صحيحة. وفقًا لذلك ، لا يمكن وميض أي شيء أو عده. عند استبدال تينكي نفس الشيء.
    وقد أي شخص من ذوي الخبرة شيئا من هذا القبيل؟
    ربما هذا بسبب التدخل؟

    "- من أجل تشغيل أكثر موثوقية في ظروف الضوضاء المتزايدة ، من المستحسن جدًا استكمال الدائرة بساق إعادة الضبط القابلة للسحب ، والمقاوم (مقاومة السحب الداخلي تبلغ حوالي 10 كيلو أوم - وهذا لا يكفي) ومكثف ترشيح سيراميكي على أرجل الطاقة (في حدود 0.1 درجة فهرنهايت) ؛ »

    وأيضًا ، خاصة بالنسبة للدمى ، هل من الممكن عكس هذه الإجراءات في شكل رسم بياني.


  5. كاتب مشاركة GetChiper

    ما لعرضه هناك.
    يتم وضع المكثف بالتوازي مع الإمداد (أي بين الأرجل 10 و 20)
    يتم وضع المقاوم 10 kΩ بين Vcc وإعادة التعيين (أي بين الدبابيس 1 و 20)

  6. أندري 1979

    شكرا على الاجابة. أضع 4.7 كيلو أوم و 220 بيكو فاراد. حصلت على المزيد من المرح. المتطرف الموقد يكتب نفسه كما كان. لكن الخزامة أفادت مرة أخرى أن توقيع الشريحة هو 0x1e000. عدم تطابق التوقيع المتوقع لـ ATTiny 2313 هو 1e 91 0a. في حالات أخرى ، يكتب أيضًا خطأ اتصال.

    أنا أستخدم لوح تجارب غير ملحوم ، لذا لا ينبغي أن يكون اللحام الفوضوي مشكلة. في أي مكان آخر يمكنك أن تبحث؟


  7. كاتب مشاركة GetChiper

    220pF لا يكفي. من الضروري وضع 0.1 فائق التوهج - سيراميك (غير قطبي) و 10-100 فائق التوهج كهربائيا (قطبي) بالتوازي.

  8. ديدريك

    مساء الخير))) لم أجد الكوارتز 20000 بدلاً من ذلك ، لم أجد سوى 4000 كوارتز فقط. إذا وضعت كوارتز 4000 هل سأحصل على micro-r بطيء؟ ونفس المكثفات بحاجة إلى التغيير لكوارتز 4000؟ أعيش في سمرقند مع قطع غيار راديو ، لدينا مشكلة (((لا أعرف حتى أين أجد مقبسًا لـ micro-r (((هل يمكنني صنع مقبس لـ micro-r بنفسي؟

  9. ديدريك

    أجب على الأقل شخص ما)))


  10. كاتب مشاركة GetChiper

    اهدأ - لقد كانت عطلة نهاية الأسبوع 🙂

    يمكنك وضع أي كوارتز إذا كنت تخطط للدراسة وصنع أجهزتك الخاصة على هذا الوشاح (لا تحتاج إلى تغيير المكثفات للكوارتز). أو لا يمكنك وضع الكوارتز على الإطلاق - استخدم مولد RC المدمج.

    بالنسبة لصنع مقبس - ربما فقط قم بإلحام عضو الكنيست حتى الموت في اللوح؟

  11. ديدريك

    شكرًا على مساعدتك))) لدي سؤال آخر لك ، لكني لا أعرف أين أسأل خارج الموضوع (((اليوم أحضروا لي عدادًا إلكترونيًا لإصلاح Holley DDS28. لقراءات العداد. الكل يتم تخزين السجل في micro-re. هل يمكن أن تخبرني كيف أصنع مبرمجًا لها حتى تتمكن من قراءة وتحرير بيانات micro-ra ؟؟؟ وكيف تكتب لك مباشرة ؟؟؟


  12. كاتب مشاركة GetChiper

    FM24C02 هي ذاكرة تسلسلية غير متطايرة (EEPROM)
    أعتقد أن هناك العديد من الأربطة والبرامج لهذا العمل (إذا سألت محرك البحث) - ها هو أول واحد جاء عبر http://www.msplata.ru/teleprog.html

  13. ديدريك

    شكرا للمساعدة:-)

  14. نشأة الكون

رسم بياني 1

T = T0 + T1. فترة النبض

T = 1 / واو

S = T / T1

دورة العمل

عامل التعبئة د = 1 / سأو هكذا D = T1 / T * 100٪

الأجهزة الرقمية ، على سبيل المثال ، يمكن أن تعمل وحدة التحكم الدقيقة فقط مع مستويين من الإشارة ، أي صفر وواحد أو إيقاف تشغيله. وبالتالي ، يمكنك استخدامه بسهولة للتحكم في حالة الحمل ، مثل تشغيل أو إيقاف تشغيل مؤشر LED. يمكنك أيضًا استخدامه للتحكم في أي جهاز كهربائي باستخدام برامج التشغيل المناسبة (الترانزستور ، التيرستورات ، المرحل ، إلخ.) لكن في بعض الأحيان تحتاج إلى أكثر من مجرد "تشغيل" و "إيقاف" الجهاز. لذلك إذا كنت تريد التحكم في سطوع LED (أو المصباح) أو سرعة محرك DC ، فإن الإشارات الرقمية لا يمكنها فعل ذلك. هذا الموقف شائع جدًا في التكنولوجيا الرقمية ويسمى تعديل عرض النبض (PWM).

تحتوي جميع المتحكمات الدقيقة الحديثة تقريبًا على أجهزة متخصصة لتوليد إشارة PWM. في هذا البرنامج التعليمي سوف نتعلم أساسيات تقنية PWM وفي ما يلي سنرى كيفية تنفيذ PWM باستخدام متحكمات AVR.

يمكن للأجهزة الرقمية مثل المتحكم الدقيق أن تولد مستويين فقط على خطوط الإخراج ، مرتفع = 5 فولت ومنخفض = 0 فولت. ولكن ماذا لو أردنا الحصول على 2.5 أو 3.1 أو أي جهد بين 0-5 فولت؟ للقيام بذلك ، بدلاً من إنشاء جهد تيار مستمر ثابت عند الخرج ، سنقوم بتوليد موجة مربعة ذات مستويات عالية = 5 فولت ومنخفضة = 0 فولت (انظر الشكل 1).

رسم بياني 1

يوضح الشكل أن الإشارة ظلت لبعض الوقت بالتناوب عند مستوى منخفض وعالي. T0 - مستوى منخفض ، T1 - مستوى مرتفع. ستكون فترة الإشارة T = T0 + T1. فترة النبض- هذا هو الفاصل الزمني بين نقطتين مميزتين لنبضتين متجاورتين. عادةً ما يتم قياس الفترة بين جبهتين أو شلالين من النبضات المتجاورة ويُشار إليها بحرف لاتيني كبير T.

ترتبط فترة تكرار النبضة ارتباطًا مباشرًا بتردد تسلسل النبض ، ويمكن حسابها بالصيغة: T = 1 / واو

إذا كان طول النبضة T1 يساوي بالضبط نصف الفترة T ، فغالبًا ما تسمى هذه الإشارة "موجة مربعة".

دورة عمل النبضة هي نسبة فترة تكرار النبضة إلى مدتها ويُشار إليها بالحرف S: S = T / T1

دورة العمل عبارة عن كمية بلا أبعاد ولا تحتوي على وحدات قياس ، ولكن يمكن التعبير عنها كنسبة مئوية. غالبًا ما يوجد المصطلح في النصوص الإنجليزية. دورة العمل، هذا ما يسمى بدورة العمل أو دورة عمل PWM. دورة العمل D هي المعاملة بالمثل لدورة العمل.

عامل التعبئةعادة ما يتم التعبير عنها كنسبة مئوية وتحسب باستخدام الصيغة: د = 1 / سأو هكذا 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 مباشرة على السائق (على سبيل المثال ، الترانزستور ثنائي القطب ، MOSFET ، إلخ).

تحت وضع التشغيل 16 بت. يُفهم الموقت على أنه خوارزمية العد الخاصة به وسلوك خرج شكل النبض المرتبط به ، والذي يتم تحديده من خلال مجموعة البتات التي تحدد وضع تشغيل المؤقت (WGMn3-0) ووضع توليد إشارة الإخراج (COMnx1: 0 ). في هذه الحالة ، لا تؤثر البتات الخاصة بضبط وضع توليد إشارة الخرج على خوارزمية العد ، منذ ذلك الحين تعتمد خوارزمية العد فقط على حالة بتات ضبط وضع المؤقت. في أوضاع PWM ، تقوم بتات COMnx1: 0 بتمكين / تعطيل الانعكاس على خرج PWM الذي تم إنشاؤه (على سبيل المثال ، حدد PWM مع الانعكاس أو PWM بدون انعكاس). بالنسبة للأوضاع غير PWM ، تحدد بتات COMnx1: 0 الإجراء الذي يجب اتخاذه عند حدوث تطابق: إعادة تعيين الإخراج أو تعيينه أو عكسه (انظر أيضًا "مكيف الإخراج" و "مخططات توقيت عداد / عداد 16 بت").

عملية عادية

أبسط طريقة للعملية هي الوضع العادي (WGMn3-0 = 0b0000). في هذا الوضع ، يعمل العداد باعتباره تجميعًا (تزايديًا) ، بينما لا تتم إعادة تعيين العداد. يحدث تجاوز سعة العداد عندما يتم تمرير الحد الأقصى لقيمة 16 بت. القيمة (0xFFFF) إلى حد العدد الأدنى (0x0000). في التشغيل العادي ، سيتم تعيين علامة تجاوز عداد الوقت / عداد TOVn على نفس دورة الساعة عندما يصبح TCNTn صفرًا.

في الواقع ، فإن علامة تجاوز السعة 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 الحد الأعلى للعدد وبالتالي دقة العداد. في هذا الوضع ، يتم توفير نطاق أوسع من ضبط التردد للنبضات المستطيلة المتولدة. كما أنه يبسط عمل عداد الأحداث الخارجية. يوضح الشكل 1. مخطط توقيت المؤقت في وضع CTC. يقوم العداد (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 موجودة على دبوس المنفذ فقط إذا تم تعيين اتجاه الإخراج لهذا الدبوس. الحد الأقصى لتردد الإشارة المولدة هو fOC0 = fclk_I / O / 2 إذا كان OCRnA = 0x0000. بالنسبة لقيم OCRn الأخرى ، يمكن تحديد تردد الإشارة المولدة بواسطة الصيغة:

حيث يحدد المتغير N عامل القسمة للمقياس المسبق (1 ، 8 ، 32 ، 64 ، 128 ، 256 ، أو 1024).

بالإضافة إلى التشغيل العادي ، يتم تعيين علامة TOV0 على نفس دورة الساعة عندما تتغير قيمتها من 0xFFFF إلى 0x0000.

وضع PWM السريع (FAST 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) ثم إعادة التعيين بواسطة دورة الساعة التالية للمؤقت. يوضح الشكل 2. مخطط توقيت وضع PWM السريع. يوضح الشكل وضع PWM السريع عند استخدام سجل OCRnA أو ICRn لتعيين الحد الأعلى. يتم عرض قيمة TCNTn على مخطط التوقيت كرسم بياني للوظيفة لتوضيح العد أحادي الاتجاه. يوضح الرسم البياني كلا من مخرجات PWM المقلوبة وغير المقلوبة. يُظهر الخط الأفقي القصير النقاط على الرسم البياني TCNTn حيث تتطابق قيم OCRnx و TCNTnx. يتم تعيين علامة مقاطعة OCnx عند حدوث تطابق.

الشكل 2 - مخطط التوقيت لوضع PWM السريع

يتم ضبط Timer-Counter Overflow Flag (TOVn) عندما يصل العداد إلى الحد الأعلى. بالإضافة إلى ذلك ، يمكن تعيين علامتي OCnA أو ICFn على نفس نبضة الساعة جنبًا إلى جنب مع علامة TOVn إذا تم استخدام سجل OCRnA أو ICRn لتعيين الحد الأعلى ، على التوالي. إذا تم تمكين أحد هذه المقاطعات ، فيمكن لإجراءات المقاطعة تحديث الحد الأعلى للعدد ومقارنة العتبات.

إذا تغيرت قيمة الحد الأعلى للعدد ، فيجب استيفاء الشرط بحيث تكون القيمة الجديدة للحد الأعلى المكتوب أكبر من أو تساوي القيم الموجودة في جميع سجلات عتبة المقارنة. خلاف ذلك ، لن يحدث تطابق بين TCNTn و OCRnx أبدًا. لاحظ أنه عند استخدام قيم الحد الأعلى الثابتة ، يتم إخفاء البتات غير المستخدمة عند 0 عند الكتابة إلى سجلات OCRnx.

تختلف آلية تعديل سجل 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). يمكن رؤية قيمة OCnx الفعلية على دبوس المنفذ إذا تم ضبطه على اتجاه الإخراج (DDR_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 السريع.

وضع تعديل عرض النبضة مع تصحيح الطور (المرحلة الصحيحة)

تم تصميم تعديل عرض النبضة مع تصحيح الطور (PWM PK) (WGMn3-0 = 0b0001 أو 0b010 أو 0b0011 أو 0b1010 أو 0b1011) لإنشاء إشارة PWM مصححة للطور بدقة عالية. يعتمد وضع PWM FC على عملية ثنائية الاتجاه للعداد المؤقت. يتنقل العداد خلال العد من الحد الأدنى (0x0000) إلى الحد الأعلى ثم يعود من الحد الأعلى إلى الحد الأدنى. إذا تم ضبط وضع إخراج شكل النبض غير العكسي ، فسيتم إعادة تعيين / ضبط خرج OCnx عندما تتطابق قيم TCNTn و OCRnx أثناء العد لأعلى / تنازلي. إذا تم ضبط وضع الإخراج العكسي ، فعندئذٍ ، على العكس من ذلك ، أثناء العد الأمامي ، يحدث الإعداد ، وأثناء العد العكسي ، تتم إعادة تعيين إخراج 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) ، بالإضافة إلى قيمة تساوي ICRn (إذا كان WGMn3-0 = 0b1010) أو OCRnA (إذا كان WGMn3: 0 = 0b1011). علاوة على ذلك ، عند الوصول إلى الحد الأعلى ، يغير العداد اتجاه العد. تظل قيمة TCNTn مساوية للحد الأعلى لدورة ساعة واحدة من المؤقت. يوضح الشكل 3 مخطط التوقيت لأسلوب PWM FC. يوضح الشكل وضع PWM FC باستخدام سجل OCRnA أو ICRn لتعيين الحد الأعلى. يتم تقديم حالة TCNTn كرسم بياني وظيفي لتوضيح ثنائية الاتجاه للعدد. يوضح الشكل كلاً من خرج PWM غير المقلوب والمقلوب. تشير الخطوط الأفقية القصيرة إلى النقاط الموجودة على الرسم البياني لتغيير TCNTn حيث يحدث تطابق مع قيمة OCRnx. يتم تعيين علامة مقاطعة OCnx عند حدوث تطابق.

الشكل 3 - مخطط توقيت وضع PWM FC

يتم ضبط Timer-Counter Overflow Flag (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 ، فعندئذٍ مع الانعكاس. يمكن ملاحظة قيمة OCnx الفعلية على طرف منفذ إذا تم تعيين اتجاه الإخراج (DDR_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 على التشغيل ثنائي الاتجاه للعداد. يعد العداد دوريًا من الحد الأدنى (0x0000) إلى الحد الأعلى ، ثم يعود من الحد الأعلى إلى الحد الأدنى. إذا تم تعيين وضع 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 مع تصحيح الطور والتردد

تم تعيين Timer-Counter Overflow Flag (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 توي 1 OCIE0 * توي 0
  • OCIE2- علامة لتمكين المقاطعة على حدث "صدفة" للمؤقت / عداد T2
  • TOIE2- الموقت / عداد تجاوز تدفق تمكين العلامة T2
  • TICIE1- علامة لتمكين المقاطعة على حدث "التقاط" للعداد / عداد T1
  • OCIE1A- علامة لتمكين المقاطعة على حدث "صدفة A" للعداد / عداد T1
  • OCIE1B- علامة لتمكين المقاطعة على حدث "صدفة B" للمؤقت / عداد T1
  • توي 1- يمكّن الموقت / عداد التدفق الزائد العلامة T1
  • OCIE0 *- علامة لتمكين المقاطعة على حدث "صدفة" للمؤقت / عداد T0 (* - غائب في ATmega8)
  • توي 0- Timer / Counter Overflow Interrupt تمكين العلامة T0
  • OCF2- علم المقاطعة على حدث "صدفة" للمؤقت / عداد T2
  • TOV2- علم المقاطعة T2 للمؤقت / عداد تجاوز التدفق
  • ICF1- علم المقاطعة على حدث "التقاط" لجهاز ضبط الوقت / العداد T1
  • OCF1A- علم المقاطعة على حدث "صدفة أ" مؤقت / عداد T1
  • OCF1B- علم المقاطعة على حدث "صدفة B" مؤقت / عداد T1
  • TOV1- علم المقاطعة المؤقت / عداد تجاوز التدفق T1
  • OCF0- علم المقاطعة على حدث "صدفة" للمؤقت / عداد T0
  • TOV0- علم المقاطعة T0 للمؤقت / عداد تجاوز التدفق

وصف تشغيل المؤقت / العداد T1 في وحدة تحكم ATmega8 / 16

يمكن استخدام عداد / عداد 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: ح ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
TCNT1: لام ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
OCR1A: H. ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
OCR1A: L. ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
OCR1B: H. ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
OCR1B: إل ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
ICR1: ح ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو
ICR1: لام ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو ص / دبليو

يوجد كل سجل 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 بت

00 فرنك سويسري
0 0 1 0 المرحلة الصحيحة PWM

9 بت

01 فرنك سويسري
0 0 1 1 المرحلة الصحيحة PWM

10 بت

03 فرنك سويسري
0 1 0 0 CTC (إعادة التعيين عند المباراة) OCR1A
0 1 0 1 سريع PWM

8 بت

00 فرنك سويسري
0 1 1 0 سريع PWM

9 بت

01 فرنك سويسري
0 1 1 1 سريع PWM

10 بت

03 فرنك سويسري
1 0 0 0 ICR1
1 0 0 1 المرحلة و Freguensy تصحيح 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 pin اعتمادًا على إعدادات 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 مع الطور الدقيق)

الفرق بين هذا الوضع والوضع السابق هو أن سجل العد يعمل كعداد قابل للعكس. نظرًا لأن هذا الوضع موصى به من قبل Atmel باعتباره الأنسب لضبط المحركات ، فسننظر فيه بمزيد من التفصيل. عندما يصل سجل العد TCNT1 إلى قيمة معامل العداد (TOP) (أو قيمة سجل ICR1 أو قيمة سجل OCR1A ، انظر جدول اختيار وضع المؤقت / العداد) ، يتم عكس اتجاه العد. عندما يصل سجل العد TCNT1 إلى الحد الأدنى للقيمة (0000 دولار) ، يتغير اتجاه العد أيضًا وفي نفس الوقت يتم تعيين علامة المقاطعة TOV1 لسجل TIFR. أيضًا ، إذا كانت محتويات سجل الجرد TCNT1 وسجل المقارنة OCR1A: OCR1B متساوية ، يتم تعيين العلامة OCF1A: OCF1B لسجل TIFR وحالة الإخراج OC1A: OC1B تتغير ، وفقًا للجدول.

لتجنب الانبعاثات غير المتماثلة أثناء كتابة قيمة إلى OCR1A: OCR1B register ، يقوم هذا الوضع بتنفيذ التخزين المؤقت المزدوج للكتابة. نتيجة لذلك ، يتغير التغيير الفعلي في قيمة السجل عندما يصل سجل العداد TCNT1 إلى قيمة الوحدة النمطية للعداد (TOP) (أو قيمة سجل ICR1 أو قيمة سجل OCR1A ، انظر الموقت / جدول اختيار وضع العداد). لذلك ، في البداية ، عندما تتم تهيئة المؤقت / العداد ، لن يغير OC1A الناتج OC1B حالته في المباراة حتى يصل السجل إلى القيمة (TOP).

مهمة:دعونا نطور برنامجًا للتحكم في سطوع المصباح المتوهج بجهد 12 فولت باستخدام PWM. يؤدي الضغط على زر "المزيد" إلى زيادة سطوع المصباح ، بينما يؤدي الضغط على الزر "أقل" إلى تقليل السطوع. يظهر الرسم التخطيطي لجهازنا المستقبلي في الشكل. كالعادة ، نستخدم متحكم Atmega8 ، والذي سيتم تسجيله من مذبذب داخلي 4 ميجا هرتز. في الواقع ، نحصل على باهتة ، هذه الأجهزة مصممة لضبط سطوع تركيبات الإضاءة. الآن الأكثر انتشارا الصمام المخفت.

من أجل التبسيط ، يمكنك أيضًا توصيل مصباح LED بدائرتنا ، ولكن مع المصباح الكهربائي سيكون أكثر وضوحًا. الأزرار متصلة بالدبابيس PD0, PD1. نقوم بتوصيل الحمل بالإخراج PB1 (OC1A)من خلال المقاوم وترانزستور تأثير المجال MOSFET ، والذي سيعمل معنا كمفتاح (في وضع المفتاح). يُفضل استخدام ترانزستور تأثير المجال لأن بوابته معزولة عن دائرة الطاقة ويتم التحكم بواسطة مجال كهربائي ، ويصل تيار التحكم إلى ميكرو أمبير. يسمح هذا ، باستخدام واحد أو اثنين من الترانزستورات ، بالتحكم في حمل طاقة ضخم (يصل إلى عشرات الأمبيرات وعشرات إلى مئات الفولتات) دون تحميل المتحكم الدقيق. بالنظر أيضًا إلى حقيقة أن الترانزستورات ذات التأثير الميداني يمكن توصيلها بالتوازي (على عكس الترانزستورات ثنائية القطب) ، فمن الممكن الحصول على سلسلة أكثر قوة بمئات الأمبيرات.

الآن دعنا نتعرف على كيفية قيام المتحكم الدقيق بتنفيذ 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) (غير موقعة int i = 0 ؛ // تعريف 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-- ؛ // decrement i بواحد (يمكن كتابة هذا أيضًا) OCR1A = i ؛ // اكتب المتغير إلى سجل المقارنة _delay_ms (30) ؛ // تأخير 30 مللي ثانية))))

انتباه!أولاً ، نقوم بتزويد المتحكم الدقيق بالطاقة ، ثم تحتاج إلى التأكد من أن الترانزستور متصل بإخراج MK ، وعندها فقط نطبق الطاقة على الدائرة باستخدام المصباح وترانزستور تأثير المجال. خلاف ذلك ، يمكنك حرق الترانزستور. الحقيقة هي أنه في حالة الخروج ، "أرجل" عضو الكنيست "تتدلى في الهواء" - فهي غير مرتبطة بأي شيء ، والتدخل يحدث فيها. هذه الالتقاطات الضعيفة كافية لفتح ترانزستور ذو تأثير مجال حساس جزئيًا. ثم ستنخفض مقاومته بين الصرف والمصدر من بضعة ميغا أوم إلى بضعة أوم أو أجزاء من أوم ، وسيتدفق تيار كبير من خلاله إلى المصباح. لكن الترانزستور لن يفتح تمامًا ، لأن هذا لا يحتاج إلى تطبيق 1-3 فولت على البوابة ، ولكن ثابتًا 5 فولت ، وستكون مقاومته أعلى بكثير من الحد الأدنى. سيؤدي ذلك إلى إطلاق كمية كبيرة من الحرارة عليه ، وسوف يدخن ، وربما يحترق.

بشكل عام ، يحتوي المؤقت على سجل مقارنة التعرف الضوئي على الحروف **وعندما تتطابق القيمة في المؤقت مع قيمة سجل المقارنة التعرف الضوئي على الحروف **يمكن أن يحدث شيئان:

  • يقطع
  • تغيير حالة دبوس المقارنة الخارجي OC **

الآن يمكننا اقامة PWMعندما يصل العداد إلى القيمة التعرف الضوئي على الحروف **الجهد على الساق الذي اخترناه OC **التغيير من 5 إلى 0. عندما يبدأ العد حتى النهاية ويبدأ العد ، قم أولاً بتغيير الجهد من 0 إلى 5 ، سيكون لدينا نبضات مستطيلة عند الخرج

هناك 3 أوضاع تشغيلPWM

STS(إعادة التعيين عند المباراة) - يمكن استدعاء هذا CHIMإشارة منمذجة تردد النبضة عندما يحسب الموقت إلى القيمة التعرف الضوئي على الحروف **يقوم بإعادة تعيين القيمة وتغييرها OC **على العكس. وبالتالي فإن دورة العمل PWMنفس الشيء دائما.

يستخدم هذا عندما تحتاج إلى حساب فترات محددة ، أو إنشاء مقاطعات بعد فترة زمنية معينة.

سريع PWM(PWM السريع) - يعد العداد من 0 إلى 255 ، وبعد ذلك يتم إعادة تعيينه إلى 0.

عندما تطابق قيمة عداد الوقت التعرف الضوئي على الحروف **يتم إعادة ضبط الإخراج المقابل على 0 ، مضبوطًا على 1 عند إعادة التعيين.

غالبا ما تستخدم بشكل منتظم PWM.

المرحلة الصحيحة PWM(Phase Precise PWM) - في هذا الوضع ، يعد العداد من 0 إلى 255 ثم يعد تنازليًا إلى الصفر. في المباراة الأولى مع التعرف الضوئي على الحروف **يتم إعادة ضبط الإخراج إلى 0 ، مع 2 مطابقات (عندما يعود العداد) ، مضبوط على 1.

يتم استخدامها حتى لا تفقد المرحلة عندما تتغير دورة العمل.



إذا أردنا العمل مع الإخراج OC1Aضع الدقات COM1A1 COM1A0
بشكل عام "/" تعني أو. TCNT1= OCR1Aبالنسبة PWMعلى الإخراج OC1A

الموقت / وضع العداد للعملية- وضع تشغيل الموقت / العداد.

قمة- قيمة TCNT1 التي يتم عندها تبديل قيمة الخرج OC **.

تم تعيين علامة TOV1- في أي قيم يتم تعيين بت تسجيل GIFR

نختار من الجدول الأخير الوضع الذي نحتاجه ، لا ننظر إليه قمة. من الجدولين ، حدد أيًا من الخيارين الأخيرين. يبقى فقط لترتيب البتات اللازمة في السجلات.

#define F_CPU 8000000UL # تضمين #تتضمن int main () (DDRD = 0xFF ؛ OCR1A = 0xC0 ؛ // قارن مع هذه القيمة OCR1B = 0x40 ؛ // إعداد PWM والمؤقت TCCR1A | = (1<CS10مضبوطًا على 1 ، يحسب مع تردد MK حول كيفية ضبط تردد المؤقت

أحد أفضل المجمعين للغة شبيهة بلغة Basic لسلسلة AVR من ميكروكنترولر ثماني بت.

تتميز بيئة تطوير FastAVR بواجهة مريحة ومدروسة وتتضمن محررًا ومجمعًا ومجمعًا ومبرمجًا متحكمًا. يحتوي التطبيق على ميزة تمييز الأوامر وواجهة سهلة الاستخدام والعديد من الحلول الأخرى المصممة لتسهيل عملية إنشاء البرامج وتصحيح الأخطاء. يستخدم FastAVR ثمانية بدلاً من ستة عشر بت عنونة ويقارن بشكل إيجابي مع المجمعين الآخرين من خلال إنتاج كود مضغوط للغاية (خاصة لوحدات التحكم التي تقل عن 256 بايت من ذاكرة الوصول العشوائي). بالإضافة إلى ذلك ، تم تضمين وظائف إضافية لمولد الأحرف لشاشات الكريستال السائل وآلة حاسبة للمؤقت وطرف في البرنامج. تتضمن قائمة أجهزة التحكم الدقيقة المدعومة من AVR السلسلة: 2313 ، 2323 ، 2333 ، 4433 ، 8515 ، 8535 ، ATiny13 ، ATiny26 ، ATmega163 ، Atmega8 ، Atmega16 ، Atmega32 ، ATmega64 ، ATmega128 وغيرها الكثير.

تتكون اللغة المستخدمة في FastAVR من أوامر أساسية مألوفة ، تم تحسينها بشكل كبير بوظائف مفيدة إضافية (I2C ، وسلك واحد ، وشاشات الكريستال السائل ، وبعضها الآخر). يدعم المترجم البرمجة المهيكلة ، مما يحسن قابلية قراءة البرامج. يجمع هذا التطبيق البرنامج الموجود في نافذة المحرر النشط إلى كود تجميع AVR القياسي باستخدام مُجمّع Atmel المجاني (جزء من ملف. نتيجة التجميع وإذا لم تكن هناك أخطاء في النص المصدر ، يتم إنشاء ملف بامتداد * .asm. تقوم بيئة البرمجة بإخراج الكود الذي تم إنشاؤه في المجمع ، وهو أمر مفيد للمطورين ذوي الخبرة.

يمكن لـ FastAVR استخدام أي مبرمج موجود داخل الدائرة تقريبًا لوحدات تحكم AVR المتصلة بمنفذ تسلسلي أو متوازي. تتم كتابة الكود المصدري للبرنامج مثل النص العادي في شكل رموز في المحرر المدمج في هذا البرنامج. بالإضافة إلى عرض النص المصدر ، يقوم محرر FastAVR بتحرير البرنامج بشكل مستقل ، ويسلط الضوء على الأوامر والمتغيرات والبيانات الأخرى. كما أنه يدعم إمكانية التبديل لمحاذاة كتل النص. يمكن عرض رمز البرنامج وتحريره في أي محرر عام. ومع ذلك ، عند كتابة برنامج ، يجب عليك اتباع عدد من القواعد التي توفرها صيغة FastAVR. على سبيل المثال ، في كل برنامج ، يحتاج المترجم إلى تحديد نوع وحدة التحكم المستخدمة ، وسرعة الساعة ، وحجم مكدس البرنامج. لا يتم تحويل هذه التعليمات الخاصة (التوجيهات الوصفية) إلى رمز التجميع.

نظرًا لأن عائلة AVR من وحدات التحكم الدقيقة تقوم بتخزين البيانات والرموز في مناطق مختلفة من الذاكرة ، عند العمل مع برنامج FastAVR ، يحتاج المطورون إلى تحديد مكان وضع البيانات في الذاكرة. يقوم المترجم بترتيب رمز البرنامج تلقائيًا.

تم إنشاء FastAVR بواسطة Bojan Ivancic من سلوفينيا وهو أحد منتجات MicroDESIGN. للأسف تخلى المؤلف عن مشروعه وموقعه الإلكتروني معطل وهواتف الدعم لا ترد. لم يتم تحديث التطبيق نفسه لفترة طويلة ، ونتيجة لذلك ، لا يدعم المترجم أحدث طرازات وحدات تحكم Atmel.

تم دفع برنامج FastAVR. بدون إدخال رمز التسجيل ، تبدأ بيئة التطوير فقط في الوضع التجريبي ، والذي له قيود كبيرة. يمكن تنزيل التطبيق حاليًا من الرابط أدناه. يتضمن التجميع المقدم أحدث إصدار عمل من البرنامج ، وملفات مساعدة باللغة الإنجليزية ، وأمثلة.

تمت كتابة هذا المنتج باللغة الإنجليزية. لا يوجد Russifier لذلك.

يعمل FastAVR تحت Microsoft Windows. يعمل التطبيق بشكل صحيح في أنظمة التشغيل 98SE و NT4 و 2000 و XP.