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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 23-04-2011, 11:53 AM المشاركة 1   
افتراضي تعديل عرض النبضات PWM باستخدام موديول المقارنة CCP بالميكروكونترولر PIC Twitter FaceBook Google+



تدريب : تعديل عرض النبضات PWM باستخدام موديول المقارنة CCP بالميكروكونترولر PIC
تمهيد :
تعديل عرض النبضات PWM هى تقنية للتحكم فى كمية القدرة التى يتم إمدادها للحمل باستخدام أشارة رقمية للتوصيل وللفصل on-off . الجزء (الكسر) من الدورة الذى تكون فيه الإشارة فى حالة توصيل يعرف بدورة الخدمة duty cycle .
قيمة التيار المستمر المتوسطة للإشارة يمكن أن تتغير بتغيير دورة الخدمة . يمكن لدورة الخدمة أن تأخذ أى قيمة بين الصفر (الإشارة دائما فى حالة فصل off) والواحد (الإشارة دائما موصلة on) .نفترض أن قيمة الإشارة فى حالة التوصيل on تكون +5V بينما تكون قيمتها فى حالة الفصل 0V عندئذ بتغيير دورة الخدمة للإشارة يمكن محاكاة أى جهد بين 0-5V . هذه الطريقة تستخدم فى التحكم فى سرعة محركات التيار المستمر وفى شدة إضاءة المصابيح .
فى هذا التدريب سوف نقوك بتوليد إشارة بتعديل عرض النبضات PWM باستخدام الميكروكونترولر PIC16F628A للتحكم فى شدة إضاة مصباح (ليد) . الميكروكونترولر PIC16F628A يمتلك ضمن بناءه الداخلى على جهاز hardware يسمى موديول Capture/Compare/PWM (CCP) يستخدم فى توليد PWM .




مبدأ (نظرية) العمل :
قى نظام تعديل عرض النبضات PWM يمكن للطرف RB3/CCP1 أن يخرج شكل موجى دورى رقمى بسعة عشرة خانات 10-bit حيث يكون كل من الزمن الدورى period ودورة الخدمة duty cycle قابلين للبرمجة . للعمل فى نظام PWM يجب إعداد الطرف CCP1 كمخرج .دورة الخدمة للشكل الموجى المتولد هى قيمة ذات 10 خانات 10-bit value .
الدائرة الكهربية :
تمهيد :
تعديل عرض النبضات PWM هى تقنية للتحكم فى كمية القدرة التى يتم إمدادها للحمل باستخدام أشارة رقمية للتوصيل وللفصل on-off . الجزء (الكسر) من الدورة الذى تكون فيه الإشارة فى حالة توصيل يعرف بدورة الخدمة duty cycle .
قيمة التيار المستمر المتوسطة للإشارة يمكن أن تتغير بتغيير دورة الخدمة . يمكن لدورة الخدمة أن تأخذ أى قيمة بين الصفر (الإشارة دائما فى حالة فصل off) والواحد (الإشارة دائما موصلة on) .نفترض أن قيمة الإشارة فى حالة التوصيل on تكون +5V بينما تكون قيمتها فى حالة الفصل 0V عندئذ بتغيير دورة الخدمة للإشارة يمكن محاكاة أى جهد بين 0-5V . هذه الطريقة تستخدم فى التحكم فى سرعة محركات التيار المستمر وفى شدة إضاءة المصابيح .
فى هذا التدريب سوف نقوك بتوليد إشارة بتعديل عرض النبضات PWM باستخدام الميكروكونترولر PIC16F628A للتحكم فى شدة إضاة مصباح (ليد) . الميكروكونترولر PIC16F628A يمتلك ضمن بناءه الداخلى على جهاز hardware يسمى موديول Capture/Compare/PWM (CCP) يستخدم فى توليد PWM .



مبدأ (نظرية) العمل :
قى نظام تعديل عرض النبضات PWM يمكن للطرف RB3/CCP1 أن يخرج شكل موجى دورى رقمى بسعة عشرة خانات 10-bit حيث يكون كل من الزمن الدورى period ودورة الخدمة duty cycle قابلين للبرمجة . للعمل فى نظام PWM يجب إعداد الطرف CCP1 كمخرج .دورة الخدمة للشكل الموجى المتولد هى قيمة ذات 10 خانات 10-bit value .
الدائرة الكهربية :

اعلانات

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


الدائرة الكهربية :
يتم توصيل 2 مفتاح ضاغط إلى الأطراف RB0 , RB1 كمداخل . ويتم تشغيل ليد بواسطة الخرج المعدل PWM من الطرف RB3/CCP1 خلال مقاومة لتحديد التيار 330R.يتم تزايد أو تناقص دورة الخدمة لإشارة الخرج PWM باستخدام المفاتيح الموجودة كمداخل وهذا يؤدى إلى التغيير فى شدة إضاءة الليد .






البرنامج :

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

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


كود:
 
 
/* Pulse Width Modulation Description: CCP module generating a PWM signal MCU: PIC16F628A Oscillator: XT, 4.0 MHz, MCLR Enabled */ sbit UP at RB0_bit; sbit DOWN at RB1_bit; unsigned short new_DC, current_DC; void debounce(){ Delay_ms(300); } void main() { CMCON = 0x07; // Disable comparators PORTB = 0x00; TRISB = 0b00000011; // RB0, RB1 input, RB3 (PWM1) output PWM1_Init(5000); // PWM module initialization (5KHz) new_DC = 0; // Initial value of variable Duty Cycle current_DC = 0; PWM1_Start(); // Start PWM1 module with Zero DC PWM1_Set_Duty(current_DC); do { if (!UP){ // If the button connected to RB0 is pressed debounce(); if (new_DC < 250) // Don't go above 250 new_DC = new_DC + 25 ; // increment Duty Cycle by 25 } if (!DOWN) { // If the button connected to RB1 is pressed debounce(); if (new_DC !=0) // Don't go below 0 new_DC= new_DC - 25 ; // Decrement Duty Cycle by 25 } if (current_DC != new_DC) { current_DC = new_DC ; PWM1_Set_Duty(current_DC); // Change the current DC to new value } } while(1); } // END main()


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


البرنامج :
يوفر المترجم MikroC Pro for PIC بمكتبة بأربعة دوال لروتينات للتحكم فى PWM باستخدام الموديول CCP . هذه الروتينات هى :
PWM1_Init(const long frequency)
و PWM1_Set_Duty(unsigned short duty_ratio)
و PWM1_Start(void)
و PWM_Stop(void)
البرنامج يعطى عشر مستويات مختلفة للتحكم فى شدة إضاءة الليد بتغيير دورة الخدمة من 0 إلى 250 بخطوة 25 فى كل مستوى . يتم تغيير دورة الخدمة عن طريق الضغط على المفاتيح الضاغطة UP , DOWN .
التعليق على البرنامج:
1- مقدمة (رأس) البرنامج .
/*
Pulse Width Modulation
Description: CCP module generating a PWM signal
MCU: PIC16F628A
Oscillator: XT, 4.0 MHz, MCLR Enabled
*/

2- تعريف الخانات بأسماء تعبر عن وظيفتها ومتعرف عليها .
sbit UP at RB0_bit;
sbit DOWN at RB1_bit;

3- الإعلان عن المتغيرات
unsigned short new_DC, current_DC;

4- إنشاء دالة تأخير لتلاشى تأثير حدوث إرتدادات فى المفاتيح .
void debounce(){
Delay_ms(300);
}

5- بداية الدالة الرئيسية وفيها :
void main() {

أ‌- إعدادات أطراف الميكروكونترولر :
· فصل المقارنات للسماح باستخدام جميع الأطراف كمداخل / مخارج رقمية .
CMCON = 0x07; // Disable comparators
· تصفير سجل المنفذ PORTB كحالة ابتدائية .
PORTB = 0x00;
· أعداد أطراف المنفذ PORTB بحيث يكون RB0, RB1 كمداخل للمفاتيح و RB3 كمخرج PWM
TRISB = 0b00000011; // RB0, RB1 input, RB3 (PWM1) output
ب‌- إعدادات نظام PWM
· تردد الشكل الموجى فى الخرج 5KHz .

PWM1_Init(5000); // PWM module initialization (5KHz)

· تصفير متغير القيمة الجديدة للتيار المستمر DC والقيمة الحالية للتيار المستمر .
new_DC = 0; // Initial value of variable Duty Cycle
current_DC = 0;

· بدء نظام PWM بقيمة "صفر" تيار مستمر
PWM1_Start(); // Start PWM1 module with Zero DC
· ضبط دورة الخدمة لنظام PWM بالقيمة الموجودة فى متغير "القيمة الحالية" وهى فى البداية تكون بصفر .
PWM1_Set_Duty(current_DC);


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


ت‌- الدخول إلى حلقة غير منتهية do{…..}while(1) حيث يتم تنفيذ :
do {

· التحقق من أن مفتاح التزايد UP قد عكس وضعه أى تم الضغط عليه
if (!UP){ // If the button connected to RB0 is pressed
· عندئذ يتم استدعاء دالة التأخير لتلاشى تأثير الارتدادات فى المفتاح
debounce();
· التحقق من أن القيمة الجديدة لم ولن تتعدى أقصى قيمة وهى 250 .
if (new_DC < 250) // Don't go above 250

· فإن كان كذلك يتم تزايد سجل القيمة الجديدة بمقدارخطوة أى بمقدار 25 ونسخ القيمة الجديدة مرة أخرى إلى سجل القيمة الجديدة .
new_DC = new_DC + 25 ; // increment Duty Cycle by 25
}
· التحقق من أن مفتاح التزايد UP قد عكس وضعه أى تم الضغط عليه .

if (!DOWN) { // If the button connected to RB1 is pressed

· عندئذ يتم استدعاء دالة التأخير لتلاشى تأثير الارتدادات فى المفتاح

debounce();

· التحقق من أن القيمة الجديدة لم ولن تصل لأدنى قيمة وهى الصفر .

if (new_DC !=0) // Don't go below 0

· فإن كان كذلك يتم تناقص سجل القيمة الجديدة بمقدارخطوة أى بمقدار 25 ونسخ القيمة الجديدة مرة أخرى إلى سجل القيمة الجديدة .


new_DC= new_DC - 25 ; // Decrement Duty Cycle by 25
}

· التحقق من أن القيمة الجديدة لا تساوى القيمة الحالية
if (current_DC != new_DC) {

· عندئذ يتم نسخ (مساواة) القيمة الجديدة إلى القيمة الحالية
current_DC = new_DC ;

· ثم إعادة ضبط دورة الخدمة لنظام PWM بالقيمة الجديدة
PWM1_Set_Duty(current_DC); // Change the current DC to new value
}

· وتكرار العملية بصفة مستمرة
} while(1);

· نهاية الدالة الرئيسية .
} // END main()

النتائج :


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


النتائج :
عند توصيل القدرة للدائرة تبدأ الإضاءة بمستوى الصفر (الدورة كلها OFF مستمر ) أى دورة الخدمة بصفر . بالضغط على المفتاح الضاغط UP تتزايد دورة الخدمة (يتزايد الجزء الموجب من الدورة ON) وتتزايد شدة إضاءة الليد حتى تصل دورة الخدمة إلى الواحد الصحيح (الدورة كلها ON مستمر) .








وإلى لقاء قريب إن شاء الله


2sa1302
:: عضوية غير مفعلة ::
تاريخ التسجيل: Sep 2005
المشاركات: 82
نشاط [ 2sa1302 ]
قوة السمعة:0
قديم 23-04-2011, 10:25 PM المشاركة 7   
افتراضي


اخى الكريم أرجو ان لا اكون ثقيل عليك
هل من الممكن أعطاء مثال عملى على أستخدام مقاومة متغيرة تتحكم فى سرعة موتور بأستخدام نظام ccp بدلا من المفاتيح الضاغطه ويتم توصيل المقاومة على المدخل التناظرى لأى طرف من اطراف porta وجزاك الله خيرا


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


اخى الكريم أرجو ان لا اكون ثقيل عليك
هل من الممكن أعطاء مثال عملى على أستخدام مقاومة متغيرة تتحكم فى سرعة موتور بأستخدام نظام ccp بدلا من المفاتيح الضاغطه ويتم توصيل المقاومة على المدخل التناظرى لأى طرف من اطراف porta وجزاك الله خيرا
أخى الكريم

شكرا جزيلا لك

بارك الله فيك

اسمح لى أن أضع السؤال ضمن مخطط التدريبات المقررة إن شاء الله حتى يتسنى لى التحضير المناسب .

مع تمنياتى بدوام التوفيق

إضافة رد

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

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

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


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

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