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

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

الصورة الرمزية اشرف كمال2
اشرف كمال2
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2010
الدولة: القاهرة_مهندس كهرباء
المشاركات: 101
نشاط [ اشرف كمال2 ]
قوة السمعة:0
قديم 14-04-2012, 05:33 PM المشاركة 1   
افتراضي شرح التحكم فى السيرفو موتور Twitter FaceBook Google+



السلام عليكم و رحمة الله...

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

نعلم من الشروحات السابقة اننا اذا اردنا للسيرفو ان يتحرك لزاويه معينة درجة يجب اعطاءة نبضة مدتها من 0.7 ms الى 2.3 ms ليتحرك من 0الى 180 درجة.
ولكن كانت المشكلة هى اننا نريد تغيير قيمة النبضة باستمرار لضمان التحكم الدقيق فى زاوية الدوران وكان ذلك غير ممكن عند استخدام امر التأخير الزمنى
كود:
delay_us(1000)
.فكنا نلجا الى الاسلوب الذى تم شرحة سابقا.
اليوم اقدم لكم امر جديد يمكننا بسهولة من التحكم فى التاخير الزمنى باستمرار فى الازمنة الصغيرة (ميكرو ثانية) بسهولة.
كود:
Delay_Cyc( );
امر التاخير الزمنى
كود:
Delay_Cyc( );
يمكننا عمل تاخير زمنى يعتمد على زمن التعليمات الخاصة بمذبذب الميكرو كنترول.
فمثلا عند استخدام كريستاله 4 Mega Hertz فان زمن التعليمة يكون 1 ميكرو ثانية .
ولعمل تاخير زمنى بقيمة 100 ميكرو ثانية تكون القيمة المكتوبة داخل امر التاخير هى
كود:
Delay_Cyc (10 );
حيث ان المكتبة الداخلية تقوم بضرب القيمة المكتوبة * 10 .


وبالتالى اذا اردنا اعطاء نبضة لمدة 1.7 ميللى ثانية تكون القيمة داخل امر التاخير هى
كود:
1700 (µS)/10=170
So,
  Delay_Cyc (170);
اذن لعمل برنامج يمكننا فية تغيير عرض نبضة باستمرار يمكننا عمل متغير نضعة داخل امر التاخير و نقوم بزيادتة باستمرار .

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

كود:
while(1){
servo1=on;
Delay_Cyc(150);         // delay=150*10=1500 us=1.5 ms
servo1=off ;
delay_ms(1850);
}
البرنامج التالى يمكننا من التحكم فى السيرفو بدقة عالية لكل درجة

كود:
while(1){
                  delay=i*10;
                  delay=delay+n;
                  servo1=on;
                  Delay_Cyc(delay);         // delay=70*10=700 us=.7 ms
                  servo1=off;
                  delay_ms(20);
                  if(sw1==pressed){delay_ms(200);                 
                      n++;
                      if(n>=161){n=0;}
                      }}

الشرح:
نريد زيادة المتغيرdelay بحيث يزداد من 70 الى 230 بمقدار الوحدة.
قمنا بفرض متغيرين n,m .
عند الضغط على المفتاح n يزداد المتغير يمقدار الوحدة

if(sw1==pressed){delay_ms(200);
n++;

المتغير i القيمة الابتدائية له هى 7 لاحظ عند التعويض يكون كما يلى:
كود:
delay=i*10;          //delay=70
delay=delay+n ;       //  delay =70+1=71


و عند التعويض فى الناتج النهائى فى دالة التاخير


كود:
Delay_Cyc(delay);         كما قلنا الدالة تقوم بضرب المتغير داخلها *10 يكون الناتج التاخير النهائى هو 701 ميكرو ثانية اى 0.71 ميللى ثانية وبالتالى استطعنا الزيادة بمقدار بسيط جدا.


الشرط الاخير اذا كانت قيمة n اكبر من او تساوى 161 نقوم بتصفير القيمة مرة اخرى ولكن لماذا هذة القيمة بالذات؟؟

لاننا نريد ان تكون قيمة التاخير الزمنى بالميكرو ثانية محصورة مابين 700 و 2300 و الفرق بينهم هو عدد الخطوات المطلوب زيادتها مقسومة على 10 .


[

LEFT]
كود:
2300-700=1600/10=160  n(max)=160
[/LEFT]

وبالتالى يكون الكود النهائى للبرنامج كالتالى

كود:
// servo motor control
// author :ashraf kamal elhanahmy
// 14-april-2012
# define servo1 portb.f1
# define servo1_dir trisb.f1
# define servo2 portb.f3
# define servo2_dir trisb.f3
# define sw1 portb.f0
# define sw2 portb.f2
# define sw1_dir trisb.f0
# define sw2_dir trisb.f2
# define pressed 0
# define output 0
# define input 1
# define on 1
# define off 0
  char i;
  char n; unsigned short delay;
void init(){
            servo1_dir=output;
            servo2_dir=output;
            sw1_dir=input;
            sw2_dir=input;
            }

void main() {
  init();   i=7;
            n=0;
           while(1){
		  delay=i*10;
                  delay=delay+n;
                  servo1=on;
                  Delay_Cyc(delay);         // delay=70*10=700 us=.7 ms
                  servo1=off;
                  delay_ms(20);
                  if(sw1==pressed){delay_ms(200);
                  
                      n++;

                      if(n>=161){n=0;}
                      }  }   }


تحميل الكود و المحاكاة و الهيكس

على الرابط
هنا


التعديل الأخير تم بواسطة : اشرف كمال2 بتاريخ 14-04-2012 الساعة 05:53 PM
اعلانات

الصورة الرمزية اشرف كمال2
اشرف كمال2
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2010
الدولة: القاهرة_مهندس كهرباء
المشاركات: 101
نشاط [ اشرف كمال2 ]
قوة السمعة:0
قديم 14-04-2012, 05:59 PM المشاركة 2   
افتراضي


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

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

الصورة الرمزية اشرف كمال2
اشرف كمال2
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2010
الدولة: القاهرة_مهندس كهرباء
المشاركات: 101
نشاط [ اشرف كمال2 ]
قوة السمعة:0
قديم 14-04-2012, 08:35 PM المشاركة 3   
افتراضي


لمشاهدة السيرفو و هو يعمل على الرابط التالى:

http://www.youtube.com/watch?v=4YFZm...ature=youtu.be


عامر زيان
:: مهندس ::
تاريخ التسجيل: Apr 2012
المشاركات: 42
نشاط [ عامر زيان ]
قوة السمعة:0
قديم 14-04-2012, 08:47 PM المشاركة 4   
افتراضي


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

إضافة رد

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

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

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


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

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