|
本帖最后由 dww465757120 于 2019-11-29 17:00 編輯
參照論壇上的程序,寫(xiě)了個(gè)51單片機(jī)連接A4988驅(qū)動(dòng)42步進(jìn)電機(jī)的程序,程序如下,A4988上的電流已經(jīng)調(diào)到1.5A,線序?qū)Φ�,通電后,步進(jìn)電機(jī)轉(zhuǎn)動(dòng),但是抖動(dòng)的厲害,不平緩;上網(wǎng)查了一些資料,說(shuō)是A4988要接收周期脈沖信號(hào),不是方波信號(hào)?我的程序中STEP=~STEP 是不是產(chǎn)生的就是方波信號(hào)?麻煩大神們解答一下,如果是這個(gè)原因,那怎么改成周期性的脈沖信號(hào)?如果不是這個(gè)原因,麻煩大神幫忙解決下,謝謝!
PS:本人是學(xué)機(jī)械的,單片機(jī)只是業(yè)余愛(ài)好,所以水平有限。。。。。。
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
sbit DIR=P2^2; //方向
sbit STEP=P2^1; //脈沖
sbit keyloop=P2^6; //循環(huán)啟動(dòng)鍵
uint n;
uint a;
/*********************延時(shí)函數(shù)*********************************/
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
void ndelay(n)
{
while(n)
{
n--;
Delay1ms();
}
}
/*********************定時(shí)器初始化函數(shù)*****************************/
void Timer0Init()
{
TMOD=0X01;
TH0=(65536-a)/256;
TL0=(65536-a)%256;
ET0=1;
EA=1;
}
/*************************循環(huán)啟動(dòng)函數(shù)***************************/
void keyloopprint()
{
if(keyloop==0)
{
ndelay(n);
if(keyloop==0)
{
TR0=~TR0;
}
}
}
void main()
{
STEP=0;
DIR=1;
a=625; /*用的4細(xì)分,按照60轉(zhuǎn)/min計(jì)算的,一秒就是1轉(zhuǎn),也就是200*4=800步,一步就是
1/800=0.00125秒,初始定時(shí)就是0.00125/2=0.000625,所以a=625微秒,不知道這樣算對(duì)不對(duì)?*/
TR0=0;
n=20;
Timer0Init();
while(1)
{
keyloopprint();
}
}
void time0() interrupt 1
{
TH0=(65536-a)/256;
TL0=(65536-a)%256;
STEP=~STEP;
}
|
|