Невозможно получить непрерывные данные в MATLAB - PullRequest
0 голосов
/ 10 ноября 2019

Я успешно получаю данные (напряжение и ток) от оборудования BMS в STM32CubeIDE, но когда я передаю данные в MATLAB поочередно, получая ограниченные данные, например 35 или 100. Я проверил значение на док-лампе / гипер-терминале, оно показывает правильное непрерывноеdata.

Мой код в MATLAB:

clc
clear all
close all
delete(instrfind)
s=serial('COM4','BaudRate',9600,'Terminator','CR');  
fopen(s);
while 1
binary_data = fread(s, 5); 
str = char(binary_data');  
data = str2num(str);
plot(data);
end

1 Ответ

1 голос
/ 11 ноября 2019

В качестве специального решения вы можете использовать fread вместо fscanf:

Предполагая, что вы сохраняете HAL_UART_Transmit(&huart3, a, 5, 1000); в STM32.
Вы передаете 5 байтов в каждой передаче.
Вы можете прочитать 5 байтов в массив символов (в MATLAB), используя fread, и преобразовать массив символов в число.

binary_data = fread(s, 5); %Read 5 bytes from serial port (5 uchar elements) to array binary_data.
str = char(binary_data'); %Convert uchar array to character array. 
data = str2num(str) %Convert character array to number

При чтении двоичных данных число байтов для чтения должно быть известно заранее (5 байт в вашем случае).
нет необходимости в \n завершении.


Пример для построения непрерывного графика:

Выполните следующий код как «автономный», чтобы увидеть, как он работает.

Заменить строки кода согласно комментариям.

X = 1:100;
Y = zeros(1, 100); %Initialize array for storing 100 samples
figure;
h = plot(X, Y, 'o-'); %Plot the initial graph before loop begins.  

%Endless loop, until user closes the graph figure.
while (isvalid(h))
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %Replace the following line:
    data = rand();

    %With:
    %binary_data = fread(s, 5); %Read 5 bytes from serial port (5 uchar elements) to array binary_data.
    %str = char(binary_data'); %Convert uchar array to character array. 
    %data = str2num(str) %Convert character array to number
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %Move elements 2:100 one to the "left side", and add new sample at the end (at the "right side").
    Y(1:99) = Y(2:100);
    Y(100) = data;

    h.YData = Y; %Update plot data.
    drawnow; %Refresh plot drawing

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %Remove the following line:
    pause(0.1);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end

Примечание:
Существует вероятность того, что построение графиков (графика) будет недостаточно быстрым.
В этом случае вам необходимо построить каждые 10 выборок (или каждые 100 выборок) в зависимости отСкорость STM32 передает образцы данных.

...