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

   

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



أخواني أنا صراحه أول مره أتعمل مع محركات stepper لكني أفهم طريقه عمله

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

اعلانات

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


اهلا استاذ حسن هادي كيف حالك يا اخي
استاذ حسن الذي نريده من المحرك الخطوي سوف نربطه في منفذ الطابعة القديم lpt هذا المنفذ نستخرج منه سلكين يمثلان الاسويتج في برنامج المحاكاة
الان العمل اذا فرضنا ان سلك الاول يمثل الخطوات او plus والسلك الثاني يمثل الاتجاه dir
اذا قام الحاسب باعطاء مثلا خمسين نبضه سوف يدور المحرك بقدر خمسين خطوه
ناتي الى اتجاه الدوران كيف نحدده لتحديده كالاتي
اذا كان السلك dir واحد منطقي مستمر او مثل سويتج مغلق على طول فالمحرك يدور باتجاه عقرب الساعة اما اذا كان السلك dir صفر منطقي اي مفتاح مفتوح فان المحرك سيدور عكس قرب الساعة
الخطا الذي حدث في الكود الذي اعطيتنياه هو عند الغط مرتين على dir وبعدها عند الضغط على plus يعطي خطوه بالعكس واحده فقط
هذا مخطط يوضح ما اقول ارجو ان تجربه لاكن هنا استخدمت متكاملتين جاهزتين وهي l298 وضيفتها تضخيم الطاقة و لتشغيل المحرك و l297 وضيفتها توزيع النبضات وهي التي نريد نصنع برنامج مثل عملها ارجو ان تطبق وتنتبه الى l297 كيف تعمل
http://www.mediafire.com/view/xc6n7n...ey/Capture.jpg

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

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


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


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


اهلا استاذ حسن هادي كيف حالك يا اخي
استاذ حسن الذي نريده من المحرك الخطوي سوف نربطه في منفذ الطابعة القديم lpt هذا المنفذ نستخرج منه سلكين يمثلان الاسويتج في برنامج المحاكاة
الان العمل اذا فرضنا ان سلك الاول يمثل الخطوات او plus والسلك الثاني يمثل الاتجاه dir
اذا قام الحاسب باعطاء مثلا خمسين نبضه سوف يدور المحرك بقدر خمسين خطوه
ناتي الى اتجاه الدوران كيف نحدده لتحديده كالاتي
اذا كان السلك dir واحد منطقي مستمر او مثل سويتج مغلق على طول فالمحرك يدور باتجاه عقرب الساعة اما اذا كان السلك dir صفر منطقي اي مفتاح مفتوح فان المحرك سيدور عكس قرب الساعة
الخطا الذي حدث في الكود الذي اعطيتنياه هو عند الغط مرتين على dir وبعدها عند الضغط على plus يعطي خطوه بالعكس واحده فقط
هذا مخطط يوضح ما اقول ارجو ان تجربه لاكن هنا استخدمت متكاملتين جاهزتين وهي l298 وضيفتها تضخيم الطاقة و لتشغيل المحرك و l297 وضيفتها توزيع النبضات وهي التي نريد نصنع برنامج مثل عملها ارجو ان تطبق وتنتبه الى l297 كيف تعمل
http://www.mediafire.com/view/xc6n7n...ey/Capture.jpg
السلام عليكم
اوكي ايضا سويج دايركشن 1 منطقي يدور محرك بأتجاه عقرب ساعه و 0 منطقي عكس عقرب الساعه
سيتم التعديل الكود على هذا الاساس


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 28-09-2014, 03:58 PM المشاركة 37   
Thumbs up


السلام عليكم
تم تعديل الكود
اذا كان سويج dir==0 فمحرك يدور عكس اتجاه عقارب الساعه
اذا كان سويج dir==1 فمحرك يدور مع اتجاه عقارب الساعه

كود:
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  ;
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 (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         = 0xA0;
  OPTION_REG         = 0x84;
  while(1)
         {
            if(sw_dir==1)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;}

                                   }
          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;
               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;

                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;
                            }

               }
         }
}
ملاحظه // تردد كرستاله 4 ميكا هيرتز

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

طبعا اذا تريد 10 خطوات اضغط على سويج puls
10 مرات واذا تريد 20 اضعط على سويج 20 مره وهكذا

ممكن سؤال ماهو البرنامج الي تستخدموه في كمبيوتر واين منفذ الطابعه صراحه لم تعامل معه

http://up.top4top.net/downloadf-top4...d7501-rar.html
تحياتي


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


نعم استاذ حسن هادي لاكن عندما يكون الدايركشن واحد منطقي يجب ان لايدور المحرك الا عند اعطاء نبضات من سويج الاستيب وكذالك عندما يكون صفر ايظا لايتحرك المحرك حتى نعضي اليه نبضات من سويج الاستيب ليدور بالعكس وهكذا


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


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


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


نعم استاذ حسن هادي لاكن عندما يكون الدايركشن واحد منطقي يجب ان لايدور المحرك الا عند اعطاء نبضات من سويج الاستيب وكذالك عندما يكون صفر ايظا لايتحرك المحرك حتى نعضي اليه نبضات من سويج الاستيب ليدور بالعكس وهكذا
نعم هو كذلك راجع مشاركه 37



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