Matlab Serial using wrong frequency?

1 view (last 30 days)
Guillermo Lacalle
Guillermo Lacalle on 21 Mar 2019
Commented: Guillermo Lacalle on 22 Mar 2019
Hello there.
So im using matlab for reading an Arduino, which I have programmed for sending data at 50Hz (1 sample per 0.02 sec).
And the problem Im facing is that matlab is reading those samples too slow.
I made a simple script to check the time it takes to read one sample:
s = serial(seriallist,'BaudRate',9600,'Terminator','CR');
fopen(s);
% s.ReadAsyncMode = 'manual';
% readasync(s)
tic
linea = fscanf(s);
toc
It takes 1,98 seconds for reading and I dont really understand why.
I really want it to go at 50Hz since what Im attempting to do is to plot the data on real time using a while (1) loop, and the latency right now is too high for the application to run smoothly.
Thanks in advance.

Answers (1)

Mark Sherstan
Mark Sherstan on 22 Mar 2019
MATLAB is not great for communicating with Ardiuno real time, if I remember 50 Hz is pushing the bounderies. A couple things you can try to speed up your program:
  • Change Baud rate to 115200
  • Send data as bytes (Serial.write instead of Serial.print, depending on your data on the Ardiuno side you might need to cast the values)
  • Try sampling 100 or 1000 values and calculate the average sample rate. Sometimes acquiring the first data point is slower then the rest espcially if you have anything in your void setup.
  • Have you installed the hardware support packages for MATLAB or Simulink?
Not sure if you have written a real time plotting function so thought I would also include this for you:
function [] = realTimePlotter()
% Set up figure, get properties, and label
figure
h = animatedline;
ax = gca;
ax.YLim = [0 5];
xlabel('Time (s)')
ylabel('Output Y [units]')
% Start a timer
tic
startTime = toc;
% Loop for 20 secounds
while toc < 20
% Random data
v = randi(4);
% Get current time and add to animation
t = toc - startTime;
addpoints(h,t,v)
% Update axes
if t < 5
ax.XLim = [0 10];
drawnow
else
ax.XLim = [t-5 t+5];
drawnow
end
end

Categories

Find more on MATLAB Support Package for Arduino Hardware in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!