Forum: Mikrocontroller und Digitale Elektronik Echtzeitdatenerfassung mit Arduino UNO und Matlab


von Georg jun B. (berndigol)


Lesenswert?

Hallo Leute,

ich erfasse mit meinen Arduino Uno Spannungswerte mittels der 
zugehörigen ADCs. Diese werden anschließend über die serielle 
Schnittstelle an Simulink gesendet. Dort werden diese Daten mittels 
eines Scope angezeigt. Soweit funktioniert alles toll. Leider passt die 
Zeitachse in Matlab mit der Echtzeit nicht überrein. Mittels dem 
Simulinkblock Real Time Pacer kann eine deutliche Verbesserung erzielt 
werden.

Jedoch entstehen ebenfalls noch Ungenauigkeiten von 10-30ms.

Weiters habe ich es mit Real-Time Synchronizatin versucht was leider 
immer zu einen Absturz führt vom meinen Windows 7 BS.

In Simulink verwende ich die Arduino Bibliothek.

Gibt es eine Möglichkeit die Daten des Arduino UNO in Echtzeit zu 
erfassen. Sprich jeden Abtastzeitpunkt in Echtzeit (0.1ms) wird im Scope 
ein neuer Wert angezeigt.

Wäre dies Möglich so könnte ich mit einer Systemidentifikation 
fortfahren.

Danke für die Antworten
mfg

von Arc N. (arc)


Lesenswert?

Georg jun B. schrieb:
> Jedoch entstehen ebenfalls noch Ungenauigkeiten von 10-30ms.
>
> Weiters habe ich es mit Real-Time Synchronizatin versucht was leider
> immer zu einen Absturz führt vom meinen Windows 7 BS.
>
> In Simulink verwende ich die Arduino Bibliothek.
>
> Gibt es eine Möglichkeit die Daten des Arduino UNO in Echtzeit zu
> erfassen. Sprich jeden Abtastzeitpunkt in Echtzeit (0.1ms) wird im Scope
> ein neuer Wert angezeigt.

Zu faul nachzulesen was dieser Arduino kann...
Gehen die Daten tatsächlich über eine echte serielle an den PC oder über 
USB? Falls letzteres, dann geht dies nicht. Allenfalls könnte 
zwischengespeichert werden, um diesen Eindruck zu erzeugen (die 
begrenzte Bildwiederholrate und die langsame Verarbeitung im Gehirn 
sprechen dann allerdings immer noch dagegen...)

von Brater (Gast)


Lesenswert?

Georg jun B. schrieb:
> Sprich jeden Abtastzeitpunkt in Echtzeit (0.1ms) wird im Scope
> ein neuer Wert angezeigt.

Erstmal solltest du "Echtzeit" genau definieren. Und da sind 0.1 ms 
schon sehr kurz. Oft zählen viel größere Zykluszeiten noch als 
"Echtzeit".

Das Problem an der Arduino Standard-Funktion zum Auslesen von 
Analogdaten ist die fehlende Performance.
Wenn du das Problem gelöst hast, musst du noch schauen/abschätzen, ob 
auch die eingestellte Baud-Rate des virtuellen Com-Ports ausreicht.

Du solltest erstmal dein Problem von dem blöden Matlab entkoppeln und 
schauen, ob du die geforderte Echtzeit-Anforderung mit dem Arduino 
überhaupt schaffst. Ich habe im Hinterkopf, dass ein normaler Atmega ADC 
nicht mehr als 32 kHz Samplefrequenz schafft (korrigiert mich, ich habe 
auch nur Halbwissen). Und das auch definitiv nicht mit den 
Standard-Arduino-Funktionen.

Ein Arduino ist kein Oszi! Ansonsten schau mal nach Poor Man's 
Oscilloscope.

von Georg jun B. (berndigol)


Lesenswert?

>Gehen die Daten tatsächlich über eine echte serielle an den PC oder über
>USB? Falls letzteres, dann geht dies nicht.

Warum nicht?

>Du solltest erstmal dein Problem von dem blöden Matlab entkoppeln und
>schauen, ob du die geforderte Echtzeit-Anforderung mit dem Arduino
>überhaupt schaffst.

Der Arduino kann bei maximaler Auflösung bis 15kSPS.

Angenommen ich baue jetzt in Matlab Simulink einen einfachen Regler auf 
(z.b diskreter PI-Regler) und stelle eine Abtastzeit von 0.01sec ein und 
spiele diesen Regler anschließend auf den Arduino runter.

Der Arduino braucht für die Berechnung eines Ausgangssignals 
0.005sec,also die Hälfte der Abtastzeit d.h es entsteht kein "Überlauf". 
Gibt der Arduino dann tatsächlich alle 0.01sec einen neuen Wert auf 
seinen Ausgang den DAC aus?

mfg

von Rene Vest (Gast)


Lesenswert?

Georg jun B. schrieb:
>>Gehen die Daten tatsächlich über eine echte serielle an den PC
> oder über
>>USB? Falls letzteres, dann geht dies nicht.
>
> Warum nicht?
>
>>Du solltest erstmal dein Problem von dem blöden Matlab entkoppeln und
>>schauen, ob du die geforderte Echtzeit-Anforderung mit dem Arduino
>>überhaupt schaffst.


Hast du es mittlerweile hinbekommen ? Wenn ja, könntest du eine Lösung 
präsentieren bzw. kurz zeigen ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.