جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
ما هو PWM؟
PWM STANDS FOR PULSE WIDTH MODULATION هي تقنية يتم من خلالها تغيير عرض النبض.
لفهم هذا المفهوم بوضوح ، ضع في اعتبارك نبضة الساعة أو أي إشارة موجة مربعة لها دورة عمل بنسبة 50 ٪ مما يعني أن فترة Ton و Toff هي نفسها ، والمدة الإجمالية التي كانت الإشارة فيها عالية والمدة التي كانت فيها الإشارة منخفضة تسمى المجموع فترة زمنية.
بالنسبة للصورة الموضحة أعلاه ، فإن دورة عمل هذه الموجة تبلغ 50٪
دورة العمل = (وقت التشغيل / الوقت الإجمالي) * 100
وقت التشغيل - الوقت الذي كانت فيه الإشارة عالية
وقت الإيقاف - الوقت الذي كانت فيه الإشارة منخفضة إجمالي الوقت - الفترة الزمنية الإجمالية للنبض (كل من وقت التشغيل والإيقاف)
الخطوة 1: اختيار متحكم دقيق
اختيار متحكم مناسب للمشروع هذا هو الجزء الأساسي من المشروع يمكن توليد إشارات PWM في ميكروكنترولر مع قنوات PWM (سجلات CCP) بالنسبة لهذا المشروع ، أخطط للالتزام بـ pic16f877. يمكنك تنزيل رابط ورقة البيانات الموضح أدناه
انقر هنا ورقة بيانات PIC16F877a
وحدة CCP هي المسؤولة عن إنتاج إشارة PWM. يتم مضاعفة CCP1 و CCP2 مع PORTC. PORTC هو منفذ ثنائي الاتجاه بعرض 8 بت. سجل اتجاه البيانات المقابل هو TRISC. سيؤدي ضبط بت TRISC (= 1) إلى أخذ دبوس PORTC المقابل كمدخل. سيؤدي مسح بت TRISC (= 0) إلى جعل دبوس PORTC المقابل ناتجًا.
TRISC = 0 ؛ // سيؤدي مسح هذا البت إلى جعل PORTC كإخراج
الخطوة 2: تكوين وحدة CCP
CCP - وحدات الالتقاط / المقارنة / PWM
تحتوي كل وحدة Capture / Compare / PWM (CCP) على سجل 16 بت يمكن أن يعمل كالتالي:
• سجل التقاط 16 بت
• 16 بت قارن التسجيل
• سجل دورة العمل الرئيسي / التابع لـ PWM
قم بتكوين تسجيل CCP1CON في وضع PWM
تسجيل الوصف
CCPxCON يستخدم هذا السجل لتكوين وحدة CCP لتشغيل الالتقاط / المقارنة / PWM.
CCPRxL يحتوي هذا السجل على بتات 8-Msb من PWM ، وستكون بتات 2 المنخفضة جزءًا من سجل CCPxCON.
عداد التشغيل الحر TMR2 والذي سيتم مقارنته بـ CCPR1L و PR2 لتوليد خرج PWM.
الآن سأستخدم ثنائي لتمثيل البتات لتكوين سجل CCP1CON.
إحالة الصورة أعلاه.
CCP1CON = 0b00001111 ؛
يمكنك أيضًا تنسيق سداسي عشري
CCP1CON = 0x0F ؛ // تكوين سجل CCP1CON لوضع PWM
الخطوة 3: تكوين وحدة Timer2 Module (تسجيل TMR2)
Timer2 هو مؤقت 8 بت مع مقياس مسبق و postcaler. يمكن استخدامه كقاعدة زمنية PWM لوضع PWM لوحدة (وحدات) CCP. سجل TMR2 قابل للقراءة وقابل للكتابة ويتم مسحه على أي جهاز يتم إعادة تعيينه.
يظهر سجل T2CON
سيعدل المقياس المسبق والمقياس اللاحق تردد الخرج لموجة PWM المتولدة.
التردد = تردد الساعة / (4 * المقياس المسبق * (PR2-TMR2) * المقياس اللاحق * العدد)
حيث توت = 1 / تردد
T2CON = 0b00000100 ؛
سيؤدي ذلك إلى توليد 2.5 كيلو هرتز @ 1 ميجا هرتز أو 100 كيلو هرتز @ 4 ميجا هرتز (عمليًا هناك قيود على تردد PWM هذا ، قم بإحالة ورقة بيانات معينة لمزيد من التفاصيل)
تمثيل عرافة
T2CON = 0x04 ؛ // تمكين T2CON بدون تكوين مقياس مسبق ومقياس postcaler
الخطوة 4: تكوين PR2 (تسجيل الفترة Timer2)
تحتوي الوحدة النمطية Timer2 على سجل فترة 8 بت ، PR2. يزيد Timer2 من 00h حتى يطابق PR2 ثم يعيد تعيينه إلى 00h في دورة الزيادة التالية. PR2 هو سجل مقروء وقابل للكتابة. يتم تهيئة سجل PR2 إلى FFh عند إعادة التعيين.
سيسمح تحديد النطاق المناسب لـ PR2 باستخدامه لتغيير دورة العمل لموجة PWM المتولدة
PR2 = 100 ؛ // اضبط وقت الدورة على 100 لتغيير دورة العمل من 0-100
من أجل البساطة ، أستخدم PR2 = 100 بجعل CCPR1L = 80 ؛ يمكن تحقيق 80٪ من دورة العمل.
الخطوة 5: تكوين وحدة CCPR1l
حيث يمكن تكوين PR2 = 100 CCPR1l في أي مكان بين 0-100 للحصول على دورة العمل المطلوبة.
الخطوة 6: اكتب الرسم على MPLAB X IDE ، يتم إعطاء الرمز أدناه
#يشمل
تأخير باطل (int a) // وظيفة لتوليد تأخير {
لـ (int i = 0 ؛ i <a ؛ i ++)
{
لـ (int j = 0 ؛ j <144 ؛ j ++) ؛
}
}
باطل رئيسي ()
{TRISC = 0 ؛ // سيؤدي مسح هذا البت إلى جعل PORTC كإخراج.
CCP1CON = 0x0F ؛ // تكوين سجل CCP1CON لوضع PWM
T2CON = 0x04 ؛ // تمكين T2CON بدون تكوين مقياس مسبق ومقياس postcaler.
PR2 = 100 ؛ // اضبط وقت الدورة على 100 لتغيير دورة العمل من 0-100
بينما (1) {
CCPR1L = 75 ؛ // ولدت 75٪ تأخير دورة العمل (1) ؛
}
}
لقد أجريت أيضًا تعديلًا بسيطًا على الكود بحيث يكون تواتر موجة PWM المتولدة
تمت محاكاة هذا الكود في بروتينات وتظهر موجة PWM الناتجة أدناه لتحميل هذا على لوحات تطوير الموافقة المسبقة عن علم ، استخدم #include مع بتات التكوين المناسبة.
شكرا لك