本帖最后由 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;
}
|