القرية الإلكترونية - الكترونيات - كمبيوتر - هاردوير - خدمات المواقع - كهرباء - فضائيات - جوال - اتصالات - تكييف وتبريد - اجهزة الانتاج الزراعي - كهرباء السيارات

كود تفعيل العضوية - الابلاغ عن روابط لاتعمل - صيانة التلفزيون - الحاسبة - الأعضاء المتميزين - البرامج و المخططات - بث مباشر للقنوات الفضائية - إذاعة - تردد القنوات - بحث


لوحة مفاتيح عربية

العودة   منتدى القرية الإلكترونية > القسم الالكتروني > منتدى الإلكترونيات
التسجيل       اجعل كافة المشاركات مقروءة

منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

رد
 
أدوات الموضوع
قديم 10-04-2016, 11:37 PM   #1
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي أفضل مشاريع الميكروكونتولر PIC لطلاب الهندسة الكهربية والإلكترونية Top EEE students p

أفضل مشاريع الميكروكونتولر PIC لطلاب الهندسة الكهربية والإلكترونية Top EEE students projects
المرجع الأساسى :
http://microcontrollerslab.com/pic-m...-eee-students/

تحظى مشاريع الميكروكونترولر PIC بانتشار واسع بين طلاب الهندسة الكهربائية والإلكترونية . الميكروكنترولر PIC هي عائلة من الميكروكنترولر صممت بمعرفة شركة ميكروشيب وهى تستخدم البناء المعمارى المعروف ببناء هارفارد ، وتتوفر في مجموعة واسعة بدءا من الميكروكونترولر 8 بت إلى الميكروكونترولر 32 بت . كما أن الميكروكونترولر من العائلة Dspic مشهورة جدا في مجال معالجة الإشارات الرقمية . العائلة PIC16F من من الميكروكونترولر PIC مشهورة جدا بين طلاب الهندسة والمحترفيين (المهنيين) . سوف نستخدم السلسلة PIC16F من ميكروكنترولر في جميع المشاريع . الميكروكنترولر PIC سهل الاستخدام بسبب سهولة استخدام المترجم ميكروسى Mikro C . سوف يحتوى كل مشروع على الدائرة الكهربية ، والمحاكاة ، والبرمجة ، مع تغطية التفاصيل الكاملة .
قياس جهد التيار المتردد AC Voltage باستخدام الميكروكونترولر PIC16F877A ومكبر العمليات :
ربما تكون قد تعرفت على قياس الجهد المستمر المنخفض باستخدام الميكروكونترولر ، لكن نحن هنا فى هذا المشروع بصدد قياس جهد التيار المتردد المرتفع باستخدام الميكروكونترولر PIC وليكون مقدمة لمشاريع أكثر تقدما فى وقت لاحق .
1- قياس جهد التيار المتردد المرتفع :
لقياس الجهد 220V AC ، تحتاج إلى خفض هذا الجهد . الميكروكنترولر لا يمكنه قياس جهد أكبر من 5V . إذا أعطيته جهد أكبر من 5V على المداخل التناظرية ، وسوف يحدث له ضرر دائم . لضمان حماية الميكروكونترولر ، وسوف تحتاج إلى خفض الجهد المتردد 220V AC إلى جهد متردد آخر والذي ينبغي أن تكون قيمة ذروته أقل من 5V . على سبيل المثال ، الجهد 220V AC يعنى قيمة RMS ، وقيمة ذروته تساوي Vp = Vrms/0.707 أى 311 V AC . وبالمثل عليك خفض الجهد المتردد المرتفع بنفس الطريقة بحيث ينبغى ألا تتغدى قيمة ذروته قيمة أكبر من 5V .
هناك طريقتان لخفض الجهد 220V AC إلى جهد متردد منخفض بحيث لا تتعدى قيمة ذروته أكبر من 5V :
• استخدام محول للجهد Potential Transformer .
• استخدام مكبر الفرق Difference amplifier .
لكن لماذا تريد أن تنفق المزيد من المال باستخدام محول الجهد ؟ فى حين يمكنك ان تفعل نفس الشىء بمساعدة مكبر العمليات ، فى نظام مكبر الفرق ، الرخيصة الثمن مع بعض المقاومات . طريقة مكبر الفرق تكون أكثر اقتصادا من طريقة محول الجهد عندما تريد خفض جهد أقل من 400V AC .
مكبر الفرق DIFFERENCE AMPLIFIER :
تمهيد :
مكبر الفرق هو نوع من المكبرات الإلكترونية والتى تكبر الفرق (حاصل طرح) بين جهدى دخل ولكنه يخمد (يتخلص) أى جهد مشترك لجهدى الدخل . هذا المكبر هو دائرة تناظرية بدخلين : الدخل السالب Vin- والدخل الموجب Vin+ وبخرج واحد Vout وفى هذا المكبر يتناسب الخرج مع الفرق بين جهدى الدخل تناسبا مثاليا أى :



كود:
Vout = A ( Vin+  - Vin- )

حيث A هو كسب (ربح) المكبر Gain . الشكل التالى يبين الدائرة الكهربية الأساسية ومعادلة جهد الخرج :



الاستخدام العملى :



يستخدم مكبر الفرق فى تكبير الفرق فى الجهد بين مستويين من الجهد . في حالة التيار المتردد يكون لدينا اثنين من مستويات الجهد أحد المستويان يكون موجب بالنسبة للجهد المحايد neutral (المشترك) والمستوى والآخر يكون سالب بالنسبة للجهد المحايد .
يمكنك ضبط كسب (ربح) مكبر الفرق وفقا لمتطلباتك عن طريق تحديد القيم المناسبة للمقاومات. في هذا المشروع يكون الكسب :


كود:
Gain A =  R8/(R1+ R2+ R3)

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


vout = gain * Vinput

في الشكل أعلاه مقاومات الدخل R1، R2، R4، R5 لها قيمة مرتفعة 1M2 والتي لا تسمح بظهور جهد مرتفع عبر مكبر العمليات .ونظرا لأنه يتم استخدام مقاومات دخل مرتفعة فإن التيار الذى يمر يكون منخفض جدا وفى حدود الميكروأمبير وبهذه الطريقة فإن فقدان الطاقة سوف يكون في حدود المللى وات . وفقا لصيغة كسب مكبر الفرق يكون لدينا :


gain= (22K)/( 1.2M + 1.2M + 2.2K) = 0.009158271584381

ملاحظة :
يجب إجراء الحسابات وفق قيمة ذروة الموجة الجيبية . لأن ذروة الجهد هى الحد الأقصى لجهد طرف الدخل التناظرى . لذلك مع كسب بالقيمة 0.0092 فإنه بالنسبة لقيمة جهد الذروة للموجة الجيبية بقيمة 220 * 1.414 = 311V AC يكون أقصى جهد خرج لمكبر العمليات هو :


Vout = .0092 * 311 = 2.8612 volt (peak output voltage)




كما ترى فى الدائرة الكهربية المبينة أعلاه قمنا بتوصيل الطرف الآخر للمقاومة R7 بالجهد الموجب 5V بدلا من الأرضى (بالدائرة الأساسية) ، كما نفعل عند استخدام مكبر الفرق في العديد من التطبيقات . تستخدم المقاومة R7 لزيادة مستوى الجهد المستمر DC level فى خرج مكبر العمليات . الموجة الجيبية يكون لها مستوى جهد مستمر بالقيمة صفر ولها دورة جهد سالبة . المكروكونترولر لا يمكنه قراءة الجهد السالب . لذلك قمنا بزيادة مستوى الجهد المستمر للموجة الجيبية بقيمة 5V لإزاحة النصف السالب من الدورة إلى الجزء الموجب ، وبهذه الطريقة لن يظهر جهد سالب عبر الميكروكونترولر . الآن ، فإن جهد ذرة الخرج من مكبر العمليات يكون 5 + 2.8612 = 7. 8612 volt ولكن كما ذكرت ، الميكروكنترولر لا يمكنه قياس جهد أكبر من 5V . لذلك وكما هو موضح في الشكل أعلاه استخدمنا مقسم جهد ، مكون من R9 , R10 لتقسيم الجهد إلى النصف كما يلى :


Vout = 7. 8612/2 = 3.93

تستخدم المكثفات C1، C2 و C3 كمرشحات للتخلص من التوافقيات المرافقة لجهد الدخل وتوفير الحماية للميكروكونترولر الآن ، يمكن توصيل الطرف AN إلى طرف دخل تناظرى للميكروكونترولر لقراءة الجهد بسهولة .

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


كود برنامج قياس الجهد المتردد بلغة السى مع المترجم ميكروسى :
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
اعلانات
قديم 11-04-2016, 10:08 AM   #2
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي

كود برنامج قياس الجهد المتردد بلغة السى مع المترجم ميكروسى :


كود:
/**************************************
Programs for AC parameters  measurements
1-Measurement of AC Voltage
MCU: PIC16F877A  X-Tal: 8MHz
Date : 10/4/2016
****************************************/
// 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////////////////////
float v;
char rms_text[] = "RMS:000V";
///////////////Functions////////////////////////
void init(){
ADCON1=0;
CMCON=7;
TRISA  = 0xFF;
/////////
Lcd_Init();                         // Initialize LCD
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_out(1,1,"AC parameters");
Lcd_out(2,1,"measurements");
delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR);
}
////////
void voltage_READ(void){
 float max;
 int i,temp;
 char rms;
 max = 0;
            for(i=0;i<5000;i++)//get max reading in the ac period
            {
                temp = ADC_Read(0); //read and convert
               if(temp>max)//compare
                {
                   max = temp; // assign
                }
                Delay_us(5);
            }//repeat to get max reading in the ac period

 // calculate peak and rms values
 max = max*5.0/1023.0;  //input volt to PIC AN pin
 max = max*2; // input volt to voltage divider
 max=(max-5.0);//remove added DC  5v level to get AC signal
 max = max *109.2;   // input voltage to op-amp v * 1/0.009158271584381(gain)
 max=max*0.707107; // to get RMS value Vrms
 rms = max; //to get integer value
 ///////text modification///////////
 rms_text[4] = rms/100 + 48;  // convert value into ASCII
 rms_text[5] = (rms/10)%10 +48;  // convert value into ASCII
 rms_text[6] = (rms)%10 +48;  // convert value into ASCII
Lcd_Out(1,5,rms_text);  // Display rms_text on LCD
 }
 /////////////////Main function/////////////////////////
 void main()
{
init();
 while(1)
 {
 voltage_READ();
 }
}

النتيجة :



الطريقة الثانية لقياس جهد التيار المتردد :
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  
قديم 11-04-2016, 10:28 AM   #3
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي

الطريقة الثانية لقياس جهد وتردد التيار المتردد :
فى هذه الطريقة سوف نستخدم محول جهد ومقسم جهد لخفض الجهد 220V AC إلى أقل من 5V AC .
المكونات :
• محول جهد .
• قنطرة توحيد التيار المتردد .
• دائرة مقسم جهد .
• ميكروكونترولر PIC16F877A .
• وحدة عرض LCD .
محول الجهد Potential transformer (PT)
محول الجهد هو نوع من المحولات يستخدم لخفض جهد التيار المتردد بغرض قياسه . على سبيل المثال ، فى هذا المشروع سوف نستخدم محول جهد لخفض الجهد 220V AC إلى 12V AC . الملف الثانوى لمحول الجهد يكون له عدد لفات أقل من عدد لفات الملف الابتدائى بقيمة نسبة التحويل أى يكون :


Ns/Np = Vs/Vp

قنطرة التوحيد Bridge rectifier



قنطرة التوحيد هى دائرة إلكترونية تستخدم فى تحويل جهد التيار المتردد إلى جهد مستمر نبضى . بمعنى أنها تحول نصف الدورة السالبة إلى نصف دورة موجبة . والسؤال هو لماذا نحتاج قنطرة التوحيد فى هذا المشروع ؟ الإجابة : لأن الميكروكونترولر لا يمكنه قياس الجهد السالب . لذلك نحتاج لتحويل نصف دورة الجهد المتررد السالب إلى نصف دورة موجب . يتم عمل قنطرة التوحيد من دايودات توحيد متصلة فى شكل قنطرة ، مثل الدايودات 1N4007 .
مقسم الجهد :
مقسم الجهد ، كما هو ظاهر من الاسم ، يستخدم لتقسيم الجهد . يتم استخدام مقاومتين كمقسم جهد . يقوم محول الجهد بخفض الجهد 220V AC إلى الجهد 12V AC . بعد ذلك تستخدم قنطرة التوحيد لتحوبل الجهد 12V AC إلى تيار مستمر نبضى . لكن الميكروكونترولر لا يمكنه قراءة الجهد الأكبر من 5V . لذلك يقوم مقسم الجهد بتخفيض أخر للجهد ليكون الجهد عبر طرف الدخل التناظرى للميكروكونترولر أقل من 5V .
الدائرة الكهربية :




برنامج قياس جهد وتردد التيار المتردد بلغة السى مع المترجم ميكروسى :
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-04-2016, 10:41 AM   #4
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي

برنامج قياس جهد وتردد التيار المتردد بلغة السى مع المترجم ميكروسى :


كود:
/**************************************
Program for AC parameters  measurements
2-ac voltage and frequency measurements
MCU: PIC16F877A  X-Tal: 8MHz
Date : 10/4/2016
****************************************/
// 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
char peak_text[] = "PK:000V";
char rms_text[] = "RMS:000V";
char frequency_text[] = "FREQUENCY:00Hz";
/////////////////////
void init(){
TRISA = 0xFF; // set all pins of PORT A as input
ADCON1=0x00; // set all Analog
OPTION_REG = 0b00101000; // set TOCKI as clock counter , PS2:PS0: Prescaler Rate 1:2
 /////////////////////////
 Lcd_Init();
 Lcd_Cmd(_LCD_CLEAR);
 Lcd_Cmd(_LCD_CURSOR_OFF);
 /////////////////////
 Lcd_Out(1,1,"Measurement of");
 Lcd_Out(2,1,"AC parameter ");
 Delay_ms(2000);
 Lcd_Cmd(_LCD_CLEAR);
 }
 //////
 void voltage(){
 unsigned int i,peak,rms,temp;
 float max1 ;
 // Find the peak amplitude of the sine wave...
            max1 = 0;
            for(i=0;i<5000;i++)
            {
               temp = ADC_Read(0);
               if(temp>max1)
                {
                   max1 = temp;
                }
                Delay_us(5);
            }

               max1 = max1*(5.0/1023.0) ;//Input voltage to PIC AN pin
			   max1 = max1*11.0 ;//Input voltage to voltage divider circuit
               max1 = max1+1.4; // voltage drop on bridge
               max1 = max1* 220.0/12.0;//Input voltage to voltage transformer
               peak = max1; //peak as integer value
               rms = peak*0.707; // find the rms value of the line voltage

            peak_text[3] = peak/100 + 48; // convert into ASCII
            peak_text[4] = (peak/10)%10 +48; // convert into ASCII
            peak_text[5] = (peak)%10 +48; // convert into ASCII
            Lcd_Out(1,1,peak_text); // Display message on LCD

            rms_text[4] = rms/100 + 48;  // convert into ASCII
            rms_text[5] = (rms/10)%10 +48;  // convert into ASCII
            rms_text[6] = (rms)%10 +48;  // convert into ASCII
            Lcd_Out(1,9,rms_text);  // Display message on LCD
	}
			//////////

void frequency(){
unsigned int Hz;
TMR0=0; // clear TMR0
Delay_ms(1000);  // Delay 1 Sec to measure Hz
/////
Hz=TMR0/2;// divide by 2 , full wave double the frequency
frequency_text[10] = (Hz/10) + 48;    // Extract tens digit as ASCII
frequency_text[11] =  (Hz/1)%10 + 48;    // Extract ones digit as ASCII
Lcd_Out(2,1,frequency_text);  // Display message on LCD

TMR0=0;
}

///////////////////////////
void main()
{
 init();
  while(1)
  {
    voltage();
	frequency();

  }// while
}// void main

النتيجة :


F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-04-2016, 12:55 PM   #5
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي

قياس التيار المتردد AC باستخدام الميكروكونترولر PIC :
محول التيار Current Transformer :
يستخدم محول التيار لقياس التيار المتردد المرتفع والذى يمكن أن يصل مداه إلى ألف أمبير ، وهذا يعتمد على معدل محول التيار ونسبة تحويل التيار (خفض التيار) الخاصة به .
افترض أن لديك محول تيار بنسبة تحويل للتيار (100 : 10 Amper) ، هذا يعني أن تيار الجانب الابتدائى للمحول هو 100 أمبير وتيار الجانب الثانوي هو 10 أمبير . لا يمكنك استخدام هذا المحول لقياس تيار أكثر من 100 أمبير . عن طريق قياس تيار الجانب الثانوي المنخفض ، نستطيع تحويله بسهولة إلى قيمة تيار الجانب الابتدائى باستخدام صيغة نسبة تحويل التيار .

كيفية قياس تيار الجانب الثانوى :
هناك العديد من الطرق لقياس التيار المتردد ، يمكنك قياسه باستخدام مقياس التيار المتردد AC Ammeter ، ولكن إذا كنت ترغب في إجراء بعض عمليات التحكم والمراقبة وتريد ان ترسل قيمة التيار المقاس إلى مكان آخر يجب أن تستخدم نوع من النظام الذكي .
على سبيل المثال ، إذا كنت تريد أن تصنع دائرة حماية للتيار بالمواصفات التالية : إذا كان التيار المار فى خط أكبر من 100 أمبير ، يجب إجراء فعل تحكم لتشغيل ريلاى ، فإذا زاد التيار عن 100 أمبير يتم فتح تلامسات الريلاى ، أما إذا كان التيار أقل من 100 أمبير يتم غلق تلامسات الريلاى .
لعمل مثل هذا النوع من النظام الذكي ، قد نستخدم الإلكترونيات التناظرية والرقمية ، ولكن من الأفضل استخدام الالكترونيات الرقمية إذا كنا مهتمين بمسألة التكلفة . في هذا التدريب سوف نستخدم الميكروكونترولر PIC لقياس التيار المتردد .
المكونات المادية (الهاردوير) لقياس التيار المتردد :
• الميكروكونترولر PIC16F877A .
• مكبر الفرق difference amplifier .
مكبر الفرق :
لقياس التيار المتردد باستخدام الميكروكونترولر PIC ، يجب علينا أن نستخدم وحدة محول من تناظرى لرقمى ADC والمدمجة ضمن الميكروكونترولر PIC . لاستخدام وحدة المحول ADC سنقوم بتحويل التيار إلى شكل الجهد باستخدام مقاومة توازى shunt ( مجزىء أو مقسم تيار) بقيمة 0.1 أوم يتم توصيلها عبر محول التيار CT ، وسوف نقوم بقياس الهبوط فى الجهد عبر هذه المقاومة ، حيث يمكن بسهولة تحويله إلى تيار مرة أخرى . على سبيل المثال : إذا كان هبوط الجهد عبر المقاومة 1 أوم هو 8V ، عندئذ فإن التيار ، تبعا لقانون أوم ، يكون
V=IR
I=V/R
I=8/1=8A

ولكن المشكلة هي أن وحدة المحول ADC بالميكروكونترولر لا يمكنها أبدا قياس الجهد الأكبر من 5V ، ولذلك لحل هذه المشكلة يمكننا استخدام مكبر الفرق . عن طريق ضبط كسب مكبر الفرق فإنه يمكننا أن نقلل الجهد إلى أقل من 5V .
الدائرة الكهربية :


F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-04-2016, 12:57 PM   #6
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي

البرنامج :

كود:
 ///////AC CURRENT MEASUREMENT///////////////
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;
///////////////////////////
char current_text[] = "CURRENT:000A";  // FORM OF CURRENT
///////////////Functions////////////////////////
void init(){
ADCON1=0;
CMCON=7;
TRISA  = 0xFF;
/////////
Lcd_Init();                         // Initialize LCD
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);

}
/*************************current measurement function****************************/
void current_READ(void){
 float max,current;
 unsigned int i,temp ;
 char pri_current ;
 

 max = 0;
            for(i=0;i<5000;i++)//get max reading in the ac period  
            {
                temp = ADC_Read(0); //read and convert   
               if(temp>max)//compare 
                {
                   max = temp; // assign 
                }
                Delay_us(5);
            }//repeat to get max reading in the ac period 
                        
 // calculate peak and rms values
 max = max*5.0/1023.0;  //input volt to PIC AN pin
 max = max*2.0; // input volt to voltage divider
 max=(max-5.0);//remove added DC  5v level to get AC signal
 max = max *10.0;   // input voltage to op-amp (gain)
 max=max*0.707; // to get RMS value Vrms 
 current = max / 1.0 ; //  secondry current through resistor 1 ohm
 current = current * 10.0 ; // primary current , CT ratio
 pri_current =  current ;
 ///////text modification///////////
 current_text[8] = pri_current/100 + 48;  // convert value into ASCII
 current_text[9] = (pri_current/10)%10 +48;  // convert value into ASCII
 current_text[10] = (pri_current)%10 +48;  // convert value into ASCII
Lcd_Out(1,1,current_text);  // Display rms_text on LCD
 }

/***********************************main function********************************/
void main()
{
init();
          while(1)
         {
                 
            current_READ();
          }
}
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-04-2016, 09:38 PM   #7
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 333
افتراضي

أفو ميتر رقمى لقياس الجهد والتيار المستمر :
الدائرة الكهربية :


البرنامج :


كود:
/**************************************
Program for DC Voltage and Current measurements
MCU: PIC16F877A  X-Tal: 8MHz
****************************************/
// 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 i,peak,rms,temp;
float max1 ;
char volt_text[] = "VOLTAGE:00.0V";
char current_text[] = "CURRENT:00.0A";
///////////////Functions////////////////////////
void init(){
ADCON1=0;
CMCON=7;
TRISA  = 0xFF;
/////////
Lcd_Init();                         // Initialize LCD
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_out(1,1,"DC parameters");
Lcd_out(2,1,"measurements");
delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR);
}
/////////////////////
void voltage_READ(void){
 float max;
 unsigned int i,temp ,volt;
 max = 0;
 for(i=0;i<50;i++)//get max reading in the ac period
 {
  temp = ADC_Read(0); //read and convert ch 0
  if(temp>max)//compare
    {
     max = temp; // assign
    }
 Delay_us(5);
}//repeat to get steady DC reading

 // calculations
 max = max*5.0/1023.0;  //input volt to PIC AN pin
 max = max*11.0; // input volt to voltage divider
 max = max*10.0; // to get one digit fraction
 volt = max; //to get integer value
 ///////text modification///////////
 volt_text[8] = volt/100 + 48;  // convert value into ASCII
 volt_text[9] = (volt/10)%10 +48;  // convert value into ASCII
 volt_text[11] = (volt)%10 +48;  // convert value into ASCII
Lcd_Out(1,1,volt_text);  // Display volt_text on LCD
 }
 //////////////////
 void current_READ(void){
 float max;
 int i,temp,current;
 max = 0;
 for(i=0;i<50;i++)//get max reading in the ac period
 {
  temp = ADC_Read(1); //read and convert ch 1
  if(temp>max)//compare
    {
     max = temp; // assign
    }
 Delay_us(5);
}//repeat to get steady DC reading

 // calculations
 max = max*5.0/1023.0;  //input volt to PIC AN pin
 max = max*10.0;  // to get one digit fraction
 current = max/1.0;//I=V/R
 
 //////text modification///////////
 current_text[8] = current/100 + 48;  // convert value into ASCII
 current_text[9] = (current/10)%10 +48;  // convert value into ASCII
 current_text[11] = (current)%10 +48;  // convert value into ASCII
Lcd_Out(2,1,current_text);  // Display volt_text on LCD
 }

///////////////////////////
void main()
{
init() ;

  while(1)
  {
    voltage_READ();
	current_READ();

  }// while
}// void main
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
قديم 11-04-2016, 11:34 PM   #8
abdoelrefaiy
مهندس متواجد

المشاركات: 190
أحصائية الترشيح

عدد النقاط : 81


النشاط

معدل تقييم المستوى: 0
افتراضي شكر واجب

السلام عليكم و رحمه الله و بركاته

جزاك الله خيرا شرح واضح و مختصر غير مخل

بارك الله فيك و ذادك من علمه

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

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

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

تعليمات المشاركة
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

الساعة الآن: 05:17 PM


Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025
Feedback Buttons provided by Advanced Post Thanks / Like (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
القرية الإلكترونية