題:
如何通過MATLAB將Arduino暫停1毫秒?
Blundering Philosopher
2014-02-12 07:37:24 UTC
view on stackexchange narkive permalink

我已經能夠通過以下代碼行將MATLAB連接到我的Uno: a = arduino('COM4'); 通過以下程序包: Matlab支持Arduino的程序包

現在,MATLAB是我的主要腳本,它將同步所有組件(例如Arduino)。

我能夠通過使用以下命令向步進電機發送脈衝:

 無效循環(){digitalWrite(2,HIGH); delay(1); digitalWrite(2,LOW); delay(1);}  

這很好,它將使電動機每2毫秒移動一次。我的問題是我找不到通過MATLAB接口產生相同延遲的方法。我確實知道MATLAB具有 pause()函數,但是當我在MATLAB中像這樣設置循環時:

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

每個步驟花費的時間更長-每個步驟大約需要200毫秒。

在發送數字高/低之間創建暫停的其他方法還有哪些到Arduino?如果我可以通過Arduino控制Matlab的結果,那就太好了。

聽起來您需要像[GRBL](https://github.com/grbl/grbl)之類的東西。它是arduino板的獨立程序,可解釋命令語言並產生協調的步進電機運動。它主要用於CNC加工,但可以滿足您的需求。
二 答案:
mpflaga
2014-02-12 08:51:06 UTC
view on stackexchange narkive permalink

觀察到的延遲增加是由於將命令從MATLAB發送到Arduino使其代碼執行所請求的命令所花費的時間。您的情況是a.digitalWrite。因此,使用MATLAB的延遲,脈沖之間的實際時間為0.001暫停加上波特率時間乘以數據包大小並進行解碼然後執行。

我建議不要採用MATLAB控制步進電機定時的解決方案,遠程地。由於這種潛在的耦合將是一個令人沮喪的限制。注意,對於步進電機而言,定時無法提供這種潛在的執行力。因此,所有3D打印機和許多帶有步進電機的CNC都使用Arduino的Arduino,它們會獲得G代碼(帶有目標的電機移動命令),並且實時固件會在允許的誤差範圍內處理步進。

我建議您使用一些東西例如帶有步進電機護罩的grbl固件,然後讓MATLAB發送所需的G代碼。那裡有其他功能更多,但專門針對3d打印的地方。 grbl更加簡單直接,可以直接移動電動機。

MichaelT
2018-06-23 05:06:31 UTC
view on stackexchange narkive permalink

目前尚不清楚您是要獲得無延遲的實時執行還是只是想通過MATLAB調整電機延遲時間。如果是後者,一個好方法是發送延遲數據(例如代表您希望在脈沖之間間隔多長時間的數字)以串行方式發送,您的Arduino程序將根據需要接收並更新電動機延遲。或者,考慮到RAM的限制,您可以發送完整的延遲序列,這些延遲可以精確的時序依次運行。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...