单片机驱动步进电机问题

heiehe 2013-08-11 03:31:19
为什么我这程序驱动步进电机的时候,电机会顿。转的不匀。。
#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);}

}
...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
单片机工程师 2013-09-05
  • 打赏
  • 举报
回复
驱动频率过低
饼哥 2013-08-19
  • 打赏
  • 举报
回复
先用示波器看看波形吧。 还有速度很慢的时候肯定顿的,这个无解。
me东方飘零 2013-08-19
  • 打赏
  • 举报
回复
芯片功率够不够,速率过快,消耗功率很大,这时芯片的功率可能不够就不会转了。
lr2131 2013-08-17
  • 打赏
  • 举报
回复
用示波器把波形拉出来看看
动视飘雪 2013-08-14
  • 打赏
  • 举报
回复
电机转动相位如果没问题的话,看起来应该是你的延时太短了。把delay拉长点,你的delay写的好像有问题: uint x, y; for(x=z;x>0;x--);//不知你的本意是不是要for循环嵌套,这个;你是不是应该去掉 for(y=220;y>0;y--);
galiu 2013-08-12
  • 打赏
  • 举报
回复
脉宽是多少。驱动的功率够不够。 转动不均匀很可能是和机械部分的响应跟不上你发的脉冲有关。

27,515

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧