1

以下のコードを使用して、Cortex M3 マイクロコントローラーからの 5 つのアナログ入力をリアルタイム (ライブ タイム) にプロットしています。しばらくして(数秒)、プロットがそれに応じてレギングしていることに気付きました。ラグは約10秒で、どうやらそれは増加し続けています。以下のコードのアスタリスクの間の行にコメントを付けると、ラグがなくなったことに気付きました。これは、マイクロコントローラ モジュールの LED が一定の速度で点滅し続けていたことに気づきました。マイコン側ではないことを確認するため、問題のなかったPuttyも使用しました。したがって、信号のプロットが問題の原因であると想定しています。なぜこれが起こっているのか誰にも分かりますか?この問題を解決するために私にできることはありますか?

以下は、使用されるコードです。

% Reference: https://developer.mbed.org/cookbook/Interfacing-with-Matlab (SEE 'Serial Communication' SECTION)

delete(instrfindall);             % if any port is already opened by MATLAB its gonna find and close it

TIMEOUT = 5;    %time to wait for data before aborting
XPOINTS = 1000;   %number of points along x axis

try   % this is the try/catch to Handle Errors

    %create serial object to represent connection to mbed
    mbed = serial('COM5', ...
                  'BaudRate', 9600, ...
                  'Parity', 'none', ...
                  'DataBits', 8, ...
                  'StopBits', 1);       %change depending on mbed configuration

    set(mbed,'Timeout',TIMEOUT);        %adjust timeout to ensure fast response when mbed disconnected

    fopen(mbed);        %open serial connection

    position = 1;       %initialise graph variables
    time = 1;
    x = [(1:XPOINTS)' (1:XPOINTS)' (1:XPOINTS)' (1:XPOINTS)' (1:XPOINTS)'];
    xlabels = (1:XPOINTS);
    y = zeros(XPOINTS,5);

    while(1)

        values = fscanf(mbed, '%d,%d,%d,%d,%d');    %get values from serial into vector 

        y(position,:) = values';    %put into y to be displayed

        %update position on x-axis and x-axis labels
        xlabels(position) = time;
        time = time + 1;
        if (position < XPOINTS)
            position = position + 1;
        else
            position = 1;
        end

        %*******************************************************************************************
        %display
        plot(x,y);
        set(gca, 'XTick', 1:XPOINTS);
        set(gca, 'XTickLabel', xlabels);

        drawnow;    %this is required to force the display to update before the function terminates
        %*******************************************************************************************

    end

    fclose(mbed);   %close connection
    delete (mbed)   % deleting serial port object
    clear mbed                               
    clear all

catch
    %in case of error or mbed being disconnected
    disp('Failed!');
    fclose(mbed);   %close connection to prevent COM port being lokced open
    delete (mbed)                             % deleting serial port object
    clear mbed                               
    clear all
end 
4

0 に答える 0