欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

单片机驱动步进电机有关问题

更新时间: 2014-01-05 03:15:14 责任编辑: Author_N1

 

单片机驱动步进电机问题
为什么我这程序驱动步进电机的时候,电机会顿。转的不匀。。
#include<reg52.h>

#define uchar unsigned char
#define uint  unsigned int

 sbit IN1=P0^0;
 sbit IN2=P0^1;
 sbit IN3=P0^2;
 sbit IN4=P0^3;

 sbit ENA=P3^0;
 sbit ENB=P3^1;
void delayt(uint z);
unsigned char A[8]={0x01,0x05,0x04,0x06,0x02,0x0a,0x08,0x09};
//unsigned char C[4]={0x01,0x04,0x02,0x08};

void dianjixuanzhuan(long int pulse,uchar zf,uchar t)//角度。方向。延时
{
long int b;
int i=0;




for(b=0;b<=pulse;b++)
{

P0=A[i];
delayt(t);
if(zf==0)
{
if(i==7)
          i=0;

     else     
      i++;
}   
 else
     {  
  if(i==0)
       i=7;
            else  
 i--;
     }

}
//P1=0X00;
//while(1);  
}    
void delayt(uint z)
   {
   uint x, y;
   for(x=z;x>0;x--);
   for(y=220;y>0;y--);
   }
void main()
{

uint a; 
ENA = 0;
ENB = 0; 
   for(a=5;a>0;a--)
    {dianjixuanzhuan(100,1,2);}

}                 
--参考方法--
脉宽是多少。驱动的功率够不够。
转动不均匀很可能是和机械部分的响应跟不上你发的脉冲有关。
--参考方法--
电机转动相位如果没问题的话,看起来应该是你的延时太短了。把delay拉长点,你的delay写的好像有问题:
uint x, y;
    for(x=z;x>0;x--);//不知你的本意是不是要for循环嵌套,这个;你是不是应该去掉
    for(y=220;y>0;y--);
--参考方法--
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:15:14
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20150/
本文WWW.DOC100.NET DOC100.NET版权所有。