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

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

ملاك الظلام
:: مهندس ::
تاريخ التسجيل: Oct 2011
المشاركات: 37
نشاط [ ملاك الظلام ]
قوة السمعة:0
قديم 12-06-2012, 08:09 AM المشاركة 1   
افتراضي التحكم بسرعة ال encoder بواسطة ال pulses Twitter FaceBook Google+



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

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


unsigned int count=0; // This count use in interrupt routine
unsigned countOld = 0; // Counter for the previous time
unsigned int dutyCycle =100;
unsigned int difference;
//float speed;
void interrupt() // enter when RB0 Falling
{

//ing B0 and B1, Position and Direction Find
//{
count++; // If "+" direction
//}
//else // If "-" direction
//{
//count--;
//}
INTCON.INTF=0; // Clear flag
}

void main()
{


TRISB = 0xff;

TRISA = 0;
PORTA = 0; // turn all LEDs OFF

TRISC = 0; // Set PORTC to $FF
PORTC = 0xff; // PORTC is output



INTCON=0b11010000; // enable RB0 interrupts
OPTION_REG=0b01000000; // Enable portB internal PULL-UP resistors
// And Rising edge of RB0 int
PWM1_Init(20000);
PWM1_Start();
PWM1_Set_Duty(dutyCycle); // Whatever speed

while(1){
countOld = count;
Delay_ms(1000);

difference = count - countOld;
if (difference < 3000) // xceeds 4192(2 round), Stop
{

PORTA = 0;
if(dutyCycle < 254)
dutyCycle++;
}
else{
PORTA = 0xff;

if(dutyCycle > 0)
dutyCycle--;
}
PWM1_Set_Duty(dutyCycle);



}
}

اعلانات

abdullah.jlal
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
الدولة: syria-lattakia
المشاركات: 66
نشاط [ abdullah.jlal ]
قوة السمعة:0
قديم 12-06-2012, 07:21 PM المشاركة 2   
افتراضي


كود:
 



unsigned int count=0; // This count use in interrupt routine
unsigned countOld = 0; // Counter for the previous time
unsigned int dutyCycle =100;
unsigned int difference;
//float speed;
void interrupt() // enter when RB0 Falling
{

//ing B0 and B1, Position and Direction Find
//{
count++; // If "+" direction
//}
//else // If "-" direction
//{
//count--;
//}
INTCON.INTF=0; // Clear flag
}

void main()
{


TRISB = 0xff;

TRISA = 0;
PORTA = 0; // turn all LEDs OFF

TRISC = 0; // Set PORTC to $FF
PORTC = 0xff; // PORTC is output



INTCON=0b11010000; // enable RB0 interrupts
OPTION_REG=0b01000000; // Enable portB internal PULL-UP resistors
// And Rising edge of RB0 int
PWM1_Init(20000);
PWM1_Start();
PWM1_Set_Duty(dutyCycle); // Whatever speed

while(1){
countOld = count;
Delay_ms(1000);

difference = count - countOld;
if (difference < 3000) // xceeds 4192(2 round), Stop
{

PORTA = 0;
if(dutyCycle < 254)
dutyCycle++;
}
else{
PORTA = 0xff;

if(dutyCycle > 0)
dutyCycle--;
}
PWM1_Set_Duty(dutyCycle);



}
}

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

abdullah.jlal
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
الدولة: syria-lattakia
المشاركات: 66
نشاط [ abdullah.jlal ]
قوة السمعة:0
قديم 12-06-2012, 07:22 PM المشاركة 3   
افتراضي


شكراً على الكود أخي لكن يفضل أن تضعه ككود ليسهل فهمه ولك جزيل الشكر


ملاك الظلام
:: مهندس ::
تاريخ التسجيل: Oct 2011
المشاركات: 37
نشاط [ ملاك الظلام ]
قوة السمعة:0
قديم 12-06-2012, 08:01 PM المشاركة 4   
افتراضي


اشكرك اخي على المساعدة بارك الله بيك


Tico
:: عضو ذهبي ::
تاريخ التسجيل: May 2012
المشاركات: 1,426
نشاط [ Tico ]
قوة السمعة:114
قديم 12-06-2012, 08:20 PM المشاركة 5   
افتراضي


شكرا على الكود ..
المهم ان المتحكم طلع سليم وما به اي مس .
الحمد لله

إضافة رد

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

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

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


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

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