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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 20-10-2014, 06:32 AM المشاركة 9   
افتراضي



كود:
void voltage_transformer()
{
 unsigned int  measuring1=0 , measuring2=0;
 float measuring3;
 for(x=1;x<8;x++)
                  {
                    if(voltage>=tap[x-1] && voltage<tap[x] )
                                               {
                                                if((x%2)!=0)
                                                              {
                                                               set_bit(relay,3);
                                                               measuring2=ratio_transformer[3];
                                                              }
                                                else {
                                                       clear_bit(relay,3);
                                                       measuring2=ratio_transformer[4];
                                                      }
                                                if(x>=2 )
                                                         {
                                                          set_bit(relay,0);
                                                          measuring1=ratio_transformer[1];
                                                         }
                                                else  clear_bit(relay,0);
                                                if(x>=4 ){
                                                          set_bit(relay,1);
                                                          measuring1=ratio_transformer[2];
                                                         }
                                                else  clear_bit(relay,1);
                                                if(x>=6 ){
                                                          set_bit(relay,2);
                                                          measuring1=ratio_transformer[4];
                                                         }
                                                else  clear_bit(relay,2);
                                               if(x<2) measuring1=ratio_transformer[0];

                                               }
                   else if (voltage>=tap[7]){
                                             measuring1=ratio_transformer[4];
                                             measuring2=ratio_transformer[3];
                                             relay=(relay & 0xF0) +0b00001111;
                                            }
                   else if (voltage<tap[0])
                                          {
                                           measuring1=ratio_transformer[0];
                                           measuring2=ratio_transformer[4];
                                           relay=relay & 0xF0 ;
                                          }

                  }
 measuring3=(measuring2* voltage)/measuring1;
 value= measuring3;
}
قبل شرح الكود اوضح مبدأ العمل منظم الجهد
بالبدايه راح يقيس الجهد الدخل ثم يقارن هذا الجهد مع الجهود القصوى لجهود الدخل الي أحسبناها في مشاركه 6 ومنها راح نحدد الجهد المطلوب ومنها يتم تشغيل ريلي وفق ماتم تخطيط له بحيث تعمل رليات بطريقه لاتسمح للجهد يتجاوز 235 او أكثر بقليل

===========================
هذه متغيرات مساعده لحساب الجهد
كود:
unsigned int  measuring1=0 , measuring2=0;
 float measuring3;
=======================
نعمل داله تكرار لغايه 8 لان عدد دخالات الي برمجناها=8
كود:
for(x=1;x<8;x++)
ثم نعمل مقارنه بين نقطتين مثلا بين 115 وبين 130
كود:
if(voltage>=tap[x-1] && voltage<tap[x] )
فأذا تحقق الشرط نختبر قيمه x حتى نعرف اي تاب هو الي حقق شرط

كود:
if((x%2)!=0)
                                                              {
                                                               set_bit(relay,3);
                                                               measuring2=ratio_transformer[3];
                                                              }
                                                else {
                                                       clear_bit(relay,3);
                                                       measuring2=ratio_transformer[4];
                                                      }
نختبر هل باقي القسمه على 2 لايساوي 0 اذا كان نعم قم بتشغيل ريلي رقم 4 وموجود على البت رقم 3
الان لغرض القياس الجهد نحتاج الى أحتساب نسبه التحويل هنا سنضع
measuring2=ratio_transformer[3
measuring2=240
اي مخرج على تاب 240 وبتالي هو راح يمثل تاب أخراج الان خزنه قيمه measuring2 ونستخدمها فيما بعد في أحتساب الجهد


اما اذا كان باقي قسمه =0
أذن أطفء ريلي رقم 4 وأجعل نسبه التحويل عند تاب 270

طبعا يتحقق الشرط
كود:
if((x%2)!=0)
عندما X=1,3,5,7
والتي عندها يكون تاب 130 و 170 و 210و 270 والتي عندها اريد تشغيل مخرج على تاب 240 اي اريد ريلي رقم 4 يعمل اما اذا لم يكن ذلك اريد ريلي 4 في حاله أطفاء

اعلانات

الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 20-10-2014, 04:02 PM المشاركة 10   
افتراضي


السلام عليكم.
ماشاء الله عليك أخ حسن متميز كعادتك,ألف شكر وجعله الله بميزان حسناتك.

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 20-10-2014, 04:02 PM المشاركة 11   
افتراضي


أذا كانت x أكبر او يساوي 2 معناها فولتيه الدخل أكبر من 150 فولت وبتالي نريد هنا
ريلي رقم 1 شغال دائما لكي يتم تحويل الدخال على تاب 170
اما أذا كانت أقل من ذالك يجب أطفاء ريلي رقم 1
مع وضع نسبه التحويل عند 170


كود:
 if(x>=2 )
                                                         {
                                                          set_bit(relay,0);
                                                          measuring1=ratio_transformer[1];
                                                         }
                                                else  clear_bit(relay,0);
=========================================
أذا كانت x أكبر او يساوي 4 معناها فولتيه الدخل أكبر من 185 فولت وبتالي نريد هنا
ريلي رقم 2 شغال دائما لكي يتم تحويل الدخال على تاب 210
اما أذا كانت أقل من ذالك يجب أطفاء ريلي رقم 2
مع وضع نسبه التحويل عند 210


كود:
if(x>=4 ){
                                                          set_bit(relay,1);
                                                          measuring1=ratio_transformer[2];
                                                         }
                                                else  clear_bit(relay,1);
========================================
أذا كانت x أكبر او يساوي 6 معناها فولتيه الدخل أكبر من 240 فولت وبتالي نريد هنا
ريلي رقم 3 شغال دائما لكي يتم تحويل الدخال على تاب 270
اما أذا كانت أقل من ذالك يجب أطفاء ريلي رقم 3
مع وضع نسبه التحويل عند 270

كود:
if(x>=6 ){
                                                          set_bit(relay,2);
                                                          measuring1=ratio_transformer[4];
                                                         }
                                                else  clear_bit(relay,2);
======================================
اما اذا كانت x اقل من 2 أذن نسبه التحويل عند 130
كود:
if(x<2) measuring1=ratio_transformer[0];
====================================
عندما تصل x الى 7 فأن أخر شرط هو
كود:
if(voltage>=tap[6] && voltage<tap[7] )
أذن نختبر في حاله اذا كان جهد أكبر من [tap[7 يعني ألجهد أكبر من 240
هنا
كود:
else if (voltage>=tap[7]){
                                             measuring1=ratio_transformer[4];
                                             measuring2=ratio_transformer[3];
                                             relay=(relay & 0xF0) +0b00001111;
                                            }
اي measuring1=270
measuring2=240
ثم نشغل كل ريليات وبتالي يكون مدخل على 270 ومخرج على 240
==========================================
نحن لم نختبر ماذا اذا كان جهد أقل من 115
كود:
else if (voltage<tap[0])
                                          {
                                           measuring1=ratio_transformer[0];
                                           measuring2=ratio_transformer[4];
                                           relay=relay & 0xF0 ;
                                          }
أذن نطفئ كل ريليات حيث نجعل دخل على 130 والخرج عند تاب 270 ومسب تحويل تكون
measuring1=130
measuring2=270


==================================
أذن نحسب فولتيه حسب قانون عام للمحولات
V2=N2/N1 * V1

كود:
measuring3=(measuring2* voltage)/measuring1;
من ثم نحول قيمه او ناتج الى متغير value لكي تظهر على سفن سكمنت
كود:
value= measuring3;


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 20-10-2014, 04:11 PM المشاركة 12   
افتراضي


أخير داله حمايه الجهد
كود:
void protection_voltage()
{
  if(value<v_min )
                    {
                     if(time_vmin_cont>=time_vmin) 
                                         {
                                           clear_bit(relay,4);// protection relay// output relay =off// output relay =off
                                           cont1=0;
                                           time_waiting_cont=0;
                                         }
                    }
  else if(value>v_max )
                     {
                      if(time_vmax_cont>=time_vmax)
                                         {
                                          clear_bit(relay,4);// protection relay// output relay =off
                                          cont1=0;
                                          time_waiting_cont=0;
                                         }
                     }
 if(value>=v_min && value<=v_max)
                                      {
                                       if(time_waiting_cont>=time_waiting)
                                                             {
                                                               set_bit(relay,4);// protection relay
                                                               // output relay =on
                                                             }
                                       cont=0;// reset time for protection
                                       time_vmin_cont=0;
                                       time_vmax_cont=0;
                                      }
}
هنا بعدما تم أحتساب أخراج من قبل داله
كود:
voltage_transformer()
أذن راح نختير هذه القيمه مع أقل جهد وأعلى جهد
=========================================
أختبار الجهد مع Vmin
كود:
if(value<v_min )
                    {
                     if(time_vmin_cont>=time_vmin) 
                                         {
                                           clear_bit(relay,4);// protection relay// output relay =off// output relay =off
                                           cont1=0;
                                           time_waiting_cont=0;
                                         }
                    }
كما تلاحظون اذا كان جهد اقل من v_min هنا لن يتم أطفاء الريلي أخراج الا اذا أنتهى زمن تأخيري time_vmin_cont>=time_vmin
عندها سوف يتم أطفاء ريلي رقم 5
وينطبق الحال على أقصى الجهد

اما اذا كان الجهد اعلى من قيمه الصغرى وأقل من قيمه العظمى هنا سوف لن يعمل الريلي حتى ينتهي من زمن أنتظار


تم والحمدلله من أنتهاء من شرح الكود أي أستفسار او تطوير او أي خطأ في الكود يرجى وضعها هنا في هذه الصفحه لغرض التطوير مشروع

تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 20-10-2014, 06:25 PM المشاركة 13   
افتراضي


سحاول وضع تحديث بسيط وهو وضع حساس أخر على أخر لغرض الحمايه طبعا أيضا يتم برمجه حساس
هنا راح يحسب البرنامج قيمتين للجهد الاولى من عمليه فولتيه داخله وبأستخدام نسب التحويل وأخرى مباشره من حساس
ولكن لا أعرف هل أقوم مثلا بجمع قيمتين ثم قسمتهم على 2 لاخذ معدل

او أختبر أيهما أكبر وأخذ قيمه الاكبر
فما هو رأيكم
تحياتي


كابي كابي كابي
:: مهندس ::
تاريخ التسجيل: May 2018
المشاركات: 1
نشاط [ كابي كابي كابي ]
قوة السمعة:
قديم 04-05-2018, 01:23 AM المشاركة 14   
افتراضي


ليش ما ينزل الكود بالاردوينو


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 05-05-2018, 08:23 AM المشاركة 15   
افتراضي


لأن
1- الأردوينو له لغة مختلفة عن ميكرو سى
2- الميكرو المستخدم مختلف


Ahmed Desoky
:: مهندس ::
تاريخ التسجيل: Aug 2017
المشاركات: 9
نشاط [ Ahmed Desoky ]
قوة السمعة:
قديم 09-05-2018, 03:26 AM المشاركة 16   
افتراضي


السلام عليكم ورحمة الله وبركاتة ...
جزاك الله خيراً..
أرجو نشر ال PCB الخاص ببوردة الكونترول



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