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