المعالجات والمتحكمات المصغرة الجزء الرابع (78-97)


0078

0079 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 0090 0091 0092 0093 0094 0095 0096 0097

المؤقت 1 في نمط تعديل عرض النبضة
 نمط تعديل عرض النبضة ) PWM )
 أحد الطرق التي تزودنا بتحويل رقمي تشابهي
 تغيير الدور الفعال، يؤدي إلى تغيير القيمة الوسطية للجهد المستمر.
 ومن ثم يتم ترشيح الموجة الناتجة واستخدامها للتحكم بالأجهزة التشابهية،
مما يشكل محولا رقميا تشابهيا.
 دارة RC
 تقوم بالترشيح مع
TC=R1C1 وهو أطول بكثير من
 دور إشارة ال PWM .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
78
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
القيمة المتوسطة لإشارة PWM
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
79
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
التطبيق الأول: التحكم بشدة إضاءة LED
 يتم التحكم بسطوع ضوء LED عن طريق موجة PWM .
 يتم تشغيل الليد إذا أعطيناه إشارة 0 منطقي، وسيكون السطوع
متناسبا عكسيا مع إشارة PWM .
 تقوم العين بإجراء الترشيح اللازم، لأنها
 لا تستطيع ملاحظة الترددات التي تزيد عن 42 هرتز )نسبة فليكر(.
 يجب أن يكون تردد إشارة PWM أكبر من 42 هرتز،
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
80
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
التطبيق الثاني: التحكم بمحرك تيار مستمر
 عملية الترشيح في هذه الدارة هي عبارة عن
مزيج من
. 1 العطالية الميكانيكية للمحرك
. 2 التحريضية في الوشائع.
 فيزيائيا، لا يمكن للمحرك أن يغير سرعته
بتردد كبير يصل إلى تردد الإشارة.
 تقوم المكثفة بزيادة الترشيح، ويستخدم الديود
لمنع حصول أشواك بسبب تغيرات التيار في
المحرك التحريضي.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
81
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تشكيل إشارة ال PWM
. 1 إحدى الطرق المستخدمة تكون عن طريق T/C1OCR ،
• يتم تغيير رقم الزيادة المضاف في كل مرة يحدث فيها تطابق،
وذلك لإنشاء إشارة PWM .
. 2 يوجد في T/C1 نمط داخلي ينتج إشارة PWM
• دون الحاجة لوجود برنامج يخدم ال OCR لإنشاء إشارة PWM .
• عند العمل في نمط PWM ، يقوم T/C1 بالعد نحو الأعلى
والأسفل، مما يجعل من الصعب استخدام أي نمط آخر ل T/C1 مع
نمط ال PWM .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
82
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مبدأ عمل T/C1 في النمط PWM
 في نمط PWM ، يعد T/C1 من الصفر حتى القيمة الأعظمية،
ومن ثم يعد تنازليا حتى الصفر.
 يتم تحديد القيمة الأعظمية بواسطة التمييز المطلوب.
 يمكن استخدام ال PWM بتمييز 8/9/10 بت، كما تحددها البتات
( WGM ( في TCCR1A .
 تؤثر القيمة الأعظمية في تردد ال PWM أيضا.
 اختيار التمييز 9 بت يؤدي إلى تحديد القيمة الأعظمية عند 511 ،
وتردد إشارة PWM سيكون هو تردد ساعة النظام ) 6 ميغاهرتز( مع
نسبة تقسيم 8 :
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
83
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
نمط PWM وبتات تحديد نمط مولد الموجة ) WGM )
بتات تحديد ال PWM
تمييز ال PWM
القيمة الأعظمية للعداد
WGM10
WGM11
0
0
PWM غير مفعل
1
0
8 بت
255 ( 0xFF )
0
1
9 بت
511 ( 0x1FF )
1
1
10 بت
1023 ( 0x3FF )
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
84
COM1x0
COM1x1
الخاصية ) x هي إما A أو B ، بحسب ما يكون مناسبا(
0
0
لا يوجد خرج
1
0
حصول تطابق يؤدي إلى تشغيل الخط OC1x
0
1
حصول تطابق يؤدي إلى تحديد قيمة الخط OC1x ب 0
1
1
حصول تطابق يؤدي إلى تحديد قيمة الخط OC1x ب 1
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
حساب تردد ال PWM
 تردد PWM = تردد ساعة النظام / )نسبة التقسيم * 2 * العدة
الأعظمية( = 6 ميغاهرتز / ) 8 * 2 * 511 = ) 733.8 هرتز
 التمييز هو دقة التحكم بإشارة PWM .
 في نمط 8 بت، يتم التحكم ب PWM في كل جزء من 265 ؛
 في نمط 9 بت، يتم التحكم ب PWM في كل جزء من 512 ؛
 في نمط 10 بت، يتم التحكم ب PWM في كل جزء من 1024 .
 يجب مقارنة التمييز بالتردد، وذلك لتحديد الخيار الأنسب
 حيث أن التمييز الأكبر ينتج ترددا أكبر لإشارة PWM .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
85
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تحديد تردد إشارة ال PWM من أجل تردد ساعة
للنظام = 8 ميغاهرتز
 لتحديد التردد ذاته تماما، يجب تغيير كل من التمييز ونسبة
التقسيم للحصول على أقرب قيمة ممكنة للتردد
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
86
8بت ) 511 )
9بت ) 511 )
10 بت ) 1023 )
نسبة التقسيم
ساعة النظام
تردد PWM =
15.7 كيلوهرتز
7.8 كيلوهرتز
3.91 كيلوهرتز
ساعة النظام / 8
1.96 كيلوهرتز
978 هرتز
489 هرتز
ساعة النظام / 64
245 هرتز
122 هرتز
61 هرتز
ساعة النظام / 256
61 هرتز
31 هرتز
15 هرتز
ساعة النظام /
1024
15 هرتز
8 هرتز
4 هرتز
تردد PWM = تردد ساعة النظام / )نسبة التقسيم * 2 * العدة الأعظمية(
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
أنماط PWM
 تحدد القيمة المحملة في OCRT/C1 فيما إذا سيكون دور العمل هو خرج في نمط
PWM .
 في نمط PWM العادي
. 1 يقوم T/C1 بالعد تنازليا،
. 2 يعطي قيمة لبت الخرج عند حصول تطابق مع OCR ، و
. 3 عندما تكون تعد تصاعديا، تعيد ضبط بت الخرج عند حصول تطابق.
• تحميل القيمة 20 % من القيمة الأعظمية في OCR يؤدي إلى إخراج موجة دور العمل لها هو 20%
من الدور الكلي.
• كما أنه يمكن إنتاج نمط PWM معكوس
• تحميل القيمة 75 % من القيمة الأعظمية في OCR يؤدي إلى إخراج موجة دور الراحة لها هو
75 .%
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
87
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
88 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
المسجلين TCCR1A و TCCR1B
عادي
تصحيح طور ال PWM ، 8 بت
تصحيح طور ال PWM ، 9 بت
تصحيح طور ال PWM ، 10 بت
محي عند حصول تطابق ) CTC )
PWM السريع، 8 بت
PWM السريع، 9 بت
PWM السريع، 10 بت
تصحيح الطور والتردد ل PWM
تصحيح الطور والتردد ل PWM
تصحيح الطور ل PWM
تصحيح الطور ل PWM
محي عند حصول تطابق ) CTC )
محجوز
PWM السريع
PWM السريع
بدون تقسيم
تردد الساعة
تردد الساعة / 8
تردد الساعة / 64
تردد الساعة / 256
تردد الساعة / 1024
ساعة خارجية على T0 )تغيير القيمة عند الجبهة الهابطة(
ساعة خارجية على T1 )تغيير القيمة عند الجبهة الصاعدة(
– عادي، OC1A/1B غير موصولين
– WGM1[3:0] = 15 ، تغيير حالة OC1A عند حصول
تطابق في المقارنة. OC1B غير موصول WGM1[3:0]
إعدادات أخرى، OC1A/1B غير موصول.
– محي قيمة OC1A/B عند حصول تطابق في المقارنة.
تحديد قيمة OC1A/1B عند القمة
– تحديد قيمة OC1A/1B عند حصول تطابق في المقارنة.
محي OC1A/1B عند القمة
عادي، OC1A/1B غير متصل
تغيير قيمة OC1A/1B عند حصول تطابق
محي قيمة OC1A/1B عند حصول تطابق
تحديد قيمة OC1A/1B عند حصول تطابق
– عادي، OC0 غير متصل
– WGM1[3:0]=9 or 14 : تغيير حالة OCnA
عند حصول تطابق على الخرج. OCnB غير
متصل.
WGM1[3:0] = إعدادات أخرى،
OC1A/1B غير متصل
– محي OC0 عند حصول تطابق أثناء العد
التصاعدي. تحديد قيمة OC0 عند حصول تطابق
أثناء العد التنازلي.
– تحديد قيمة OC0 عند حصول تطابق أثناء العد
التصاعدي. محي OC0 عند حصول تطابق أثناء
العد التنازلي.
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال: إشارة PWM بأربع دورات عمل ) 10 ، 20 ، 30 ، 40 %
وتردد 2 كيلوهرتز( بالاعتماد على القيم المنطقية عند القطب A
 من أجل نظام يعمل بتردد ساعة 8 ميغاهرتز، من الجدول، نختار التمييز 8 بت
ونسبة تقسيم على 8 فنحصل على تردد 1.96 كيلوهرتز ≅ 2 كيلوهرتز،
 نستخدم #define لحجب البتات الدنيا من دخل المنفذ A ،
 يتم إعطاء القيمة 0x03 لتفعيل مقاومات الرفع على البتين الأقل أهمية.
 يتم تهيئة كل من TCCR1A و TCCR1B بحيث نحدد نمط PWM ونحصل
على التردد المطلوب باستخدام التقسيم.
 نستخدم التعليمة if « مع المتحول old_sw من أجل كتابة المعلومات الجديدة »
لل PWM فقط إذا تغيرت قيمة المفاتيح، ومنه منع الكتابة بشكل مستمر على
مسجل مقارن الخرج.
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
89
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال: إشارة PWM بأربع دورات عمل ) 10 ، 20 ، 30 ، 40 %
وتردد 2 كيلوهرتز( بالاعتماد على القيم المنطقية عند القطب A
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
90
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال: إشارة PWM بأربع دورات عمل ) 10 ، 20 ، 30 ، 40 %
وتردد 2 كيلوهرتز( بالاعتماد على القيم المنطقية عند القطب A
#include <mega16.h>
/* لجعل البتات الدنيا من » تعريفا « نستخدم
بتات تحكم ودخل » سي « المنفذ */
#define PWM_select(PINA & 3)
void main(void)
{
unsigned intold_sw; /* تخزين
القيمة السابقة للدخل */
PORTA = 0x03; /* تفعيل مقاومات
الرفع الداخلية من أجل بتات الدخل */
DDRD = 0x20; /* OC1A خرج */
TCCR1A = 0x91; /* من » اي « مقارنة
غير معكوس، وتمييز » بي دبليو ام « أجل 8
بت */
TCCR1B = 0x02; /* نسبة تقسيم على 8*/
while (1)
{
If PWM_select!= old_sw);
{
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
91
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
مثال: إشارة PWM بأربع دورات عمل ) 10 ، 20 ، 30 ، 40 %
وتردد 2 كيلوهرتز( بالاعتماد على القيم المنطقية عند القطب A
old_sw= PWM_select; /* تخزين قيمة المفتاح */
switch (PWM_select)
{
case 0: OCR1A=25; /* دورة العمل المطلوبة قيمتها 10 % */
break;
case 1: OCR1A=51; /* دورة العمل المطلوبة قيمتها 20 % */
break;
case 2: OCR1A=76; /* دورة العمل المطلوبة قيمتها 30 % */
break;
case 3: OCR1A=102; /* دورة العمل المطلوبة قيمتها 40 % */
break;
default:
}}}}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
92
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
المثال 2 : تعديل عرض النبضة
 هزاز كريستالي = 10 ميغاهرتز
 تحديد نمط عمل قناة مقارنة الخرج B لتولد إشارة PWM .
 تحديد نمط تصحيح طور ال PWM بتمييز 8 بت
 نستخدم جهدا تشابهيا على القناة 3 للمحول التشابهي الرقمي وذلك
لتحديد دورة العمل المرغوبة من 50 % حتى 100 .%
0 فولت = 50 = % 127 ،
5 فولت = 100 = % 255 .
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
93
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تابع تعديل عرض النبضة
void PWM(unsigned intPWM_incr) {
unsigned intOpen_Speed_int;
float Open_Speed_float;
intgate_position_int;
PWM_duty_cycle= 0;
InitADC(); // تشغيل المحول التشابهي الرقمي
Open_Speed_int=ReadADC(0x03); //
قراءة ضبط هذا المتحول
Open_Speed_float=(float)(Open_Speed_int)/(float)(0x0400));
//convert volt to PWM constant 127÷255
Open_Speed_int=(unsigned int)((Open_Speed_float* 127)+128.0);
TCCR1A = 0xA1; // تصحيح الطور 8 بت
// freq= resonator/510 = 10 MHz/510 =19.607 kHz
TCCR1B = 0x01; // لا يوجد تقسيم لتردد
نبضات الساعة
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
94
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تابع تعديل عرض النبضة
PWM_duty_cycle= 0; // تهيئة متحولات
» بي دبليو ام « دور العمل لإشارة
OCR1BH = 0x00;
OCR1BL = (unsigned char)(PWM_duty_cycle);// ضبط دور
على القيمة » بي « عند القناة » بي دبليو ام « عمل
0 %
while (PWM_duty_cycle< Open_Speed_int)
{
if(PWM_duty_cycle< Open_Speed_int) // زيادة دور العمل
PWM_duty_cycle=PWM_duty_cycle+ PWM_open_incr;
OCR1BL = (unsigned char)(PWM_duty_cycle);// ضبط قيمة
» بي « دور العمل عند القناة
{
// تبقى سرعة فتح البوابة هي السرعة العليا
بي ايي « المحددة 3 »
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
95
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
تهيئة المحول التشابهي الرقمي InitADC()
// تقوم هذه التعليمة بتهيئة المحول
التشابهي الرقمي
void InitADC( void)
{
ADMUX = 0; // تحديد القناة 0
ADCSRA = 0xC3; // تفعيل
المحول التشابهي الرقمي وبدء أول
تحويل خاطئ، تحديد التقسيم للمحول
بالقيمة 8 مهم جدا من أجل //
النتائج الدقيقة
while (!(ADCSRA & 0x10));
// تحقق فيما إذا جهز التحويل
ADCSRA |= 0x10;
// محي علم الجاهزية
}
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
96
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
قراءة المحول التشابهي الرقمي ReadADC()
unsigned intReadADC(unsigned char channel) {
unsigned intbinary_weighted_voltage, binary_weighted_voltage_low;
unsigned intbinary_weighted_voltage_high; // وزن
الكمون كقيمة ثنائية
ADMUX = channel; // تحديد القناة
ADCSRA |= 0x43; // بدء التحويل، نسبة التقسيم 8
بت من أجل نتائج دقيقة
while (!(ADCSRA & 0x10)); // التحقق فيما إذا
جهز التحويل
ADCSRA |= 0x10; // محي علم الجاهزية – إعطائه
قيمة 1
binary_weighted_voltage_low= ADCL; //
قراءة البتات الثمانية الأدنى أولا
// قراءة البتين العلويين، وضرب القيمة ب 256
binary_weighted_voltage_high= ((unsigned int)(ADCH << 8));
binary_weighted_voltage=
binary_weighted_voltage_low| binary_ weighted_ voltage_high;
return binary_weighted_voltage; // ADCH:ADCL }
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
97
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com

أضف تعليق