標(biāo)題:
單片機串口控制步進(jìn)電機正反轉(zhuǎn)卡住不動的問題求助!
[打印本頁]
作者:
八一八一
時間:
2018-1-5 10:09
標(biāo)題:
單片機串口控制步進(jìn)電機正反轉(zhuǎn)卡住不動的問題求助!
求助:當(dāng)串口接收到‘1’時 電機正轉(zhuǎn),接收到‘2’時,電機反轉(zhuǎn),再接收到‘1’時 步進(jìn)電機會卡住不動,再發(fā)一次‘1’,步進(jìn)電機才會轉(zhuǎn)動,是什么原因?有什么解決方法嗎?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//------8拍-----
uchar code fz[8]={0x10,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //
uchar code zz[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x10}; //
uchar state=0;
uchar both=0;
unsigned char receiveData='0';
void UsartConfiguration(); //初始化串口
void delay(void)
{
unsigned char a,b;
for(a=15;a>0;a--)
for(b=152;b>0;b--);
}
void motor1_zz() //正轉(zhuǎn)函數(shù)
{
uint j;
for(j=0;j<8;j++)
{
P1=zz[j];
delay();
}
}
void motor1_fz() //反轉(zhuǎn)函數(shù)
{
uint j;
for(j=0;j<8;j++)
{
P1=fz[j];
delay();
}
}
void main()
{
UsartConfiguration();
while(1)
{
while(both==0)
{
if(receiveData=='1')
{
state=1;
receiveData='0';
break;
}
if(receiveData=='2')
{
state=2;
receiveData='0';
break;
}
P1=0x0f;
}
while(state==1)
{
if(receiveData=='2')
{
state=2;
receiveData='0';
break;
}
if(receiveData=='1')
{
state=1;
receiveData='0';
break;
}
motor1_zz();
}
while(state==2)
{
if(receiveData=='1')
{
state=1;
receiveData='0';
break;
}
if(receiveData=='2')
{
state=2;
receiveData='0';
break;
}
motor1_fz();
}
}
}
/************************************************************************
* 函數(shù)名 :UsartConfiguration()
* 函數(shù)功能 :設(shè)置串口
* 輸入 : 無
* 輸出 : 無
*************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X21; //設(shè)置計數(shù)器工作方式2 和定時器0
PCON=0X80; //波特率加倍
TH1=0XFA; //計數(shù)器初始值設(shè)置,注意波特率是9600的
TL1=0XFA;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數(shù)器
}
void Usart() interrupt 4
{
receiveData=SBUF;//fa出去接收到的數(shù)據(jù)
while(!RI);
RI = 0;//清除接收中斷標(biāo)志位
}
復(fù)制代碼
作者:
lxa0
時間:
2018-1-5 15:40
你在正反轉(zhuǎn)切換的時候
要先停止轉(zhuǎn)動
然后加入一小段延時
最后再換向
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1