www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Hardware in the Loop mit Matlab/SIMULINK und RS232


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ist es möglich eine Regleung in Matlab/Simulink über die 
RS232-Schnittstelle mit der Hardware zu verbinden. (Also ohne extra 
Hardware)

Messwert vom Sensor empfangen:
Sensor ---> µC ---> RS232 ---> Matlab

Sollwert senden:
Matlab ---> RS232 ---> µC ---> Aktor

und alles natürlich in Echtzeit.

Braucht man hierfür vielleicht extra Toolboxen ?
Gibts hierfür ein Beispiel Projekt? Oder ein empfehlenswertes Buch?

Gruß

Autor: pomes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann RS232 direkt unter Matlab nutzen:

help serial

Evtl musst du dir eigene Blöcke programmieren für die Kommunikation in 
Simulink  oder   m files in Matlab.

Extra Toolboxen braucht man keine - falls du keine besondere für die 
Regelung brauchst.

Tip: Nimm Embedded Matlab Blöcke in Simulink, die sind echtzeitfähig.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, also ich hab es jetzt soweit hinbekommen dass ich senden kann.
Irgnedwie ragiert aber mein Mikrocontroller viel zu langsam auf die 
Befehle.
Ich hab gemerkt das Matlab die Daten irgendwie Puffert und dann Stück 
für Stück weitergibt. Also der Flashenhals ist (glaube ich zu mindest) 
bei Matlab. Breche ich die While-Schleiche ab bewegt sich mein Motor 
immer noch.

Ich hab jetzt ca. 4 Stunden lang gesucht und bin nicht weitegekommen.

Hier mein Skript:
Eine Zahl wird im 10 ms Takt von 1 bis 1000 hoch und wieder 
runtergezählt und dabei jeweils einmal rausgesendet.

Würde mich sehr über Hilfe freuen.

--------------------------------------------------------------
% Creating serial port object
serobjw = serial('/dev/cu.SERIAL1-SPP-1'); 

%Set connection properties
serobjw.Baudrate = 115200;        % Set the baud rate at the specific value
set(serobjw, 'Parity', 'none') ;     % Set parity as none
set(serobjw, 'Databits', 8) ;        % set the number of data bits
set(serobjw, 'StopBits', 1) ;        % set number of stop bits as 1
set(serobjw, 'FlowContro', 'none') ; % set FlowContro to none

set(serobjw, 'OutputBufferSize', 100) ;     
      

fopen(serobjw) ;



speed = 100;
tempCountUp = 1;

tempStringPart1 = '['; 
tempStringPart2 = ']';



while (1)
    
    cString = sprintf('%s%05.0f%s', tempStringPart1,speed,tempStringPart2);
    
    if (strcmp(serobjw.TransferStatus,'write') == 0)    
        fprintf(serobjw,cString,'async');
    end
    
    if(speed == 1) 
        tempCountUp = 1; 
    end
    
    if(speed == 1000)
        tempCountUp = 0; 
    end
    
    if(tempCountUp == 1) 
        speed = speed + 1; 
    end
    
    if(tempCountUp == 0)
        speed = speed - 1; 
    end

    cString
  
    pause(0.01);

end

--------------------------------------------------------------

Autor: dassas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Matlab puffert zwischen hier maximal 100 Bytes. Also bei der 
Geschwindigkeit ca 8 ms.

Dies kann man mit 'sync' anstatt 'asyns' abschalten - dann wartet Matlab 
bis der Puffer leer ist.

Je nach Betriebssystem wird evtl auch ein Puffer bei der Schnittstelle 
selber eingebaut.

Man kann auch mit Matlab Pufferbelegung nachschauen 
serobjw.BytesToOutput oder ähnlich.

Versuche mal fwrite um Bytes anstatt eines Strings zu senden.

Evtl macht auch die "Echtzeitfähigkeit" von Matlab oder dem 
Betriebssystem Probleme.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem 'async' und 'sync' habe ich schon probiert, aber die 
Geschwindigkeit ist die gleiche. Es liegt ganz sicher am Puffer. Nur WO 
soll ich da nach schauen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.