2016-11-21 9 views
0

現在のNodeMCUデバイスブランチファームウェアでフラッシュしたESP-12Fモジュールがあります。このモジュールは2A以上の電源で動作します。私は小さなステッパーモーター(this is the combo)のドライバーを制御するために4つのGPIOを使用します。ESP8266 NodeMCUファームウェアを搭載したESP-12Fは、ループGPIOを使用して再起動します。

私はモーターを制御するためにESPlorerではほとんどのLuaスクリプト(partially based on the arduino version described here)を書き、プログラムが作業を行い、モータはそれに応じて変わるが、私はあまりにも多くのステップで機能turnを呼び出すときには、モジュールを再起動します。制限は約180ステップで、場合によっては少し上に、時にはその数より少し下にある場合もあります。

私はこの種のモジュールをプログラミングするのが本当に新しいですし、私もLuaを学んでいます。誰がここで何が起こるのか想像できますか?ところで、私はまた、ドライバボードに外部5ボルトを供給しようとしましたが、何も変わっていませんでした。

これは私のスクリプトです:ここでは

gpio.mode(5, gpio.OUTPUT) 
gpio.mode(6, gpio.OUTPUT) 
gpio.mode(7, gpio.OUTPUT) 
gpio.mode(0, gpio.OUTPUT) 

sg = function (n,v) gpio.write(n, (v == 0 and gpio.LOW or gpio.HIGH)) end 

stepRight = function() 
    sg(5,0);sg(6,0);sg(7,0);sg(0,1); 
    sg(5,0);sg(6,0);sg(7,1);sg(0,1); 
    sg(5,0);sg(6,0);sg(7,1);sg(0,0); 
    sg(5,0);sg(6,1);sg(7,1);sg(0,0); 
    sg(5,0);sg(6,1);sg(7,0);sg(0,0); 
    sg(5,1);sg(6,1);sg(7,0);sg(0,0); 
    sg(5,1);sg(6,0);sg(7,0);sg(0,0); 
    sg(5,1);sg(6,0);sg(7,0);sg(0,1); 
    sg(5,0);sg(6,0);sg(7,0);sg(0,0); 
end 

turn = function (dir, steps) 
    if dir == 'right' then 
    for i=0,steps,1 do 
     stepRight() 
    end 
    end 
end 

は、モジュールおよびファームウェアについてのいくつかの詳細は以下のとおりです。

NodeMCU custom build by frightanic.com 
    branch: dev 
    commit: c54bc05ba61fe55f0dccc1a1506791ba41f1d31b 
    SSL: true 
    modules: adc,cjson,crypto,dht,file,gpio,hmc5883l,http,i2c,l3g4200d,mqtt,net,node,ow,pwm,spi,tmr,tsl2561,uart,wifi 
build built on: 2016-11-21 19:02 
powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32) 

これは私が高すぎるとturn関数を呼び出すとき、それは次のようになります値:

turn('right',200) 

ets Jan 8 2013,rst cause:2, boot mode:(3,7) 

load 0x40100000, len 26144, room 16 
tail 0 
chksum 0x95 
load 0x3ffe8000, len 2288, room 8 
tail 8 
chksum 0xa8 
load 0x3ffe88f0, len 8, room 0 
tail 8 
chksum 0x66 
csum 0x66 
����o�r��n|�llll`��r�l�l�� 

NodeMCU custom build by frightanic.com 
    branch: dev 
    commit: c54bc05ba61fe55f0dccc1a1506791ba41f1d31b 
    SSL: true 
    modules: adc,cjson,crypto,dht,file,gpio,hmc5883l,http,i2c,l3g4200d,mqtt,net,node,ow,pwm,spi,tmr,tsl2561,uart,wifi 
build built on: 2016-11-21 19:02 
powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32) 
lua: cannot open init.lua 
> 

更新:うまくいく解決策を見つけましたが、理由を説明できません。たぶん誰かがこれについていくつかの光を当てることができますか?

for i=0,steps,1 do 
    stepRight() 
    tmr.delay(10) 
end 

これは速度には影響しません:私はいつ、どのように再起動が発生する見つけることによって問題にアプローチしなければならなかったと思ったので、私は、forループに少しタイマー遅延を追加

私が望むように数字を簡単に増やすことができます; turn('right',200000)を使用することができます。再起動は完全に消えてしまいます。遅延を1回だけ設定しても、再発しませんでした。 1μs。それは素晴らしいことですが、なぜそれが役立つのかを知りたいですか?

+0

これは乾式モード、右(ドライバーボードが取り外されている)でも発生しますか?あなたのファームウェアにコンパイルされたモジュールの数を見ると、私は実際にはこれまでにも驚いています。本当に必要なものに減らしてみてください。それはいくらかの記憶を解放するでしょう。 –

+0

あなたが正しいです、私はドライバを切断し、それは同じ動作です。あなたのコメントを読んだ後、私は次に何をするのかを知っています - 私はどのくらい私がファームウェアに入れてもいいかわかりませんでした(明らかに、あらかじめコンパイルされたバイナリはもう利用できません)。私はちょうどこれらの小さなマシンで作業する方法のための気持ちを取得し始めている。ありがとうございました! – Robert

+0

また、 'node.heap()'に注目したいかもしれません。もちろん、[NodeMCU Luaの開発者のFAQ](http://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/)のフットプリントを減らす方法のヒント: –

答えて

0

sg()を1回のターンで7,200回呼び出しています。タイムアウトを避けるために処理を中断する必要があります。これは、ESP8266 SDKに必要な方法です。

詳しくは、ドキュメントのmy FAQを参照してください。

関連する問題