قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 10:33 PM المشاركة 1   
افتراضي وحدة(موديول) CCP وعملها فى نظام التعديل فى عرض النبضات PWM و PIC16F887 Twitter FaceBook Google+



وحدة(موديول) CCP وعملها فى نظام التعديل فى عرض النبضات PWM

تمهيد :
الموديول CCP " القبض على أو الإلتقاط Capture – المقارن Compare – تعديل عرض النبضات PWM " هو وحدة طرفية أو محيطية peripheral والتى تسمح للمستخدم بالتحكم فى الزمن وفى وقوع الأحداث .

نظام Capture "القبض على أو الإلتقاط " : يوفر الوصول إلى الحالة الحالية لسجل يغير من حالته باستمرار . فى هذه الحالة السجل هو سجل المؤقت TMR1 .

نظام Compare "المقارنة" : يتم فيه المقارنة المستمرة بين قيم سجلين . أحد السجلين هو سجل المؤقت TMR1 .هذه الدائرة تسمح للمستخدم ببدأ trigger أحداث خارجية عندما تنتهى فترة زمنية محددة مسبقا .

نظام PWM "التعديل فى عرض النبضات" : يمكن أن يولد إشارة ذات تردد frequency متغير ودورة خدمة duty cycle متغيرة على أحد أطراف الخرج .

يمتلك الميكروكونترولر PIC16F887 وحدتان هما CCP1 و CCP2 , وهما متماثلتان فى نظام العمل العادى بينما خواص التعديل بعرض النبضات المحسن Enhanced متاح فقط فى الوحدة CCP1 ولهذا السبب سوف يكون التركيز عليها ون ثم يكون قد تم تغطية الوحدة CCP1 ضمنيا .

الوحدة (الموديول) CCP1
الجزء الرئيسى فى هذه الدائرة هو السجل CCPR1 بسعة 16-bit والذى يتكون من السجلين CCPR1H و CCPR1L . يستخدم هذا الموديول فى نظام الإلتقاط capturing أو فى نظام المقارنة comparing مع الأعداد الثنائية المخزنة فى سجلى المؤقت TMR1 وهما TMR1H و TMR1L .




بجانب ذلك يمكن للوحدة CCP1 توليد إشارات بتعديل فى عرض النبضات PWM ذات تردد متغير ودورة خدمة متغيرة .
الخانات الموجودة بالسجل CCP1CON تتحكم فى الوحدة CCP1

عمل الوحدة CCP1 فى نظام PWM

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 10:43 PM المشاركة 2   
افتراضي


عمل الوحدة CCP1 فى نظام PWM
الإشارات ذات التردد frequency المتغير ودورة الخدمة duty cycle المتغيرة لها مجال واسع فى تطبيقات التحكم الأوتوماتيكى automation . المثال العملى الشائع هو دائرة التحكم فى القدرة power control circuit.
بالرجوع إلى الشكل التالى : إذا كان المنطق صفر logic (0) يدل (يشير) على حالة الفصل switch-off وأن المنطق واحد logic (1) يدل على حالة التوصيل switch-on فإن القدرة التى يستهلكها الحمل سوف تتناسب مباشرة مع فترة دوام (بقاء – وجود ) النبضة pulse duration. النسبة بين الفترة الزمنية لحالة الفصل والفترة الزمنية لحالة التوصيل تسمى "دورة الخدمة" Duty Cycle .





مثال آخر شائع الاستخدام عمليا هو استخدام الإشارات ذات التعديل فى عرض النبضات PWM فى دوائر لتوليد إشارات بأشكال موجية محددة مثل الشكل الموجة الجيبى كما هو مبين بالشكل .




الأجهزة التى تعمل بهذه الطريقة غالبا ما تستخدم عمليا كأجهزة تشغيل ذات تردد قابل للضبط , للتحكم فى المحركات الكهربائية ( التحكم فى السرعة وفى التسريع وفى التبطىء ) .




الشكل العلوى يبين المخطط الصندوقى للوحدة (الموديول) CCP1 فى نظام PWM . لتوليد نبضات بشكل معين على طرف مخرجها فمن الضرورى تحديد فترة النبضةpulse period "الزمن الدورى" (التردد) وزمن بقاء النبضة pulse duration .

الزمن الدورى لنظام PWM

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 10:50 PM المشاركة 3   
افتراضي


الزمن الدورى لنظام PWM
يتحدد الزمن الدورى (T) لنبضات الخرج بواسطة السجل PR2 (سجل يحدد الزمن الدورى للمؤقت TMR2 ) . يمكن حساب الزمن الدورى لنظام PWM باستخدام المعادلة التالية :




حيث Tosc = 1/ Fosc
فإذا كان الزمن الدورى لنظام PWM معروف عندئذ يكون من السهل تحديد تردد الإشارة F لأن F = 1/T
دورة الخدمة لنظام PWM
تتحدد دورة الخدمة لنظام PWM باستخدام إجمالى 10 خانات 10 bits : الثمانية خانات ذات القيمة الأقصى MSB للسجل CCPR1 بالإضافة إلى الخانتان ذات القيمة الأدنى LSB للسجل CCP1CON وهما
(DC1B1 and DC1B0) . النتيجة تكون عدد مكون من 10 خانات 10-bit ضمن العلاقة :




الجدول التالى يبين طريقة توليد إشارات بنظام PWM بتردد متغير عندما يستخدم الميكروكونترولر مذبذب كريستال بتردد Fosc =20MHz (أى الزمن الدورى Tosc=50nS ) .





القدرة على التحليل RESOLUTION لنظام PWM
إشارة نظام PWM ليست إلا تسلسل من النبضات ذات دورة خدمة متغيرة . لتردد واحد محدد (عدد النبضات لكل ثانية) يوجد عدد محدد من مجموعات دورات الخدمة . هذا العدد يمثل المقدرة على التحليل مقاسة بالخانات. على سبيل المثال إذا كانت القدرة على التحليل هى 10 خانات 10-bit resolution فسوف تكون النتيجة أن لدينا عدد 1024 دورة خدمة كأجزاء منفصلة . بينما فى حالة ما إذا كانت القدرة على التحليل هى 8 خانات 8-bit resolution فأن النتيجة تكون عدد 256 دورة خدمة كأجزاء منفصلة .
بالنسبة للميكروكونترولر PIC16F887 تتحدد القدرة على التحليل بالسجل PR2 .أقصى قيمة يمكن أن نحصل عليها بكتابة العدد FFh .

ترددات نظام PWM والقدرة على التحليل عند Fosc = 20MHz :





ترددات نظام PWM والقدرة على التحليل عند Fosc = 8MHz :




تعليق :


البرمجة سوف تكون سهلة للغاية عندما يقوم المترجم نيابة عنك بكل هذه الأعمال وخاصة بمترجم مثل mikroC PRO كما سنرى .
التعامل مع نظام PWM بلغة السى والمترجم mikroC


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 11:02 PM المشاركة 4   
افتراضي


التعامل مع نظام PWM بلغة السى والمترجم mikroC
مكتبة PWM
تمهيد :
تتوفر الوحدة (الموديول ) CCP فى الكثير من الميكروكونترولر .
يوفر المترجم mikroC PRO مكتبة تسهل استخدام وحدات نظام التعديل فى عرض النبضات PWM .
ملحوظة هامة :
بعض الميكروكونترولر يمتلك عدة وحدات CCP . لاستخدام وحدة محددة ببساطة يتم تغيير الرقم 1 فى صيغة الدالة بالرقم المطلوب مثل PWM2_Start(); : .
جميع وحدات PWM تستخدم المؤقت Timer2 فى عملها لذلك لا يمكنك تحديد ترددات مختلفة لوحدات PWM مختلفة .

دوال (روتينات) المكتبة :

1- دالة (روتين) التهيئة PWM1_Init
  • نموذج الصيغة :





# مثال : إعداد وحدة PWM للعمل عند التردد 5KHz






  • العائدات : لا يوجد .
  • الغرض (الوصف) :
تهيئة (إعداد) وحدة (موديول) PWM .
البارامتر freq "التردد" هو التردد المطلوب لتعديل عرض النبضات PWM بالهرتز Hz (يتم مراجعة data sheet للقيم الصحيحة بالنسبة لتردد المذبذب Fosc )

تحتاج هذه الدالة إلى أن تستدعى قبل استخدام أى دالة أخرى من دوال المكتبة .
  • المطالب : يجب أن يمتلك الميكروكونترولر وحدة مقارن CCP .
2- دالة (روتين) تحديد "دورة الخدمة " PWM1_Set_Duty


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 11:04 PM المشاركة 5   
افتراضي


1- دالة (روتين) تحديد "دورة الخدمة " PWM1_Set_Duty

· نموذج الصيغة :








# مثال : تحديد دورة الخدمة بنسبة 75%










· العائدات : لا يوجد .

· الغرض (الوصف) :

تحديد نسبة الخدمة duty ratio لنظام PWM .

البارامتر duty يأخد القيم ن 0 إلى 255 حيث 0 = 0 % و 127 = 50 % و 255 = 100 % .

يمكن حساب القيم الأخرى كنسبة مئوية (Percent*255)/100 .

· المطالب :

يجب استدعاء دالة(روتين) التهيئة السابق قبل استخدام هذه الدالة .

2- دالة (روتين) "بدء PWM" PWM1_Start


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 11:06 PM المشاركة 6   
افتراضي


1- دالة (روتين) "بدء PWM" PWM1_Start

· نموذج الصيغة :










# مثال :








· العائدات : لا يوجد .

· الغرض (الوصف: بدأ نظام PWM .

· المطالب : يجب استدعاء دالة(روتين) التهيئة السابق قبل استخدام هذه الدالة .



2- دالة (روتين) "إيقاف PWM" PWM1_Stop


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 11:09 PM المشاركة 7   
افتراضي


1- دالة (روتين) "إيقاف PWM" PWM1_Stop

· نموذج للصيغة :








# مثال :








· العائدات : لا يوجد .

· الغرض (الوصف) : إيقاف نظام PWM .

· المطالب : يجب استدعاء دالة(روتين) التهيئة السابق قبل استخدام هذه الدالة وأيضا يجب استدعاء دالة(روتين) البدء PWM1_Start.

مثال توضيحى :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 28-03-2011, 11:17 PM المشاركة 8   
افتراضي


مثال توضيحى :










فى هذا المثال سوف يتم تهيئة موديول PWM وتحديده لكى يعطى قطار من النبضات بدورة خدمة بنسبة 50% .
لهذا الغرض : نستخدم ثلاثة دوال : دالة التهيئة PWM1_Init() ودالة البدء PWM1_Start() ودالة تحديد دورة الخدمة PWM1_Set_Duty() .
جميع هذه الدوال ضمن مكتبة PWM بالمترجم mikroC PRO for PIC فقط يجب ضم المكتبة لمشروع البرنامج عندئذ يمكن استدعائها .




الخطوات :
  • تعريف متغير يمثل دورة الخدمة
unsigned short duty_c; // Define variable duty_c
  • إنشاء دالة جديدة تضم جميع الإعدادات الابتدائية الرئيسية باسم initMain ويتم استدعائها فى بداية الدالة الرئيسية بغرض تسهيل قراءة وفهم البرنامج علاوة على حفظ تلك الإعدادات لاستخدامها برامج أخرى مما يوفر سهولة تطوير وقت البرمجة .
void initMain() {



تحتوى هذه الدالة على الإعدادات التالية :
# إعداد جميع الأطراف كمداخل أو مخارج رقمية فقط عن طريق تصفير سجلى اختيار المداخل التناظرية ANSEL و ANSELH :

ANSEL = ANSELH = 0; // All I/O pins are configured as digital
# إعداد الحالة الابتدائية لأطراف المنفذ PORTC كمخارج :
PORTC = TRISC = 0; // Initial state of port C output pins
# إعداد نظام PWM للوحدة الأولى CCP1 ليعمل على تردد initMain
PWM1_Init(5000); // PWM module initialization (initMain)
}

  • الدالة الرئيسية :
void main() {



وتحتوى على :
# كما ذكرنا فى بدايتها يتم استدعاء دالة الأعدادات الرئيسية بما فى ذلك تهيئة نظام PWM.
initMain();

# الخطوة الأولى فى نظام PWM هى إعطاء(إسناد أو تخصيص) قيمة ابتدائية لمتغير دورة الخدمة , الرقم 127 يعنى النسبة 50% :
duty_c = 127; // Initial value of duty-cycle
# والخطوة الثانية بدء وحدة (موديول) نظام PWM باستدعاء دالة البدء :
PWM1_Start(); // Start PWM1 module
# والخطوة الثالثة استدعاء دالة تحديد (ضبط) نظام PWM ليعمل على القيمة المحددة بمتغيره وهى 50% :
PWM1_Set_Duty(duty_c); // Set PWM duty-cycle to 50%
...
...


كود:
/* In this example, PWM module is initialized and set to give a pulse train of 50% dutycycle. For this purpose, functions PWM1_Init(), PWM1_Start() and PWM1_Set_Duty() are used. All of them are already contained in the mikroC PRO for PIC PWM library and just need to be copied to the program. */
unsigned short duty_c; // Define variable duty_c
void initMain() {
ANSEL = ANSELH = 0; // All I/O pins are configured as digital PORTC = TRISC = 0; // Initial state of port C output pins PWM1_Init(5000); // PWM module initialization (5KHz)
}
void main() {
initMain();
duty_c = 127; // Initial value of duty-cycle
PWM1_Start(); // Start PWM1 module
PWM1_Set_Duty(duty_c); // Set PWM duty-cycle to 50% ... ...

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 10:04 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024