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

   

البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 01-03-2015, 09:22 PM المشاركة 9   
افتراضي



البرنامج بيشتغل معى تمام على البروتوس لكن فى الدائرة الحقيقية بيشتغل بس كأن الاشارة معكوسة زى ما قولت فى المشاركة السابقة

هل فى خطأ فى توصيل الموسفيت والموتور والا ايه المشكلة ؟؟

ودى الدائرة على بروتوس 7.7

http://www.4shared.com/file/CCZqIDJhce/dc_online.html

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 01-03-2015, 09:42 PM المشاركة 10   
افتراضي


لا .. من خرج البيك غير معكوسة ن لاحظ:

بالنسبة للملف أظن انك عامل المشروع على بروتوس 8 وهو غير منصب عندي حاليا ، لكن مو مشكلة أنا سبق ونفذته على بروتوس 7.10 .
اخي جرب هذا الكود
كود:
void main(){
// variables

int x[5]={0, 1, 2, 4, 8};
char  i = 1 , ss=0 ;
adcon1=6;
trisa = 0; trisb = 0; trisc = 0; trisd = 255; trise = 0;
porta = 0; portb = 0; portc = 0; portd = 0; porte = 0;
PWM1_Init(500); //initialise PWM1 at 5KHz
PWM1_Start(); //start PWM1
while(1) { // start infinit loop
  portb.f7=1; //signal to motor forward direction
  if (portd.f2 == 1)  // if the push button is pushed
    {
     portb = x[i];   // indicator led according to motor speed
     if(i ==1 && ss==0)
          {
           ss=1;
           PWM1_Start();
          }

     PWM1_Set_Duty(i*255/4); // set duty cycle from 25% to 100%
     i++;
     delay_ms(200);
    }
  if (i > 4) 
            {
             i = 0 ;
             ss=0;
             PWM1_Stop();
            }

} //end loop
} //end main
يعني انت لازم توقف PWM وحاول ايضا تجعل طرف ccp1 =0 لان احتمال يتوقف الى جهد 5 فولت

ايضا لازم توقف خاصيه انلوك يعني adcon1=6

اخي مافائده buffer لاظنه ينفع !!
تحياتي

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

Logic
:: عضو فضي ::
تاريخ التسجيل: Mar 2014
المشاركات: 682
نشاط [ Logic ]
قوة السمعة:
قديم 01-03-2015, 10:41 PM المشاركة 11   
افتراضي


وهل يمكن تنفيذ الدائرة بدون المتكاملة L293 ??
إذا المطلوب كما جاء في دائرتك : محرك يدور في اتجاه واحد ، يمكن.. بلا L293
و كما قال الأخ حسن بلا buffer ايضا.
جرب هذه التوصيلة البسيطة بدون ميكروكونترلر إذا نجحت التجربة ممكن تشغل الدائرة المجربة بالميكروكونترولر:

وهذا فلاش بسيط للتوضيح:


البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 01-03-2015, 10:44 PM المشاركة 12   
افتراضي


يعني انت لازم توقف PWM وحاول ايضا تجعل طرف ccp1 =0 لان احتمال يتوقف الى جهد 5 فولت

ايضا لازم توقف خاصيه انلوك يعني adcon1=6

اخي مافائده buffer لاظنه ينفع !!
تحياتي
ما فائدة انى اوقف خاصية انلوك ؟؟ انا لا استخدم adc فى المشروع فهل لازم انى اوقفه ؟؟ معلش اصل انا لسة مبتدئ فى البرمجة وغير مُـلم بكل شئ


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


ما فائدة انى اوقف خاصية انلوك ؟؟ انا لا استخدم adc فى المشروع فهل لازم انى اوقفه ؟؟ معلش اصل انا لسة مبتدئ فى البرمجة وغير مُـلم بكل شئ
عفوا تم تصحيح الكود
بس تبقى مشكله وحيده هي اختيار تردد pwm الصحيح لانك مختار 500هيرتز
كود:
void main(){
// variables

char x[5]={ 1, 2, 4, 8};
unsigned int duty=0;
char  i = 0 , ss=0  , flag=0;
adcon1=6;
 trisb = 0; trisc = 0; trisd.f2 =1;
  portb = 0; portc = 0;
PWM1_Init(500); //initialise PWM1 at 5KHz
while(1) { // start infinit loop

  if (portd.f2 == 1) flag=1;  // if the push button is pushed
  if(portd.f2 == 0  && flag==1)
    {
     i++;
     flag=0;
     if(i ==1 && ss==0)
          {
           ss=1;
           portb.f7=1; //signal to motor forward direction
           PWM1_Start();
          }
     if (i >=5)
            {
             i = 0 ;
             portb =0;   // indicator led according to motor speed
             ss=0;
             PWM1_Stop();
            }
     else portb =(portb & 0xF0)+x[i-1];   // indicator led according to motor speed
      duty= (i*255)/4;
      PWM1_Set_Duty(duty); // set duty cycle from 25% to 100%
    }



} //end loop
} //end main
يمكن عدم كتابه adcon1=6 لانك لم تستخدم بورت A ولكن طالما لاتستخدم انلوك فالافضل اضافه وان لم يؤثر


البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 01-03-2015, 10:50 PM المشاركة 14   
افتراضي


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

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

اما استخدام ال buffer فالدكتور المشرف على المشروع قال لحماية الميكروكونترولر من الجهد 12 فولت


البندقدارى
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 60
نشاط [ البندقدارى ]
قوة السمعة:
قديم 01-03-2015, 10:53 PM المشاركة 15   
افتراضي


عفوا تم تصحيح الكود
بس تبقى مشكله وحيده هي اختيار تردد pwm الصحيح لانك مختار 500هيرتز
كود:
void main(){
// variables

char x[5]={ 1, 2, 4, 8};
unsigned int duty=0;
char  i = 0 , ss=0  , flag=0;
adcon1=6;
 trisb = 0; trisc = 0; trisd.f2 =1;
  portb = 0; portc = 0;
PWM1_Init(500); //initialise PWM1 at 5KHz
while(1) { // start infinit loop

  if (portd.f2 == 1) flag=1;  // if the push button is pushed
  if(portd.f2 == 0  && flag==1)
    {
     i++;
     flag=0;
     if(i ==1 && ss==0)
          {
           ss=1;
           portb.f7=1; //signal to motor forward direction
           PWM1_Start();
          }
     if (i >=5)
            {
             i = 0 ;
             portb =0;   // indicator led according to motor speed
             ss=0;
             PWM1_Stop();
            }
     else portb =(portb & 0xF0)+x[i-1];   // indicator led according to motor speed
      duty= (i*255)/4;
      PWM1_Set_Duty(duty); // set duty cycle from 25% to 100%
    }



} //end loop
} //end main
يمكن عدم كتابه adcon1=6 لانك لم تستخدم بورت A ولكن طالما لاتستخدم انلوك فالافضل اضافه وان لم يؤثر
طيب فى طريقة لحساب تردد ال PWM مع العلم ان تردد الكريستالة المستخدمة 8 ميجا هيرتز


Logic
:: عضو فضي ::
تاريخ التسجيل: Mar 2014
المشاركات: 682
نشاط [ Logic ]
قوة السمعة:
قديم 01-03-2015, 11:05 PM المشاركة 16   
افتراضي


لأ لازم باستخدام ميكروكونترولر لانى ازاى هاتحكم فى سرعة الموتور ( اربع سرعات على الاقل ) باستخدام طريقة ال PWM .. هى دى فكرة المشروع .

اما استخدام ال buffer فالدكتور المشرف على المشروع قال لحماية الميكروكونترولر من الجهد 12 فولت
1- طبعا أخي .. ستستخدم الميكروكونترلر للتحكم في سرعة المحرك بواسطة إشارة PWM هذا واضح جدا .
اقتراح بدون ميكروكونترولر للتجربة هو فقط بعد نجاح التجربة تصبح الدائرة كما يلي:
http://cdn.top4top.net/i_fc4f0193571.png
2- 7400 لن يحمي المتحكم كثيرا .. للحماية أفضل طريقة استخدام عازل ضوئي وفقط عند الضرورة كهذا المثال:
http://www.qariya.info/vb/showpost.p...86&postcount=6



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