|
6黑幣
用51單片機(jī)來驅(qū)動(dòng)伺服電機(jī),電機(jī)連接絲杠,帶動(dòng)絲杠轉(zhuǎn)動(dòng)。
滾珠絲杠模組.png (248.49 KB, 下載次數(shù): 41)
下載附件
絲杠模組
2020-4-5 22:26 上傳
驅(qū)動(dòng)伺服電機(jī),跟步進(jìn)電機(jī)差不多,都是輸出脈沖。
我想用一個(gè)程序同時(shí)實(shí)現(xiàn)幾個(gè)功能。
功能:點(diǎn)動(dòng)(點(diǎn)一下,動(dòng)一下)、正反轉(zhuǎn)改變、加減速、停止
我是這樣想:
簡(jiǎn)單的話,就多設(shè)幾個(gè)按鍵,通過按鍵,按哪個(gè)就實(shí)現(xiàn)哪個(gè)功能。
復(fù)雜的話,就設(shè)置3個(gè)模式,模式1,模式2,模式3。這樣就能少用些按鍵。
我想弄復(fù)雜點(diǎn)的。
模式1:準(zhǔn)備模式,led燈閃爍。
模式2:自由模式,按鍵2——點(diǎn)動(dòng),按鍵3——只發(fā)送4000個(gè)脈沖,按鍵4——正反轉(zhuǎn)改變
模式3:往復(fù)循環(huán)模式(用限位開關(guān)改變方向),按鍵2——加速,按鍵3——減速,按鍵4——停止/啟動(dòng)
通過按鍵1來切換模式。
想法是:
1、用外部中斷來做按鍵1設(shè)置,按一下按鍵1,就進(jìn)行外部中斷,外部中斷程序里,標(biāo)志mode++,回到程序,判斷標(biāo)志mode是否改變,改變了就跳出程序,回到主函數(shù),找到相應(yīng)的模式,進(jìn)入相應(yīng)的程序。
2、模式3,用內(nèi)部中斷,來不斷發(fā)出脈沖,通過按鍵2、3改變頻率,實(shí)現(xiàn)加減速。
程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//先省略內(nèi)外部中斷程序
void main()
{
while(1)
{
while(1)
{
if(key1 == 0) //這個(gè)就是按鍵1,切換模式。用1根杜邦線把P32和P37相接,每按下按鍵1就會(huì)進(jìn)入一次中斷。
{
delay(20);//按鍵消抖
if(key1 == 0)
{
flag = 0;
flag = 0;//產(chǎn)生低電平
flag = 1;//結(jié)束低電平
while(!key1);//松手檢測(cè)
}
}
if(1 == mode)
mode_1(); //檢測(cè)到mode等于1,就進(jìn)入mode_1函數(shù)里面
if(2 == mode)
mode_2(); //檢測(cè)到mode等于2,就進(jìn)入mode_2函數(shù)里面
if3 == mode)
mode_3(); //檢測(cè)到mode等于3,就進(jìn)入mode_3函數(shù)里面
}
}
}
mode_1() 模式1
{
led燈閃爍;
判斷標(biāo)志mode是否改;(若改變,return跳出mode_1函數(shù),回到主函數(shù),根據(jù)標(biāo)志mode進(jìn)入子函數(shù))
}
mode_2() 模式2
{
按鍵2,就實(shí)現(xiàn)點(diǎn)動(dòng);
按鍵3,發(fā)送4000個(gè)脈沖;
按鍵4,正反轉(zhuǎn)改變;
判斷標(biāo)志mode是否改;(若改變,return跳出mode_2函數(shù),回到主函數(shù),根據(jù)標(biāo)志mode進(jìn)入子函數(shù))
}
mode_3() 模式3
{
內(nèi)部中斷函數(shù);
按鍵2,加速;
按鍵3,減速;
按鍵4,停止發(fā)送脈沖/啟動(dòng)發(fā)送脈沖;
判斷標(biāo)志mode是否改;(若改變,return跳出mode_2函數(shù),回到主函數(shù),根據(jù)標(biāo)志mode進(jìn)入子函數(shù))
}
想問問各位大佬,這樣寫,思路有沒有問題,能不能實(shí)現(xiàn),是否有更好的思路來寫,求解啊!!!不知道行不行才是可怕
|
|