# Codesys Rpi PWM SSR



## ozznet (10 Mai 2016)

Hallo

Mit einer Heizpatrone möchte ich gerne einen Tank heizen und den dann konstant auf Temperatur halten..
Dazu möchte ich gerne die Heizpatrone per Solid State Relais am PWM des Rpi hängen.. Nun die Frage, ist ssr dafür geeignet? bzw. Geht das mit Codesys?


----------



## Hendrik (10 Mai 2016)

Hey wie schnell musst du denn? 
Du kannst meines wissens mit dem RPI und Codesys nur 1ms Zyklen. 
Pro Zyklus eine änderung der GPIOs.


----------



## ozznet (10 Mai 2016)

Achso also ein aus im code? Wenns was fertiges geben würde wär besser.. Pmw eben.. wie schnell gehn ssr?

Gesendet von meinem SM-G900F mit Tapatalk


----------



## Hendrik (10 Mai 2016)

Weiß ich so nicht. 
Du kannst aber mit codesys ein Python Script starten -  da geht die Ansteuerung der GPIO auch direkt als PWM.


----------



## wat84 (10 Mai 2016)

Hallo,

ich mache das so mit einer Heizpatrone für Luft. Geht wunderbar. Ich erreiche sogar gute Ergebnisse bei 100 ms Zykluszeit und 1 s Periode (also z.B. 100 ms an, 900 ms aus).
Zwar nicht mit Rpi, aber das ist ja nicht so wild von wo das SSR sein Signal bekommt.
Ich nehme dafür den PID-Regler und gebe den Stellwert 0-100 % aus, die ich dann in ein PWM-Signal (z.B. fertiger Baustein aus OSCAT-Lib) umwandel.


----------



## HausSPSler (10 Mai 2016)

ja alles gesagt:
Nochmals zusammengefasst:
1. PWM selber in IEC - die Task kann auch <1ms beim Pi sein (500us) 
2. PWM über den PWM GPIO dazu das Kernel Modul verwenden und über SysCommandExecute  aufrufen
3. Adafruit Zusatzkarte  -> Adafruit 16-channel/12-Bit PWM über I2C angesteuert
vielleicht gibt es noch andere Optionen... aber das sind die "Gängigen"
Grüße


----------



## ozznet (10 Mai 2016)

Danke für die infos..
Wobei, könntest du das mit den Kernelmodulen +  SysCommandExecute  näher erläutern?
Hab jetzt oscatlib geladen und nen pwm baustein gefunden, wobei ich mir den erst anschauen muss...
PWM Zyklus bis 1 sek ist nicht weiter problematisch... 
Im gegenteil, ich denke es könnte problematisch werden mit dem SSR wenns zu schnell geht... Ken mich da aber rnicht so aus...
mfg


----------



## HausSPSler (11 Mai 2016)

Kernel modul: es gibt ja welche die das als Kernelmodul für Linux implementiert haben, schmeiss mal Google an.
Auch SoftPwm als python usw... du musst halt dann ein Linux commando in der shell aufrufen und das kann man ja auch in CODESYS über den IEC Code deiner Applikation tun.
Aber für deinen 1s PWM reicht OSCAT PWM dicke.
da brauchst du nicht lange rummachen...
Wie kommst du von 3.3V GPIO auf dein SSR?
Gibt es die für 3.3V?
Grüße


----------



## ozznet (11 Mai 2016)

Ok, danke.. Das SSR http://www.pollin.de/shop/dt/OTI1OT...ais_XURUI_XSSR_DA2420_3_32_V_20_A_240_V_.html soll anscheinend direkt über gpio angesteuert funktionieren

Gesendet von meinem SM-G900F mit Tapatalk


----------



## Hendrik (11 Mai 2016)

Moin,
ich würde auf jeden Fall ein Transistor vor dem SSR schalten - Schutz für den PI.

In der Beschreibung von dem SSR steht ein Steuerstrom: 6...25 mA die GPIOs können maximal 16mA wenn mich nicht alles täuscht.
Gruß Hendrik


----------



## ozznet (15 Mai 2016)

Kann ich machen... 
Habs jetzt mit led getestet und bemerkt dass das ganze mit höheren frequenzen unrund läuft je nach dem welche zykluszeiten man verwendet...
bis 10Hz mit 5ms zyklus schauts gut aus... Welche zykluszeiten kann man maximal haben am pi?


----------



## weißnix_ (16 Mai 2016)

Gerade eine AC-Heizpatrone würde ich garnicht per hektischem PWM ansteuern, sondern eher per Impulspaket.
Entweder "asynchron" über die Digouts in 10ms-Schritten (je ~ eine Halbwelle mehr). Das geht gut mit nullspannungsschaltenden SSR's. Da hast Du keinen störfrequenten Phasenanschnitt.
Das funktioniert sogar zur Drehzahlsteuereung für AC-Pumpen (Hatte ich 12 Jahre im Einsatz - Solarpumpensteuerung). Bei der Anwendung sind jedoch die Geräusche der Pumpe gewöhnungsbedürftig.
Außerdem muß man dann u.U. die Zahl der pos/neg Halbwellen im Auge haben wegen des Gleichrichtereffekts.

Oder Du schaust nach einem "Burst-Fire-SSR". Da hast Du dann einen proportionalen Steuerspannungseingang. Die Lösung würde ich favorisieren bei Analogausgangsverfügbarkeit.
http://www.crydom.com/en/products/control-relays/mcbc-series/

Bei entsprechender thermischer Trägheit des Gesamtsystems reicht aber in jedem Fall ein timergesteuertes PWM mit einer Periode >2s. Bei konstanten Zykluszeiten des Threads kannst Du einfach die Zyklen zählen zur Langzeit-PWM-Steuerung und die Zykluszeit auf 100ms einstellen. Dann hast Du quasi eine Schrittweite von je 5 Vollwellen je SPS-Zyklus. Das entspricht etwa dem, was ein handelsüblicher Temperaturcontroller macht. Nullspannungsschaltendes SSR vermeidet wieder unnötige Störungen.


----------



## ozznet (16 Mai 2016)

Danke für die Info, sehr interesant das Ganze..
Für Burst-Fire-SSR brauche ich einen stromregler bzw analog ausgang... was der Rpi nicht hat.. aber weil ich sowiso was davor schalten muss würde das schon irgendwie gehen, als alternative kann ich den sowiso noch mit pwm ansteuern... Das mit den Impulspaketen wäre auf jeden fall interesant... dabei müsste ich über einen gleichrichter und hochgeschwindigkeitszähler die impulse lesen oder? Wird nicht ganz einfach... Jedenfalls macht es sinn die Hardware entsprechend der möglichkeiten vorzusehen..
mfg


----------



## weißnix_ (16 Mai 2016)

Für eine einfache Heizung bitte nicht so kompliziert denken. Wie schon gesagt, funktioniert Impulspaketsteuerung ohne Feedback sogar tadellos für AC-Heizungspumpen. Eine Heizung (resistive Last mit thermischer Trägheit) sind die Anforderungen noch viel einfacher.

Wie ich schrieb, könntest Du eine Threadzykluszeit von >>20ms dafür nutzen, indem Du einfach die Programmdurchläufe zählst. Du brauchst weder Gleichrichter noch "Hochgeschwindigkeitszähler". Die Tanktemperatur ist ausreichendes Regelfeedback.

```
Pseudocode

durchlaufzähler:=durchlaufzähler+1;
if durchlaufzähler > 100 then durchlaufzähler:=0; heater:=true; end_if;
if durchlaufzähler > sollwert then heater:=false; end_if
```

So ungefähr könnte das aussehen. Bitte nullspannungsschaltendes SSR nutzen!
Der Code macht das gleiche, wie ein Burst-Fire-SSR und braucht nur ein DO (und für den Regler natürlich die Temperatur). Die theoretischen 100 Stufen sind natürlich Kokolores, 10 Stufen reichen. Dabei die Periode mit 2...5 Sekunden vorsehen.


----------

