[教學] NXT Output - 馬達過度負載
延續我們的 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秒前後的角度值相減,只要馬達的轉速一定,條件就會一直成立。
若是您對於以上的說明感到有點困惑,建議您在腦中把迴圈的流程多想幾遍,就會了解了。
最後來看看程式的效果:
留言 💬 (0)
還沒有留言,來當第一個。