كيفية ربط محرك سيرفو مع متحكم PIC16F877A

في هذا المشروع ، سوف تتعلم كيفية تعامل محرك سيرفو مع متحكم PIC16F877A. برمجة للتحكم في المحرك المؤازر ووصلات الأجهزة لمحرك سيرفو مع متحكم PIC16F877A. لنبدأ بالمقدمة الأساسية للمحرك المؤازر ، ثم سأنتقل إلى مخطط دائرته وبرمجته. 

ما هو محرك سيرفو؟

المحرك المؤازر هو نوع خاص من المحركات يعمل وفقًا للتعليمات المعطاة. إنه يوفر دقة زاوية ، مما يعني ، على عكس المحركات الكهربائية الأخرى التي تستمر في الدوران حتى يتم تطبيق الطاقة عليها ولا تتوقف إلا عند إيقاف تشغيل الطاقة ، يدور محرك سيرفو فقط إلى درجة معينة أو حتى يكون مطلوبًا ثم يتوقف المحرك وينتظر التعليمات التالية للقيام بمزيد من الإجراءات. يتم التحكم في المحركات المؤازرة بمساعدة آلية المؤازرة. يتم تحديد دورانها الزاوي وحركتها النهائية من خلال ردود الفعل على الموقع. يحدد الإدخال إلى خط التحكم الخاص به الموضع المطلوب لعمود الإخراج.

مخطط الدائرة لربط محرك سيرفو مع PIC16F877A:

إنه رسم تخطيطي بسيط للغاية. يتم توصيل سلك التحكم للمحرك المؤازر مباشرة بالدبوس RB0 الخاص بالمتحكم الدقيق. سيوفر هذا الدبوس الإزاحة الزاوية المطلوبة للمحرك. في هذا المشروع ، لنفترض أننا نعمل بمحرك مؤازر يقتصر دورانه الزاوي على 0 درجة - 180 درجة ، ويمكننا التحكم في دوران المحرك ضمن هذا الحد بدقة قصوى باستخدام نبضة متغيرة عرضها للوصول إلى المطلوب زاوية.

 


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

كود

void Rotation0() //0 Degree
{
unsigned int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
Delay_us(800); // pulse of 800us
PORTB.F0 = 0;
Delay_us(19200);
}
}

void Rotation90() //90 Degree
{
unsigned int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
Delay_us(1500); // pulse of 1500us
PORTB.F0 = 0;
Delay_us(18500);
}
}

void Rotation180() //180 Degree

{
unsigned int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
Delay_us(2200); // pulse of 2200us
PORTB.F0 = 0;
Delay_us(17800);
}
}

void main()
{
TRISB = 0; // PORTB as Ouput Port
do
{
Rotation0(); //0 Degree
Delay_ms(2000);
Rotation90(); //90 Degree
Delay_ms(2000);
Rotation180(); //180 Degree
}while(1);
}


 

إرسال تعليق

أحدث أقدم