2017-09-20 101 views
0

我目前的項目需要Arduino Uno通過串行與Arduino Mega進行通信,我想提高數據傳輸速率。試圖通過串行提高Arduino到Arduino的通信

此Arduino Uno通過使用analogRead()(我已經測試過)通過橋接電路從應變儀提取信息。然後它通過串口將這些信息發送給Mega,然後使用USB電纜和串行通信將其發送到計算機。

這個Mega電路板是必需的,因爲Uno放置在一個旋轉軸上,它與Mega之間的通信是通過一個圓形光電耦合器完成的,我已經測試過,它也在工作。

有了這個,我正在以190Hz讀取旋轉的Uno的數據。我相信大部分問題是由於代碼中存在delay(5);,但即使將其降至3ms也足以讓數據以缺失字符到達。

歐諾代碼:

void setup() { 
    Serial.begin(19200); 
} 

void loop() { 
    Serial.println(analogRead(A0)); 
    delay(5); 
} 

兆碼:發送

char t; 
void setup() { 
Serial.begin(9600); 
Serial1.begin(19200); 
} 

void loop() { 
    if (Serial1.available()>0) 
    { 
     t = Serial1.read(); 
     Serial.print(t); 
    } 
} 

的數據始終是從0到1023的整數,因爲它來自analogRead(),所以也許我可以編碼它更好,但我不知道該怎麼做,或者如果這將解決更大的問題,必要的delay(5);

非常感謝你

+0

究竟是什麼問題?你首先說你想提高數據傳輸速率,但後來提到它正在丟失數據。 190Hz還會在哪裏出現?在你的代碼中唯一的波特率是9600和19200. –

+0

所以問題如下:我需要提高這個系統的數據採集率。目前我正在以190Hz的速率從傳感器獲取信息。數據通常以4個字符的字符串形式發送:實際數字爲3,而在'println();'中有一個\ n,我每秒獲得這個數據190次。我提到的丟失數據不會發生,如果我將延遲保持在5ms,但據我所知,由於這種延遲,我無法每秒獲得超過200個數據樣本。 –

回答

1

考慮您在Mega上配置的數據傳輸速率:19200 bps輸入和9600 bps輸出。另外考慮到Serial.print()是一個阻塞調用,所以你的程序必須等待整個傳輸完成後再循環讀取。這將有效地限制您的傳輸速率爲9600 bps(實際上由於Serial1.read()的開銷而降低)。作爲第一步,看看您是否可以將此速率提高至至少與輸入速率(19200 bps)相匹配。

如果您確信這一點,並且光耦合器連接不會丟失脈衝,您可以嘗試進一步提高串行速率和/或調查一箇中斷驅動設計,以允許並行讀取和寫入。

+0

謝謝,我會嘗試應用這些更改,並在明天到實驗室後再報告 –

+0

您好,我已將波特率更改爲57600,這也使我可以減少延遲()'到1ms。這已經將傳輸速率提高到780Hz,這樣更好。謝謝你的提示 –

+0

沒問題,祝你好運! – v1bri