我做了一個(gè)單片機(jī)控制步進(jìn)電機(jī)驅(qū)動(dòng)器的電路板,開(kāi)始它的脈沖輸出控制PUL端使用計(jì)時(shí)器控制輸出,但是,有的時(shí)候會(huì)輸出脈沖不一樣,有時(shí)剛好等于那個(gè)數(shù),有時(shí)卻少了(沒(méi)有多的時(shí)候),仔細(xì)觀察計(jì)時(shí)器的時(shí)間常數(shù),有時(shí)會(huì)不一樣,所以請(qǐng)大家來(lái)一起分析一下,為何會(huì)這樣? 下面我給出部分相關(guān)程序:
//******主程序內(nèi)工作子程序:
void work_Auto (void) { if (QD_flag) //啟動(dòng)按鈕標(biāo)志為1時(shí),表示按了啟動(dòng)按鈕 {
do //先執(zhí)行一次,再測(cè)是否為自動(dòng)運(yùn)行,自動(dòng)運(yùn)行,則繼續(xù),不繼續(xù)則停機(jī) { ENA=0; //步進(jìn)電機(jī)驅(qū)動(dòng)器允許運(yùn)行
DIR=0; //正轉(zhuǎn) maichong=0; //脈沖量清零
TH0=-7000/256; //裝啟動(dòng)時(shí)間常數(shù) TL0=-7000%6 ;
PUL=0; ET0=1; //允許計(jì)時(shí)器T0中斷 TR0=1; //啟動(dòng)計(jì)時(shí)器T0,讓PUL端輸出脈沖
while (maichong <= jiaodujishuan ) ; //等待轉(zhuǎn)動(dòng)角度達(dá)到設(shè)定值 為總共角度除以每步角度 ET0=1; //允許計(jì)時(shí)器T0中斷 TR0=0; delay(1);
DIR=1; //設(shè)定反轉(zhuǎn)
maichong=0; //脈沖量清零 TH0=-7000/256; //裝啟動(dòng)時(shí)間常數(shù) TL0=-7000%6 ; PUL=0;
TR0=1; //重新啟動(dòng),但為反轉(zhuǎn) while (maichong <= jiaodujishuan ); //等待反轉(zhuǎn)到設(shè)定值 TR0=0; //停轉(zhuǎn) DIR=0; ENA=1; //關(guān)閉步進(jìn)電機(jī)驅(qū)動(dòng) maichong=0; _nop_(); _nop_();
delay ( 100*zhanting ); //延時(shí)設(shè)定暫停時(shí)間,單位為0.1S
_nop_(); _nop_(); QD_flag=0;
} while (Auto_flag); //檢測(cè)是否為自動(dòng)模式,自動(dòng)模式則繼續(xù)運(yùn)行,半自動(dòng)則跳出再去檢查是否有啟動(dòng)按鍵 按下
}
}
//*****************計(jì)時(shí)器中斷子程序:
void zd0(void ) interrupt 1 { //此中斷程序用輸出脈沖給步進(jìn)電機(jī)驅(qū)動(dòng)板速度控制端
_nop_(); _nop_(); if ((maichong<10) || (maichong >(jiaodujishuan-20))) { TH0=-7000/256; TL0=-7000/256; } else { TH0=-T/256; TL0=-T/256; } maichong++; //脈沖量計(jì)數(shù)加1
PUL=!PUL; //脈沖輸出反相
}
敬請(qǐng)大家分析!
[此貼子已經(jīng)被admin于2008-10-4 1:34:58編輯過(guò)]
|