下載手機(jī)汽配人

51單片機(jī)控制步進(jìn)電機(jī)

用一塊AD0832對(duì)光敏電阻進(jìn)行數(shù)據(jù)采集,將數(shù)字信號(hào)給51單片機(jī),單片機(jī)將此數(shù)據(jù)與自己設(shè)定的數(shù)據(jù)進(jìn)行比較來控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng),求電路圖和程序
提問者:網(wǎng)友 2018-08-06
最佳回答
這個(gè)簡單,讓我來教樓主怎么玩 首先我說下思路: 我們采用P1口來采集ADC0832的8位數(shù)據(jù),用P0.0口控制步進(jìn)電機(jī)動(dòng)作,利用T0的時(shí)間中斷來采集P1口的ADC0832數(shù)據(jù)并做出比較后設(shè)置步進(jìn)電機(jī)啟動(dòng)標(biāo)志位start=1;并設(shè)置他的運(yùn)行頻率,當(dāng)然,樓主沒說怎么比較,我這就只是寫了個(gè)簡單的例子,一通百通,希望對(duì)你有幫助 下面是程序: #include //選用晶振11.0592MHz unsigned int m=0,n=0; //設(shè)置循環(huán)的周期 unsigned char start=0,t0temp=0; sbit Y0=P0^0; //控制步進(jìn)電機(jī)的管腳 delay() { unsigned char i,j; for(i=m;i>0;i--) for(j=n;i>0;j--); } main() { //自檢測T0時(shí)間設(shè)置 ET0=1; TMOD|=0x01; TH0=0XFC; //1ms中斷掃描 TL0=0X66; IT0=1; //下降沿觸發(fā) TR0=0; //關(guān)閉掃描 /***********************初始化完畢***********************/ //****************I/O口程序 while(1) { while(start) { delay(); Y0=~Y0; } } } void counter1(void) interrupt 1 //T0計(jì)時(shí)器中斷 { if(t0temp%4)t0temp++; //4ms時(shí)間才采集一次P0口的數(shù)據(jù) else { t0temp++; //這里就寫你怎么做對(duì)比的程序,我舉個(gè)例子 if(P1>150) {start=1;n=1000;m=0;} //入錯(cuò)采用12M晶振,那這時(shí)候控制步進(jìn)電機(jī)的輸出周期就是1ms一次,也就是1000HZ else {start=0;n=0;m=0;} } } //PS:我在輸出頻率中用了兩個(gè)全局變量m,n可以延遲很長時(shí)間,樓主可以根據(jù)需要選用,一般16位的,選用一個(gè)就可以了,另一個(gè)放棄 OK,至于電路圖,我軟件沒有ADC0832的封裝,不然就發(fā)給你了,但想來樓主完全就沒必要擔(dān)心,ADC0832的8位數(shù)據(jù)接到P1口,P0.0控制步進(jìn)電機(jī)啟動(dòng)的三極管,電路圖就那么簡單!
回答者:網(wǎng)友
產(chǎn)品精選
搜索問答
還沒有汽配人賬號(hào)?立即注冊(cè)

我要提問

汽配限時(shí)折扣

本頁是網(wǎng)友提供的關(guān)于“51單片機(jī)控制步進(jìn)電機(jī)”的解答,僅供您參考,汽配人網(wǎng)不保證該解答的準(zhǔn)確性。