熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
鬼推磨 發(fā)表于 2021-7-9 16:40 你這個(gè)時(shí)間最好用定時(shí)器,不然時(shí)間會(huì)有誤差,而且判斷電機(jī)有無轉(zhuǎn)動(dòng)最好用下降沿或者上升沿,可以用外部中斷,也可以用普通io口模擬外部中斷,你這樣測會(huì)有很大的誤差,非常容易受干擾,希望你自己好好研究一下 |
測轉(zhuǎn)速不就行了,那么簡單 通過IO的高低電平來計(jì)算轉(zhuǎn)速 對(duì)于實(shí)際應(yīng)用,一秒低于0.001圈的,判定為不轉(zhuǎn)動(dòng) 一直是高電平的判定為不轉(zhuǎn)動(dòng) 一直是低電平的判定為不轉(zhuǎn)動(dòng) |
sbit KEY1 = P2^0;//判斷端口 sbit KEY2 = P2^1;//LED燈 sbit KEY5 = P2^2;//停止電機(jī) void main() { while(1) { if (KEY1==0) { //KEY1是低電平 KEY2=0//LED亮 } else if (KEY1==1) { //KEY1是高電平 KEY2=1//LED滅 } } } 此段代碼只是檢測IO口高低變化狀態(tài)LED顯示狀態(tài)。怎么檢測它無變化啊 |
開心就好hhhh 發(fā)表于 2021-7-9 14:36 a++到1000 ,改到10000也沒用, 我懷疑代碼到底有用沒有啊 |
鬼推磨 發(fā)表于 2021-7-9 13:43 是挺奇怪啊,只要程序運(yùn)行到這,應(yīng)該能停啊。 |
首先你這個(gè)a++到100 ,這樣的循環(huán)執(zhí)行根本達(dá)不到兩秒,甚至一毫秒都沒有,所以你這樣判斷電機(jī)是否轉(zhuǎn)動(dòng)是不對(duì)的,其次你測試的時(shí)候不需要按住電機(jī)不動(dòng),只要將霍爾遠(yuǎn)離電機(jī)即可,然后再去觀察電機(jī)是否停下 |
開心就好hhhh 發(fā)表于 2021-7-9 13:55 key5連接控制繼電器模塊的輸入端,輸出低電平,繼電器就會(huì)吸合。斷開電機(jī)的電源 |
鬼推磨 發(fā)表于 2021-7-9 13:43 key5連接什么? |
開心就好hhhh 發(fā)表于 2021-7-9 13:40 判斷KEY1端口在2秒內(nèi)沒有電平變化。就足以證明。電機(jī)被阻轉(zhuǎn)或者異物卡主了。,實(shí)際程序下載到單片機(jī)運(yùn)行。我按住電機(jī)不讓它動(dòng)。但程序并沒有控制電機(jī)停止。 |
鬼推磨 發(fā)表于 2021-7-9 13:29 你想要有什么反應(yīng)呢?電機(jī)停止?你這樣判斷電機(jī)是否停止是絕對(duì)不對(duì)的 |
開心就好hhhh 發(fā)表于 2021-7-9 13:14 看看折斷代碼。沒有反應(yīng)。 void main() { while(KEY1)//高電平 { a++; if(a>100)//這里的100不一定是2s,要調(diào)試獲得準(zhǔn)確值, break; } while(!KEY1)//低電平 { b++ ; if(b>100) break; } if((a>100)||(b>100))//表明一段時(shí)間內(nèi)電平都沒有變化 { // 處理代碼 KEY5=0;//停止電機(jī)信號(hào) } } |
鬼推磨 發(fā)表于 2021-7-9 12:48 直接要程序可還行?這論壇不是幫你寫程序的,是大家互相探討問題的 |
1543330241 發(fā)表于 2021-7-9 12:40 來個(gè)簡單的例子。謝謝 |
用單片機(jī)檢測下降沿就行,轉(zhuǎn)動(dòng)的話肯定是下降沿的,要是測轉(zhuǎn)速的話就是用定時(shí)器,檢測單位時(shí)間內(nèi)下降沿個(gè)數(shù) |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
Powered by 單片機(jī)教程網(wǎng)