- أساسيات إشارة PWM
- إعداد الأجهزة والمتطلبات
- مخطط الدائرة ل Nuvoton N76E003 متحكم LED يعتم
- دبابيس PWM على N76E003 Nuvoton Microcontroller
- مسجلات ووظائف PWM في N76E003 Nuvoton Microcontroller
- أوضاع تشغيل PWM في متحكم Nuvoton N6E003
- برمجة Nuvoton N76E003 لـ PWM
- تفليش الكود واختبار المخرجات
تعديل عرض النبضة (Pulse Width Modulation (PWM)) هي تقنية شائعة الاستخدام في الميكروكونترولر لإنتاج إشارة نبضية مستمرة بتردد ودورة عمل محددة. باختصار ، يتعلق PWM بتغيير عرض النبضة بينما يكون التردد ثابتًا.
تستخدم إشارة PWM في الغالب في التحكم في محرك سيرفو أو سطوع LED. أيضًا ، نظرًا لأن المتحكمات الدقيقة يمكنها فقط توفير المنطق 1 (مرتفع) أو المنطق 0 (منخفض) على دبابيس الإخراج الخاصة به ، فلا يمكنها توفير جهد تناظري متغير ما لم يتم استخدام محول DAC أو محول رقمي إلى تناظري. في مثل هذه الحالة ، يمكن برمجة المتحكم الدقيق لإخراج PWM مع دورة عمل متنوعة يمكن تحويلها بعد ذلك إلى الجهد التناظري المتغير. لقد استخدمنا سابقًا PWM الطرفية في العديد من وحدات التحكم الدقيقة الأخرى أيضًا.
- ARM7-LPC2148 PWM تعليمي: التحكم في سطوع LED
- تعديل عرض النبضة (PWM) باستخدام MSP430G2: التحكم في سطوع LED
- توليد PWM باستخدام PIC Microcontroller مع MPLAB و XC8
- تعديل عرض النبضة (PWM) في STM32F103C8: التحكم في سرعة مروحة التيار المستمر
- توليد إشارات PWM على دبابيس GPIO في متحكم PIC
- دروس Raspberry Pi PWM
- دروس PWM مع ESP32
في هذا البرنامج التعليمي ، سنقوم بواجهة LED التي سيتم التحكم فيها باستخدام إشارة PWM هذه من وحدة متحكم N76E003. سنقوم بتقييم نوع إعداد الأجهزة الذي نحتاجه وكيف يجب علينا برمجة وحدة التحكم الدقيقة الخاصة بنا. قبل ذلك ، دعونا نفهم بعض أساسيات إشارة PWM.
أساسيات إشارة PWM
في الصورة أدناه ، يتم عرض إشارة PWM ثابتة.
الصورة أعلاه ليست سوى موجة مربعة ثابتة مع نفس وقت التشغيل ونفس وقت الإيقاف. لنفترض أن الفترة الإجمالية للإشارة هي 1 ثانية. وبالتالي فإن الوقت في الوقت المحدد والإيقاف هو 500 مللي ثانية. إذا تم توصيل مؤشر LED عبر هذه الإشارة ، فسيتم تشغيل مؤشر LED لمدة 500 مللي ثانية وينطفئ لمدة 500 مللي ثانية. لذلك ، في عرض المنظور ، سيضيء مؤشر LED بنصف السطوع الفعلي إذا تم تشغيله على إشارة 5V مباشرة دون أي وقت توقف.
الآن كما هو موضح في الصورة أعلاه ، إذا تم تغيير دورة العمل ، فسوف يضيء مؤشر LED بنسبة 25٪ من السطوع الفعلي باستخدام نفس المبدأ كما تمت مناقشته من قبل. إذا كنت تريد معرفة المزيد والتعرف على تعديل عرض النبض (PWM) ، فيمكنك الاطلاع على المقالة المرتبطة.
إعداد الأجهزة والمتطلبات
حيث أن متطلبات هذا المشروع هي التحكم في LED باستخدام PWM. يلزم توصيل مؤشر LED مع N76E003. نظرًا لأن LED متاح في لوحة التطوير N76E003 ، فسيتم استخدامه في هذا المشروع. لا توجد مكونات أخرى مطلوبة.
ناهيك عن أننا بحاجة إلى لوحة التطوير القائمة على متحكم N76E003 وكذلك مبرمج Nu-Link. قد تكون هناك حاجة لوحدة إمداد طاقة إضافية 5 فولت إذا لم يتم استخدام المبرمج كمصدر للطاقة.
مخطط الدائرة ل Nuvoton N76E003 متحكم LED يعتم
كما نرى في المخطط أدناه ، يتوفر مؤشر LED للاختبار داخل لوحة التطوير وهو متصل بالمنفذ 1.4. في أقصى اليسار ، يظهر اتصال واجهة البرمجة.
دبابيس PWM على N76E003 Nuvoton Microcontroller
يحتوي N76E003 على 20 دبوسًا يمكن استخدام 10 دبابيس منها كـ PWM. تظهر الصور أدناه دبابيس PWM مظللة في المربع الأحمر المربع.
كما نرى ، يمكن أيضًا استخدام دبابيس PWM المميزة لأغراض أخرى. ومع ذلك ، لن يكون هذا الغرض الآخر من المسامير متاحًا عند تكوين المسامير لإخراج PWM. الدبوس 1.4 الذي يستخدم كدبوس إخراج PWM ، سيفقد الوظائف الأخرى. ولكن ، هذه ليست مشكلة حيث أن وظيفة أخرى غير مطلوبة لهذا المشروع.
السبب وراء اختيار pin 1.4 كدبوس إخراج هو أن مصباح الاختبار المدمج متصل بهذا الدبوس في لوحة التطوير ، وبالتالي لا نطلب مصابيح LED خارجية. ومع ذلك ، في هذا المتحكم الدقيق من 20 دبابيس ، يمكن استخدام 10 دبابيس كدبوس إخراج PWM ويمكن استخدام أي دبابيس PWM أخرى للأغراض المتعلقة بالإخراج.
مسجلات ووظائف PWM في N76E003 Nuvoton Microcontroller
يستخدم N76E003 ساعة النظام أو الفائض في Timer 1 مقسومًا على ساعة PWM مع Prescaler للاختيار من 1/1 ~ 1/128. يمكن ضبط فترة PWM باستخدام سجل فترة 16 بت PWMPH وسجل PWMPL.
يحتوي الميكروكونترولر على ستة مسجلات PWM فردية تولد ست إشارات PWM تسمى PG0 و PG1 و PG2 و PG3 و PG4 و PG5. ومع ذلك ، فإن الفترة هي نفسها لكل قنوات PWM لأنها تشترك في نفس عداد الفترة 16 بت ولكن دورة العمل لكل PWM يمكن أن تكون مختلفة عن الآخرين حيث أن كل PWM تستخدم سجل دورة عمل 16 بت مختلف يسمى {PWM0H، PWM0L} و {PWM1H و PWM1L} و {PWM2H و PWM2L} و {PWM3H و PWM3L} و {PWM4H و PWM4L} و {PWM5H و PWM5L}. وبالتالي ، في N76E003 ، يمكن إنشاء ستة مخرجات PWM بشكل مستقل مع دورات عمل مختلفة.
بخلاف المتحكمات الدقيقة الأخرى ، لا يؤدي تمكين PWM إلى ضبط دبابيس الإدخال / الإخراج في خرج PWM تلقائيًا. وبالتالي ، يحتاج المستخدم إلى تكوين وضع إخراج الإدخال / الإخراج.
لذلك ، كل ما هو مطلوب للتطبيق ، فإن الخطوة الأولى هي تحديد أو تحديد أي واحد أو اثنين أو حتى أكثر من دبابيس I / O كمخرج PWM. بعد اختيار واحد ، يجب تعيين دبابيس الإدخال / الإخراج كوضع دفع-سحب أو شبه ثنائي الاتجاه لتوليد إشارة PWM. يمكن تحديد ذلك باستخدام سجل PxM1 و PxM2. يحدد هذان السجلان أوضاع الإدخال / الإخراج حيث يرمز x إلى رقم المنفذ (على سبيل المثال ، المنفذ P1.0 سيكون السجل P1M1 و P1M2 ، بالنسبة لـ P3.0 سيكون P3M1 و P3M2 ، إلخ.)
يمكن رؤية التكوين في الصورة أدناه-
بعد ذلك ، تتمثل الخطوة التالية في تمكين PWM في دبوس (دبابيس) الإدخال / الإخراج المحدد. للقيام بذلك ، يحتاج المستخدم إلى تعيين تسجيلات PIOCON0 أو PIOCON1. يعتمد السجل على تعيين الدبوس حيث يتحكم PIOCON0 و PIOCON1 في دبابيس مختلفة تعتمد على إشارات PWM. يمكن رؤية تكوين هذين السجلين في الصورة أدناه-
كما نرى ، يتحكم السجل أعلاه في 6 تكوينات. بالنسبة للباقي ، استخدم سجل PIOCON1.
وبالتالي ، يتحكم السجل أعلاه في التكوينات الأربعة المتبقية.
أوضاع تشغيل PWM في متحكم Nuvoton N6E003
الخطوة التالية هي تحديد أوضاع تشغيل PWM. يدعم كل PWM ثلاثة أوضاع تشغيل - وضع التمكين المستقل والمتزامن والوقت الميت.
يوفر الوضع المستقل الحل حيث يمكن إنشاء إشارات PWM الست بشكل مستقل. هذا مطلوب كحد أقصى من المرات عند الحاجة إلى تشغيل والتحكم في العمليات أو الصفارات ذات الصلة بـ LED
في وضع متزامن مجموعات من PG1 / 3/5 في نفس الناتج PWM في المرحلة، وهو نفس PG0 / 2/4، حيث PG0 / 2/4 يوفر الناتج اشارات PWM مستقلة. هذا مطلوب بشكل أساسي للتحكم في المحركات ثلاثية الطور.
يعد وضع إدخال الوقت الميت معقدًا بعض الشيء ويتم تطبيقه في تطبيقات المحركات الحقيقية ، خاصة في التطبيقات الصناعية. في مثل هذه التطبيقات ، يجب أن يكون خرج PWM التكميلي عبارة عن إدخال "وقت ميت" يمنع تلف أجهزة تبديل الطاقة مثل GPIBs. يتم ضبط التكوينات في هذا الوضع بطريقة توفر PG0 / 2/4 إشارات خرج PWM بنفس الطريقة التي يوفرها الوضع المستقل ولكن PG1 / 3/5 توفر خرج "إشارات PWM خارج الطور" لـ PG0 / 2/4 في المقابل وتجاهل PG1 / 3/5 Duty Register.
يمكن تحديد أكثر من ثلاثة أوضاع باستخدام تكوين التسجيل أدناه-
التكوين التالي هو اختيار أنواع PWM باستخدام سجل PWMCON1.
لذلك ، كما نرى ، يتوفر نوعان من PWM يمكن تحديدهما باستخدام السجل أعلاه. في محاذاة الحافة ، يستخدم عداد 16 بت عملية أحادية الميل من خلال العد من 0000H إلى القيمة المحددة لـ {PWMPH ، PWMPL} ، ثم البدء من 0000H. يتم محاذاة شكل الموجة الناتج مع الحافة اليسرى.
ولكن ، في وضع المحاذاة للوسط ، يستخدم عداد 16 بت عملية المنحدر المزدوج عن طريق العد من 0000H إلى {PWMPH، PWMPL} ثم الانتقال مرة أخرى من {PWMPH، PWMPL} إلى 0000H بالعد التنازلي. الإخراج محاذي للمركز وهو مفيد لتوليد أشكال موجية غير متداخلة. الآن أخيرًا عمليات التحكم في PWM التي يمكن التحقق منها في السجلات أدناه-
لضبط مصدر الساعة ، استخدم سجل التحكم في الساعة CKCON.
يمكن أيضًا إخفاء إشارة خرج PWM باستخدام سجل PMEN. باستخدام هذا السجل ، يمكن للمستخدم إخفاء إشارة الخرج بمقدار 0 أو 1.
التالي هو سجل التحكم PWM-
يعد السجل أعلاه مفيدًا لتشغيل PWM ، وتحميل الفترة الجديدة وحمل العمل ، والتحكم في علامة PWM ومسح عداد PWM.
يتم عرض تكوينات البت المرتبطة أدناه-
لضبط مقسم الساعة ، استخدم سجل PWMCON1 لمقسم ساعة PWM. يتم استخدام البتة الخامسة لـ PWM المجمعة الممكّن لوضع المجموعة وتوفر نفس دورة العمل لأول ثلاثة أزواج من PWM.
برمجة Nuvoton N76E003 لـ PWM
الترميز بسيط ويمكن العثور على الكود الكامل المستخدم في هذا البرنامج التعليمي في أسفل هذه الصفحة. مؤشر LED متصل بالدبوس P1.4. وبالتالي يلزم استخدام دبوس P1.4 لإخراج PWM.
في البرنامج الرئيسي ، تتم الإعدادات بالترتيب المعني. تقوم أسطر الرموز أدناه بتعيين PWM وتكوين دبوس P1.4 كإخراج PWM.
P14_PushPull_Mode ؛
يستخدم هذا لضبط الدبوس P1.4 في وضع الدفع والسحب. يتم تعريف هذا في مكتبة Function_define.h على أنه
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4؛ P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE ؛
تم استخدام الأسطر التالية لتمكين PWM في الطرف P1.4. يتم تعريف هذا أيضًا في مكتبة Function_define.h على أنها-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA؛ EA = 0؛ TA = 0xAA؛ TA = 0x55؛ SFRS- = 0x01؛ PIOCON1- = 0x02؛ TA = 0xAA؛ TA = 0x55؛ SFRS & = 0xFE؛ EA = BIT_TMP //P1.4 تمكين إخراج PWM1 PWM_IMDEPENDENT_MODE ؛
يستخدم الكود أدناه لضبط PWM في الوضع المستقل. في مكتبة Function_define.h ، يتم تعريفها على أنها-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE ؛
ثم يتعين علينا ضبط إخراج EDGE من النوع PWM. في مكتبة Function_define.h ، يتم تعريفها على أنها-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM ؛
بعد ذلك ، يتعين علينا مسح قيمة عداد PWM المتوفرة في مكتبة SFR_Macro.h-
#define set_CLRPWM CLRPWM = 1
بعد ذلك ، يتم تحديد ساعة PWM على أنها ساعة Fsys وعامل القسمة المستخدم هو القسمة 64.
PWM_CLOCK_FSYS ، PWM_CLOCK_DIV_64 ،
يتم تعريف كلاهما على أنهما
#define PWM_CLOCK_FSYS CKCON & = 0xBF # تعريف PWM_CLOCK_DIV_64 PWMCON1- = 0x06 ؛ PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL ؛
يتم استخدام سطر الكود أدناه لإخفاء إشارة الإخراج PWM بمقدار 0 محدد على أنه
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023) ؛
ثم يتعين علينا ضبط الفترة الزمنية لإشارة PWM. تحدد هذه الوظيفة الفترة في سجل PWMPL و PWMPH. نظرًا لأن هذا سجل 16 بت ، فإن الوظيفة تستخدم طريقة تحويل بت لتعيين فترة PWM.
set_PWM_period باطلة (قيمة int غير موقعة) { PWMPL = (القيمة & 0x00FF) ؛ PWMPH = ((القيمة & 0xFF00) >> 8) ؛ }
ومع ذلك ، بخلاف الفترة 1023 و 8 بت ، يمكن للمستخدمين أيضًا استخدام قيم أخرى. تؤدي زيادة الفترة الزمنية إلى التعتيم أو التلاشي السلس.
تعيين_PWMRUN ؛
سيؤدي هذا إلى بدء PWM المحدد في مكتبة SFR_Macro.h كـ-
#define set_PWMRUN PWMRUN = 1
بعد ذلك ، في حلقة while ، يتم تشغيل LED ويتلاشى باستمرار.
while (1) { for (value = 0؛ value <1024؛ value + = 10) { set_PWM1 (value) ؛ Timer1_Delay10ms (3) ؛ } لـ (القيمة = 1023 ؛ القيمة> 0 ؛ القيمة - = 10) { set_PWM1 (القيمة) ؛ Timer1_Delay10ms (2) ؛ } } }
يتم تعيين دورة العمل بواسطة set_PWM1 () ؛ وهي وظيفة تحدد دورة العمل في سجل PWM1L و PWM1H.
set_PWM1 باطلة (قيمة int غير موقعة) { PWM1L = (القيمة & 0x00FF) ؛ PWM1H = ((القيمة & 0xFF00) >> 8) ؛ ضبطت ؛ }
تفليش الكود واختبار المخرجات
بمجرد أن يصبح الرمز جاهزًا ، ما عليك سوى تجميعه وتحميله إلى وحدة التحكم. إذا كنت جديدًا في البيئة ، فتحقق من بدء البرنامج التعليمي Nuvoton N76E003 لتعلم الأساسيات. كما ترى من النتيجة أدناه ، أعاد الكود 0 تحذير و 0 أخطاء ووميض باستخدام طريقة الوميض الافتراضية بواسطة Keil. يبدأ التطبيق العمل.
إعادة البدء: المشروع: PWM إعادة بناء الهدف "الهدف 1" تجميع STARTUP.A51… تجميع main.c… تجميع Delay.c… ربط… البرنامج الحجم: البيانات = 35.1 xdata = 0 كود = 709 خلق ملف hex من ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 خطأ (أخطاء) ، 0 تحذير (تحذيرات). الوقت المنقضي للبناء: 00:00:05
الجهاز متصل بمصدر الطاقة وكان يعمل بالشكل المتوقع. هذا هو سطوع LED الموجود على اللوحة والذي تم تقليله ثم زيادته للإشارة إلى تغيير دورة عمل PWM
يمكن أيضًا العثور على العمل الكامل لهذا البرنامج التعليمي في الفيديو المرتبط أدناه. آمل أن تكون قد استمتعت بالبرنامج التعليمي وتعلمت شيئًا مفيدًا إذا كان لديك أي أسئلة ، اتركها في قسم التعليقات أو يمكنك استخدام منتدياتنا للأسئلة الفنية الأخرى.