المعالجات والمتحكمات المصغرة الجزء الرابع (98-116والأخيرة)


0098

0099 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116

المؤقت 2
 هو مؤقت/عداد بطول 8 بت مع خواص مقارنة الخرج وتوليد PWM
تماما كما في T/C1 .
 يمكنه استخدام كريستالة منفصلة عن ساعة النظام كمصدر لنبضات
الساعة.
 يتم اختيار الكريستالة عن طريق ضبط قيمة البت AS2 في ASSR .
 البتات الثلاثة الأخرى هي للتأكد من عدم كتابة البيانات على T/C2 في
الوقت الذي يكون فيه T/C2 قيد التحديث.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
98
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
استخدام المعالج كمصدر للوقت الحقيقي
 يسمح المعالج الصغري باستخدام كريستالة ترددها 32.767 كيلوهرتز
لقيادة الهزاز الداخلي وذلك عن طريق
 القطبين PINC.6 و PINC.7 .
 يسمح ذلك ل T/C2 بالعمل كقاعدة من أجل حساب الزمن الحقيقي.
 سيطفح T/C2128 مرة في كل ثانية.
 إذا تمت تهيئته بنسبة تقسيم T1OSC/128 .
 سيسمح ذلك للمؤقت 2 بالعد تصاعديا حتى 256 هرتز.
 يتم توليد مقاطعة مرة واحدة في كل ثانية.
 يوجد مسجل تحكم واحد للمؤقت 2 وهو TCCR2 .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
99
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تعريف بتات TCCR2
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
100
البت
الوصف
FOC2
يجبر حصول تطابق على المقارن في غير حالات PWM
WGM20
تفعيل هذا البت يقوم بتفعيل وظائف المؤقت 2
COM21
يقوم هذان البتان باختيار وظيفة نمط مقارنة الخرج. لهما نفس تعريف البتين COM1x1 و COM1x0 في المؤقت 1
COM20
WGM21
تفعيل هذا البت يؤدي إلى تفعيل نمط CTC
CS22
بتات تحديد نسبة التقسيم للعداد. انظر مواصفات AVR للمزيد من التفصيل.
CS21
CS20
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المؤقت 2 بعد تهيئته
// مصدر الساعة هو القطب TOSC1
// قيمة الساعة هي PCK2/128
TCCR2=0x05;
ASSR=0x08;
 للمؤقت 2 مسجل تحكم وحيد، TCCR2 ، يتحكم بعمل T/C2 .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
101
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تصميم النظام
 يتم تصميم النظام لتسجيل:
 عدد دورات المحرك بالدقيقة، بالاعتماد على نبضات من قابس الشوكات،
 عدد دورات محور القيادة بالدقيقة، وذلك عن طريق قراءة حساس مغناطيسي
 عن طريق مغناطيس مرتبط بالمحور
 حرارة المحرك عن طريق مزدوجة حرارية RTD مرتبطة مع رأس اسطوانة
المحرك.
 يمكن الحصول على قياسات سرعة الدوران بالدقيقة عن طريق
 عد النبضات خلال ثانية واحدة وضربها ب 60 للحصول عليها بالدقيقة.
 الخطوات المتبعة في تسجيل الثانية الواحدة يجب أن تسجل عدد الدورات ومن ثم تمحيها من أجل
العد اللازم للثانية التالية.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
102
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 1 : التسجيل خلال ثانية واحدة باستخدام
المؤقت 0
 ستحاول الحصول على فاصل زمني طويل، ولديك العديد من العمليات المعتمدة على
المقاطعات.
 سيكون من الجيد استخدام نبضة ساعة بطيئة وفعالة من أجل نبضات الساعة
 كعملية تصغير قيمة الزمن المستخدم في روتين النبضات.
 ساعة النظام بتردد 8 ميغاهرتز، ونسبة التقسيم 64 تنتج ساعة بتردد 125 كيلوهرتز
مطبقة على T/C0 .
 يجب حدوث 125000 نبضة ساعة خلال ثانية واحدة.
 تحديد قيمة T/C0 بحيث يعد 250 عدة في كل نبضة.
125000 / 250 = 500 ، أي أنه يجب أن تحصل مقاطعة المؤقت 500 مرة في كل
ثانية تمضي.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
103
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 1 : تهيئة المؤقت 0 في التابع main
inttime_cntr= 0;
/* متحول لتخزين عدد مرات طفحان المؤقت 0*/
main()
{
/* تهيئة ال مؤقت/عداد 0*/
TCCR0=0x03; /* تحديد تردد الساعة بنسبة تقسيم على 64*/
TCNT0=0x00; /* بدء المؤقت 0 عند القيمة 0*/
{
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
104
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 1 : ISR لطفحان المؤقت 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
TCNT0 = 6; /* إعادة تحميل قيمة المؤقت 0 من أجل الدورة التالية */
if (time_cntr++ == 500) /* تحقق من مرور ثانية واحدة */{
if (data_set_cntr< 120) {
/* تسجيل البيانات إذا كانت أصغر من 120*/
/*تسجيل سرعة دوران المحرك والمحور بالدقيقة والحرارة */
e_rpm[data_set_cntr] = current_e_rpm;
s_rpm[data_set_cntr] = current_s_rpm;
temp[data_set_cntr++] = current_temp; }
time_cntr= 0; /* إعادة ضبط العداد */ } }
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
105
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 2 : قياس سرعة دوران المحرك بالدقيقة
باستخدام المؤقت 1
 نستخدم دارة متكاملة لالتقاط النبضات المعبرة عن سرعة الدوران بالدقيقة.
 نستخدم ساعة نظام بتردد 8 ميغاهرتز وبتقسيم 8 للحصول على تردد ساعة
قدره 1 ميغاهرتز وبدور 1 ميكروثانية.
 نستخدم ساعة بتردد 1 ميغاهرتز ل T/C1 ، ونستخدم ICR1 لالتقاط عدّات T1
عند كل جبهة هابطة على ICP .
 يقوم ISR بمقارنة العدد الملتقط حاليا مع الزمن الملتقط سابقا، وذلك لتحديد الدور،
 الذي يستخدم بدوره لحساب عدد دورات المحرك في الدقيقة.
 ملاحظة: نحصل على نبضة واحدة من أجل كل دورتين للمحرك في محرك بأربعة أدوار.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
106
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 2 : تهيئة مقاطعة T/C0
/* تهيئة مقاطعة المؤقت/عداد */
TIMSK=0x21; /* طفحان المؤقت 0 » أي سي بي « ، تفعيل مقاطعة */
/* تهيئة المؤقت/عداد 1*/
TCCR1A=0x00;
TCCR1B=0x02; /* نسبة التقسيم = 8 ، عند الجبهة الهابطة */
TCNT1H=0x00; /* البدء عند 0*/
TCNT1L=0x00;
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
107
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 2 : ISR للمؤقت 1 لالتقاط الحدث
unsigned intprevious_capture_time;/* الزمن الذي تم
التقاطه سابقا */
interrupt [TIM1_CAPT] void timer1_capt_isr(void) {
unsigned intcurrent_capture_time, period; /*الزمن والدور */
current_capture_time= (256* ICR1H) + ICR1L;
if (current_capture_time> previous_capture_time) /* العودة إلى
البداية */
period = current_capture_time-previous_capture_time;
else period = 0xFFFF -current_capture_time+
previous_capture_time;
current_e_rpm= (unsigned long)120E6 / (unsigned long)period;
previous_capture_time= current_capture_time; /* الحفظ من أجل
الحسابات التالية */
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
108
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
شرح الجزء 2 : قياس سرعة دوران المحرك بالدقيقة
باستخدام المؤقت 1
 « نقوم بتهيئة المتحول العام previous_capture_time للحصول على القيمة التي »
تم التقاطها سابقا.
 يقرأ ISR الزمن الحالي الذي تم التقاطه ويستخدمه لحساب عدد الدورات في الدقيقة.
 يتم حساب عدد الدورات في الدقيقة كالتالي:
عدد الدورات في الدقيقة ) RPM = ) 1E6 ميكروثانية * 1 نبضة / الدور بالميكروثانية * 2
دورة في كل نبضة * 60 ثانية في كل دقيقة
 انتبه إلى أنه:
 تم استخدام هذه الصيغة لضمان الدقة مع الأعداد الكبيرة.
 جمع الثوابت يؤدي إلى تصغير التعبير الحسابي.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
109
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 3 : قياس سرعة دوران محور القيادة في الدقيقة
باستخدام INT0
 بما أنه لا يوجد مسجل التقاط ثاني وبما أن إشارة سرعة دوران المحور
في الدقيقة مرتبطة مع INT0 .
 يمكن إنشاء ICR باستخدام ISR ل INT0 وذلك عن طريق قراءة العدد
في T/C1 عند حصول مقاطعة.
 الحسابات تبقى ذاتها، باستثناء وجود نبضة واحدة في كل دورة عوضا
عن اثنتين.
 بعض المتحولات المحلية لها الأسماء ذاتها.
 بما أنها محلية فيمكن استخدام الأسماء ذاتها.
 لكن مقاييس البرمجة لا ترضى بذلك.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
110
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
الجزء 3 : ISR الخاص بالمقاطعة الخارجية 0
( INT0 )
unsigned intprevious_shaft_capture_time; /* القيمة
الملتقطة سابقا */
interrupt [EXT_INT0] void ext_int0_isr(void) {
unsigned intcurrent_capture_time, period;
/*الزمن والدور الحاليين */
current_capture_time= TCNT1; /* تخزين الزمن الموجود في المؤقت 1*/
/*تحقق من العودة إلى البداية */
if (current_capture_time>previous_shaft_capture_time)
period = current_capture_time-previous_shaft_capture_time;
else period = 0xFFFF -current_capture_time+
previous_shaft_capture_time;
current_s_rpm= (unsigned long)60E6 / (unsigned long)period;
previous_shaft_capture_time= current_capture_time; }
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
111
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
قياس حرارة المحرك باستخدام المبدل التشابهي
الرقمي ) ADC )
 يتم ربط إشارة الحرارة مع ADC3 ، وهو دخل المبدل التشابهي الرقمي على
المنفذ A ، القطب 3 .
 يقع مجال القياس بين 100 و 250 درجة فهرنهايت.
 استخدام نمط ال 10 بتات في ال ADC يعني أن قيمة النتيجة ستكون:
100 درجة فهرنهايت = 0x000 = 010
250 درجة فهرنهايت = 0x3FF = 102310
ومنه يمكن استنتاج علاقة التحويل ليكون شكلها:
Temp ( = 150 درجة فهرنهايت * قراءة ال ADC / ) 1023 + 100 درجة
فهرنهايت
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
112
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
 يمكن للمبدل التشابهي الرقمي أن يعمل في النمط الحر.
 يتم الاحتفاظ بأحدث قيمة للحرارة، بحيث أنه عندما يتم حفظ
البيانات في كل ثانية،
 يتم تسجيل أحدث قيمة.
 تحدث مقاطعة ال ADC في نهاية كل تحويل ويمكن استخدامها
لتحديث قيمة الحرارة الحالية.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
113
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
عملية تهيئة المبدل التشابهي الرقمي ADC
. 1 تحديد تردد الساعة المستخدم، باختيار نسبة التقسيم لساعة ال ADC .
. 2 يجب أن يكون تردد ساعة ال ADC بين 50 كيلوهرتز و 200 كيلوهرتز.
• قيمة تردد ساعة النظام لدينا هي 8 ميغاهرتز، ولذلك يجب اختيار نسبة تقسيم
على 64 للحصول على تردد ساعة للمبدل التشابهي الرقمي قيمته 125
كيلوهرتز.
. 3 اختيار القناة التي سيتم قياسها،
. 4 تفعيل نمط العمل الحر.
. 5 بدء التحويل الأول.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
114
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تهيئة ال ADC
ADMUX=0x3;
/* تحديد القناة 3 ليكون الكمون المرجعي » ايي ريف « و */
/*الدخل */
ADCSRA=0xE9; /* تفعيل المبدل التشابهي الرقمي، نمط العمل الحر، بدء
العمل، نسبة تقسيم الساعة هي 64*/
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
115
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
قراءة قيمة التحويل وتحويلها إلى حرارة :ADC ISR
[ADC_INT] void adc_isr(void){
unsigned intADC_DATA;
ADC_DATA = ADCW;
/*جلب البيانات من مسجل نتيجة المبدل التشابهي الرقمي */
current_temp=
((long)150*(long)ADC_DATA)
/ (long) 1023 +(long)100;
{
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
116
انتهت المحاضرة الرابعة والأخيرة

Advertisements

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s