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

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

توفي البغدادي
:: مهندس ::
تاريخ التسجيل: Apr 2011
المشاركات: 2
نشاط [ توفي البغدادي ]
قوة السمعة:0
قديم 18-01-2012, 06:17 PM المشاركة 1   
افتراضي طلب مساعده للتحكم ب Servo Motor Twitter FaceBook Google+



السلام عليكم
انا طالب مرحله رابعه هندسه اجهزه طبيه اعمل على مشروع تخرج وهو Surgical Robot Arm
قمت بشراء ذراع روبوت Areex Robot Arm Pro
واردت ان اعمل له دائره تحكم عبر Pic16f887 وربطه بالحاسبه عبر Parallel Port
والتحكم به ببرنامج من تصميمي بال Visual Basic
الروبوت يحتوي على 6 ماتورات Servo Motor بزاويه من -90 الى +90
المشكله التي لدي انه اريد ان اولد نبضات PWM متغيره من 500 مايكروثانيه الى 2500 مايكرو ثانيه وهي نفس النبضات التي يعمل عليها الماتورات
حيث ان 1500 مايكروثانيه هي زاويه 0
عملت دائره محاكيه بالبروتيوس وعملت له كود بلغه Micro C ولكن هناك عدة مشاكل بالكود
انا اريد ان يتم التحكم بالماتورات كالتالي
اولا برنامج الفيجوال بيسك عند الضغط على التحرك يمينا يقوم بارسال عنوان الماتور عبر 3 اطراف من Parallel Port مثلا الماتور الاول هو 001
وبنفس الوقت يقوم بارسال نبضه تخبره بالتحرك يمينا عبر طرفين من Parallel Port لليمين مثلا 01 ولليسار 10
يقوم البك بمعرفه اي ماتور واتجاه الحركه يمينا او يسارا ومن ثم يقوم باخراج نبضه PWM على الطرف المرتبط بالماتور المعني
نبضه متزايده او متناقصه حسب اختيارنا يمينا او يسارا الى ان يصل الحدود التي هي 500 و 2500 ويتوقف عن اصدار الاوامر
المشكله التي واجهتني انه لا يمكنني بدء الحركه من زاويه معينه متوقف عليها الماطور الا من الزاويه -90 اي عند الضغط على امر الاتجاه يمينا يقوم الماطور مباشره بالتحرك الى الزاويه -90 ومن ثم التناقص باتجاه اليمين
الكود
كود:
void attention()
{ char x ;
while (x>=0|x<=180){{if(portb.f0==1) break;
 porta.f0=1; vdelay_ms(x);
porta.f0=0; vdelay_ms(1);x=x+1;

 }  } }
 ////////////////////////////////////////
 void a1()
{ char x;
  while(x<=180){if(portb.f1==1) break;

 porta.f0=1; vdelay_ms(x);
porta.f0=0; vdelay_ms(1);x=x-1;
 }      }
 ////////////////////////////////////////
void main()
{  char x;x=90;
trisb.f0=1; trisb.f1=1; trisb.f2=1;trisb.f3=1;
trisb.f5=0; trisb.f6=0; trisb.f7=0;
trisa.f0=0;
while(1){ portb.f5=0;portb.f6=0;portb.f7=0;
if(portb.f0==0) {mm1: portb.f5=1;
                if(portb.f2==0) attention();

                if(portb.f0==0)goto mm1;
                }
if(portb.f1==0) {mm2: portb.f6=1;
                if(portb.f2==0) a1();
                if(portb.f1==0)goto mm2;
                }
if(portb.f3==0) { porta.f0=1;delay_ms(90);
 porta.f0=0;delay_ms(90);
                }





}
}

اعلانات

الصورة الرمزية Abdulla873
Abdulla873
:: مهندس متميز ::
تاريخ التسجيل: Sep 2009
الدولة: Baghdad, Iraq
المشاركات: 504
نشاط [ Abdulla873 ]
قوة السمعة:0
قديم 19-01-2012, 05:54 AM المشاركة 2   
افتراضي


شوف حبي , غير عرض ال Pulse عندك , حاول ان تتحكم بالماطور عن طريق ال
Pulse Generator , وشوف يشتغل عندك لو لا.
لان اني عندي يشتغل 100 / 100 , وهذا مثال:
http://www.pic-tronics.com/Edge-Dete...t-Tracking.php

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

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

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

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


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

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