Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Raspberry Pi und MAX6675 Thermocouple

mayr21
2020-03-30
2020-04-05
  • mayr21 - 2020-03-30

    Hallo,
    grundsätzlich bin ich mit Codesys relativ gut vertraut, Programme am Raspberry laufen bereits.

    Mein Projekt:
    Ich will eine Temperaturregelung für einen Ofen fürs Pulverbeschichten bauen. Tempbereich: 20-200°C +- 5 Grad sind kein Problem.

    Meine Hardware:
    Raspberry Pi 3 B+; Als Thermo-Modul verwende ich das MAX6675 (Datenblatt: https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf).
    Verkabelt habe ich es wie in der Tabelle (GPIOs) dargestellt. Müsste doch richtig sein oder?

    Ich habe bereits den SPI Master eingefügt, sowie die benötigte Bibliothek importiert und die Gerätebeschreibung eingefügt. (siehe Screenshots)
    Anleitung von hier: https://forge.codesys.com/drv/spi-temperature/home/Home/

    Nun meine Frage: Wie gehören die Paramter eingestellt? "Max Speed" sind doch die 4,3MHz (aus Datenblatt), '/dev/spidev0.0' müsste auch passen da ich ja CE0 verwende. Welche Paramter gehören bei "SPI Mode" und bei "SPI Bits per Word"?

    Ich bekomme zwar einen Temperaturwert herein, allerdings aktualisiert er sich nicht, "friert also ein".

    Ich hoffe, dass mir jemand weiterhelfen kann.

    Lg

     
    • Ingo

      Ingo - 2020-03-30

      Der besagte Treiber stammt von mir. Die Auflösung und die Bitweite hast du korrekt aus dem Datenblatt übertragen. Warum der Wert nun einfriert kann ich schwer deuten.

      Ich hatte recht seltsame Effekte wenn die Frequenz des SPI Masters zu hoch war. Was hier zählt ist im übrigen die Limitierung des RPI und nicht die des Temperaturmoduls. Ich würde mit der Frequenz jedenfalls deutlich runter gehen, da du ohnehin nicht so schnell samplest. Ich kenne das Limit des RPI leider nicht mehr aus dem Kopf.

      Sonst fällt mir spontan leider auch nix ein woran es softwaretechnisch noch liegen könnte.

       
  • mayr21 - 2020-03-30

    Ok, danke schonmal für deine schnelle Antwort.

    Hast du zufällig einen Treiber für ein 128x64 OLED Display über I2C?

     
    • Ingo

      Ingo - 2020-03-30

      Haha nice try, aber leider nein. ;)

       
  • mayr21 - 2020-03-30

    Mit diesem einfachen Code müsste ich doch die Werte hereinladen können oder?

     
  • mayr21 - 2020-04-03

    Kann mir jemand helfen??

    Ich bekomme beim Starten der Applikation einen Wert zB 28.25°C, dieser steht dann aber fest und aktualisiert sich nicht??

    Bitte um Hilfe!

     
    • Ingo

      Ingo - 2020-04-03

      OK, kannst du mal weiter damit rumspielen und uns schreiben was du tun musst, dass sich der Wert aktualisiert?

      Z.B.:

      • reset der Applikation
      • stop / start der Applikation
      • runtime neustarten
      • Warmstart des Targets
      • Kaltstart des targets

      Je nachdem wie es sich genau verhält können wir den Fehler ggf. weiter eingrenzen.

       
  • mayr21 - 2020-04-03

    ausloggen wieder einloggen --> alter Wert, nix ändert sich
    stop/start --> neuer Wert
    Warm restart --> neuer Wert
    Cold restart --> neuer Wert

    Reset der Applikation? Was meinst du?

     
    • Ingo

      Ingo - 2020-04-03

      Klingt nach etwas seltsamen in deiner Testapplikation. Denn Stop / Start
      macht keinen großen Unterschied zu dem Normalbetrieb. Schick mal die
      Applikation rüber. Ich schau drauf.

      Was ich kontrollieren will ist die Task Konfiguration und das "Task
      Deployment" das ist eine Seite in der PLC Konfiguration. Und dann mal
      schauen...

       

      Last edit: Ingo 2020-04-03
  • mayr21 - 2020-04-03

    Danke für deine Hilfe schonmal! :)

     
    • Ingo

      Ingo - 2020-04-04

      Gern! Dauert aber noch bis heut Abend. Das Wetter ist zu schön, da kann ich
      nicht an den Rechner ;)

       
    • Ingo

      Ingo - 2020-04-04

      Bitte tu mir einen Gefallen und verlangsame die Cycle Time deiner Task auf mehrere Sekunden und erhöhe die Frequenz des SPI Master auf 1000Hz.

      Ich habe mir den gesamten Code, inklusive der RPI Peripherals durchgeschaut. Und ich kann mir nur vorstellen, dass wir zu schnell versuchen zu lesen.

      Sonst kann ich mir das Symptom nicht erklären. Insbesondere, dass es nach Stop und Start der Applikation wieder funktioniert ergibt sonst keinen Sinn. Denn es wird tatsächlich kein anderer Code durchlaufen. Der Unterschied ist nur, dass wir recht flott versuchen zu lesen bei einer nun sehr niedrigen SPI Frequenz von 5Hz. In dem Meetforge Projekt habe ich 1000Hz für die SPI Master Frequenz verwendet.

      Falls es daran liegen sollte, würde ich das natürlich auch im Treiber fixen, sodass das nicht mehr nötig sein wird ;)

       
  • mayr21 - 2020-04-05

    Vielen vielen Dank!!!

    Es funktioniert! Task-Zeit auf 1s, Master max speed auf 1000Hz --> es läuft!

    Danke!!

     
    • Ingo

      Ingo - 2020-04-05

      Weltklasse! Bei Gelegenheit behandele ich das Problem dann im Treiber. So
      ähnlich hatte ich das auch im D-Logg Treiber gemacht, da der auch zu
      schnelle Leseanfragen nicht vertragen hatte.

      Danke für das Feedback!

       

Log in to post a comment.