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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 13-07-2017, 12:54 PM المشاركة 1   
افتراضي التحويل من تناظرى لرقمى ADC Twitter FaceBook Google+



التحويل من تناظرى لرقمى ADC
مقدمة :
العديد من الإشارات الكهربائية من حولنا تكون ذات طبيعة تناظرية Analog (تتغير قيمتها بشكل مستمر) . محولات حساسات الكميات الطبيعية فى الغالب تحول الكمية الطبيعية إلى إشارة كهربائية ، هذا يعنى أن كمية تتغير مباشرة مع كمية أخرى . الكمية الأولى فى الغالب تكون الجهد voltage فى حين أن الكمية الثانية يمكن أن تكون أى كمية طبيعية مثل درجة الحرارة ، الضغط ، الضوء ، القوة ، العجلة ، .... إلخ . على سبيل المثال ، فى حساس درجة الحرارة LM35 ، جهد خرجه يتغير تبعا لدرجة الحرارة ، ومن ثم إذا امكننا قياس الجهد ، يمكنننا قياس درجة الحرارة .

ولكن معظم أجهزة الكمبيوتر (أو الميكروكنترولر) تكون ذات طبيعة رقمية. فهى يمكن أن تفرق فقط بين المستوى المرتفع HIGH أو المستوى المنخفض LOW على أطراف الدخل . على سبيل المثال ، إذا كان الدخل أكبر 2.5V سيتم قراءته باعتباره واحد (1) ، وإذا كان الدخل أقل من 2.5V سيتم قراءته باعتباره صفر (0) ( فى الأنظمة التى تعمل على 5V ) . لذلك لا يمكننا قياس الجهد مباشرة من الميكروكونترولر . لحل هذه المشكلة ، معظم الميكروكونترولر يمتلك وحدةتحويل من تناظرى إلى رقمى ADC . هذا المحول سوف يقوم بتحويل الجهد voltage إلى عدد number بحيث يمكن معالجته من قبل الأنظمة الرقمية مثل الميكروكونترولر . هذا المحول يتيح لنا ربط بسهولة كل أنوع الأجهزة التناظرية مع الميكروكونترولر .

دقة المحول من تناظرى لرقمى Resolution :
إن أهم مواصفات المحول من تناظرى لرقمى ADC هي "الدقة أو القدرة على التحليل " resolution ( هى أقل كمية يمكن قياسها ) . وهى تحدد مدى دقة قياس ADC لإشارات المدخلات التناظرية. نتيجة تحويل المحولات الشائعة تكون بسعة 8-bit أو 10-bit أو 12-bit . على سبيل المثال إذا كان جهد المرجع (سوف يتم شرحه لاحقا ) لمحول ADC هو من 0V إلى 5V ، فإن المحول 8-bit سوف يقسمه إلى 256 قسم ( من 0 إلى 255 ) ، لذلك يمكنه القياس بدقة ( تغيير نتيجة التحويل بمقدار واحد قسم ) تصل إلى 5/255 V =19.6mV تقريبا. في حين أن المحول 10-bit سوف يقسمه إلى 1024 قسم (أدنى نتيجة تحويل هى 0 ، وأقصى نتيجة تحويل هى 1023 ) ، عندئذ تكون دقة القياس
5/1023 V = 4.88 mV تقريبا . من ذلك يمكنك أن تدرك أن المحول 8-bit لا يمكنه التفرقة بين 1mV و 18mV .
المحول ADC المدمج فى الميكروكونترولر PIC من نوع 10-bit .



مصطلح الجهد المرجعى Reference Voltage :
الجهد المرجعى يحدد الحد الأدنى والحد الأقصى لمدى جهد الدخل التناظرى . فى الميكروكونترولر PIC يوجد جهدى مرجع ، إحداهما هو جهد المرجع السالب Vref- ، والآخر هو جهد المرجع الموجب Vref+ . جهد المرجع السالب Vref- يحدد الحد الأدنى لجهد الدخل التناظرى ، فى حين أن جهد المرجع الموجب يحدد الحد الأقصى لجهد الدخل التناظرى . على سبيل المثال ، إذا تم تطبيق إشارة قيمتها Vref- على قناة الدخل التناظرى ، عندئذ تكون نتيجة التحويل بصفر ، وإذا تم تطبيق إشارة قيمتها Vref+ على قناة الدخل التناظرى ، فإن النتيجة سوف تكون 1023 ( أقصى قيمة للمحول ADC ) .
• عندما يكون دخل ADC بقيمة Vref- ، فإن نتيجة التحويل تكون 0000000000 .
• وعندما يكون دخل ADC بقيمة Vref+ ، فإن نتيجة التحويل تكون 1111111111 .
• دقة ADC

كود:
 Resolution of ADC = (Vref+ – Vref-)/(210 – 1)
وهى أدنى جهد مطلوب لتغيير نتيجة تحويل ADC بواحد بت .
• فى الحالة العادية الافتراضية Resolution = (5 – 0)/(1024 – 1) = 5/1023 = 0.004887V .
• لذلك ، إذا كان الدخل 5V ، فإن نتيجة تحويل ADC تكون 5/0.004887 = 1023 = 11111111 (binary .
• وإذا كان الدخل 0.004887V ، فإن نتيجة تحويل ADC تكون 0.004887/0.004887 = 1 = 00000001 (binary) .
باختصار ، يمكن القول ، بأن قياس الجهد فى المحول يستند على مقارنة جهد الدخل مع المقياس الداخلى والذى له 1024 علامة (قسم) (2 أس عشرة) . أدنى علامة للمقياس تناظر جهد المرجع السالب Vref- ، فى حين أن أعلى علامة للمقياس تناظر جهد المرجع الموجب . الشكل التالى يبين جهدى المرجع القابلة للاختيار وقيمها الدنيا والقصوى أيضا .



معظم الميكروكونترولر PIC تمتلك ضمن بنائها موديول ADC . سوف نستعرض الميكروكونترولر PIC16F877A ، على سبيل المثال . الميكروكونترولر PIC16F877A يمتلك موديول 10-bit ADC .
جهد المرجع الموجب Vref+ وجهد المرجع السالب Vref- تكون قابلة للبرمجة ، فهى يمكن أن تكون VDD,VSS أو جهد ما على الأطراف RA2,RA3 .



موديول ADC يعمل مع أى من ثمانى قنوات متصلة بالأطراف الخارجية ، يتم الاختيار بين القنوات برمجيا عن طريق بتات اختيار القناة CHS0:CHS2 بالسجل ADCON0 (مترجم الميكروسى برو يقوم نيابة عنك بذلك )، كما هو مبين بالشكل .



السجل ADCON1 يتحكم فى تهيئة المنافذ لتكون تناظرية أو رقمية أو توليفة من الاثنين معا ، حيث يمكن تهيئة أى من الأطراف AN0-AN7 كمدخل تناظرى أو مدخل لجهد مرجع أو دخل / خرج رقمى ، وذلك عن طريق بتات تهيئة المنفذ PCFG0:PCFG3 ، كما هو موضح بالشكل .



الجدول التالى يبين الخيارات الممكنة :



ملاحظات :
1- فى الوضع الافتراضى البتات الأربعة تكون بأصفار وهذا يعنى أن جميع المداخل هى مداخل تناظرية وأن جهد المرجع الموجب يساوى VDD ، وجهد المرجع السالب هو VSS . يجب ألا تنسى تهيئة طرف المدخل التناظرى كطرف دخل عن طريق السجل TRIS (مع العلم بأن الوضع الافتراضى لتهيئة جميع المنافذ هو مداخل ) . الشكل أدناه يبين المخطط الصندوقى لموديول ADC .
2- اختيار ADCON=6 يعنى تهيئة جميع الأطراف باعتبارها مداخل / مخارج رقمية .



للتعامل مع المحول ADC ، فإن مترجم الميكروسى برو لديه مكتبة تعرف باسم ADC لإجراء التحويل . هذه المكتبة بها دالة وحيدة هى :

كود:
unsigned ADC_Read(unsigned short channel);
هذه الدالة تعود بنتيجة التحويل 10-bit للقناة المحددة بواسطة البارامتر channel .

مثال:
للتدريب على استخدام هذه المكتبة راقب وحلل المثال التالى :

كود:
 void main (void)
{
	// Declaration of variables.
	unsigned int ADC_result;  
	// Initialize ports.
	TRISB = 0;
	TRISC = 0;
	PORTB = 0;
	PORTC = 0;
	while (1) 				// infinite loop.
	{
		ADC_result = ADC_Read (0); 	// conversion is made on channel 0.
		//  Display 8 least significant bits from  port B.
		PORTB = ADC_result &0xFF;
		//Display  the most significant 2 bits from the port C.
		PORTC = (ADC_result >> 8) &0x03;
	}
}
لمحاكاة هذا البرنامج يجب جلب الأجهزة الآتية فى برنامج ISIS :
16F877A, RES, LEDRED,POT-HG
الشكل التالى يبين الدائرة الكهربية :



بعد تشغيل المحاكاة تعرض الليدات نتيجة قيمة التحويل فى شكل كود ثنائى binary code ، لفرق الجهد التناظرى المغذى بواسطة المقاومة المتغيرة .

احصائية الشكر والاعجاب - 3 شكراً, 0 عدم اعجاب, 3 اعجاب
شكراً سعيد قادر, magdy_3, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب سعيد قادر, magdy_3, عبدالله حجازى ( أعجبته المشاركة )
اعلانات

الصورة الرمزية ناصرالموسوي
ناصرالموسوي
:: مهندس متميز ::
تاريخ التسجيل: Nov 2016
الدولة: IRAN
المشاركات: 799
نشاط [ ناصرالموسوي ]
قوة السمعة:0
قديم 13-07-2017, 02:37 PM المشاركة 2   
افتراضي


[COLOR="بسم اللة السلام عليكم.
الاستاذ مهندس Fعبدالعزيز.
شكرا لكم علي التفصيل والشرح القيم والمتميز،اتمني لكم التوفيق والسلامة من اللة عزوجل.والسلام عليكم.:
[/COLOR]

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً F.Abdelaziz ( شكر العضو على هذه المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-07-2017, 01:12 PM المشاركة 3   
افتراضي


تدريب تمهيدى :
الغرض :
استعراض التعامل مع المحول 10-bit ADC باستخدام الميكروكونترولر PIC16F877A . جهد دخل المحول ADC يتم أخذه من مقاومة متغيرة 5K متصلة بالجهد +5V ، ويتم توصيله إلى الطرف RA0/AN0 مع أخذ جهدى المرجع الافتراضية VDD,VSS(0-5V) ، وبالتالى يكون مدى التحويل ADC من 0 إلى 1023 . سوف يتم عرض نتيجة التحويل على شاشة LCD .

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



البرنامج :

كود:
// LCD module connections
 sbit LCD_RS at RB2_bit;
 sbit LCD_EN at RB3_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;
 sbit LCD_RS_Direction at TRISB2_bit;
 sbit LCD_EN_Direction at TRISB3_bit;
 sbit LCD_D4_Direction at TRISB4_bit;
 sbit LCD_D5_Direction at TRISB5_bit;
 sbit LCD_D6_Direction at TRISB6_bit;
 sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
// Define Messages
 char message1[] = "ADC Value= ";
 char *temp = "0000";
 unsigned int ADC_Value;
 void main() {
  Lcd_Init();                      // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);             // CLEAR display
  Lcd_Cmd(_LCD_CURSOR_OFF);        // Cursor off
  Lcd_Out(1,1,message1);           // Write message1 in 1st row
  do {
   adc_value = ADC_Read(0);
   temp[0] = adc_value/1000 + 48; // Add 48 to get the ASCII character value
   temp[1] = (adc_value/100)%10 + 48;
   temp[2] = (adc_value/10)%10 + 48;
   temp[3] = adc_value%10 + 48;
   Lcd_Out(1,11,temp);
   Delay_ms(2000);
  } while(1);
 }

مشروع جهاز قياس الجهد (فولتميتر) ، وجهاز قياس تيار (أمبيرميتر) باستخدام الميكروكونترولر PIC :
يمكن بسهولة صنع فولتميتر وأمبير ميتر باستخدام ميكروكونترولر PIC لديه موديول محول من تناظرى لرقمى ADC . سوف نستخدم الميكروكونترولر PIC16F877A ، وعرض النتيجة على وحدة عرض LCD .
موديول ADC يحول الإشارات التناظرية المطبقة على طرفه التناظرى إلى عدد ثنائى 10-bit ، وله القدرة على اختيار جهد المرجع الموجب وجهد المرجع السالب بالجهد VDD,VSS أو بجهد على الأطراف RA2,RA3 .
الدخل التناظرى إلى الميكروكونترولر PIC محدد بالجهود VDD,VSS(0-5V) التى تغذى الميكروكونترولر PIC .
فى هذا المشروع سوف يتم قياس الجهد فى المدى 0-50V ، ولتخفيضه ليكون فى مدى الميكرونترولر PIC (0-5V) فسوف نستخدم مقسم جهد مناسب .
يتم قياس تيار الحمل عن طريق تمريره خلال مقاومة صغيرة وقياس فرق الجهد بين طرفيها (محول تيار إلى جهد) ، كما هو مبين بالشكل أدناه .







يتم توصيل خرج مقسم الجهد إلى الطرف RA2 ، وتوصيل الجهد عبر مقاومة قياس التيار إلى الطرف RA3 ، كما يتم توصيل هذين الطرفين بزنر دايود 5.1V لحماية الميكروكونترولر من ارتفاع الجهد .
الحسابات :
حسابات الجهد :
جهد دخل الميكروكونترولر التناظرى Vpicv حيث :

كود:
Vpicv = ADC_result(5/1023) = 0.00489 ADC_result 
 Vpicv = 4.89 ADC_result mV
وهو نفسه جهد خرج مقسم الجهد ، ومن ثم يكون :

كود:
4.89 ADC_result = Vin (1.1/11.1)
Vin = 4.89 ADC_result * (11.1/1.1)
Vin=49.34 ADC_result mV
أى للحصول على جهد الدخل يتم ضرب نتيجة التحويل ADC فى 49.34 .
حسابات التيار :
بالمثل ، جهد دخل الميكروكونترولر التناظرى الواصل إلى الطرف RA3 والناتج عن مرور تيار الحمل فى مقاومة القياس Vpici حيث :

كود:
 Vpici = ADC_result(5/1023) = 4.89 ADC_result mV
التيار المارفى مقاومة القياس يكون :

كود:
Iin = 4.89 ADC_result / 0.1 = 48.9 ADC_result mA
أى للحصول على تيار الدخل يتم ضرب نتيجة التحويل ADC ، لهذه الحالة ، فى 48.9
ملحوظة :
مدى جهد الدخل أصبح من 0 إلى 50000 ملى فولت ، وصيغته تكون بالشكل00.0 ( خانة عشرات ، وخانة آحاد ، وخانة كسر عشرى) ، ومن ثم لاستخلاص رقم خانة العشرات فسوف يتم القسمة على 10000 ولاستخلاص رقم خانة الآحاد فسوف يتم القسمة على 1000 يتبعه إيجاد باقى خارج قسمة الناتج على 10 ، وهكذا . بالنسبة للتيار تكون صيغته 0.00 (خانة آحاد وخانتى كسر عشرى ) أى له رقم خانة آحاد فقط ، يمكن استخلاصة بالقسمة على 1000 .

البرنامج :

كود:
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
  unsigned int v,i;
  char *volt = "00.0";
  char *current = "0.00";

void main()
{
  
  CMCON = 0x07;
  TRISA = 0xFF;
  ADCON1 = 0x00;
  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);

  do
  {
    v = ADC_Read(2);
    i = ADC_Read(3);
    v = 49.34   * v ;
    i = 48.9  * i ;

    volt[0] = (v/10000)+48;
    volt[1] = ((v/1000)%10)+48;
    volt[3] = ((v/100)%10)+48;
    Lcd_Out(1,1,"Voltage = ");
    Lcd_Out(1,11,volt);
    Lcd_Out(1,16,"V");

    current[0] = (i/1000)+48;
    current[2] = ((i/100)%10)+48;
    current[3] = ((i/10)%10)+48;
    Lcd_Out(2,1,"Current = ");
    Lcd_Out(2,11,current);
    Lcd_Out(2,16,"A");
    Delay_ms(250);
  } while(1);
}

احصائية الشكر والاعجاب - 3 شكراً, 0 عدم اعجاب, 3 اعجاب
شكراً سعيد قادر, magdy_3, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب سعيد قادر, magdy_3, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-07-2017, 05:57 PM المشاركة 4   
افتراضي


أجهزة الاستشعار (الحساسات) Sensors
استخدام أجهزة الاستشعار فى أنظمة الميكروكونترولر مفيد للغاية فى الكثير من التطبيقات حيث أنها تتيح الحصول على قراءات (قياسات) لكميات طبيعية مثل درجة الحرارة والعجلة والسرعة والضغط والرطوبة وشدة الإضاءة وغيرها الكثير. هذه التطبيقات مهمة فى أنظمة التحكم وفى الروبوتات وأجهزة القياس .
جهاز استشعار درجة الحرارة LM35 :
الحساس LM35 هو جهاز فعال ذو ثلاثة أطراف يسمح بتحصيل درجة حرارة الوسط المحيط (البيئة) فى المدى من -55 إلى 150 درجة مئوية . يسهل تنفيذ التطبيقات بهذا الحساس لأن لديه فقط طرفين للتغذية وطرف لجهد الخرج والذى يتناسب مباشرة مع درجة الحرارة . يمكن تغذية هذا الحساس من مصدر جهد يتراوح بين 4 - 30 volts وخرجه يكون بقيمة 10 ملى فولت لكل درجة مئوية . الشكل التالى يبين مظهر الحساس الطبيعى ورمزه فى برنامج إيزيس :



لتنفيذ قراءة جهد خرج الحساس باستخدام الميكروكونترولر يتم استخدام موديول التحويل من تناظرى لرقمى ADC module . أقصى جهد خرج للحساس هو 1.5 volts ، عندما تكون درجة الحرارة 150 درجة مئوية. لذلك من المهم تغيير جهد المرجع الموجب للمحول من تناظرى لرقمى ، بغرض تحسين دقة قياس الجهد . فى المثال المذكور أدناه سوف يتم تحديد جهد المرجع الموجب Vref+ للمحول ADC بالقيمة 2.5 volts . بهذه الطريقة ، عندما يكون جهد الدخل التناظرى 2.5 volts فإن نتيجة التحويل من تناظرى لرقمى المناظرة تكون العدد 1023 . يمكن التعبير عن هذا المفهوم بالصيغة التالية :

كود:
Vpic = ADC_result * (2.5/1023) = 2.44 * ADC_result mV
وهو نفسه جهد خرج الحساس LM35 والذى يمكن التعبير عنه بالصيغة :

كود:
Vout = 10 * Tc mV
بمساواة المعادلتين يمكن الحصول على درجة الحرارة كما يلى :

كود:
Tc = (2.44 * ADC_result) / 10 = 0.244 * ADC_result
أى للحصول على درجة الحرارة بالدرجة المئوية يتم ضرب نتيجة التحويل ADC_result فى العامل 0.244 .
يجب استخدام هذه المعادلة عند تنفيذ التحويل من تناظرى لرقمى فى برنامج الميكروكونترولر PIC .
فى هذا الإطار يمكن استخدام الحساس والميكروكونترولر PIC16F877A فى تنفيذ البرنامج ، وفيما يلى كود البرنامج :

كود:
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections // Variables Declaration .
	unsigned int Radc, TemI;
	float Tem;
	char Text[16];

void main( void )
{
	
	//Sets the ADC module with pin AN3 
	//as positive reference voltage.
	ADCON1 = 0b11000001;
	//LCD initiation 
	Lcd_Init();
	//Clearing the cursor.
	Lcd_Cmd(_LCD_CURSOR_OFF);
	//Printing text.
	Lcd_Out( 1, 1, "Temperature :");
	while(1) //Infinite Loop.
	{
		//Reading ADC channel 0.
		Radc = ADC_Read(0);
		//Using the equation 
		Tem = 0.244*Radc;
		//Converts the result to an integer.
		TemI = Tem;
		//Integer converted to a string.
		IntToStr( TemI, Text );
		//Prints the result.
		Lcd_Out( 2, 1, Text);
		//Delay 100m  seconds.
		delay_ms(100);
	}
}
بعد تحرير وترجمة البرنامج يجب بناء دائرة برنامج إيزيس وبها الأجهزة الآتية :
16F877A, RES, LM35, LM016L كما فى الشكل التالى :




المقاومتان 330 يعملان كمقسم جهد للحصول على جهد المرجع بالقيمة 2.5 volts . خلال المحاكاة يمكنك تغيير قيمة درجة حرارة الحساس LM35 ومشاهدة النتيجة .

احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً magdy_3, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب magdy_3, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-07-2017, 06:27 PM المشاركة 5   
افتراضي


أجهزة إستشعار المسافة Distance sensors :



تستخدم أجهزة إستشعار المسافة فى قياس طول المسافة من مكان نقطة موقع الجسم العائق obstacle إلى موقع المستشعر (الحساس) . تنفيذ هذا النوع من الأجهزة مفيد فى أنظمة التحكم وفى مشاريع الروبوتات robotics.
وكحالة محددة فأنه فى هذا الجزء سوف يتم العمل بالحساس GP2D12 (الموجود ضمن برنامج إيزيس) ، هذا الحساس يستخدم تقنية إرسال الشعاع الضوئى للأشعة تحت الحمراء واستقبال إنعكاسها لتحديد المسافة . الشكل التالى يبين المظهر الطبيعى ، والأطراف ، والرمز فى برنامج إيزيس لهذا الحساس :




مثل هذا الحساس له سلوك غير خطى nonlinear ، هذا يعنى أن الخرج ليس له دالة تحويل خطية . لفهم هذا المفهوم بوضوح الرسم البيانى التالى يبين سلوك الخرج كدالة فى المسافة :



سلوك مثل هذا الحساس صعب التنفيذ ، لأنه فى بعض الحالات لا يقدم المصنع دالة تحويل مفيدة حتى يمكن استخدامها فى شكل معادلة واحدة . وعلى الرغم من ذلك فهذا لا يشكل عقبة أمام استخدام الحساس . كما هو موضح فى الداتا شيت أن المدى المؤثر من 10 إلى 80 سنتيمتر ( Effective Range: 10 to 80 cm) كما هو مبين فى الرسم البيانى .
الرسم البيانى الموضح موجود بالداتا شيت الخاص بالجهاز ويتم تنفيذه تجريبيا (نتيجة تجارب) . لوصف سلوك الحساس والحصول على دالة التحويل من الضرورى إجراء عملية رياضية تعرف باسم "الخطية" linearization . لتحقيق هذه الغاية يتم إجراء عملية "إستيفاء" interpolation بعدد معروف من نقاط الدالة ، هذه النقاط تؤخد من القياسات التجريبية . كلما زاد عدد النقاط كلما زادت دقة تقييم دالة التحويل .
لبدء هذه العملية يتم اختيار نقطتين موزعين بالتساوى . على سبيل المثال النقطة عند مسافة 10cm والنقطة عند مسافة 80cm . لكل نقطة نكون معادلة فيكون لدينا معادلتين من الدرجة الأولى فى هذه الحالة ، حيث يتم حلهما معا وإيجاد الثوابت .
لفهم هذا المفهوم ، نفترض أن المغير المستقل x يعبر عن جهد خرج الحساس بالفولت والمتغير التابع y يعبر عن المسافة بالسنتيمتر ونعتبر أن المعادلة التالية تعبر عن سلوك الحساس :



باعتبار أن y تمثل المسافة و x تمثل جهد خرج الحساس المستخدم ومن الرسم البيانى التجريبى نحصل على :



عندئذ يمكن كتابة المعادلات :

https://i11.servimg.com/u/f11/18/74/92/45/1113.jpg

ونستطيع تكوين معادلتين فى مجهولين كما يلى :



بحل المعادلين يمكن تعيين الثوابت كما يلى :

https://i11.servimg.com/u/f11/18/74/92/45/1311.jpg

بهذه الطريقة يمكن وضع صيغة لدالة التحويل للحساس كما يلى :



وحيث أن المتغير x يمثل جهد خرج الحساس مع الوضع فى الاعتبار أنه لا يزيد عن 2.5 volts ، فيجب ضبط جهد المرجع للمحول من تناظرى لرقمى عند 2.5 volts . لتحديد التحويل يتم استخدام المعادلة :



بالتعويض نحصل على صيغة دالة التحويل التالية :



الخطوة التالية هى تنفيذ كود المصدر لبرنامج يستخدم دالة التحويل وعرض هذه القيمة ، لهذا الغرض إليك كود المصدر للبرنامج التالى :

كود:
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
//Variables Declaration  .
     unsigned int Radc, DisI;
     float Dis;
     char Text[16];

void main( void )
{
     
     //Set the ADC module with pin AN3
     //as positive reference voltage.
     ADCON1 = 0b11000001;
     //Initiation LCD
     Lcd_Init();
     //Clearing the cursor.
     Lcd_Cmd(_LCD_CURSOR_OFF);
     //Printing text.
     Lcd_Out( 1, 1, "Distance:");
     
     while(1) //Infinite Loop.
     {
              //Reading analog channel 0 .
              Radc=ADC_Read(0);
              //Implementation of the transfer function Equation
              Dis = (14226.02784/Radc)-4.793814433;
              //force the result to an integer value.
              DisI=Dis;
              //convert the integer value to string.
              IntToStr( DisI, Text );
              //Print the sensor reading.
              Lcd_Out( 2, 1, Text );
              //Delay 100m-seconds.
              delay_ms(100);
     }
}

وأخيرا للتحقق من سلوك النظام يتم التنفيذ ببرنامج إيزيس بالأجهزة التالية :
16F877A, RES, LM016L, GP2D12 وتكوين الدائرة الكهربية كما فى الشكل التالى :










احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً magdy_3, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب magdy_3, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-07-2017, 08:22 PM المشاركة 6   
افتراضي


أجهزة الأستشعار LDR Sensors
أجهزة الاستشعار LDR هى أجهزة تتغير مقاومتها اعتمادا على شدة الضوء ، كلما ارتفعت شدة الضوء انخفضت مقاومة LDR .
هذه الأجهزة مفيدة لتحديد وجود أو غياب الإضاءة المحيطة ، لذلك فهى تستخدم فى الأنظمة التى تتطلب التحكم فى شدة الإضاءة .
الشكل التالى يبين المظهر الطبيعى والرموز فى برنامج إيزيس :




الخصائص الكهربائية لهذه الأجهزة ليست صعبة التحقيق ، حيث أنها تعمل بطريقة بسيطة ويوجد لها مجموعة متنوعة من شركات التصنيع ، أجهزة LDR أو المقاومة الضوئية متوفرة تجاريا بمختلف الأحجام ، وهذا يعنى أن مدى التغير فى المقاومة يعتمد على الحجم ، فالحجم الكبير يكون له مدى صغير والعكس بالنسبة للحجم الصغير . قد يكون التغيرفى المقاومة ليس متماثلا فى اثنين من LDR لهما نفس الحجم . هذه الأسباب تجعلها سهلة الاستخدام لقراءة المقاومة أو الجهد بين طرفيها . أبسط طريقة لاستخدام LDR هى عمل مقسم جهد مع مقاومة ثابتة .
لفهم هذا المفهوم يمكنك النظر إلى الشكل التالى :



بتطبيق النظرية الأساسية لتقسيم الجهد على الدائرة السابقة نحصل على :

كود:
Vout = Vcc * (LDR / (LDR+R))
من هذه المعادلة يمكن الحصول على المعادلة :

كود:
LDR = (Vout)(R) / (Vcc – Vout)
وحيث أن الجهد التناظرى بالقيمة Vout يدخل إلى المحول من التناظرى لرقمى ، وهو ما يعتبره الميكروكونترولر جهد دخل Vadc ، وباستخدام جهد المرجع الموجب بالقيمة 5 volts (الافتراضى) فإنه يمكن التعبير عن التحويل بالصيغة التالية :

كود:
Vadc = Radc * (5 / 1023) = Radc * 0.004887585
بالتعويض فى المعادلة السابقة وبفرض أن الجهد Vccيساوى 5 volts يمكننا الحصول على العلاقة :

كود:
LDR = (Radc)( 0.004887585) (R) / (5 – (Radc)( 0.004887585))
فى هذه الحالة الخاصة للتدريب على المحاكاة سوف نستخدم مقاومة مقسم الجهد بالقيمة 10k وبالتالى سوف تصبح معادلة LDR بالصيغة :

كود:
 LDR = (Radc) (48.87585) / (5 – (Radc)( 0.004887585))

لإدراك المفاهيم السابقة يتم تحرير وترجمة ومراقبة وتحليل كودالمصدر للبرنامج التالى :

كود:
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

//Dariables Declaration  .
     unsigned long Radc, DisI;
     char Text[16];

void main( void )
{
     
     //Initiation LCD
     Lcd_Init();
     //Cursor OFF.
     Lcd_Cmd(_LCD_CURSOR_OFF);
     //Printing text.
     Lcd_Out( 1, 1, "Resistance:");
     
     while(1) //Infinite Loop.
     {
              //Reading analog channel 0.
              Radc=ADC_Read(0);
              //Implementation the calculation of the LDR equation
              DisI = (Radc*48.87585533)/(5.0-Radc*0.004887585);
              //Convert the long integer value in string.
              LongToStr( DisI, Text );
              //Print the sensor reading.
              Lcd_Out( 2, 1, Text );
              //Delay 100m-seconds.
              delay_ms(100);
     }
}
للمحاكاة ببرنامج إيزيس يتم جلب الأجهزة التالية :
16F877A, RES, LM016L, TORCH_LDR وإنشاء الدائرة الكهربية الآتية :




احصائية الشكر والاعجاب - 3 شكراً, 0 عدم اعجاب, 3 اعجاب
شكراً سعيد قادر, magdy_3, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب سعيد قادر, magdy_3, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-07-2017, 10:28 PM المشاركة 7   
افتراضي


أجهزة استشعار الضغط Pressure sensors :
الضغط هو متغير طبيعى، يمثل بمتجه يعرف بأنه القوة الواقعة على مساحة معينة . يتم الدلالة على الضغط بوحدات مختلفة تبعا لنظام الوحدات المستخدم ، فيمكن أن يعطى الضغط بالوحدات :
psi, Pascal, atmospheres, inches of mercury الخ.
للأغراض العملية لهذا الجزء سوف يتم العمل بحساس الضغط MPX4115 . خواص هذا الحساس تعطى بالكيلوباسكال Kilo Pascal ويمكنه قياس الضغوط فى المدى بين 15 kPa و 115 kPa، أو بين 2.18 psi و 16.7 psi.
المظهر الطبيعى وتوزيع الأطرف ومز المحاكاة فى برنامج إيزيس موضح بالشكل التالى :




يتم التنفيذ تبعا لنوع الحساس ، كل حساس يجب أن يكون له "دالة تحويل" transfer function وهى العلاقة بين الخرج والدخل ، فى حالة حساس الضغط MPX4115 تتحدد دالة التحويل بواسطة الصناع بالعلاقة :

كود:
Vout = Vs ( 0.009P – 0.095)

حيث Vout هو جهد خرج الحساس ، و P هو الضغط بالكيلوباسكال Kilo Pascal ، و Vs جهد تغذية الحساس . من هذه المعادلة يمكن الحصول على صيغة للضغط بالشكل التالى :

كود:
P = (111.111 Vout / Vs) + 10.555
عندما يتم إعداد الميكروكونترولر PIC ليعمل المحول من تناظرى لرقمىADC بدقة 10 بتات 10-bit يمكن استنتاج العلاقة التالية :

كود:
Vadc = Radc * (5 / 1023)
هذا الجهد هو نفسه جهد خرج الحساس ، بالتعويض عن Vout يمكن الحصول على المعادلة أو العلاقة التى يم استخدامها بالميكروكونترولر لقراءة الحساس ، هذه العلاقة تكون بالشكل التالى :

كود:
 P = (0.54306 Radc / Vs ) + 10.555
هنا ، فى حالتنا الخاصة ، سوف يتم استخدام جهد التغذية بقيمة 5 volts وهو الذى يغذى الميكروكونترولر والحساس ولذلك فإن Vs تساوى 5 volts , ونحصل على العلاقة النهائية لنسبة التحويل بالصيغة التالية :

كود:
P = 0.10861Radc +10.555
لاستعراض العمل الفعلى لمثل هذا الحساس راقب وحلل كود المصدر للبرنامج التالى :


كود:
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
//Variables Declaration  .
	unsigned int Radc, PreI;
	float Pre;
	char Text[16];

void main( void )
{
	
	//LCD initiation.
	Lcd_Init();
	//Clearing the cursor.
	Lcd_Cmd(_LCD_CURSOR_OFF);
	//Printing text
	Lcd_Out( 1, 1, "Pressure in KPa:");
	while(1) //Infinite Loop.
	{
		//Reading ADC channel 0.
		Radc = ADC_Read(0);
		//Using the equation
		Pre = 0.10861*Radc+10,5555;
		//Forces the result to the integer part.
		PreI = Pre;
		//Converts the integer to a string.
		IntToStr( PreI, Text );
		//prints the result.
		Lcd_Out( 2, 1, Text);
		//Delay 100 m seconds.
		delay_ms(100);
	}
}
بعد تحرير وترجمة البرنامج , يمكن تنفيذ المحاكاة ببرنامج إيزيس بجلب الأجهزة الآتية :
16F877A, MPX4115, LM016L وتكون الدائرة الكهربية كما فى الشكل التالى :





احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً magdy_3, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب magdy_3, عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية سعيد عويطة
سعيد عويطة
:: مهندس متميز ::
تاريخ التسجيل: Nov 2011
المشاركات: 491
نشاط [ سعيد عويطة ]
قوة السمعة:0
قديم 16-07-2017, 10:36 PM المشاركة 8   
افتراضي


السلام عليكم ورحمة الله وبركاته.....تحياتي,,,فعلا قمة الروعة..,,,,.بارك الله فيك

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً F.Abdelaziz ( شكر العضو على هذه المشاركة )
إضافة رد

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

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

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


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

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