gpt4 book ai didi

matlab - Arduino Matlab串口通讯速度

转载 作者:行者123 更新时间:2023-12-05 07:44:43 25 4
gpt4 key购买 nike

我在简单的 Arduino - Matlab(2014 年和 2016 年)串行通信中遇到了一些问题。我有一个简单的 Arduino 草图,它从传感器收集值并通过串行发送它们。 Arduino 等待字符 'r' 开始读取/发送程序

void loop()
{
if(Serial.available())
{
cmd = Serial.read();
if(cmd == 'r')
{
while(1)
{
accelgyro.read();
//acc
raw_values[0] = accelgyro.a.x;
raw_values[1] = accelgyro.a.y;
raw_values[2] = accelgyro.a.z;

//gyro
raw_values[3] = accelgyro.g.x;
raw_values[4] = accelgyro.g.y;
raw_values[5] = accelgyro.g.z;

for (j=0; j<6; j++)
{
Serial.write (highByte(raw_values[j]));
Serial.write (lowByte(raw_values[j]));
}
delay(2);
}
}
}
}

以及对应的Matlab代码:

Arduino = serial('COM6','BaudRate',115200);
fopen(Arduino);
flushinput(Arduino)

acqSize = 1000;

pause(2)

'start'
fwrite(Arduino,'r');
tStart = tic;

while( i <=acqSize)

if(Arduino.BytesAvailable>packetSize-1)

lastData = fread(Arduino,packetSize) ;
raw_matrix(:,i) = byteToInt(lastData);
raw_matrix(7,i) = toc(tStart);
tStart = tic;
i=i+1
end
pause(0.001);
end

其中 packetsize 是每个周期从 Arduino 发送的字节数,即 12

问题是速度真的很慢,我检查了两次读取之间的时间,我得到的结果如下图所示 enter image description here

除了这些周期性出现的峰值外,我的速度还不错。在这些情况下,两次读数之间的间隔大于 0.1 秒。

最佳答案

Matlab 中的计时与 Arduino 上的计时不同。嵌入式硬件和小型操作系统(操作系统)(如用于 Arduino 的操作系统)是硬实时的,可以非常准确地保持计时。但是,Matlab 需要在 Windows、Linux 等操作系统上运行。这些不是实时操作系统,时间不能准确和可预测。因此,如果操作系统忙于做其他事情,时间抖动可能会增加。此外,“暂停(0.001)”即使对于非常强大的 CPU 也是无法实现的。如果 CPU 消耗对您来说不是问题,您可以删除“暂停”,或者您可以使用占用 CPU 并更快返回的代码,如下所示:

function delay(seconds)
% function pause the program
% seconds = delay time in seconds
tic;
while toc < seconds
end
end

更多讨论可以在这里找到: Pause function in matlab for 1 millisecond

关于matlab - Arduino Matlab串口通讯速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42595678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com