Xbee串口MATLAB

时间:2014-10-01 03:50:20

标签: matlab xbee

我正在通过MATLAB从串口读取数据。串行端口由XBee模块连接。

我已经成功地读取了数据并且还可以正确地发送数据。这是代码;这很简单:

s = serial('COM4', 'BaudRate', 9600, 'Terminator', 'CR', 'StopBit', 1, 'Parity', 'None');
fopen(s);

while(1)
    while(s.BytesAvailable==0)
    end

    fprintf(s,'1');
    fscanf(s)
    s.BytesAvailable
end

因此,正如您在主循环的第一阶段所看到的那样,我正在等待输入缓冲区中的数据可用。代码检测到数据后,立即发送一个字符。然而执行并不像我预期的那么快。使用示波器,Xbee DIN和DOUT上的探头,在数据发送到PC和数据来自PC之间的时间间隔为34 ms。

对于我的应用程序,34毫秒是关键时刻。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

为什么以9600波特率使用USRT(通用串行接收器/发送器)?

您的USRT设置,“'BaudRate',9600,'StopBit',1”表示一个字节(8位)的数据通过线路传输10位(1个起始位,8个数据位和1个停止位)其速度为每秒9600位,因此每秒960字节是数据的最大速度。

大约每毫秒一个字节(毫​​秒)。

XBee使用5个字节作为标头,因此其标头开销约为5 ms。

如果使用25-28字节的数据,则34 ms并不是那么糟糕。如果您只使用几个字节的数据,则可能会遇到其他问题。

要改善此问题,您应该使用更高的USRT费率。

如果使用以下设置,则可在3 ms - 4 ms内完成数据传输。

s = serial('COM4', 'BaudRate', 115200, 'Terminator', 'CR', 'StopBit', 1, 'Parity', 'None');

我只想在你的代码中将波特率从9600改为115200。