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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 19-04-2013, 09:14 PM المشاركة 1   
افتراضي مقياس جهد وتيار مستمر ومراجعة موديول ADC ووحدة العرض LCD Twitter FaceBook Google+



مقياس جهد وتيار مستمر ومراجعة موديول ADC ووحدة العرض LCD
مقياس جهد (فولتميتر) ومقياس تيار (أميتر) للتيار المستمر باستخدام الميكروكونترولر PIC

تدريب تمهيدى عن المحول من تناظرى لرقمى ADC :
وحدة (موديول) المحول من تناظرى لرقمى ADC بالميكروكونترولر PIC عادة يكون لها 5 مداخل (قنوات) للأجهزة ذات 28 طرف و 8 مداخل (قنوات) للأجهزة ذات 40 طرف . نتيجة تحويل الإشارة التناظرية المطبقة على مدخل وحدة ADC تكون عدد رقمى مناظر بحجم 10 بتات 10-bit . وحدة ADC بالميكروكونترولر PIC تمتلك برمجيا القدرة على اختيار دخل جهد المرجع المرتفع Vref+ وجهد المرجع المنخفض Vref- . هنا , سوف يتم تحويل الدخل التناظرى باستخدام القناة المتصلة بالطرف RA1 إلى عدد رقمى بحجم 10-bit مع الأرضى كجهد المرجع المنخفض (Vref-) 0v وجهد تغذية الميكروكونترولر كجهد المرجع المرتفع (Vref+) 5V . سوف يتم عرض الخرج باستخدام 10 ليدات . يمكنك تغيير Vref- و Vref+ عن طريق تهيئة إعدادات سجل التحكم فى المحول من تناظرى لرقمى ADCON1 .
فى هذه الحالة عندما يكون جهد الدخل التناظرى 0V فأن نتيجة التحويل تكون العدد الرقمى الثنائى المكون من 10 بتات كلها أصفار , وإذا كان الدخل التناظرى 5V فإن نتيجة تكون العدد الرقمى الثنائى المكون من 10 بتات كلها آحاد. دقة التحويل فى هذه الحالة يمكن التعبيير عنها بالعلاقة :

كود:
Resolution = (Vref+ – Vref-)/(1024-1)   (as it is 10 bit ADC)
= 5/1024= 4.887 mV

وهذا يعنى أنه من أجل تغيير قدرة 4.887mV , فإن الخرج الثنائى يتغير بوحدة واحدة "1" , وبالتالى فإن أقل جهد يمكن قياسه هو4.887mV وهذا هو تعريف الدقة .

الدائرة الكهربية :








البرنامج بمترجم الميكروسى برو :


كود:
 
// ADC Tutorial
/////////////////////////////////////////////////////////
unsigned int adc;//2-byte variable 
/////////////////////////////////////////////////////////
void main()
{
//Setup ports 
TRISB = 0;    // PORTB as outputs
TRISC = 0;     // PORTC as outputs
// Infinite loop 
do
          {
// Get 10-bit results of AD conversion of channel 0 => bit0-bit9
          adc = ADC_Read(0); 
// Send lower 8 bits to PORTB => bit0-bit7
PORTB = adc;
// Send 2 most significant (bits to RC0, RC1) => bit8,bit9
          PORTC = adc >> 8;  
         } while(1);
}



يمكنك تغيير قيمة الدخل التناظرى عن طريق تغيير المقاومة المتغيرة بالدائرة .
تدريب تمهيدى عن وحدة العرض LCD :

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 19-04-2013, 09:15 PM المشاركة 2   
افتراضي


تدريب تمهيدى عن وحدة العرض LCD :
يمكن للميكروكونترولر PIC إجراء اتصال مع وحدة العرض LCD بسهولة عن طريق استخدام المكتبات المدمجة بمترجم الميكروسى برو . يتم الربط بين الميكروكونترولر PIC ووحدة العرض LCD إما عن طريق 4 بتات (أربع خطوط بيانات ) أو عن طريق 8 بتات (8 خطوط بيانات) , هنا سوف نستخدم طريقة الربط عن طريق 4 بتات , وهو النظام الشائع الاستخدام .
فى نظام الربط 4-bit نستخدم أربع خطوط بيانات فقط هى DB4 – DB7 علاوة على خط التمكين E وخط اختيار السجل RS .

الدائرة الكهربية :







ملحوظة :
الطرف VDD والطرف VSS للميكروكونترولر PIC غير ظاهرة بالدائرة . يجب توصيل VDD بالجهد +5V وتوصيل VSS بالأرضى .

كود:
البرنامج باستخدام مترجم الميكروسى برو :
// LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections void main() { Lcd_Init();// Initialize LCD Lcd_Cmd(_LCD_CLEAR);// Clear display Lcd_Cmd(_LCD_CURSOR_OFF);// Cursor off Lcd_Out(1,1,"Hello World");//Write text'Hello World' in first row }



فى نظام 4-bit يتم توصيل الأطراف D0-D4 والطرف R/W بالأرضى .

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 19-04-2013, 09:16 PM المشاركة 3   
افتراضي


مقياس جهد (فولتميتر) ومقياس تيار (أميتر) للتيار المستمر باستخدام الميكروكونترولر PIC
يمكن بسهولة عمل مقياس جهد ومقياس تيار باستخدام الميكروكونترولر PIC الذى يمتلك محول من تناظرى لرقمى ADC . سوف نستخدم الميكروكونترولر PIC16F877A مع العرض على وحدة عرض LCD .
سوف يتم تصميم دائرة لقياس الجهد فى المدى من 0V إلى 30V , لذلك يلزم تخفيض هذا المدى من الجهد إلى مدى جهد من 0V إلى 5V عن طريق استخدام مقسم جهد .
الدائرة الكهربية :






يمكن قياس التيار المار بالدائرة عن طريق إدخال مقاومة صغيرة جدا ( 0.1ohm/10watt على سبيل المثال) وقياس الجهد بين طرفيها ومنه يتم حساب التيار .
عندما يكون جهد الدخل 30V (أقصى جهد) فإن الجهد بين طرفى المقاومة 20K/R2 يصبح 5V والذى يتم تطبيقه على طرف الدخل التناظرى RA0 للميكروكونترولر PIC .
الجهد بين طرف المقاومة 0.1 ohm / Rs ohm يتم تطبيقه على الطرف التناظرى RA0 بعد مروره على مكبر عمليات غير عاكس . يتم إضافة ثنائى زينر بجهد 5.1V على التوازى مع المداخل التناظرية لحماية الميكروكونترولر PIC من الجهود الزائدة .
يقوم موديول المحول من تناظرى لرقمى ADC module بتحويل الدخل التناظرى إلى عدد رقمى بحجم 10-bit .المطلوب تحويل هذا العدد الرقمى إلى ما يناظره من جهد بالنظام العشرى .

خطوات حسابات مقياس الجهد :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 19-04-2013, 09:18 PM المشاركة 4   
افتراضي


خطوات حسابات مقياس الجهد :
1- الكمية الفيزيائية المراد قياسها هى "الجهد" بالفولت فى المدة 0-30V . هذا المدى خارج نطاق جهد الدخل التناظرى للميكروكونترولر لذلك يجب تخفيضة إلى المدى 0-5V , يتم ذلك عن طريق مقسم الجهد R1=100K و R2=20K , يتم أخذ الجهد من على طرفى المقاومة R2 وتطبيقة على المدخل التناظرى لقناة الطرف RA0 . جهد خرج مقسم الجهد نحصل علية من صيغة مقسم الجهد كما يلى :

كود:
Vo/Vi = R2/(R1+R2) = 20/120 = 1/6
أى يتم تخفيض جهد الدخل بنسبة القسمة على معامل القسمة وهو "6" .عند قسمة أقصى دخل للدائرة
Vi = 30V على "6" نحصل على أقصى خرج وهو Vo=30/6=5V .
2- جهد خرج مقسم الجهد فى المدى من "0-5V" يتم تطبيقه على المدخل التناظرى RA0 , حيث يقوم المحول ADC الداخلى للميكروكونترولر بتحويله إلى عدد رقمى فى المدى "0-1024" , أى نحصل على عدد يمثل الكمية الفيزيائية .
3- المطلوب عرض نتيجة التحويل (العدد الرقمى) على وحد العرض LCD على أن تظهر فى شكل قياس الكمية الفيزيائية , أى فى المدى "0-30V" وفى الصيغة "00.0" (عددان صحيحان وكسر) ولتنفيذ ذلك يتم اتباع الخطوات التالية :
أ‌- قراءة جهد الدخل التناظرى باستخدام الدالة :

كود:
ADC_Value = ADC_Read(0);
نتيجة تنفيذ هذه الدالة عدد "N" فى المدى 0-1024 يتم حفظه فى المتغير ADC_Value من النوع unsigned int (بحجم 2-byte) .

ب‌- إجراء حسابات تحويل هذا العدد لكى يمثل الكمية الفيزيائية كما يلى :
· نحصل على "جهد الدخل التناظرى على مدخل الميكروكونترولر" Vpic والمناظر للعدد "N" بضرب هذا العدد فى نسبة تحويل ADC وهى "5/1024" وهو فى نفس الوقت جهد خرج مقسم الجهد Vo , أى :

كود:
Vpic = Vo = N * (5/1024) Volt
· نحصل على جهد دخل الدائرة المطلوب Vi بضرب الجهد السابق فى معامل القسمة والذى تم تخفيضه عن طريق مقسم الجهد المستخدم وهو "6" أى :

كود:
Vi = Vo *6 = N * (5/1024) * 6 = N * 0.029296875 Volt
أى يتم ضرب العدد "N" فى معامل التحويل كلى بالقيمة 0.029296875 لنحصل على التعبير عن الكمية الفيزيائية . على سبيل المثال عندما يكون N = 1024 فإن :Vi = 1024 *0.029296875 = 30 V .
لتجنب استخدام عمليات الكسور العشرية , وحتى نتمكن من عرض الكمية الفيزيائية (الجهد) فى الصيغة "00.0" يمكن أخذ "عدد صحيح إذا ضرب فى أقصى عدد وهو 1024 لا تتعدى النتيجة حجم المتغير المستخدم وهو هنا " 2-byte = 65535 . نأخذ المعامل الصحيح "3" والذى إذا ضرب فى أقصى قيمة للعدد N يعطى 1024*3 = 3072 وهو داخل حدود النوع unsigned int كما يمكن منه استخلاص مصفوفة العرض كما يلى :

كود:
DisplayVolt = ADC_Value * 3; volt[0] = DisplayVolt/1000 + 48; volt[1] = (DisplayVolt/100)%10 + 48; volt[3] = (DisplayVolt/10)%10 + 48; Lcd_Out(1,3,volt);
ملحوظة :
لعرض النتائج على وحدة العرض LCD نحتاج لتحويل هذه القراءات إلى سلسلة نصية string حيث يتم تحويل كل رقم (خانة) digit بالقراءة إلى الحرف character المناظر وذلك بإضافة العدد "48" .


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


خطوات حسابات قياس التيار :
1- الكمية الفيزيائية المقاسة : التيار بالأمبير , فى المدى 0A-5A .
2- التحويل من تيار إلى جهد يتم عن طريق مقاومة بالقيمة Rs=0.1ohm , يتم حساب نتيجة هذا التحويل بضرب التيار فى المقاومة فنحصل على المدى 0V-0.5V .
3- هذا المدى صغير ويحتاج لعملية تكبير ليصل إلى المدى 0V-5V والملائم للعمل مع الميكروكونترولر , يتم ذلك باستخدام مكبر عمليات غير عاكس كما فى الدائرة الكهربية . كسب المكبر يتحدد عن طريق المقاومات Rf و Ri . إذا كان Rf = 10K وRi = 1.1K , يكون كسب المكبر حوالى "10" حيث :
كود:
Gain = (V0/Vi) = (1+Rf/Ri) = (1+ 10/1.1) = 10

الآن أصبح لدينا إشارة جهد فى المدى 0-5V (والتى تناظر تيار فى المدى 0-5A يمر فى المقاومة (0.1ohm وهى أكثر ملائمة من أجل المحول ADC مع جهد مرجع Vref = 5 V .
4- هذا الجهد يتم تحويله داخل الميكروكونترولر إلى عدد رقمى فى المدى Ni= 0-1024والمطلوب عرض هذا العدد على وحدة العرض LCD ولكن يجب أن يظهر فى شكل المدى الفعلى للتيار وهو I=0-5A وفى الصورة "0.000" ( عدد صحيح وثلاثة أرقام عشرية) :
كود:
I1 = Ni => as number (0-1023) I2= Ni * (5/1024) => as volt at PIC pin & OP Amp output ( 0-5V) I3 = Ni * (5/1024) / 10 => as volt at OP Amp input ( 0-0.5V) I = I3(volt) /Rs = Ni *[ (5/1024) / 10] / 0.1 Finally we get : I= Ni * 0.0048828125 Amper
تحقيق :
أقصى عدد 1024 يناظر :

كود:
I = 1024 * 0.0048828125 = 5 Amper
وهو أقصى تيار نريد قياسه .
الخلاصة :
يتم ضرب نتيجة التحويل من تناظرى لرقمى فى المعامل 0.0048828125 , ولتجنب استخدام عمليات الكسور العشرية وللحصول على شكل العرض المطلوب "0.000" يمكن استخدام المعامل الصحيح المقرب 5 والذى إذا ضرب فى أعلى عدد ممكن نحصل على 1024*5 = 5120 وهو داخل الإعلان unsigned int ويمكن الحصول منه على الصيغة "0.000" . لكن لتقليل الخطأ يمكن أخذ المعامل 49 والذى إذا ضرب فى أعلى عدد ممكن نحصل على 49 * 1024 = 50176 وهو أيضا داخل الإعلان unsigned int كما يمكن الحصول منه على الصيغة "0.000" بتغيير الحسابات برمجيا كما يلى :

كود:
ADC_Value = ADC_Read(1);// as number ( 0-1024) DisplayCurr = ADC_Value *49 ; // => 0 - 50176 ( 0-5A) amp[0] = DisplayCurr/10000 + 48; // 50176/1000 = 5 //amp[1] is DP "." amp[2] = (DisplayCurr/1000)%10 + 48; // (50176/1000) %10 = 50%10=0 amp[3] = (DisplayCurr/100)%10 + 48;// (50176/100) %10 = 501%10=1 amp[4] = (DisplayCurr/10)%10 + 48;// (50176/10)%10=5017%10=7 Lcd_Out(2,3,amp);







الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 19-04-2013, 09:21 PM المشاركة 6   
افتراضي


البرنامج :

كود:
/*
Project: Volt, Current meter
*/
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
// Define Messages
 char message1[] = "V=";
 char message2[] = "I=";
 // End Message
unsigned int ADC_Value,DisplayVolt, DisplayCurr;
char *volt = "00.0";
char *amp = "0.000";
void main() {
 Lcd_Init();
 Lcd_Cmd(_LCD_CLEAR);             // CLEAR display
 Lcd_Cmd(_LCD_CURSOR_OFF);        // Cursor off
 Lcd_Out(1,1,Message1);
 Lcd_Chr(1,7,'V');
 Lcd_Out(2,1,Message2);
 Lcd_Chr(2,8,'A');
 do {
// Read Voltage
ADC_Value = ADC_Read(0);
DisplayVolt = ADC_Value * 3;   // max = 1023 * 3 =3069 => 30.6
volt[0] = DisplayVolt/1000 + 48;
volt[1] = (DisplayVolt/100)%10 + 48;
volt[3] = (DisplayVolt/10)%10 + 48;
Lcd_Out(1,3,volt);
// Read Current
ADC_Value = ADC_Read(1);
DisplayCurr = ADC_Value *49; //103.99; //
amp[0] = DisplayCurr/10000 + 48;
amp[2] = (DisplayCurr/1000)%10 + 48;
amp[3] = (DisplayCurr/100)%10 + 48;
amp[4] = (DisplayCurr/10)%10 + 48;
Lcd_Out(2,3,amp);

 } while(1);
}


الصورة الرمزية Abdw9
Abdw9
:: عضو فضي ::
تاريخ التسجيل: Nov 2011
الدولة: السودان
المشاركات: 557
نشاط [ Abdw9 ]
قوة السمعة:78
قديم 10-05-2013, 02:04 AM المشاركة 7   
افتراضي


موضوع رائع جزاك الله كل خير
موضوع رائع


الصورة الرمزية fouady2003
fouady2003
:: مهندس ::
تاريخ التسجيل: Sep 2012
الدولة: مدينة 6 اكتوبر
المشاركات: 49
نشاط [ fouady2003 ]
قوة السمعة:0
قديم 01-10-2015, 02:53 AM المشاركة 8   
افتراضي جزاك الله كل خير


شرح ممتاز
بارك الله فيك

إضافة رد

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

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

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


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

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