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

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

احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 08-04-2018, 07:38 AM المشاركة 1   
افتراضي مشكلة تأثير الضوضاء على المايكروكنترولر Twitter FaceBook Google+



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

اساتذة لدي مشكلة وارجو بيان التعليل مع الحل المناسب لها ...

المشكلة هي : انا صممت محول منظم جهد وصممت دائرة للتحكم بملفات المحول حسب حالة الجهد ... الدائرة في الصورة ادناه ..



وهذي هي بعد التنفيذ



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

انا قمت بوضع مكثف 100نانو على خرج الحساس الداخل للبك .. تحسن الوضع ولكن لم يتم التخلص من المشكلة نهائيا ...

المشكلة بأختصار عند ربط المحول بالكارت يظهر نويز يجعل المتحكم مضطرب ..

كيف اتخلص من هذي المشكلة ؟؟؟

اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 09-04-2018, 03:42 AM المشاركة 2   
افتراضي السلام عليكم ورحمه الله


اخي الكريم ..
المشكله هنا تقع من عده جوانب ..
اولا خطأ ان تصمم البورده بهذا الشكل .. يجب تصميم بورده جديده مع مرعاه تقليل حجم المسارت في البورده وبالأخص مسارات الداتا مثل مسارات المفاتيح والمسرات اللتي تتحكم في غلق وفتح الراليهات مع المتكالمه 2003 .. واضح انك مستخدم ic 2003 لتوفير التيار اللازم لتشغيل الراليهات ..

ايضااا عند تصميم البورده يجب مرعات ملئ جميع الفرغات بالنحاس .. ولا تتركها فارغه كما فعلت في التصميم اللذى نفذته اعلاه ..

ايضااا في البرمجه اختار برمجه الدخول والخروج في المتحكم بالتنسيق الجيد حيث يكون اطراف الخرج بعيده عن اطراف الدخل ..

ايضااا يجب استخدام مصدر تغذيه جيد .. مثل الدوائر الجاهزه .. مثل باور الريسفرات .. أو البوارات اللتي تعمل بالتقتيع الموجه .. ولا تستخدم المحولات العاديه في الحصول علي مصدر تغذيه للبيك .. لأنها غير جيده وتنقل الشوشره من الشبكه المحليه الي البيك ..

اخيرااا .. هناك صيغه معينه وترتيب في بناء الكود لكي يكون أمن ولا يتأثر بالشوشره ..

يمكنك وضع الكود لكي نستطيع المراجعه عليه والوصول لأفضل النتائج ..

تحياتي لك


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 09-04-2018 الساعة 03:47 AM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 09-04-2018, 05:51 AM المشاركة 3   
افتراضي


هناك بعض المشاكل فى الحسابات
انت تضع مكثف تنعيم 470 ميكرو C4 وهذا بالحساب يعطى 2.13 فولت تعرجات لكل 100 مللى أمبير تيار حمل
الميكرو وحده طبقا للداتاشيت سيسحب حوالى 200 مللى

أضف 60 مللى أمبير للشاشة LCD
أضف إلى ذلك 50 مللى لكل ريلاى وقد تزيد بحسب نوع الريلاى
ستكون المحصلة قدر كبير من التشويه على خط الدخول

فضلا عن انك لم توضح كيفية توصيل الجهد العالى من المحول وغالبا سيكون محول 12 فولت متصل بخرج المحول الكبير المثبت للجهد و من ثم ستقطع عنه التغذية كل مرة يتم تلقيط ريلاى جديد وهذه تشكل صدمه مباشرة على مصدر التغذية زمنها قد يصل إلى 0.1ثانية أى زمن 10 نبضات شحن تكفى لتفريغ المكثف.
لذا C4 يجب أن يكون على الأقل 4700 أو اكثر ميكرو و يمكن وضع بضع مكثفات 0.1 على التوازى معه .
أيضا مادام تفاعل الريلايات سيسبب هذا القدر فلابأس من وضع مرشح دخول Line filter و الموجود بكثرة على دخول دوائر التلفاز ووحدات التغذية الجيدة الصنع
و أخيرا المكثفات على التوازى مع الريلايات لا أثر لها ربما تكون حملا على خرج ULN و الأصح توصيل كل مكثف بين موجب الريلاى و الأرض و يكون أقرب ما يمكن منه حتى يأخذ الريلاي تياره من هذا المكثف لحظة التفعيل

و أخيرا الرسم لا يوضح التغذية 5 فولت إذ يجب وضع مكثف على تغذية الميكرو و أقرب ما يكون له و أيضا طرف الريسيت لا يوجد عليه مكثف للأرض فأى نبضة ستأتى عبر خط 5 فولت قد تسبب حدوث reset
أيضا المكثفين C6,C7 يجب أن يكونا مجاورين للمثبت 7805

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 2 اعجاب
اعجاب سعيد قادر, burai nuraldaem ( أعجبته المشاركة )

احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 17-04-2018, 11:28 AM المشاركة 4   
افتراضي


اخي الكريم ..
المشكله هنا تقع من عده جوانب ..
اولا خطأ ان تصمم البورده بهذا الشكل .. يجب تصميم بورده جديده مع مرعاه تقليل حجم المسارت في البورده وبالأخص مسارات الداتا مثل مسارات المفاتيح والمسرات اللتي تتحكم في غلق وفتح الراليهات مع المتكالمه 2003 .. واضح انك مستخدم ic 2003 لتوفير التيار اللازم لتشغيل الراليهات ..

ايضااا عند تصميم البورده يجب مرعات ملئ جميع الفرغات بالنحاس .. ولا تتركها فارغه كما فعلت في التصميم اللذى نفذته اعلاه ..

ايضااا في البرمجه اختار برمجه الدخول والخروج في المتحكم بالتنسيق الجيد حيث يكون اطراف الخرج بعيده عن اطراف الدخل ..

ايضااا يجب استخدام مصدر تغذيه جيد .. مثل الدوائر الجاهزه .. مثل باور الريسفرات .. أو البوارات اللتي تعمل بالتقتيع الموجه .. ولا تستخدم المحولات العاديه في الحصول علي مصدر تغذيه للبيك .. لأنها غير جيده وتنقل الشوشره من الشبكه المحليه الي البيك ..

اخيرااا .. هناك صيغه معينه وترتيب في بناء الكود لكي يكون أمن ولا يتأثر بالشوشره ..

يمكنك وضع الكود لكي نستطيع المراجعه عليه والوصول لأفضل النتائج ..

تحياتي لك


السلام عليكم ...
بالنسبة للطبقة النحاسية فلم اضعها بسبب وجود خط الـ N مع ارضي الدائرة ..
في التنفيذ الاخير (في الصورة اعلاه ) تم توحيد خط النيوترل ولم اضع الطبقة النحاسية خوفا من حدوث ضوضاء ....

اما ترتيب المداخل والمخارج : فيكاد تكون جميع الاطراف مستخدمة ( ولكن انا لم افعل السويتشات في البرنامج )

اما مصدر التغذية فقد جربت على بور سبلاي من النوع ادناه



طبعا كان استخدامه للتجربة .. اما في التشغيل الحقيقي سأستخدم ادبتر 12V

اما البرنامج فهو

كود:
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;

#define relay1           portc.f6
#define relay2           portc.f7
#define relay3           portd.f4
#define relay4           portd.f5
#define relay5           portd.f6
#define relay6           portd.f7
#define led_check        portd.f1



#define relay1_dir       trisc.f6
#define relay2_dir       trisc.f7
#define relay3_dir       trisd.f4
#define relay4_dir       trisd.f5
#define relay5_dir       trisd.f6
#define relay6_dir       trisd.f7
#define led_check_dir    trisd.f1

#define sw1              portc.f2
#define sw2              portc.f3
#define sw3              portd.f0

#define sw1_dir          trisc.f2
#define sw2_dir          trisc.f3
#define sw3_dir          trisd.f0

#define led_low              portc.f4
#define led_normal           portd.f3
#define led_high             portd.f2

#define led_low_dir           trisc.f4
#define led_normal_dir        trisd.f3
#define led_high_dir         trisd.f2

char x=0;  float read_sensor_input; float read_sensor_output;
char txt[15]; char txt1[15];  char normal=0;
char over[8];
char flag_data[8];     char rrr=0;  float mm=0;  char yy=0;
int time_data[8];


void micro()
{
 
 
 lcd_init();
 lcd_cmd(1);
 lcd_cmd(12);
 
 ADC_Init();
 TRISA.F3=1;
 //TRISA.f5=1;
 relay1_dir=0;
 relay2_dir=0;
 relay3_dir=0;
 relay4_dir=0;
 relay5_dir=0;
 relay6_dir=0;
 
/*sw1_dir=1;
 sw2_dir=1;
 sw3_dir=1;*/
 
 led_low_dir=0;
 led_normal_dir=0;
 led_high_dir=0;
 
 led_low=0;
 led_normal=0;
 led_high=0;
 
 relay1=0;
 relay2=0;
 relay3=0;
 relay4=0;
 relay5=0;
 relay6=0;

 led_check_dir=0;
 led_check=0;
 lcd_out(1,4, "HELLO_ID");


 for(x=0;x<6;x++){ led_check=!led_check; Delay_ms(500);}

  lcd_cmd(1);
}

void read_analoge()
{
 read_sensor_input=0;
 for(x=0;x<50;x++)
 {
 
 read_sensor_input+=adc_read(3);

 Delay_ms(1);
  }
 read_sensor_input=read_sensor_input/50;



 
}
void main() 
{
  micro();

  Delay_ms(500);
  
  while(1)
  {
   
if(rrr==0){ for(yy=0;yy<50;yy++)
   {
   
     read_analoge();
  
   read_sensor_input=(read_sensor_input*5000)/1023;

    read_sensor_input/=1000;

    floatToStr(read_sensor_input,txt);
    lcd_out(1,1,"Vin=");
     for(x=0;x<14;x++)
    {

   if(txt[x]!=' '){lcd_chr_cp(txt[x]);}

    }

    read_sensor_input*=73.33;
     mm= read_sensor_input;
    floatToStr(read_sensor_input,txt);
    lcd_out(2,1,"Vin=");
     for(x=0;x<14;x++)
    {

   if(txt[x]!=' '){lcd_chr_cp(txt[x]);}


    } }rrr=1; }
  
  
  
  
   
    if(rrr==1){ 
    
    read_analoge();
    
      read_sensor_input=(read_sensor_input*5000)/1023;

    read_sensor_input/=1000;

    floatToStr(read_sensor_input,txt);
    lcd_out(1,1,"Vin=");
     for(x=0;x<14;x++)
    {

   if(txt[x]!=' '){lcd_chr_cp(txt[x]);}

    }

    read_sensor_input*=73.33;
     mm= read_sensor_input;
    floatToStr(read_sensor_input,txt);
    lcd_out(2,1,"Vin=");
     for(x=0;x<14;x++)
    {

   if(txt[x]!=' '){lcd_chr_cp(txt[x]);}


     }
    
    
            }
   // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#199;&#230;&#225;&#236;
    ////////////////////////////////////////////////////
    if( read_sensor_input>95 && read_sensor_input <110)
    {
     relay2=1;

     relay1=0; relay3=0; relay4=0; relay5=0; //relay6=0;
    }
   //////////////////////////////////////////////////////

   // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#203;&#199;&#228;&#237;&#201;
   ///////////////////////////////////////////////////////
 else  if( read_sensor_input >110 && read_sensor_input < 124)
   {

    relay2=1; relay5=1;

    relay1=0; relay3=0; relay4=0; //relay6=0;
   }
 // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#203;&#199;&#225;&#203;&#201;
 /////////////////////////////////////////////////////////
 else if( read_sensor_input>124 && read_sensor_input<141)
 {

 relay1=1; relay2=1;

 relay3=0; relay4=0; relay5=0;   // relay6=0;

 }

 // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#209;&#199;&#200;&#218;&#201;
 //////////////////////////////////////////////////////////
 else if( read_sensor_input>142 && read_sensor_input<160)
 {
 relay1=1; relay2=1;  relay5=1;

  relay3=0;  relay4=0; //relay6=0;
 }

 // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#206;&#199;&#227;&#211;&#201;
 //////////////////////////////////////////////////////////
 else if( read_sensor_input>160 && read_sensor_input<169)
 {
  relay3=1;

  relay1=0; relay2=0; relay4=0; relay5=0; //relay6=0;
 }

 // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#211;&#199;&#207;&#211;&#201;
 //////////////////////////////////////////////////////////
 else if( read_sensor_input>169 && read_sensor_input<190)
 {
  relay3=1; relay5=1;

  relay1=0; relay2=0; relay4=0; //relay6=0;
 }

 // &#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#211;&#199;&#200;&#218;&#201;
 /////////////////////////////////////////////////////////
 else if( read_sensor_input>190 && read_sensor_input<210)
 {
  relay4=1; relay5=1;


  relay1=0; relay2=0; relay3=0; //relay6=0;
 }

 else if( read_sensor_input>210 && read_sensor_input<245)
 {
  relay4=0; relay5=0;


  relay1=0; relay2=0; relay3=0; //relay6=0;
 }

 //&#199;&#225;&#227;&#209;&#205;&#225;&#201; &#199;&#225;&#203;&#199;&#227;&#228;&#201;
 ////////////////////////////////////////////////////////////


  else if( read_sensor_input>245 && read_sensor_input <270)
 {

  relay1=0; relay2=0; relay3=0; relay4=0; relay5=1;  // relay6=0;

 }
 Delay_ms(100);
 if( read_sensor_input<180)
 {
  led_low=1;   led_high=0; led_normal=0;
 }
 
  if( read_sensor_input>180 && read_sensor_input<245)
 {
  led_low=0;   led_high=0; led_normal=1;
 }
 
  if( read_sensor_input>245)
 {
  led_low=0;   led_high=1; led_normal=0;
 }
    
  

  }
  
}

اعتذر عن التأخير في الرد لوفاة احد اقاربي


احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 17-04-2018, 11:41 AM المشاركة 5   
افتراضي


هناك بعض المشاكل فى الحسابات
انت تضع مكثف تنعيم 470 ميكرو C4 وهذا بالحساب يعطى 2.13 فولت تعرجات لكل 100 مللى أمبير تيار حمل
الميكرو وحده طبقا للداتاشيت سيسحب حوالى 200 مللى

أضف 60 مللى أمبير للشاشة LCD
أضف إلى ذلك 50 مللى لكل ريلاى وقد تزيد بحسب نوع الريلاى
ستكون المحصلة قدر كبير من التشويه على خط الدخول

فضلا عن انك لم توضح كيفية توصيل الجهد العالى من المحول وغالبا سيكون محول 12 فولت متصل بخرج المحول الكبير المثبت للجهد و من ثم ستقطع عنه التغذية كل مرة يتم تلقيط ريلاى جديد وهذه تشكل صدمه مباشرة على مصدر التغذية زمنها قد يصل إلى 0.1ثانية أى زمن 10 نبضات شحن تكفى لتفريغ المكثف.
لذا C4 يجب أن يكون على الأقل 4700 أو اكثر ميكرو و يمكن وضع بضع مكثفات 0.1 على التوازى معه .
أيضا مادام تفاعل الريلايات سيسبب هذا القدر فلابأس من وضع مرشح دخول Line filter و الموجود بكثرة على دخول دوائر التلفاز ووحدات التغذية الجيدة الصنع
و أخيرا المكثفات على التوازى مع الريلايات لا أثر لها ربما تكون حملا على خرج ULN و الأصح توصيل كل مكثف بين موجب الريلاى و الأرض و يكون أقرب ما يمكن منه حتى يأخذ الريلاي تياره من هذا المكثف لحظة التفعيل

و أخيرا الرسم لا يوضح التغذية 5 فولت إذ يجب وضع مكثف على تغذية الميكرو و أقرب ما يكون له و أيضا طرف الريسيت لا يوجد عليه مكثف للأرض فأى نبضة ستأتى عبر خط 5 فولت قد تسبب حدوث reset
أيضا المكثفين C6,C7 يجب أن يكونا مجاورين للمثبت 7805
السلام عليكم استاذ ماجد ....
اسف للتأخير بالرد لوجود حالة وفاة ...

في الرسمة المرفقة في المشاركة الاولى كان ال C4 470u ولكن في البورد انا واضع 2200u ...


اما مصدر التغذية المستخدم فقد كان بور سبلاي ( صورته في المشاركة اعلاه )

اما بالنسبة للمرشح اللذي ذكرته فلم استخدمه من قبل . فهل توجد قيود على استخدمه ؟؟؟ وكيف ؟

اما المكثفات فهي لمنع حدوث موجة مربعة على ملف الريلاي نتيجة اقتراب الشرط من نقطة حرجة قد يتحقق فيها شرطان بصورة لحضية ...

اما المكثف الخاص بخط المايكرو فقد كان 22u ولكن لم يكن بالقرب من المتحكم ..

اما المكثفات الـ 100نانو فهي قريبة من الرجوليتر


احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 17-04-2018, 12:31 PM المشاركة 6   
افتراضي


اسئلة ...

هل تأيدون استخدام بور سبلاي من نوع Hi-link الذي يعطي خرج 5v 600mA وهذي صورته




لتغذية المتحكم فقط , وتغذية الريليات تكون من خلال ملف 12V من المحول
وبهذي الحالة اتخلص من الرجوليتر 7805 ومن سلبياته واضع مكثف 22u على خط المايكرو مع مكثف 100n

ام تأيدون استخدام ادبترة 12v



مع ابقاء الرجوليتر 7805 ووضع مكثف 2200u على خط الدخل ؟؟؟


محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 230
نشاط [ محمد إلياس ]
قوة السمعة:0
قديم 19-04-2018, 07:21 AM المشاركة 7   
افتراضي


السلام عليكم
أحيانا تتسبب ملامسات الريليه في "فوضى" للمتحكم.
جرب هذا التوصيل على ملامسات كل ريليه بمفاومة 100 أوم ومكثف 100 نانو:

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

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 20-04-2018, 04:45 AM المشاركة 8   
افتراضي


البقاء لله و سبحان من له الدوام
بالنسبة لإستخدام وحدات تغذية من النوع المبين فالمسألة تعتمد أولا و أخيرا على الجهود المتوقع استخدامها
فلو ستضعه على الدخول يجب ان يتحمل المدى الكامل دون ان يتأثر خرجه خاصة و انت تستخدم 6 مراحل
أما لو ستضعه على الخرج المثبت فيجب أن يكون المكثف كبير بالقدر الذى يتحمل زمن نقل الريلاى من مستوى لآخر
أيضا انت لم تستخدم ما يسمى hysteresis وهو كما تعلم لتجنب تذبذب الريلاى قرب قيمة ما
فمثلا فى البرنامج
كود:
 else if( read_sensor_input>160 && read_sensor_input<169)
 {
  relay3=1;

  relay1=0; relay2=0; relay4=0; relay5=0; //relay6=0;
 }
 else if( read_sensor_input>169 && read_sensor_input<190)
 {
فماذا لو كانت القيمة حول 169 بالضبط؟
مرة سيعتبرها 169 ولا يفعل شيئا و التالية اكبر قليلا من 169 و التالية أقل قليلا من 169
لهذا سيتذبذب الريلاى
معذرة فى سؤال،
لماذا لا تضع تلغيمى للبورت مرة واحدة بدلا من أمر كل ريلاى على حدة؟؟

إضافة رد

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

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

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


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

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