SPI Anbindung Sensor Grundlagen

student-kl
2014-09-10
2014-09-10
  • student-kl - 2014-09-10

    Hallo,

    wir sind Studenten und befassen uns im Rahmen einer Studienarbeit mit Codesys in Verbindung mit dem Raspberry Pi, um einen späteren Laborversuch vorzubereiten, damit später andere Studenten den Umgang mit der SPS-Programmierung per Codesys lernen können.
    Hierbei wollen wir die SPI-Schnittstelle nutzen, um den Raspberry z.B. mit einem Sensor kommunizieren zu lassen.
    Hierzu haben wir uns das Beispielprojekt mit dem Temperatursensor "MCP3008Temperature.project" angeschaut, um dieses nachzuvollziehen. Bisher haben wir herausgefunden, dass die Bibliothek "Raspberry Peripherals" hierbei essentiell ist. Diese liefert, so wie wir es verstehen 6 Funktionen (Transfer, Beforewriteoutputs, etc.).
    Was uns verwundert hat war, dass im Programmcode im PLC_PRG keine dieser Funktionen genutzt wird, wie z.B. Transfer, um Daten zum Slave zu übertragen. Wir können leider nicht nachvollziehen, was der verwendete Programmcode im Beispiel für eine Funktion erfüllt.

    Welche Schritte müssen konkret eingeleitet werden, um eine korrekte SPI Kommunikation mit einem Sensor (z.B. Temperatursensor) herzustellen?
    - wie initialisiere ich den Sensor?
    - wie kann ich Daten senden/empfangen?
    - kann andere Hardware verwendet werden, oder muss hierzu die Bibliothek umgeschrieben werden?

    Wir freuen uns über eine hilfreiche Antwort, damit wir in Zukunft einen entsprechenden Versuch in unserem Labor einbinden zu können, damit die Studenten lernen mit Codesys zu arbeiten.

    Studentengruppe der FH Kaiserslautern

     
  • Lambda - 2014-09-10

    Hallo Studentengruppe,

    wie Ihr schon richtig erkannt habt ist für die SPI Kommunikation die Lib Raspberry Peripherials
    unerlässliche, diese wird wenn Ihr ein neues SPI Gerät einfügt mit der dazugehörigen LIB für
    das Gerät eingefügt und eine FB Instanz erzeugt. Durch das Einfügen des neuen Geräts werden
    dann die entsprechden LIB's automatisch aufgerufen und müssen sozusagen nicht mehr extra
    im eigentlichen Projekt aufgerufen werden.

    Schaut euch diesbezüglich auch das mal an: http://forum.codesys.com/viewtopic.php?f=21&t=5744.

    Da findet Ihr eine Beschreibung wie Ihr eigene SPI und I²C Geräte in CoDeSys integrieren könnt.

    Folgende Schritte sind einzuhalten für eigene Geräte:
    1. Eine eigene Gerätebeschreibung im XML Format erstellen
    2. Eine Eigene LIB passend zu meinem Gerät erstellen
    3. Gerätebeschreibung sowie LIB in der Repository installieren
    4. Gerät einbinden
    Die Punkte 1-4 sind in der Anleitung von 3S gut beschrieben, findet Ihr in oberen Link

    Den Datenempfang sowie das Daten senden müsst Ihr in Eurer Lib steuern, bei SPI ist es ja so,
    dass man nur Daten empfangen kann, wenn man auch Daten sendet, also sozusagen Full duplex
    Betrieb.

    Die Initialisierung des Sensors muss entsprechend dem Datenblatt des Sensors erfolgen, oder meint Ihr
    die Initialisierung des SPI Bus? Der SPI - Bus wir im Body der Device Lib eingestellt, also wie Ihr unten
    seht bevor die Funktion Init aufgerufen wird, in diesem Fall wird wird _diMode auf 3 gesetzt.

    SUPER^();

    CASE _iState OF
    0:
    _diMode:=3; // SPI Modus, 3= CLK in Ruhe high, Datenübernahme bei steigender Flanke
    IF SUPER^.init() THEN
    _iState := 1;
    END_IF
    1:
    _iState := 10;
    END_CASE

    Wenn Ihr andere Hardware verwendet, dann müsst Ihr die Gerätebeschreibung sowie die
    Device Lib anpassen.

    Gruß Werner

     

Log in to post a comment.