المؤقت 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