本帖最后由 dww465757120 于 2019-11-29 17:00 编辑
参照论坛上的程序,写了个51单片机连接A4988驱动42步进电机的程序,程序如下,A4988上的电流已经调到1.5A,线序对的,通电后,步进电机转动,但是抖动的厉害,不平缓;上网查了一些资料,说是A4988要接收周期脉冲信号,不是方波信号?我的程序中STEP=~STEP 是不是产生的就是方波信号?麻烦大神们解答一下,如果是这个原因,那怎么改成周期性的脉冲信号?如果不是这个原因,麻烦大神帮忙解决下,谢谢!
PS:本人是学机械的,单片机只是业余爱好,所以水平有限。。。。。。
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
sbit DIR=P2^2; //方向
sbit STEP=P2^1; //脉冲
sbit keyloop=P2^6; //循环启动键
uint n;
uint a;
/*********************延时函数*********************************/
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
void ndelay(n)
{
while(n)
{
n--;
Delay1ms();
}
}
/*********************定时器初始化函数*****************************/
void Timer0Init()
{
TMOD=0X01;
TH0=(65536-a)/256;
TL0=(65536-a)%256;
ET0=1;
EA=1;
}
/*************************循环启动函数***************************/
void keyloopprint()
{
if(keyloop==0)
{
ndelay(n);
if(keyloop==0)
{
TR0=~TR0;
}
}
}
void main()
{
STEP=0;
DIR=1;
a=625; /*用的4细分,按照60转/min计算的,一秒就是1转,也就是200*4=800步,一步就是
1/800=0.00125秒,初始定时就是0.00125/2=0.000625,所以a=625微秒,不知道这样算对不对?*/
TR0=0;
n=20;
Timer0Init();
while(1)
{
keyloopprint();
}
}
void time0() interrupt 1
{
TH0=(65536-a)/256;
TL0=(65536-a)%256;
STEP=~STEP;
}
|