欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18457|回復: 24
收起左側

一個單片機控制兩個步進電機同時轉,主函數怎么寫?

  [復制鏈接]
ID:86913 發表于 2017-2-13 11:23 | 顯示全部樓層 |閱讀模式
兩個電機分別由P0、P1口控制,并且兩個電機的運行狀態如轉數、速度和
方向都不一樣,現在要求兩個電機同時開始轉動(但不同時停止),要求
動作不循環,只運轉一次。這個主函數怎么寫?請指導!
(下面的主函數,一個電機轉完了,才轉另一個電機 ,沒有用)

/********主函數********/
main()       
    {
          P0=0xff;P1=0xff;       //兩個端口同時工作   
        motor1();              //電機1轉動,它由P0口控制
        P0=0x00;               //電機1停轉
        motor2();              //電機2轉動,它由P1口控制
        P1=0x00;               //電機2停轉
    }


回復

使用道具 舉報

ID:227622 發表于 2018-8-8 17:39 | 顯示全部樓層
其實這個問題我也遇到過,后來查了好多資料有點頭緒了,因為我想做2自由度機械臂,也是要控制2個步進電機同時運轉,后來發現51單片機因為只有定時器這種資源,而沒有分時操作系統的概念,所以我打算模仿方式操作系統理論,將時間分成許多小區間,然后每隔一個區間就控制一個步進電機,因為時間區間非常小,所以從宏觀上看兩個步進電機是同時運轉的,其實他們在互相搶奪cpu的資源,所以也是要付出驅動能力比正常驅動弱一點的代價,好了說一下程序的實現,其實無非可以用定時器來實現每次中斷驅動步進電機2,主函數驅動步進電機1,要注意的是實現好2個步進電機運動的時間間隔,這又有點類似于動態掃描數碼管一樣了,需要一個定時器中斷來不斷掃描數碼管更新的信息,嗯,其實樓主可以自己試一下,不懂再問我。謝謝~

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:164496 發表于 2017-2-13 21:09 | 顯示全部樓層
看不到你的函數內容,給步進電機發脈沖應該是用定時器去發,用延時的方法讓程序發就是很不好的,用兩個定時器分別給兩個步進電機發脈沖,什么時候發用條件,發多少用兩個不同的變量控制定時器,發的頻率用定時器的初始值

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:153041 發表于 2017-2-13 22:04 | 顯示全部樓層
按樓上說的沒錯,如果樓主非要用空循環延時,可以把moto1和moto2打散到一起,moto1走一步,然后moto2走一步,再moto1走一步.... 這樣穿插起來。。  如果要程序模塊化可讀,就采用操作系統,建立兩個并發的任務,分別控制兩個電機。。。

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:86913 發表于 2017-2-14 10:27 | 顯示全部樓層
謝謝樓上兩位提醒和指導,我是新手,剛開始是學延時函數的,定時器還不會,如果有定時器控制兩個電機同時轉動的這種例子,請發一個給我,非常感謝!
“把moto1和moto2打散到一起,moto1走一步,然后moto2走一步,再moto1走一步.... 這樣穿插起來!蔽乙郧霸囘^的就是這種方式的,這不是我想學的。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:164429 發表于 2017-2-14 14:42 | 顯示全部樓層
把引腳狀態改變全放到定時器中,時間到了改變一個,不管有多少到了改變就好了加油

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:123289 發表于 2017-2-14 19:27 | 顯示全部樓層
兩個、十個一樣做,看你如何構思。
基本上會做一個就能做十個。
電機的響應速度遠小于單片機。各電機的驅動錯開,盡可能將相同或類似的程序部分做成子程序調用。多用中斷,合理分配各電機的驅動控制時間。千萬不可讓程序死在一個電機上運行,即不允許有死待某個條件變量的函數。

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:164687 發表于 2017-2-15 03:43 | 顯示全部樓層
電機的響應速度遠小于單片機。各電機的驅動錯開,盡可能將相同或類似的程序部分做成子程序調用。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
ID:105206 發表于 2017-2-15 10:33 | 顯示全部樓層
51單片機最多只能實現兩個步近電機同時運轉。我用的是驅動器。
回復

使用道具 舉報

ID:86913 發表于 2017-2-16 21:08 | 顯示全部樓層
這樣的要求能編出程序員嗎?請看圖上要求。哪位高手幫幫我編制個C語言程序-----  一個單片機控制兩個步進電機同時啟動。單片機為STC89C52,驅動器L298N。先謝謝了! 2017-02-16 11 26 55.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:7485 發表于 2017-2-17 08:59 | 顯示全部樓層
首先,51單片機是簡單的處理器,單線程,不可能真正意義上的“同時”運行兩個子程序(函數)。

51單片機相對高級的處理器來說,雖說運行的速度不高,可也是us級的速度,相比步進電機的運行波形來說,差著幾個數量級的。所以用“分時段”來控制2臺步進電機是一點問題都沒有。因為控制程序中單片機將絕大部分時間用來延時。
如果使用程序循環來延時,單片機將時鐘沒有空閑時間。
但是如果用定時器來延時,在延時過程中,單片機就可以騰出手來做其他事情。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:105206 發表于 2017-2-17 10:34 | 顯示全部樓層
我覺得51只能做兩個,不知各位攢不攢同。


我是同時按不同的驅動,相互不干擾,等待。我用的是驅動器驅動步進馬達。

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:111634 發表于 2017-2-17 21:59 | 顯示全部樓層
jubaolun 發表于 2017-2-17 10:34
我覺得51只能做兩個,不知各位攢不攢同。

同時驅動10臺步進電機都沒問題。
回復

使用道具 舉報

ID:86913 發表于 2017-2-18 16:08 | 顯示全部樓層
各位高手,能否提供一個采用定時器的,控制兩個電機 的C語言程序,非常感謝!
回復

使用道具 舉報

ID:105206 發表于 2017-2-18 20:09 | 顯示全部樓層
如果51能做10個,3軸打印不就可以用51單片機了。您覺得勒。
回復

使用道具 舉報

ID:86913 發表于 2017-3-20 09:15 | 顯示全部樓層
MAIKER 發表于 2017-2-13 21:09
看不到你的函數內容,給步進電機發脈沖應該是用定時器去發,用延時的方法讓程序發就是很不好的,用兩個定時 ...

謝謝您,您好的意思我大致懂了,就是編程序太難了,沒有一個示例比較難!
回復

使用道具 舉報

ID:86913 發表于 2017-3-20 09:18 | 顯示全部樓層
utzuzu 發表于 2017-2-13 22:04
按樓上說的沒錯,如果樓主非要用空循環延時,可以把moto1和moto2打散到一起,moto1走一步,然后moto2走一步 ...

謝謝您!對我這個新手來說有點太深奧了。
回復

使用道具 舉報

ID:86913 發表于 2017-3-20 09:18 | 顯示全部樓層
1053356130 發表于 2017-2-14 14:42
把引腳狀態改變全放到定時器中,時間到了改變一個,不管有多少到了改變就好了加油

謝謝您的指導!
回復

使用道具 舉報

ID:86913 發表于 2017-3-20 09:21 | 顯示全部樓層
ahshmj 發表于 2017-2-17 08:59
首先,51單片機是簡單的處理器,單線程,不可能真正意義上的“同時”運行兩個子程序(函數)。

51單片機 ...

謝謝您的指導!
回復

使用道具 舉報

ID:227622 發表于 2018-3-22 19:06 | 顯示全部樓層
如果要實現精確的控制,最好給步進電機發脈沖用定時器去計數,用延時的方法讓程序發就是很不好的,用兩個定時器分別給兩個步進電機發脈沖,此外,還可以通過各電機的驅動錯開,盡可能將相同或類似的程序部分做成子程序調用,也可以實現這功能

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:379643 發表于 2018-8-8 18:03 | 顯示全部樓層
學習
回復

使用道具 舉報

23#
無效樓層,該帖已經被刪除
ID:600893 發表于 2019-9-9 16:28 | 顯示全部樓層
可以  可以 打開了我的思路
回復

使用道具 舉報

ID:468238 發表于 2019-9-10 15:13 | 顯示全部樓層
你可以通過時間片來進行操作   每一毫秒進行一個任務    這樣解決電機問題
回復

使用道具 舉報

26#
無效樓層,該帖已經被刪除
ID:315853 發表于 2019-9-10 15:58 | 顯示全部樓層
將P0=0x00、P1=0x00抽出,寫個while,while里面寫個if判斷左右輪在什么情況下分別執行P0=0x00、P1=0x00,同時避免無效if重復執行,都停止結束就執行while空語句
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表