工程筆記本 / NXC/RobotC/C++ for Lego robot

NXC/RobotC/C++ for Lego robot

[教學] NXT Output - 馬達過度負載

CAVEDU 阿吉 - 雜工📅 2010-04-09👁 25


延續我們的 NXC 常用指令 - Outputs 教學系列,今天要來詳細介紹當時所提到的 MotorOverload 指令。

上次我們提到 MotorOverload 指令必須配合定轉速模式,才能發揮作用。然而,這個指令在使用時有個缺點,當我們把輸出電力調到大於80左右時,馬達連轉都不會轉。CAVE推測是因為當馬達轉速提高時,轉動的阻力也相對提高,而設計者當初在設計這個指令的時候可能沒有考慮到這點,所以當輸出電力到達一定的程度的時候,馬達就不會轉了。

要解決這個問題,我們必須先了解一點原理。

首先,我們要怎麼知道馬達在轉動時遇到阻力了呢?

答案很簡單,只要透過角度感應器就可以了。當在一定的時間間隔內,馬達轉動的角度沒有增加,就表示馬達遇到了阻力。問題來了,這樣的程式要怎麼寫呢?

以下列出 NXC 與 NXT-G 的程式給大家參考:

NXC:

task main()
{
         int m;
         m = MotorTachoCount(OUT_A);   //此時 m 為0 (因為馬達還沒開始轉)
         OnFwd(OUT_A,100);
         Wait(100);                                          
         while( abs(m-MotorTachoCount(OUT_A))>10 )
        {
                 m = MotorTachoCount(OUT_A);
                 Wait(100);
         }
         Off(OUT_A);
}

NXT-G:



兩個程式的原理都一樣,先讓馬達轉動0.1秒,因為有先轉動0.1秒,所以
abs(m-MotorTachoCount(OUT_A))>10 成立,進入迴圈。在迴圈內,將當前的角度值存入變數裡面,馬達繼續轉動0.1秒,又回到條件判斷,因為將角度值存入變數裡面後馬達又轉了0.1秒,若是沒有遇到阻力,馬達轉動的角度就會更大,所以條件仍會成立。也就是說,程式會讓0.1秒前後的角度值相減,只要馬達的轉速一定,條件就會一直成立。

若是您對於以上的說明感到有點困惑,建議您在腦中把迴圈的流程多想幾遍,就會了解了。

最後來看看程式的效果:




需要NXT-G原始檔的朋友,歡迎留言索取!







相關文章 📎

留言 💬 (0)

還沒有留言,來當第一個。