ArduinoをMATLABで1ミリ秒間一時停止するにはどうすればよいですか?


8

このコード行を使用して、MATLABをUnoに接続することができました。a = arduino('COM4');このパッケージを通じて:ArduinoのMatlabサポートパッケージ

現在、MATLABは[Arduinoのような]すべてのコンポーネントを同期する私のメインスクリプトです。

以下を使用するだけで、ステッピングモーターにパルスを送信できます。

void loop() {
    digitalWrite(2, HIGH);
    delay(1);
    digitalWrite(2, LOW);
    delay(1);
}

これは正常に動作し、モーターが約2ミリ秒に1回動きます。私の問題は、MATLABのインターフェイスを介してこれと同じ遅延を生成する方法が見つからないことです。MATLABにpause()関数があることは知っていますが、MATLABで次のようにループを設定すると、

a = arduino('COM4');
for m = 1:400
    a.digitalWrite(2, 1);
    pause(0.001);
    a.digitalWrite(2, 0);
    pause(0.001);
end

各ステップは長くかかります-それぞれ約200ミリ秒。

Arduinoに送信されるデジタル高/低の間の一時停止を作成するための他のオプションは何ですか?Arduinoを介して、Matlabからの結果を制御できたらいいですね。


GRBLのようなものが必要なようです。これは、コマンド言語を解釈し、調整されたステッピングモーターモーションを生成するarduinoボード用のスタンドアロンプ​​ログラムです。これは主にCNC機械加工を対象としていますが、おそらく必要なことを行うことができます。
コナーウルフ

回答:


6

観測された遅延の増加は、MATLABからArduinoにコマンドを送信して、コードが要求されたコマンドを実行するのにかかる時間によるものです。あなたの場合はa.digitalWriteです。したがって、MATLABの遅延を使用したパルス間の実際の時間は、0.001ポーズに、ボーレートの時間とパケットサイズを掛けた後、デコードして実行します。

リモートでステップモーターのタイミングを制御するMATLABのこのソリューションを追求しないことをお勧めします。この潜在的なカップリングはイライラする制限になるでしょう。ステップモーターの場合、タイミングがそのような潜在的な実行を許すことができないことに注意してください。したがって、すべての3Dプリンターとステップモーターを備えた多くのCNCは、Gコード(宛先を含むモーター移動コマンド)を取得するArduinoを使用し、リアルタイムファームウェアは許容範囲内でステッピングを処理します。

ステップモーターシールドを備えたgrblファームウェアのようなものを使用して、MATLABに必要なGコードを送信させることをお勧めします。より多くの機能を備えているが、3Dプリント用に調整された他の場所があります。grblはより単純で、モーターを動かす点までまっすぐです。


0

レイテンシなしでリアルタイムで実行しようとしているのか、MATLABからモーターの遅延時間を単に調整したいのかは、質問からは明らかではありません。後者の場合、シリアル経由で遅延データ(パルス間の間隔を表す数値など)を送信して、Arduinoプログラムが受信し、必要に応じてモーター遅延を更新することをお勧めします。または、RAMの制限を考慮して、正確なタイミングで次々に実行できる一連の遅延全体を送信できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.