Schrittmotor Von der Stromversorgung nehmen

Guten Morgen liebes Forum

Ich habe mir folgendes Sketch zusammengebastelt. Nun wir es so sein, dass in der Finalversion der Schrittmotor nur alle 5 Minuten diese 170 Steps (also 30 Grad) ausführen wird - es soll eine Uhr werden welche sich im 5 Minuten takt bewegt.
Nun würde ich gerne alle 4 Ausgänge vom Arduino (Pin 8-11) jeweils nach dem 5-Minuten Impuls auf 0 setzen auch um Strom zu sparen, da der Schrittmotor, um die Stellung zu halten immer recht warm ist.

Wie könnte ich das anstellen, hat jemand eine Idee?

#include <Stepper.h>

int button1 = 4; //button pin, connect to ground to move servo
bool press1 ;
bool oldpress1 = false;
bool sweep1state = false;

int switchPin = 4;              // switch is connected to pin 4
int val;                        // variable for reading the pin status
int buttonState;                // variable to hold the button state
int buttonPresses = 0;

int stepCount = 0;

const int stepsPerRevolution = 4;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {

   pinMode(button1, INPUT_PULLUP);
   
  // set the speed at 1500 rpm:
  
  myStepper.setSpeed(1500);
  
  // initialize the serial port:
  
  Serial.begin(9600);
  #define STEPS 48
}

void loop() {

   press1 = digitalRead(button1);  // check button1
  if (press1 == LOW && oldpress1 == HIGH) // test if button has been pressed
  {
    sweep1state = HIGH;         // if yes
  }
  if (sweep1state == HIGH)    
  
  {  
 myStepper.step(170);
  Serial.print("steps:");
  Serial.println(stepCount);
  stepCount++;
  sweep1state = LOW; 
  }
 

  
}

Und einfach die 4 Pin an denen der Motortreiber hängt auf LOW schalten?
Grüße Uwe

uwefed:
Und einfach die 4 Pin an denen der Motortreiber hängt auf LOW schalten?
Grüße Uwe

Ja genau, das wäre der Plan.

So am Schluss vom Loop?

digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);

Ich kann es im Moment gerade nicht testen, da meine Anlage aus irgend einem Grund nicht mehr läuft. Ich muss erst den Fehler finden

Du solltest auch oldpress umschalten, sonst ist diese Variable nutzlos.

Nur so als kleine Weiterbildung zwischendurch:
Die meisten Schrittmotortreiber mögen es überhaupt nicht wenn man die Spulenanschlüsse während Strom fließt abklemmt oder anklemmt oder gar wiederholt Verbindung "antippen" wegnehmen. Die Spulen haben eine Induktivität und wenn man den Stromfluss unterbricht entsteht eine Spannungsspitze die sehr viel höher als die Versorgungsspannung sein kann. Ich habe das auch erst durch Zerstören von drei Schrittmotortreibern lernen müssen.

Also der Schrittmotortreiber zu liebe immer erst Versorgungsspannung abschalten und dann anschließen/abklemmen.

viele Grüße Stefan

Wenn man die Versorgungsspannung abklemmt, dann funktionieren die Freilaufdioden der Treiber nicht mehr, dann brennen die Endtransistoren durch. Man müßte die Spannungsanschlüsse kurzschließen, aber das geht nicht so schnell. Vielleicht hilft ein ausreichend großer Elko am Treiber, in den sich die Spulen nach dem Abschalten noch entladen können?

Wenn der Zeiger ein Leichtgewicht ist bzw. an beiden Enden Gewicht hat also so halbwegs ausbalanciert ist
kann man den Strom auch ein Stück herunterdrehen. Manche Schrittmotortreiber haben auch die Möglichkeit den Strom durch einen Steuereingang zu reduzieren. Ganz abschalten bedeutet das das Haltemoment des Schrittmotors nahezu null ist. Dann müsste der Zeiger schon sehr gut ausbalanciert sein damit er durch sein Eigengewicht sich nicht weiterdreht.
Eine Lösungsmöglichkeit dafür wäre ein selbsthemmendes Schneckenradgetriebe oder eine Art Bremse bei der man den Widerstand feinfühlig einstellen kann. Die Bremse hält den Zeiger auf Position aber wenn der Schrittmotor drehen will kriegt er das hin.

Wenn die Uhr nur alle 5 Minuten 5 Teilstriche weiterwandern soll weil du es so haben willst kann man das machen.
Es wäre aber auch möglich den Zeiger fast kontinuierlich oder einmal pro Minute vorrücken zu lassen.

Magst du mal beschreiben wie groß die Uhr / die Zeiger sind und was für technische Daten der Schrittmotor hat?
Und was für ein Treiber die Spulen schaltet?
Ich würde gerne abschätzen ob man den Strom runterdrehen kann.
viele Grüße Stefan

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

Das sagt daß der Motortreiber 4 Ansteuerungspin hat. Da fallen die meisten Strom Treiber aus der Betrachtung.
Es bleiben eigentlich nur der ULN2003 mit einem 28BYJ-48 übrig. Der wäre auch eine der ersten Wahl für das antreiben eines Zeigers.

@ Draht, Bitte erleuchte uns bezüglich der verwendeten Hardware (Motor und Motortreiber)
Und zusätzlich zu deiner Zeitrechnung.

Nun wir es so sein, dass in der Finalversion der Schrittmotor nur alle 5 Minuten diese 170 Steps (also 30 Grad) ausführen wird - es soll eine Uhr werden welche sich im 5 Minuten takt bewegt.

Wenn 170 schritte 30° entspricht dann sind das 1020Schritte pro Umdrehung.
Wenn aber 170 Schritte alle 5 Minuten gemacht werden sollen dann sind das 2040 Schritte pro Stunde.
Macht jetzt der Minutenzeiger 1 oder 2 Umdrehungen pro Stunde?
Andererseits hat der 28BYJ-48 nicht genau 2048 Schritte in Vollschrittmodus sondern laut Stepper Motors — Precise Position Control | by J3 | Jungletronics | Medium ein Getriebe mit der Übersetzung von nur 8910: 567.424 oder 405:25.792 oder 1: 63,683951 oder mit Vollschritte sind das 2.037,886 Schritte pro Umdrehung. Da sind 170 nur ein Näherungswert. Da Du sowieso einen Home Sensor brauchst, würde ich diese kleine Ungenauigkeit durch Anfahren des Homsensors zB bei 12h das Ausgleichen.

Grüße Uwe

Also das wäre der Schrittmotor:

resistance: 170 ohm
rated voltage: 12 Vdc
current: 60 mA
impedance: 200 ohm
phase: 4
step angle / step: 7.5° / 48
reduction ratio: 1/85
detent torque: 500 gf.cm
pull-in torque: 650 gf.cm
max. starting pulse rate: 350 pps
max. slewing pulse rate: 800 pps
temperature range: 45 °C
noise: 40 dB
cable: 450 mm AWG 1007#26
terminal: JST SXH-001T-P0.6
insulation strength: AC 600 V – 1 sec. cut-off current: 10 mA

Als treiber verwende ich im Moment 4 Tip21

Die Uhr hat keine Zeiger, sondern 12 "Kellen". siehe unten:

DrDiettrich:
Du solltest auch oldpress umschalten, sonst ist diese Variable nutzlos.

Das war der Fehler! :wink:

Also das wäre der Schrittmotor:

Das sind nur die Daten, nicht das Modell. Also bitte das Modell oder die Seite wo Du ihn gekauft hast.

Getriebeübersetzung: 1/85 als Zahnräder werden meist ungerade Übersetzungen mit Primzahlen verwendet damit nicht glaiche Zähne von 2 Zahnräder immer wieder zusammenkommen sondern alle Zähne des einen alle Zähne des anderen in Eingriff kommen.

Bei 1/85 und 48 Schritte pro Umdrehung sind das 4080 Schritte pro Umdrehung.
Aber wie gesagt ist 1/85 nur eine gerundetes Übersetzungsverhältnis.
Es könnte der 35byj46 Motor sein.

Grüße Uwe

Velleman

Aha. Also der Schrittmotor hat ein Drehmoment von 500 bis 650 gf.cm.
Das sind umgerechnet 0.064 Nm.
Aus der Skizze werde ich noch nicht recht schlau. Sieht aus wie das Ziffernblatt.
Aber wie sehen denn die Zeiger aus und wie sind die an der Achse befestigt? Einseitig oder mittig?

Den Schrittmotor habe ich bei https://de.elv.com/schrittmotor-12-v-dc-60-ma-winkel-75-48-schritte-109086
und bei Vellemann gefunden. Da steht was von "Verkleinerungsfaktor" hat der noch ein Untersetzungsgetriebe dran?
Das ergäbe dann ein Drehmoment von 0.064 Nm * 85 = 5,4 Nm. Das wäre in der Tat sehr kräftig.
Ohne Untersetzungsgetriebe reicht der gerade mal dazu einen Zeigerfinger aus Pappe "nenene-Das-Drehmoment-ist-zu-klein" Winken zu lassen.

Einen Halbleiter "TIP21" habe ich mit googeln nicht gefunden. Ist der aus DDR-Beständen? ;-))
Oder haste dich verschrieben?

Um den Drehmomentbedarf zu ermitteln könntest du folgendes machen:
Sofern die "Kelle" (Suppenkelle? Maurerkelle?) noch einen dünnen Holzstab befestigen und auf dem Drehpunkt lagern
Dann am Holzstab ein kleines Gegengewicht so anhängen das das Ding im Gleichgewicht ist.
Abstand Drehpunkt (in Meter) * Gramm Gewicht / 100 = Nm

viele Grüße Stefan

Sorrry Tip 121!

Das ganze Rad dreht sich im Uhrzeigersinn. Die äusseren "Kellen" sind wie 12 Zeiger, diese drehen sich an der 15 Uhr Stelle und zeigen die Zeitt an. Man kann sich das so vorstellen, wie die Strassenarbeiter, welche mit den grünen und roten kellen am Anfang und Schluss der Baustelle den Verkehr regeln. Ist das verständlich?

Ich versuche mal einen "Stärketest"

Ja verstehe ich. Also weitgehend ausbalanciert weil symmetrisch aufgebaut.
Hat der Motor nun ein Getriebe oder nicht? Wenn du den Motor mit 400 Schritten pro Sekunde ansteuerst
saust der dann im Kreis oder ist das eine gemächliche Drehung?

Wie gebe ich das ein?

also bei diesem Sketch braucht er etwa 20 Sekunden für eine 360 Gradumdrehung.

#include <Stepper.h>

int button1 = 4; //button pin, connect to ground to move servo
bool press1 ;
bool oldpress1 = false;
bool sweep1state = false;

int switchPin = 4;              // switch is connected to pin 4
int val;                        // variable for reading the pin status
int buttonState;                // variable to hold the button state
int buttonPresses = 0;

int stepCount = 0;

const int stepsPerRevolution = 4;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {

   pinMode(button1, INPUT_PULLUP);
   
  // set the speed at 1500 rpm:
  
  myStepper.setSpeed(1500);
  
  // initialize the serial port:
  
  Serial.begin(9600);
  #define STEPS 48
}

void loop() {

   press1 = digitalRead(button1);  // check button1
  if (press1 == LOW && oldpress1 == HIGH) // test if button has been pressed
  {
    sweep1state = HIGH;         // if yes
  }
  if (sweep1state == HIGH)    
  
  {  
 myStepper.step(-2040);
  Serial.print("steps:");
  Serial.println(stepCount);
  stepCount++;
  sweep1state = LOW; 


  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);

  
  }
oldpress1 = press1; 

  
}

StefanL38:
Ja verstehe ich. Also weitgehend ausbalanciert weil symmetrisch aufgebaut.
Hat der Motor nun ein Getriebe oder nicht? Wenn du den Motor mit 400 Schritten pro Sekunde ansteuerst
saust der dann im Kreis oder ist das eine gemächliche Drehung?

Ja, ist ausbalanciert, braucht jedoch trotzdem noch "etwas" Kraft, da er an der 15 Uhr-Position die Kelle jeweils über eine Mechanik drehen muss.

Hi

Bis auf die Angabe, daß der Stepper 4 Steps pro Umdrehung braucht (Das empfinde ich als seeehr sportlich).

4 (Steps pro Umdrehung) x 1500 (Umdrehungen pro Minute) -> 6000 Steps pro Minute.
Nach ca. 20 Sekunden ist die Umdrehung vollbracht -> 6000:3 -> ~2000 Steps/Umdrehung.
3 Umdrehungen die Minute.

Diese 2000 decken sich halbwegs mit den 2048, Die ebenfalls in Deinem Sketch genannt werden.
Die Frage ist, ob Dein Getriebe genau 2048 Steps/Umdrehung braucht, oder was Krummes.

myStepper.step(-2040);
Dürfte die Ziel-Position angeben (und für die 20 Sekunden Laufzeit sorgen - ggf. blockierend?),

Mache Dir eine Markierung auf den Motor und lasse Ihn 10x2040 Steps laufen - wenn Er nach 10 Umdrehungen wieder genau die Markierung trifft, hast Du ein 'gerades Getriebe'.
Meine 28BYJ-48 sind alle 'gerade' - allerdings gibt's Da auch Andere und Du hast ja eh einen ganz anderen Motor.

Wenn's schief ist - eine Referenzierung (irgendwo) auf dem Ziffernblatt, so kannst Du nach spätestens einer Umdrehung die Step's angleichen.

MfG

Also meiner steht nach 10 Umdrehungen (2040 Schritte) zum Glück genau wieder am Ausgangsort.