Pumpensteuerung mit Arduino Due

Hallo zusammen,

ich habe noch relativ wenig Erfahrung mit Arduino.

Zur Zeit versuche ich eine Pumpe
(https://www.schwarzer.com/pdf/SP_PUMPS_DataSheet_ClassEC_Series600_Type620-625-628ECDU.pdf)
mit meinem Arduino Due zu steuern.

Dafür nutze ich den VNH2SP30 Motor Shield.
(30A Mini VNH2SP30 Schrittmotortreiber Monster Moto Shield Modul für Sale - Banggood Deutschland-arrival notice-arrival notice)

Meine Verkabelung sieht man im Anhang. Unterschied ist ledigleich, dass ich einen Arduino Due nutze. Als Spannungsversorgung für die Pumpe nutze ich ein Labornetzgerät, mit dem ich die Spannung variabel einstellen kann. Der Arduino ist zudem auch über USB angeschlossen.
Die Pumpe läuft normalerweise bis 12V.

Mein Problem:
Die Steuerung der Pumpe über PWM funktioniert nur im Bereich von 5-7 V des Labornetzgerätes. Außerhalb dieses Bereiches steht die Pumpe still.

Hat da jemand eine Idee?
Liegt es an der Verkabelung? (Bin leider kein Elektrotechniker)

Vielen Dank euch schonmal!

Klemm' mal die 5V Leitung ab

irgendetwas passt da nicht. Banggood nennt das einen "Schrittmotortreiber"
Der IC L298 hat auch vier Ausgänge.

Ein Schrittmotor braucht mindestens vier Anschlüsse. Die Platine hat aber nur zwei.

Stammt der Fritzing-Plan vom Hersteller des Motorshields? Oder von wo anders her?

Ich habe mal Bilder zu "Ardumoto motor driver shield" gegoogelt. Da sind überall vier Anschlüsse dran.
Für einen einzelne PWM- Gleichstrommotor Ansteuerung reichen zwei Anschlüsse.
Bei Banggood ist im Text aber von einer

ramped up version of Ardumoto motor driver shield. For this monster shield we've replaced the L298 H-bridge with a pair of VNH2SP30 full-bridge motor drivers.

Wenn man sich das Datenblatt des VNH2SP30-Chips ansieht. Sieht man das da nur eine H-Bridge drin ist nicht "dual"

Du möchtest ja die Drehzahl eines Gleichstrommotors per PWM steuern. Für PWM-Steuerung muss der EIngang "PWM" zwischen 0 und 1 hin und her geschaltet werden.
IN_A und IN_B legen die Drehrichtung des Motors fest und über den PWM-Eingang gibt man das PWM-SIgnal.
Machst du das so?

Was wird zur Ansteuerung verwendet?
HIGH-Voltage-Level muss mindestens 3,25V sein. Hast du das mal gemessen?

viele Grüße Stefan

Hi

Wenn der Due mit Seinen 3,3V vor sich hin läuft, werden nicht wirklich sonderlich viel mehr aus den Pins bei HIGH raus kommen.

Was ich bei dem Fritzing-Zeug vermisse: Eine GND-Verbinding des Arduino mit dem Treiber.

MfG

postmaster-ino:
Was ich bei dem Fritzing-Zeug vermisse: Eine GND-Verbinding des Arduino mit dem Treiber.

GND ist aber verbunden, da tippe ich eher auf die 3,3V aus dem DUE.

postmaster-ino:
Was ich bei dem Fritzing-Zeug vermisse: Eine GND-Verbinding des Arduino mit dem Treiber.

Siehe brauner Draht. Der unter dem grünen.

Gruß

Gregor

Stammt der Fritzing-Plan vom Hersteller des Motorshields? Oder von wo anders her?

Der Fritzing-Plan stammt hier her: http://qqtrading.com.my/monster-moto-driver-vnh2sp30-30amp

Du möchtest ja die Drehzahl eines Gleichstrommotors per PWM steuern. Für PWM-Steuerung muss der EIngang "PWM" zwischen 0 und 1 hin und her geschaltet werden.
IN_A und IN_B legen die Drehrichtung des Motors fest und über den PWM-Eingang gibt man das PWM-SIgnal.
Machst du das so?

Ja genau so mache ich das. IN_A und IN_B werden über Digital Pins vom Due gesteuert und PWM über einen PWM des Due. Übergeben wird ein Wert von 0 bis 255 gemäß 8bit-Auflösung:

//Include Libraries
#include <Arduino.h>
#include "Compressor.h"

// Compressor (cp) Pins & Parameters
const byte cp_CWctrlPin = 22; //inAPin
const byte cp_CCWctrlPin = 24; //inBPin
const byte cp_pwmPin = 8;//pwmPin
const byte cp_csPin = A1; //csPin
const int cp_csThreshold = 1400; //csThreshold
int duty_cycle = 0;
Compressor cpObject = Compressor(cp_CWctrlPin, cp_CCWctrlPin, cp_pwmPin, cp_csPin, cp_csThreshold);

void setup() {
  // Define Outputs
  Serial.begin(9600);
  pinMode(cp_CWctrlPin, OUTPUT);
  pinMode(cp_CCWctrlPin, OUTPUT);
  pinMode(cp_pwmPin, OUTPUT);
  Serial.println("Enter Duty-Cycle");
  
}

void loop() {
    if (Serial.available() > 0)
  {
      duty_cycle = Serial.parseInt();
      cpObject.motorGo(1, (int) duty_cycle); // Signal an Kompressor geben 
  }  
 
}

GND ist aber verbunden, da tippe ich eher auf die 3,3V aus dem DUE.

Hatte auch schon überlegt, dass es an den 3.3V des Due liegt, da der High-Voltage-Levels des Treibers für PMW bei 3,25V liegt. Für mich ist das aber keine Erklärung, warum die Pumpe nur zwischen 5 und 7 V Netzspannung läuft. Oder was übersehe ich dort?

Klemm' mal die 5V Leitung ab

Das 5V Kabel vom Due zum Shield ist doch für die Stromversorgung des inneren Kreises vorgesehen, oder braucht man den nicht? Lass ich das Gnd-Kabel dann dran?

Vielen Dank euch für die Antworten!

fd0911:
.....
Hatte auch schon überlegt, dass es an den 3.3V des Due liegt, da der High-Voltage-Levels des Treibers für PMW bei 3,25V liegt. Für mich ist das aber keine Erklärung, warum die Pumpe nur zwischen 5 und 7 V Netzspannung läuft. Oder was übersehe ich dort?

Ja, du übersiehst, dass die interne Elektronik nur in dem Spannungsbereich die 3,3V als HIGH erkennen kann.
Baue einen Levelshifter ein, der die Datenleitung auf die notwendigen 5V bringt.

fd0911:
Dafür nutze ich den VNH2SP30 Motor Shield.

Meine Verkabelung sieht man im Anhang. Unterschied ist ledigleich, dass ich einen Arduino Due nutze. Als Spannungsversorgung für die Pumpe nutze ich ein Labornetzgerät, mit dem ich die Spannung variabel einstellen kann. Der Arduino ist zudem auch über USB angeschlossen.

Mein Problem:
Die Steuerung der Pumpe über PWM funktioniert nur im Bereich von 5-7 V des Labornetzgerätes. Außerhalb dieses Bereiches steht die Pumpe still.

Hat da jemand eine Idee?

Du hast den falschen Motortreiber.
Für den DUE brauchst Du VNH5019, der schaltet bei 2,1V HIGH-Pegel; alle anderen kommen erst bei 3,3V HIGH
PWM macht der auch bis 20Khz.

Hi

Da höhere Spannungen vorhanden sind, könnte man die momentan unzureichende Spannung über einen LL-FET/Transistor/Komparator/whatever 'anheben' - bei Transistor/FET würde Das negiert werden, da bei PLUS an Gate/Basis der Transistor leitet und das 'obere Ende' (Welches hochgezogen wird) mit GND verbindet.

MfG

Exact dafür wurden die Levelshifter entwickelt.
Für alle, die den selbst bauen möchten, hier ein Schaltbild. Ich verwende dafür den IRLML6344.