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

   

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



شكرا لك اخ حسن ما تاثير ذالك على المحرك ؟؟
أعتقد انك عندما تتعامل مع محرك الخطوه وتتحكم بطريقه النصف الخطوه هو عندك 8 خطوات تبدء من 0 الى 7 وبتالي لربما هو يريد تحديد رقم خطوه بالضبط
تحياتي

اعلانات

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


في هذا الكود
تمت أضافه مفتاحين للتحكم بالسرعه المحرك

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

كود:
sbit sw_puls at         Rb1_bit;
sbit sw_dir at         Rb0_bit;
sbit sw_speed_inc at         Rb2_bit;
sbit sw_speed_dec at         Rb3_bit;
sbit sw_speed_cont at         Rb4_bit;

bit kk1 , kk2 , kk3 , kk4 , kk5;
unsigned int cont , time=10 , puls2=0 ;
char state=0 ,puls1=0, run=0 , state_run=0 , negative=0 , cont_run;
short value=0;
#define motor_stepper  porta=(porta &0xF0)
//Timer0
//Prescaler 1:32; TMR0 Preload = 100; Actual Interrupt Time : 4.992 ms

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

void Interrupt()
{
  if(INTF_bit==1)
        {
         INTF_bit=0;
         puls2++;

        }
  if (TMR0IF_bit)
          {
           TMR0IF_bit         = 0;
           TMR0                 = 100;
           //Enter your code here
           cont++;
           if(kk5==1)cont_run++;
          }
}


void main()
{
  //sw_dir_dir=1;
  //sw_puls_dir=1;
  TRISA.f0=0;
  TRISA.f1=0;
  TRISA.f2=0;
  TRISA.f3=0;
  motor_stepper= 0 ;
  trisb.f0=1;
  trisb.f1=1;
  trisb.f2=1;
  trisb.f3=1;
  trisb.f4=1;
  
  InitTimer0();
  INTCON         = 0xB0;
  OPTION_REG         = 0xC4;
  while(1)
         {
            if(puls2>=2)value=-1;
            else value=1;
            
          if(sw_speed_inc==1 && kk3==0)kk3=1;
          if(sw_speed_dec==1 && kk4==0) kk4=1;
          if(!sw_speed_inc && kk3==1){ time++; kk3=0;}
          if(!sw_speed_dec && kk4==1){ if(time<=1)time--; kk4=0;}
          
          if(kk1==0 && sw_puls==1)kk1=1;
          if(sw_speed_cont==1)kk5=1;
          if(!sw_speed_cont && cont_run>25)
                                   {
                                    kk5=0;
                                    cont_run=0;
                                    state_run=~state_run;
                                    if(state_run==255){ run=1;INTE_bit=0;}// disable interupts from portb,
                                    else INTE_bit=1;// enable interupts from portb,

                                   }
          if( (!sw_puls && kk1==1 ) || run==1)
                                   {
                                   if(value==1)
                                         {
                                          if(puls1>0 && negative==2){puls1--;state=2;}
                                          else {puls1++;state=1; negative=1;}

                                         }
                                   else if(value==-1)
                                              {
                                               if(puls1>0 && negative==1){puls1--;state=1;}
                                               else {puls1++;state=2; negative=2;}
                                              }

                                   if(puls1>=8)puls1=0;
                                   kk1=0;
                                   run=0;
                                  }

          


          if(cont>time && state==1)
               {
                cont=0;

                state=0;
                 if(state_run==255)run=1;
                 else puls2=0;
               switch(puls1)
                            {
                             case 0:motor_stepper |=9;break;
                             case 1:motor_stepper |=1;break; //-45
                             case 2:motor_stepper |=3;break; //-90
                             case 3:motor_stepper |=2;break;  //-135
                             case 4:motor_stepper |=6;break; //-180
                             case 5:motor_stepper |=4;break; //-225
                             case 6:motor_stepper |=12;break;//-270
                             case 7:motor_stepper |=8;break;//-315

                             default:break;
                            }

               }
            else if( cont>time  && state==2)
               {

                cont=0;
                state=0;
                if(state_run==255)run=1;
                else puls2=0;
                switch(puls1)
                            {
                             case 0:motor_stepper |=9;break; //0
                             case 1:motor_stepper |=8;break; //45
                             case 2:motor_stepper |=12;break; //90
                             case 3:motor_stepper |=4;break;  //135
                             case 4:motor_stepper |=6;break; //180
                             case 5:motor_stepper |=2;break; //225
                             case 6:motor_stepper |=3;break; //270
                             case 7:motor_stepper |=1;break;//315

                             default:break;
                            }

               }
         }
}
http://up.top4top.net/downloadf-top4...46151-rar.html

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

النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 27-09-2014, 02:21 PM المشاركة 27   
افتراضي


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


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 27-09-2014, 07:51 PM المشاركة 28   
افتراضي


ألف ألف شكر لك أخي حسن على عملك الجبار هذا.
جاري التجربة.
ربما أحتاج منك كتابة كود مماثل ولكن لغير أيسية إن أمكن(فضلاً لا أمراً)


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 27-09-2014, 07:59 PM المشاركة 29   
افتراضي


ألف ألف شكر لك أخي حسن على عملك الجبار هذا.
جاري التجربة.
ربما أحتاج منك كتابة كود مماثل ولكن لغير أيسية إن أمكن(فضلاً لا أمراً)
بالخدمه أخي العزيز


الصورة الرمزية hussien1995
hussien1995
:: عضو فضي ::
تاريخ التسجيل: Nov 2012
الدولة: syria
المشاركات: 764
نشاط [ hussien1995 ]
قوة السمعة:
قديم 27-09-2014, 08:37 PM المشاركة 30   
افتراضي


شكراً جزيلاً أخي حسن على حسن خلقك.
هناك مشكلة بالكود الأول فعند ضغط السويتش الأول يعمل المحرك بإتجاه اليسار وعند ضغط السويتش الثاني بشكل مستمر والضغط على السويتش الأول بشكل نبضات تبقى الخطوة وبنفس الإتجاء ولاتعود بالعكس لعكس إتجاه المحرك.
الرجاء النظر للمحاكاة عن طريق برنامج بروتوس بهذا الرابط.
http://www.gulfup.com/?cFwnda


النمرالفولاذي
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
المشاركات: 134
نشاط [ النمرالفولاذي ]
قوة السمعة:
قديم 27-09-2014, 10:44 PM المشاركة 31   
افتراضي


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


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


شكراً جزيلاً أخي حسن على حسن خلقك.
هناك مشكلة بالكود الأول فعند ضغط السويتش الأول يعمل المحرك بإتجاه اليسار وعند ضغط السويتش الثاني بشكل مستمر والضغط على السويتش الأول بشكل نبضات تبقى الخطوة وبنفس الإتجاء ولاتعود بالعكس لعكس إتجاه المحرك.
الرجاء النظر للمحاكاة عن طريق برنامج بروتوس بهذا الرابط.
http://www.gulfup.com/?cFwnda
اشكرك اخي حسن هادي على المجهود الطيب ياطيب لاكن المشكلة مثل ماقال الاخ حسين في عكس الاتجاه الاكواد يحتاج لها فهم ودارسه وتطوير لكي تطابق العمل المطلوب ساحاول ان اجد حل لمشكلة عكس الاتجاه وكذالك المخارج يجب ان تعطي نبضه عند توزيع نبضات الاستيب وليس تعمل الى ان تاتي النبضه التالية حتى يعمل المخرج البعده
نتيجه جدا مرضية اشكرك اخي وعزيزي مره اخرى على حسن اهتمامك
السلام عليكم
الكود يعمل بشكل جيد
سأشرح لكم كيفيه عمل محاكاه
1- اذا ضغط على سويج dir يعني ضغطه مستمره واحده فقط يعني محرك يدور بأتجاه عكس عقارب الساعه ولكن لن يدور الى ان تضغط
* اذا ضغط سويج puls راح يدور خطوه واحده فقط لكي يدور مره اخرى أضغط على سويج puls فيدور خطوه أخرى وهكذا

** اما اذا ردت يستمر محرك بالدوران اضغط على سويج continue وهنا محرك يدور بأستمرار ولافائده هنا لمفتاح سويج puls


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

طبعا يمكنك وضع مولد النبضات في محاكاه لترى ذلك

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

هذا فيديو للمحاكاه
http://cdn.top4top.net/d_90c42943c01.mp4
سنحاول حل اي مشكله بمشيئه الله
تحياتي


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 28-09-2014 الساعة 06:14 AM


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