[solved] Nano Every - Stromaufnahme begrenzen?

Servus!

Ich hab hier ein Projekt zu Schrittmotorsteuerung mit einem Arduino und einer SMD-H-Brücke.

Code funktioniert super, aber ein bisschen mangelt es noch an "Schaltungsaufbauerfahrung"...

Wenn ich die Schaltung vom PC aus mit USB befeuere, macht alles das, was es soll. Schrittmotor schreitet munter los, IO-Befehle werden erkannt und der Arduino macht seine Arbeit.

Ich habe 12V zur Versorgung der H-Brücke und des Nano Every parallel hängen. Damit mir der Arduino bei einer Stromaufname von 1.5A peak nicht immer ausgeht (warum auch immer, vieleicht ist da das Problem), will ich da einen "Vorwiderstand" vorhängen.

Soweit ich das aber noch im Kopf habe ist die Spannung in einer Parallelschaltung immer gleich, nur den Strom an den einzelnen Strängen ist eben verschieden. Oder bin ich doch auf dem Holzweg?
Bilder kann bei Bedarf dazu machen.

Was du wie angeschlossen hast, ist nicht zu verstehen.
Zeige doch bitte mal ein Schaltbild.

Schaltung als Bild.
Da ich aber keine H-Brücke zeichnen kann, hier ist die verwendete: https://www.amazon.de/MX1508-Bridge-Stepper-Arduino-ESP8266/dp/B07NDZBCY7

Ich hoffe, nun ist klar was ich meinte mit parallel hängen - notfalls nochmals fragen! :smiley:

der Vollständigkeit halber:

/*

befehl zum Uploaden
pio run -t upload -e nanoatmega328new
oder
pio run -t upload -e nanoatmega328
oder
pio run -t upload -e nano_every
oder
pio run -t upload -e uno

*/

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution (200 for normal use, 2038 for experimental use)
                                      // for your motor
                                      // 1 step = 1.8° <-- ignore this / for experimental use 1 Step = 0.176°

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

int stepCount = 0;         // number of steps the motor has taken
int val = 0;
int kaliCounter = 0;


void setup()
{

  Serial.begin(9600);
  myStepper.setSpeed(1);       // Diese Zahl gibt die Umdrehungen pro Minute an... 3 ist optimal, höher als 5 funktioniert nicht

  pinMode(4, INPUT);            //Input für Position
  pinMode(5, INPUT);            //Input für Position
  pinMode(6, INPUT);            //Input für ResetImpuls bei Fehlerfall, kommend vom Reinhardt
  pinMode(7, INPUT);            //Endschalter
  pinMode(3, OUTPUT);           //DauerHIGH für den Endschalter... Somit muss nicht von Vcc Spannung abgegriffen werden
  digitalWrite(3, HIGH);



}

void loop()
{
/*
  myStepper.step(100);            //number of steps the motor will go
  Serial.print("steps:");
  Serial.println(stepCount);
*/


  if (digitalRead(7) == LOW && kaliCounter == 0)        // Diese Routine wird (im Idealfall) ein mal ausgeführt. Dient zur Positionsbestimmung des Motors...
    {
      while (digitalRead(7) == LOW)                     // Der Endschalter ist noch nicht betätigt
      {
        myStepper.step(-1);                             // Mache so viel eSchritte wie nötig, bis der Endschalter betätigt wurde
      }

      kaliCounter = 123;                                //Ende der Initialisierung
    }

  if (digitalRead(7) == HIGH && kaliCounter == 0)       // Hiermit wird sichergestellt, dass die Initialisierung auch nur ein mal ausgeführt wird
    {
      delay(1);
      kaliCounter = 123;
    }

  if (digitalRead(4) == HIGH && digitalRead(5) == LOW)  //Pos. 2 aka 37,5°
  {

    while (digitalRead(7) == LOW)
    {
      myStepper.step( -1 );
    }

    myStepper.step(20);

  }

  if (digitalRead(5) == HIGH && digitalRead(4) == LOW)  //Pos. 3 aka 70°
  {

    while (digitalRead(7) == LOW)
    {
      myStepper.step( -1 );
    }

    myStepper.step(10);

  }
/*
// Diese Routine funktioniert, wird aber durch Home = pos 1 ersetzt
//******************STEHEN LASSEN!!************************

  if (digitalRead(4) == HIGH && digitalRead(5) == HIGH)  //Pos. 3 aka 70°
  {
    //pos3();
    myStepper.step(1400);
    stepCount = stepCount + 1400;
    val = stepCount;
    delay(5000);
    myStepper.step(- stepCount);
  }
*/


  if (digitalRead(6) == HIGH)                             // Routine zum manuellen Reset vom Reinhardt (bitte nur 5V)
    {
      kaliCounter = 0;                                    // Zuerst ermöglichen wir das Ausführen der Reset Routine...

      while (digitalRead(7) == LOW)
      {
        myStepper.step(-1);
      }

      kaliCounter = 123;                                   // ... und die Reset Routine wieder "sperren"
    }

} // Ende void loop()

//***********************************************************ENDE CODE*****************************************************

Das Schaltbild ist so ok.
Aber was ist jetzt für dich “parallel” ?

Wenn du die Spannungen (12V und USB) meinst, dann solltest du mal im Datenblatt nachsehen, ob der Nano das ab kann.
Evtl. ist da noch eine Sicherheitsschaltung verbaut.

Vorwiderstand zur Strombegrenzung oder Spannungsreduzierung von Elektronik ist (fast) immer falsch.
Du brauchst ein Netzteil das genügend Leistung liefert für die gesamte Schaltung (Elektronik und Motor).
Grüße Uwe

HotSystems:
Das Schaltbild ist so ok.
Aber was ist jetzt für dich "parallel" ?

Er meint die 12V am Motortreiber und am Arduino.
Grüße Uwe

Danke Uwe, das habe ich, max 2.5A kann das Netzteil... und das ist 1A zuviel für die klene H-Brücke :smiley:
Könnte ein Kondensator die Spannungsschwankungenvielleicht ausgleichen?

Nunja, vielleicht ist parallel jetzt nicht das richtige Wort. :slight_smile:
Also USB und 12V habe ich nicht gleichzeitig verbunden, da das autark nur mit 12V laufen soll. Das mit den 5V vom USB habe ich ja nur während dem Hochladen auf den µC.

Aber die eigentliche Frage ist ja, ob der arduino die Leistung nicht verträgt, die die H-Brücke zeiht, da er mir bei jeder Motorbewegung ausgeht und quasi "resettet"....

Der Schrittmotor hat 2 unabhängige Wicklungen. Die angegebenen Nennströme bzw Max Ausgangsströme des Treibers beziehen sich immer nur auf eine Wicklung, nicht auf beide gemeinsam.
Welchen Motor verwendest Du?
Grüße Uwe

Ich verwende den hier und nutze die Klemme mit den 4 Anschlüssen.

Summa Summarum macht das ja auch "nur" 800mA. Sollte in meinen Augen kein Problem sein.

Der Motor zieht pro Spule nur 0,4A. Insgesamt also max 0,8A. Das sollte weder für die H-Brücke, noch für das Netzteil ein Problem darstellen. Sieht also eher nach Störimpulsen aus.
Vielleicht solltest Du mal einen Pufferkondensator am Eingang der H-Brücke anschließen. Und den Eingang des Nano gegebenenfalls ebenfalls über eine Diode und einen Pufferkondensator entkoppeln.

P.S. Leider habe ich kein Datenblatt für den verbauten Chip finden können ( sowas würde ich z.B. nie einsetzen ). Aber überall steht, dass der nur bis 10V Versorgung geht.

Hi

Für mich klingt Das so, daß der Motor halt kurzzeitig ordentlich Hunger entwickelt und dabei die Spannung einbricht, Was dem Arduino nicht sonderlich gefällt.

Das könntest Du umschiffen, wenn Du

  • den Arduino per DC-DC mit 5V versorgst (Der klappt dann bis 5,x Volt runter - da sind die Motren lange ruhig)
  • die 12V Vin über eine Diode vor dem Arduino entkoppelst und an Vin einen Kondensator als Puffer anbringst - Das versorgt den Arduino aus dem Kondensator, wenn der Motor gerade das Versorgungsnetz in die Knie zwingt - bis sich Das erholt hat, muß der C halt schaffen.

MfG

Für mich klingt Das so, daß der Motor halt kurzzeitig ordentlich Hunger entwickelt und dabei die Spannung einbricht, Was dem Arduino nicht sonderlich gefällt.

Schrittmotore verhalten sich eigentlich gegenteilig. Die Induktivität verlangsamt den Stromanstieg bei Anlegen der Spannung.
Ich weiß nicht ob der Treiber integrierte Freilaufdioden hat oder ob die fehlen weil im Treiber keine sind und auf der Platine keine sind.
Grüße Uwe

uwefed:
Er meint die 12V am Motortreiber und am Arduino.
Grüße Uwe

Dann sollte der TO das auch so schreiben. :wink:

Guten Morgen!

Mal ein kleines Update:
Koppelkondensator 100µF am Motortreiber: keine Verbesserung
Diode in Flussrichtung zwischen 12v und Vin: auch nichts...
Diode in Flussrichtung zwischen Netzteil und Motortreiber: ebenfalls nichts.

langsam bin ich am verzweifeln, werde aber gleichzeitig mal meine Motortreiber wechseln, auf den L298N auf PCB, ein Versuch schadet nicht. Der hat zwei C mit 220µF.

uwefed:
Ich weiß nicht ob der Treiber integrierte Freilaufdioden hat oder ob die fehlen weil im Treiber keine sind und auf der Platine keine sind.

Nein, keine Freilaufdioden. Hätte ich welche verbauen sollen?

Nachher poste ich vielleicht nochmals ein Update, falls sich etwas ergeben hat.

Was ich noch erwähnen möchte: Der Motor zuckt auch mal gerne, bewegt sich also nicht wirklich im Kreis. Manchmal dreht er sich dann doch wie er soll. Video 1 und Video 2

Edit: Auf ChinaNano klappt es super am PC, sogar mit externer Spannungsversorgung.
@Uwe Sind die Nano every doch nicht ganz so gleich passend zum "normalen" Nano, egal ob Nachbau oder nicht? Ich denke und hoffe nicht, dass es da einen Zusammenhang gibt...

kurzschlusselektroniker:
Sind die Nano every doch nicht ganz so gleich passend zum "normalen" Nano, egal ob Nachbau oder nicht? Ich denke und hoffe nicht, dass es da einen Zusammenhang gibt...

Die Nano every haben mit einem 'normalen' Nano ausser dem Namen und der Bauform/Pinbelegung nicht viel ( oder besser gesagt nichts .. ) gemein. Da ist ein anderer Prozessor drauf, und auch das 'drumrum' ist vollkommen anders.

Hallo,

also mal ganz langsam. Die neuen ATmegas sind auch nur 8 Bit Controller mit neuen inneren Aufbau und Möglichkeiten. Wenn der TO Probleme mit seiner Spannungsversorgung oder seinem Code hat, dann lastet das bitte nicht pauschal den Every an. Ich sehe dabei auch keinen Zusammenhang. Es gibt bisher keinen Schaltplan, keine Daten zu allen Bauteilen, aber jetzt soll plötzlich der Arduino schuldig sein. Ne Leute, so nicht. Sorry wenn ich Partei für die neuen Controller ergreife, ich finde die richtig geil, aber das wäre zu billig die Schuld auf diese abzutun. Schon einmal darüber nachgedacht das sein "altes" Arduinoboard sein Problem nur zufällig kaschiert? Was ich aus der Ferne mit Sicherheit sagen kann ist, dass sein Problem nichts mit dem Board zu tun hat.
Er schreibt doch selbst das alles funktioniert wenn der Every fremd versorgt ist. Das bedeutet nichts weiter das seine "12V Versorgung" für den Every gesehen einfach Sch.... ist.

Hallo,

sage mir einmal Spassenshalber was bei deinem Nano Every eingestellt ist.
Setze dazu in der Boardkonfiguration die Register Emulation auf "None"
und füge folgende Zeilen in setup direkt nach Serial.begin ein.

Serial.print("BOD.CTRLA ");
Serial.println(BOD.CTRLA);
            
Serial.print("BOD.CTRLB ");
Serial.println(BOD.CTRLB);
            
Serial.print("CLKCTRL.MCLKCTRLB ");
Serial.println(CLKCTRL.MCLKCTRLB);

Hallo zusammen!

Ich habe das ganze Projekt gekippt und komplett neue Bauteile & Komponenten genommen, nun funktioniert es. Dem Every traue ich schon noch, also hier mal was die Konsole ausgespuckt hat:

08:48:54.470 -> BOD.CTRLA 0
08:48:54.503 -> BOD.CTRLB 0
08:48:54.503 -> CLKCTRL.MCLKCTRLB 0

@Doc_Arduino
Du wirst schon wissen, was das bedeutet, ich tu es nämlich nicht lach

Ich finde auch, dass der Every nicht runtergemacht werden soll, ich finde ihn klasse: SMD Lötfähig, mehr RAM, mehr Speicherplatz und das beste: er ist günstiger als der Nano und man hat trotzdem ein Original in der Hand!! Toll, danke! FInde ich stark!

Ich finde auch, dass der Every nicht runtergemacht werden soll, ich finde ihn klasse: SMD Lötfähig, mehr RAM, mehr Speicherplatz und das beste: er ist günstiger als der Nano und man hat trotzdem ein Original in der Hand!! Toll, danke! FInde ich stark!

Er hat nur den Nachteil daß er weniger verbreitet ist und darum weniger bekannt ist und Du weniger Infos und Hilfe findest. Das ist das "schlechte" an ihm.
Grüße Uwe

Hallo,

hast du die Registeremulation im Boardmenü ausgeschalten?

BOD.CTRLA 0
BOD.CTRLB 0
CLKCTRL.MCLKCTRLB 0

Ich wollte herausfinden welcher BOD Level eingestellt ist und welche Taktquelle.
Um vielleicht Chancengleichheit herzustellen. Nur sind die Registerwerte alle auf 0 nicht plausibel.
Würde aber immer noch, laut meiner Meinung, nichts am Sympton der problematischen Spannungsversorgung ändern.

Ich finde auch, dass der Every nicht runtergemacht werden soll, ich finde ihn klasse: SMD Lötfähig, mehr RAM, mehr Speicherplatz und das beste: er ist günstiger als der Nano und man hat trotzdem ein Original in der Hand!! Toll, danke! FInde ich stark!

Genau diese Ansicht vertrete ich auch. Und wenn sie einen etwas längeren Nano Every herausbringen würden worauf alle Pins herausgeführt sind, dann wäre der ein würdiger Mega Nachfolger. Dann könnten die Enthusiasten alle neuen Möglichkeiten nutzen. Der ist mir auf dem Nano Board etwas zu kastriert. Da hätten sie auch einen ATmega4808 nehmen können. Abgesehen davon natürlich immer noch besser und billiger wie ein alter Nano. Das ist klar.

Er hat nur den Nachteil daß er weniger verbreitet ist und darum weniger bekannt ist und Du weniger Infos und Hilfe findest. Das ist das "schlechte" an ihm.

Das sollte sich auf Grund des Preises ändern, zudem es dadurch weniger Anreiz gibt Nachbauen zu kaufen.