Bachelor Thesis: Proportionalventil mit Arduino Due ansteuern (Sketch)

Hallo Leute,

im Rahmen meiner Abschlussarbeit, konzipiere ich Miniatur Modell eines Pumpkraftwerkes. Da ich kein Elektrotechniker oder Mechatroniker bin, benötige ich eure Hilfe um ein Proportionalventil (https://www.buerkert.de/de/produkte/proportionalventile/elektromagnetische-proportionalventile/150426)
mit Arduino Due anzuschließen. Ich weiss das ich einen Transistor dafür brauche aber was genau für einen und was für eine Schaltung sollte es sein ist mir leider nicht klar. Das Ventil wird per PWM Singnal angesteuert.

Danke im voraus :slight_smile:

Auch wenn ich mit diesen proportionalventilen keinerlei Erfahrung habe, hier im Datenbaltt steht:

Seite 1, relativ weit unten ist dein verlinktes 6024, da steht: 180 - 280 Hz PWM Frequenz, maximal 620 mA Stromaufnahme.
Nimm einen Logiclevel FET, wie den IRLZ44 und eine Freilaufdiode über das Ventil in Sperrichtung. Auch wenn eine 1A Diode reichen sollte, wenn du da mit PWM drauf gehst, muß die Diode oft Induktionsspitzen verheizen. Ich würde ein 3A Modell wählen.
Aber halt, der Due liefert ja nur 3,3V Logikpegel. Eigentlich ist bei dem geringen Ausgangsstrom ein Betrieb außerhalb der Spezifikation möglich. Wenn du alles richtig machen willst, dann nimmst du einen kleinen npn Transistor und schaltest mit dem dann die Gatespannung. Bei 24V brauchst du dann keinen Logic Level FET mehr, sondern mußt sogar noch per Spannungsteiler die Gatespannung verringern, da so ziemlich jeder FET bei 10-12V zuverlässig aufmacht und mehr als 18-20V am Gate garnicht verträgt.
Die PWM Frequenz mußt du halt irgendwie hinbiegen. Keine Ahnung, wie das beim Due geht, bei den Megas und Tinys braucht man nur ein Register für den Vorteiler manipulieren.
Ich kenne nur MFCs (MassFlowController) das sind spezielle Dosierventile für Gasmengen. Die werden entweder mit 0-10V angesteuert und geben ebeso ein 0-10V Signal als Rückmeldung des tatsächlichen Gasflusses. Oder halt sogar schon in digital.

Wieviele Proportionalventile hat denn das Miniatur Modell eines Pumpkraftwerkes? Beim Due sollten sich 180 - 280 Hz auch mittels digitalWrite machen lassen.

Hallo zuammen,

ich habe jetzt die Spezifikation des Ventils nicht gelesen. Während meiner beruflichen Zeit hatte ich häufig mit Prop Verntilen für Hydraulik und Pneumatik zu tun.

Propverntiele werden letztlich mit einem analogen Wert aungesteuert. Darin befindet sich ja eine Spule (Magnet) die meist gegen eine Feder ausgelenkt werden muss. Dieser analogen Stellgrösse wird eine Brummspannung ( PWM signal) überlagert. Je nach Ventilgrösse kann das 80-250Hz sein. Sie dient dazu Reibungsverluste bzw. Losbrechmomente der Dichtungen zu verringern. Der Schieber soll also etwas zittern. Dazu wird die Frequenz (Masse des Schiebers) und die Amplitude (Federkraft / Druck ) verstellt. Wie weit das Ventil geöffnet wird hängt von der Analogen Spannung / Strom ab. Das PWM Signal darf auch nicht zu groß sein sonst zitter die gesamte Pneumatik, Hydraulik mit.

Es gibt solche Ventile mit und ohne Rückführung zur Abfrage wo der Schieber steht. Von den Lieferanten werden elektronische Ansteuerbausteine in verschieden Ausfügrungen passend zu dem Ventil angeboten. Hutschiene, 19" Platine usw. Es gibt auch Ventile die die Ansteuerelektronik bereits integriert haben. Die gibt es dann mit verschnieden Schnittstellen für den Anwender. Analog , ASI-Bus Canbus, Profibus, Ethernet, also so ziemlich alles was in der Industrie verwendet wird.

Die Frequenz einer PWM mit analogWrite () ist konstant, es ist besser, die Register oder einen Bibliothekstyp PWM_lib zu verwenden.

Ein Beispiel für eine Skizze, um die Frequenz des PWM-Signals zu variieren:

void setup () {
  PWM_Init();
}

void loop() {

  // Todo : modify frequency with PWM_CPRDUPD in loop()
  // modify duty with PWM_CDTUPD in loop()
}

void PWM_Init() {
  // PWM Set-up on pins PC7 and PA20 (Arduino Pins 39(PWMH2) : see Datasheet chap. 38.5.1 page 973
  PMC->PMC_PCER1 |= PMC_PCER1_PID36;                   // PWM power ON
  PWM->PWM_DIS = PWM_DIS_CHID2;                        // Disable PWM channel 2

  // Select Instance=PWM; Signal=PWMH2 (channel 2); I/O Line=PC7 (P7, Arduino pin 39, see pinout diagram) ; Peripheral type B
  PIOC->PIO_PDR |= PIO_PDR_P7;                         // Set the pin to the peripheral PWM, not the GPIO
  PIOC->PIO_ABSR |= PIO_PC7B_PWMH2;                    // Set PWM pin perhipheral type B

  PWM->PWM_CLK = PWM_CLK_PREB(0) | PWM_CLK_DIVB(42);   // Set the PWM clock rate to 2MHz (84MHz/42).
  PWM->PWM_CH_NUM[2].PWM_CMR = PWM_CMR_CPRE_CLKB;       // clock source as CLKB on channel 2, waveform left aligned
                             
  PWM->PWM_CH_NUM[2].PWM_CPRD = 65000;                 // Channel 2 : Set the PWM frequency 2MHz/CPRD = F ;
  PWM->PWM_CH_NUM[2].PWM_CDTY = 12500;                 // Channel 2: Set the PWM duty cycle to x%= (CDTY/ CPRD)  * 100 % ;

  PWM->PWM_ENA = PWM_ENA_CHID2;                        // Enable PWM Channel 2
}

Es wird notwendig sein, die Spannung des Ausgangs-PWM-Signals 3.3 auf eine Spannung zwischen 12 und 24 V anzuheben (logic-level MOSFET).

Hi

Rentner:
Je nach Ventilgrösse kann das 80-250Hz sein. Sie dient dazu Reibungsverluste bzw. Losbrechmomente der Dichtungen zu verringern. Der Schieber soll also etwas zittern.

Geil, was es nicht Alles gibt und was dann dahinter steckt.

Tolle Ausführung!
Hätte jetzt eher erwartet, daß Das ähnlich der Heizungs-Stellantriebe mit beheiztem Wachs funktioniert - ist aber wohl zu träge.

MfG

Hallo zusammen,

erstmal danke für die Antworten, obwohl ich nicht vom Bereich komme (ich studiere BWL) aber ein paar Infos konnte ich schon verstehen, der Rest war ehrlich gesagt für mich grenzend an Chinesisch hhhh aber trotzdem vielen lieben Dank.
Ich möchte euch mein Schaltplan zeigen und wäre nett wenn ihr mir sagt ob ich das richtig verstanden habe oder nicht.

Der Schaltplan aus #6

Diesen Schaltplan habe ich im Netz gefunden und denke es ist was meinem Vorhaben am nähsten kommt.
Achtet bitte nicht auf die Bezeichnung der Bauteile (Arduino Uno, 1 KOhm,...) die werde ich natürlich ändern.

LG
Esperance

esperance:
... was meinem Vorhaben am nähsten kommt.

Anstelle UNO ein Due, anstelle TIP120 ein MODFET und anderer Widerstand, außerdem noch ein Widerstand vom Ausgangspin nach GND, dann ja.

Für einen BWL-Studenten möglicherweise reizvoll: WQScosea Q8S-228 15A 400 Watt MOS FET Trigger-schalter Antriebsmodul PWM Regler Gleichstrom Steuerkarte Fr Magnet ventil.

Der Schaltplan von oben, mal modifiziert nach den Anregungen von abmue.
mosfet_lowside_3_3Volt.png
Bei R1 bin ich nicht sicher - weil ich den Due kaum kenne (und keine Zeit zur Datenblattkonsultation).
Ich gehe mal von max. 15 mA für beim PWM-Pin aus. Dann sollte:
R1=220 Ohm
passen.
Ich bitte um Berichtigung, falls ich falsch liege.

Ich gehe mal von max. 15 mA für beim PWM-Pin aus

ich melde mich noch mal zum Thema,

In der Arduino Welt versteht man unter PWM ein Signal das mittels Puls-Pause Verhältniss und einer Amplitude von 5Volt eine quasi Analoge Spannung erzeugt. Der Mittelwert verändert sich ja auf diese Weise. Da das mit einer relativ hohen Frequenz passiert ist das fast eine Analoge Ausgangsspannung zumindest im Mittel.

Für das Propventiel must Du dieser quasi Analogen Ausgangsspannung eine Frequenz überlagern. Diese Frequenz muss veränderbar und in Ihrere Amplitude veränderbar sein.

Du must also letztlich drei Werte haben, einen für die Ventilstellung dann in besimmten Zeitabständen ( 50-250 Hz. eine veränderliche Grösse dazu addieren. 250 Hz sind 4ms das kann man also noch ganz gut hinbekommen mit der millis() Funktion.

Eigendlich musst Du jetzt noch überlegen ob eine Auflösung von 255 für Dein Analogwert reicht, ich denke aber ja.

Nachtrag:

millis wrd nicht gehen
250 Hz = 4ms -> 2ms ein 2ms aus
166Hz = 6 ms -> 3ms ein 3 ms aus

dazwischen gibts es nichts ok man konnnte noch 200Hz realisieren 3 ein 2 aus, aber man geht dann besser auf micros() dann kann man wieder alles einstellen.

Hallo Freunde,

ich benötige mal wieder eure Hilfe bei meiner Abschlussarbeit. Es geht um das Proportionalventil (https://www.buerkert.de/de/produkte/proportionalventile/elektromagnetische-proportionalventile/150426)
was ich mit meinem Arduino Due ansteuern soll. Die Schaltung habe ich gemacht, nun stoße ich auf die Programierung des Arduinos (sketch). Da ich nicht vom Fach komme, konnte ich relativ einfache Programme für Relais schreiben aber in diesem Fall bin ich ganz ehrlich schön überfragt.
Es wäre wirklich sehr nett wenn ihr mir dabei helfen würdet.

LG
Esperance

Dann wäre es gut wenn Du nicht nur nach Hilfe fragst, sondern auch beschreibst welche Art Hilfe Du brauchst.
Was ist das Ziel des Sketches, was soll passieren. -> Soll-Zustand
Was hast Du schon gemacht (Sketch posten in Code-Tags) -> Ist-Zustand
Was geht nicht, welche Fehler treten auf? -> Fehler-Beschreibung.

Außerdem sehe ich, hattest Du dazu schon einen Sketch aufgemacht, warum dort nicht weiter machen.
Dein Arduino-Sketch ist doch die logische Folge davon. Wenn mal jemand anderes nach diesem Probem / bzw. dessen Lösung sucht, hat er zumindest alles beisammen. Zumal es für den Sketch ja nicht ganz unerheblich ist wie die Hardware aussieht.

Evtl. kann ja ein Mod die beiden Threads "verheiraten".

Mario.

Das Ventil soll sich proportional öffnen so wie der Name sagt. Also nicht komplett auf oder zu sondern prozentual.
Ich habe im Netz recherchiert und habe diesen Sketch gefunden:

#define PULSE_DELAY 20

unsigned long next_time = 0L ;

int pwm_level = 0 ;
#define PULSE_AMPLITUDE 20
int pwm_offset = PULSE_AMPLITUDE ;


void loop ()
{
if (millis () - next_time >= PULSE_DELAY)
{
  next_time += PULSE_DELAY ;
  pwm_offset = - pwm_offset ;  // pwm_offset is a square wave
  int value = pwm_level + pwm_offset ;
  value = constrain (value, 0, 255) ; // constrain to PWM bounds
  analogWrite (solenoid_pin, value) ;
}
// use pwm_level to set the solenoid level.
}

Was hält ihr davon?
Bezüglich das andere Thread, ich habe es nicht gefunden und dachte es wäre gelöscht, sonst hätte ich da weiter gepostet :slight_smile:

Hi

Bitte mit diesem hier:
http://forum.arduino.cc/index.php?topic=542431.msg3698320#msg3698320
verheiraten.
(wurde bereits gemeldet)

Davon ab - wenn Du von Null was abziehst und danach das Ergebnis auf 0...255 zurecht schneidest, kommt bestenfalls 0 raus.
Wenn Du auf Null 20 aufaddierst und danach das Ergebnis auf 0...255 zurecht schneidest, kommt 20 heraus.
Mir dünkt, Du willst was Anderes, als Du hier programmiert hast.

Anmerkung: next_time hieße bei mir last_time, da Das die letzte Startzeit der aktuellen Laufzeit ist.
Dein solenoid-pin wird hier wohl die Werte 0 & 20 annehmen - jeweils im Wechsel und als ANALOG-Wert.
Denke, Du willst einen PWM-Wert (analogWrite macht quasi Nichts anderes, Du ver-pwm-st hier quasi einen PWM).

MfG

esperance:
Was hält ihr davon?
Bezüglich das andere Thread, ich habe es nicht gefunden und dachte es wäre gelöscht, sonst hätte ich da weiter gepostet :slight_smile:

Warum probierst du es nicht aus ? Wir haben dein Ventil nicht.

Und warum sollte jemand deinen Thread löschen ?
Du kannst hier im Forum auch suchen, da findest du deine Threads immer wieder.

Im Datenblatt des Ventils stehen alle Werte, die für die PWM und die H-Brücke notwendig sind.

Obigen Sketch würde ich erst mal beiseite legen, er sieht für diese Aufgabe nicht sehr zielführend aus.

Wo hast du in dem Datenblatt was von PWM gelesen?
Auf Seite 2 oben links im Diagram sehe ich was von 0-10V, 4-20mA, 0-20mA, aber nix vom PWM.
Oder hab ich das falsche Datenblatt?