|
الله يبشرك بخير اذا عمل الكود فلك فضل كبير علي
|
السلام عليكم
هذا الكود لتحكم في محرك الخطوه بطريقه تتابع نصف الخطوة Half Step Sequence
الغايه من أستخدام تتابع نصف الخطوة Half Step Sequence هو لحصول على دقه اكثر للزاويه
مثلا محرك ذو 4 خطوات اي زاويه التحكم 90 درجه اذا أستخدمنا تتابع الخطوة الكاملة Full Step Sequence فأنه محرك يدور اربع خطوات للوصول الى 360 درجه
اما أستخدام Half Step Sequence لنفس المحرك فأنه درجه التحكم تصبح نصف اي 45 درجه وبتالي ستكون 8 خطوات ليصل المحرك الى 360 درجه
كود:
//Timer0
//Prescaler 1:32; TMR0 Preload = 100; Actual Interrupt Time : 4.992 ms
sbit sw_puls at RA0_bit;
//sbit sw_puls_dir TRISA0_bit;
sbit sw_dir at RA1_bit;
//sbit sw_dir_dir TRISA1_bit;
unsigned int cont;
char state=0 ,puls1=0 , puls2=0, kk1=0 , kk2=0 , negative=0;
short value=0;
//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++;
}
}
void main()
{
//sw_dir_dir=1;
//sw_puls_dir=1;
TRISA.f0=1;
TRISA.f1=1;
trisb=0;
portb=0;
InitTimer0();
INTCON = 0xB0;
OPTION_REG = 0x84;
while(1)
{
if(sw_puls==1 && kk1==0){
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=1;
}
if(kk1==1 && sw_puls==0)kk1=0;
if(sw_dir==1 && kk2==0){
puls2++;
kk2=1;
}
if(puls2>=2)value=-1;
else value=1;
if(kk2==1 && sw_dir==0)kk2=0;
if(cont>20 && state==1)
{
cont=0;
puls2=0;
state=0;
switch(puls1)
{
case 0:portb=9;break;
case 1:portb=1;break; //-45
case 2:portb=3;break; //-90
case 3:portb=2;break; //-135
case 4:portb=6;break; //-180
case 5:portb=4;break; //-225
case 6:portb=12;break;//-270
case 7:portb=8;break;//-315
default:break;
}
}
else if( cont>20 && state==2)
{
puls2=0;
cont=0;
state=0;
switch(puls1)
{
case 0:portb=9;break; //0
case 1:portb=8;break; //45
case 2:portb=12;break; //90
case 3:portb=4;break; //135
case 4:portb=6;break; //180
case 5:portb=2;break; //225
case 6:portb=3;break; //270
case 7:portb=1;break;//315
default:break;
}
}
}
}
تلاحظ انه اذا كان محرك عند درجه 135- ولكي يدور بألاتجاه معاكس لازم بالبدايه نجعله يمر بزاويه 90- و من ثم 45- ومن ثم 0
ولكي يتم التحكم بالسرعه لازم نتحكم بزمن النبضه الان مشروع لايتحكم بالسرعه
ولكن يمكن ذلك عن طريق
كود:
if(cont>20 && state==1)
هنا cont>20 يعني زمن 100ms لان الانتربت يحدث كل 5ms ولكي نتحكم بالسرعه خطوه اوله هي تغير رقم 20 الى متغير مثلا نسميه time واستخدام مفاتيح نزيد او ننقص هذا متغير ولكن مشكله انه لا أملك معلومات كافيه حول محركات الخطوه وبتالي لكي أتحكم بزمن بين نبضه واخرى محتاج اعرف اقل زمن مسموح به واكبر زمن مسموح به
مشروع في مراحله الاوليه في حاله وجود اي مشاكل الرجاء اخباري بها او أي جزء بالكود او الكود يحتاج الى شرح فأنا ان شالله سأقوم بشرح الكود
ملاحظه// لدوران المحرك بأتجاه معاكس أضغط على مفتاح dir اكثر من مره وبعد أضغط على sw puls
http://up.top4top.net/downloadf-top4...62671-rar.html