ich habe folgendes vor, leider funktioniert es nicht so wie ich mir das vorstelle:
Ich habe zwei Stepper Motoren (NEMA17), die ich über den Arduino Uno und dem Adafruit Motorshield V2 ansteuere.
Die beiden Stepper Motoren sollen sich gleichzeitig eine gewisse Zeit lang drehen und dann ruhen (5 Sekunden). Danach sollen sie sich wieder so drehen wie beim ersten mal. Das soll ohne Stop Funktion so weiterlaufen.
Ich nutze die Accelstepper Bibliothek.
Die Motoren drehen sich nur einmal und dann nicht mehr.
Über ein paar hilfreiche Tipps wäre ich sehr verbunden, bin allerdings auch nicht der Profi bei Arduino, also verzeiht, falls ich grobe Schnitzer drin habe.
Ganz nebenbei fragst Du millis() falsch ab - fällt Dir allerdings erst nach ca. 49,x Tagen 'auf die Füße'.
if (millis()-STARTZEIT>=WARTEZEIT){
STARTZEIT+=WARTEZEIT; //oder STARTZEIT=millis(); ... dürfte aber länger dauern und ungenauer sein
//tue irgendwas
}
Statt unsigned long geht auch uint32_t - DAS klappt auf ALLEN 'Arduinos' - egal, ob die kleinen AVRs, oder die großen ESP.
millis() ist ein 32-Bit-Wert - bei 'den Kleinen' ist Das - unter Anderem - unsigned long (kein Vorzeichen, 'long'=32 Bit).
uint32_t sagt GENAU Das aus - und dazu noch egal, welcher µC Da Seine Kreise dreht.
Einzig - 'int' ist DER Datentyp, wenn's um Geschwindigkeit geht - da Das DER Datentyp ist, Den die µC DIREKT verarbeiten können.
Das ist bei einem 'kleinen' Arduino zwar immer noch nicht uint16_t (ist eben ein 8-Bit'er), aber bei den ESP wohl 32 Bit breit. - DAS können die µC 'ziemlich einfach verdauen'.
Wer selber die Kontrolle darüber haben will, wie viele Bits wirklich bewegt werden, nimmt die uintx_t (oder intx_t), Wem Das 'scheiß egal' ist (oder sonstige Gründe hat), eben nicht.
postmaster-ino:
Einzig - 'int' ist DER Datentyp, wenn's um Geschwindigkeit geht - da Das DER Datentyp ist, Den die µC DIREKT verarbeiten können.
Das ist bei einem 'kleinen' Arduino zwar immer noch nicht uint16_t (ist eben ein 8-Bit'er)
Das solltest Du aber besser wissen - int ist immer mindestens 16 Bit breit und kann auf einem 'kleinen' AVR deshalb auch nicht direkt verarbeitet werden.
Das hat mit seinem Problem aber jetzt nichts zu tun.
postmaster-ino:
...
Das ist bei einem 'kleinen' Arduino zwar immer noch nicht uint16_t (ist eben ein 8-Bit'er), aber bei den ESP wohl 32 Bit breit. - DAS können die µC 'ziemlich einfach verdauen'.
...
Hatte ich erwähnt (und auch schon zuvor nicht verstanden, weshalb int 'wegen der Geschwindigkeit' zu 16 Bit wird - auf den AVRs.
MfG
PS: VOR Arduino war Byte 8 Bit, Word 16 Bit, D-Word 32 Bit und DD-Word 64 Bit. ALLES ganz einfach und - da in Assembler unterwegs (80286er - rein hobby-mäßig) - auch durchaus anwendbar - allerdings auch nur bei EINEM 'Typ'.
MfG
PS: nebenbei ist BYTE nicht wirklich mit '8 Bit' definiert - ASCII selbst lässt erahnen, daß auch schon Mal 7 Bit 'voll gut' waren - Zeichen bis 127 waren 'Standard' - drüber konnte Jeder machen, was Er wollte - Chaos pur ... lasst die Spiele beginnen
Dass etwas wie NEMA17 eine Leistung beschreibt, ist ein leider weit verbreiteter Irrtum. Das ist eine Angabe zur Gehäuseform
Nicht ganz. Ein großer Motor hat mehr Oberfläche und kann darum mehr Abwärme abführen.
Darum sagt die Größe des Gehäuses im Groben auch etwas über die Leistung aus.
Ich gebe Dir aber Recht daß die Größe des Motors das letzte ist, das ich wissen muß.
Was die Gehäusegröße nicht aussagt ist der Nennstrom und die Nennspannung / Wicklungswiderstand. Diese Parameter sind wichtig für die Auswahl des Treibers / Netzteil.
Nennspannung: 3,1 V
Nennstrom: 2,5 A
Widerstand: 1.25± 10% Ω/Phase
Doppelten Strom weil 2 Motore. Je nach Ansteuerungsmode dann auch doppelter Strom weil beide Wicklungen bestromt.
Ich habe ein 12V , 1,25A Netzteil
Sieht Du nicht daß das nicht zusammenpaßt?
Du brauchst entweder einen 12V, 0,3 bis 0,4A Motor, und ein stärkeres Netzteil.
oder
Einen geeigneten Stromtreiber und ein stärkeres Netzteil. Die üblichen A4988, DRV8825 können verwendet werden aber nicht mit Nennstrom des Motors. Für Bestromung mit Nennstrom brauchst Du einen stärkeren Treiber.