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

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

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 10-09-2014, 05:17 PM المشاركة 105   
افتراضي



وأنا معاك ان شالله حتى تصل الى هدفك أخي

أخي
1- أنا أستخدمت مقاومه 220K بدلا من مقاومات 100K مربوطه على قنطره
2- تذكر أخي انه اول ماشغل دائره عندك ليد على RB4 يعمل فلاشنك وبعدها تتغير شده حسب شده الاضاءه
3- وهذه نقطه مهمه جدا تأكد من خط L موصول مصباح وطرف الثاني من مصباح موصول الى A2 من تراياك اما خط N موصول الى مقاومه 220k وطرف ثاني مربوطه مع قنطره وسبب في ذلك هو تحيز دائره البوايه للتراياك وداياك موجود في فوتوكبلر هذه نقطه مهمه بدونها لن يعمل معاك تراياك مطلقا حيث أكتشفت هذه نقطه أثناء الفحص

او يمكنك القول انه يتم ربط مصباح الى N وطرفه اخر الى A1 من التراياك اما L فيربط الى داياك عبر مقاومه طبعا وداياك الى G

اي انا دائره تحيز التراياك مهمه

لربما مشكلتك محصوره في نقطه 3
تحياتي
الحمد لله الدي انعم علي بنعمة لا تعدي ولا تحصي
هو انت اخي فقد اشتغلت اخي والفضل لله ثم انت اخي
لقد كان المشكل هو اوبتوكابلر

اعلانات

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 10-09-2014, 05:21 PM المشاركة 106   
افتراضي


ممكن تشرح لي الكود
جزاء الله الف اجر وخير وبركة

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 10-09-2014, 05:31 PM المشاركة 107   
افتراضي


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

أخي هل يعمل بشكل ممتاز
ماذا أختاريت من فوتوكبلر
تحياتي


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 10-09-2014, 10:04 PM المشاركة 108   
افتراضي


حمدلله أخي فعلا فرحت لاجلك وتدلل سوف اشرح لكم كود ان شالله

أخي هل يعمل بشكل ممتاز
ماذا أختاريت من فوتوكبلر
تحياتي
نعم اخي يعمل جيدا شكرا مرة اخرى


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


ممكن تشرح لي الكود
جزاء الله الف اجر وخير وبركة
السلام عليكم
شرح الكود
كود:
bit oldstate, oldstate1;
sbit sw_inc at RB1_bit;
sbit sw_inc_dir at TRISB1_bit;

sbit sw_dec at RB2_bit;
sbit sw_dec_dir at TRISB2_bit;

sbit trigger at RB3_bit;
sbit trigger_dir at TRISB3_bit;

sbit led_check at RB4_bit;
sbit led_check_dir at TRISB4_bit;

char zero_crosing=0, ratio=50 ,x;

unsigned int time=0 , cont=0;

//Timer0
//Prescaler 1:128; TMR0 Preload = 100; Actual Interrupt Time : 19.968 ms

//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG         = 0x86;
  TMR0                 = 100;
}


void interrupt()
{
 if(INTCON.INTF)
                {
                 INTCON.INTF=0;
                 tmr0=100;
                 zero_crosing=1;
                }
  if (TMR0IF_bit){
    TMR0IF_bit         = 0;
    TMR0                 = 100;
    //Enter your code here
  }

}

void main()
{
  sw_dec_dir=1; // input
  sw_inc_dir=1; // input
  led_check_dir=0; //output
  trigger_dir=0;//output
  led_check=0;//led off
  oldstate=0;
  oldstate1=0;
  intcon=0xB0;
  InitTimer0();
  for( x=0;x<6;x++) {led_check=~led_check; delay_ms(500); }
while(1)
         {
          if(zero_crosing)
                       {
                         zero_crosing=0;
                         led_check=1;
                         time=0;
                         cont=ratio*100;
                         while(time<cont)
                                {
                                 time=128*(tmr0-100);
                                }
                         led_check=0;
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                       }


        //Button to decrease the voltage
        if(sw_dec)  oldstate=1;
        if(!sw_dec && oldstate)
                     {
                      if(ratio <85) ratio +=1; //
                      oldstate = 0;
                     }

       //Button to increase the voltage
       if(sw_inc)  oldstate1=1;
       if(!sw_inc && oldstate1)
                    {
                     if(ratio>5)ratio -=1;
                     oldstate1 = 0;
                    }

     }

}
تعريف السويجات
كود:
sbit sw_inc at RB1_bit;
sbit sw_inc_dir at TRISB1_bit;

sbit sw_dec at RB2_bit;
sbit sw_dec_dir at TRISB2_bit;
تعريف ليد
كود:
sbit led_check at RB4_bit;
sbit led_check_dir at TRISB4_bit;
تعريف مرسل النبضات
كود:
sbit trigger at RB3_bit;
sbit trigger_dir at TRISB3_bit;
وفي قائمه main
جعلنا سويجات مداخل وليد ومرسل النبضات مخرج وقمنا بتصفير مخارج
كود:
sw_dec_dir=1; // input
  sw_inc_dir=1; // input
  led_check_dir=0; //output
  trigger_dir=0;//output
  led_check=0;//led off


ومن ثم نهيئه تايمر 0 وطبعا من خلال البرنامج الذي أسمه TimerCalculator
http://www.mikroe.com/timer-calculator/
حيث جعلنا انتربت لكل 20ms وبالطبع نحن لن نصل الى انتربت لان اساسا زمن التحكم هو 10ms اي نريد فقط من تايمر 0 أحتساب زمن الحقيقي
وهذا الكود يستنتج من البرنامج TimerCalculator
كود:
//Timer0
//Prescaler 1:128; TMR0 Preload = 100; Actual Interrupt Time : 19.968 ms

//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG         = 0x86;
  TMR0                 = 100;
}
طبعا الكود يستنتج
كود:
INTCON	 = 0xA0;
وبالطبع INTCON اريد اضيف تفعيل انتربت على RB0 لذا اصبح
كود:
intcon=0xB0;
اي اصبح انتربت للتايمر0 وانتربت على RB0


اما هذا الكود لتشغيل ليد فلاشنك 6 مرات فقط لفحص البرنامج
كود:
for( x=0;x<6;x++) {led_check=~led_check; delay_ms(500); }


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


طبعا يتم التحكم بعرض النبضه ومنها بزاويه القدح للتراياك عن طريق هذين سويجين
كود:
//Button to decrease the voltage
        if(sw_dec)  oldstate=1;
        if(!sw_dec && oldstate)
                     {
                      if(ratio <85) ratio +=1; //
                      oldstate = 0;
                     }

       //Button to increase the voltage
       if(sw_inc)  oldstate1=1;
       if(!sw_inc && oldstate1)
                    {
                     if(ratio>5)ratio -=1;
                     oldstate1 = 0;
                    }
حيث عند ضغط على sw_dec سوف يصبح oldstate=1 وبتالي يبقى الشرط
كود:
 if(!sw_dec && oldstate)
غير متحقق الى ان يتم رفع يدك من سويج وعندها يتم نقصان متغير الذي اسمه ratio وطبعا هذا متغير كل 1=100us

اي ان زاويه القدح تحسب هكذا
180 * =ratio*100/10000
حيث 10000 تعني 10ms اي نقسم زمن نبضه على زمن نصف موجه مضروبه في زاويه 180
=ratio*1.8 وهذا يعني كل ratio=1 يعادل درجه تحكم 1.8

ولكي يعمل التراياك فانه يحتاج الى نقطه الصفر وهي عند زاويه 180 و360 درجه اي ان دائره كشف الصفر ترسل النبضه الى RB0 ليحدث الانتربت ويصبح عندها zero_crosing=1
عندها يدخل مايكرو في تنفيذ هذا الكود وهو كود التحكم بزاويه التراياك
كود:
if(zero_crosing)
                       {
                         zero_crosing=0;
                         led_check=1;
                         time=0;
                         cont=ratio*100;
                         while(time<cont)
                                {
                                 time=128*(tmr0-100);
                                }
                         led_check=0;
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                       }
حيث صفرنا zero_crosing=0 لكي ينفذ الكود مره واحده فقط لكل نبضه

led_check=1 هنا يضيء ليد

time=0 هنا صفرنا عداد زمن انتظار قبل ارسال نبضه القدح


cont=ratio*100 هنا نحتسب الزمن الذي عنده يتم ارسال النبضه وتلاحظ انه في برنامج وضعت قيمه ratio=50 , وبتالي اول مايعمل البرنامج مصباح يضيء عند نصف الشده تقريبا اي ان 50 تعني 50%
=================================

كود:
while(time<cont)
                                {
                                 time=128*(tmr0-100);
                                }
حيث يحسب time من هذه معادله
time=4/F *(tmr0-initial value)*Prescaler
حيث f=4Mhz و Prescaler=128 و initial value=100 (( راجع كود تفعيل تايمر0))

اما في هذا الكود فأنه يدخل في لوب طالما زمن اقل من زمن مطلوب وبالطبع تايمر0 مستمر بالعد وبتالي قيمه time تزداد الى ان تصل الى قيمه اعلى من cont فيخرج من لوب فعندها يطفئ ليد led_check=0 وبتالي هنا ايضا شده اضاءه في هذا ليد تتغير عندما يتم التحكم للدلاله على انه كود التحكم يعمل بشكل الصحيح

اي انه اذا نسبه ratio=5% معناها أضاءه عاليه بنسبه 95% لانه عند ratio=5% يعني زمن 0.5ms وبتالي راح تزداد شده اضاءه

اما ratio=70% تعني زمن يتجاوز 7ms اي اه عند 7ms يتم تشغيل التراياك وبتالي تجد زياده في شده ليد لانه سوف يبقى شغال لمده 7ms ومن ثم ينطفئ فقط 3ms اما نسبه الي يضيئ فيها مصباح هي عند 30% وبتالي ستجده شده ضعيفه

طبعا يمكن التعديل في الكود بحيث تجعل ratio=30% يعني شده اضائه 30% ايضا ولكن لاأجد له داعي لذلك لانه بالنهايه سوف يتم التحكم بشده مصباح


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 11-09-2014 الساعة 04:36 PM

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 11-09-2014, 05:11 PM المشاركة 111   
افتراضي


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


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 13-09-2014, 11:27 PM المشاركة 112   
افتراضي


لم افهم لمادا اخترت 20 ميلي تانية

حيث جعلنا انتربت لكل 20ms وبالطبع نحن لن نصل الى انتربت لان اساسا زمن التحكم هو 10ms اي نريد فقط من تايمر 0 أحتساب زمن الحقيقي

هل تقصد انه عندما تكشف دائره الصفر ترسل النبضه الى RB0 لكي يحسب المؤقت 10 ميلي تانية

إضافة رد

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

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

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


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

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