Unterschiedliche Drehzahlen bei zwei DC-Getriebemotoren mit Dual H-Bridge

Hallo liebe Arduino-Gemeinde,

ich habe folgendes Problem:

Ich programmiere mir derzeit mit einem Arduino Mega einen eigenen Rasenmähroboter.

Ich steuere meine beiden Radmotoren mit einem Dual H-Brücken Treiber von Pololu (MC33926) an.

Klappt soweit auch ganz gut, nur drehen sich die Motoren bei gleichem PWM Signal mit unterschiedlichen Drehzahlen.

Mein Code (stark vereinfacht) sieht so aus:

#define LeftFront LOW      // "Variablen-Namen" werden durch den jeweiligen Status ersetzt
#define LeftBack HIGH
#define RightFront LOW
#define RightBack HIGH

const int motorRightPWM = 10; // PWM-Steuerung für RM, max. 125 pro Motor
const int motorRightDir = 9; // Drehrichtung für Radmotoren, siehe oben #define
const int motorLeftPWM = 8;
const int motorLeftDir = 7;

const int stopTaste = 2; // Stop-Taste
const int startButton = 11; // Pin für Start-Taster
const int stossSensor = 10;

bool startState = LOW;  // allgemeine Betriebsbedingung

void setup()
{

  pinMode (motorRightPWM, OUTPUT);  // Output Pins definieren
  pinMode (motorRightDir, OUTPUT);
  pinMode (motorLeftPWM, OUTPUT);
  pinMode (motorLeftDir, OUTPUT);

  pinMode (stossSensor, INPUT_PULLUP);
  pinMode (startButton, INPUT_PULLUP); // Eingänge mit internen Pull-Up Widerständen versehen, im unbetätigten Zustand: HIGH
  pinMode(stopTaste, INPUT_PULLUP);

  attachInterrupt(0, STOP, CHANGE);   // Interrupt 0 am digitalen Port 2 bei Änderung -> Motor Stop

}

void loop()
{

  if (digitalRead(startButton) == LOW) // Wenn Starttaster gedrückt drehen sich die Motoren gegenläufig, also faehrt der Maeher vorwaerts
  {
    startState = HIGH;                 // Hilfsvariable

    analogWrite(motorRightPWM, 125);             // PWM Pins für Geschwindigkeitssteuerung
    digitalWrite(motorRightDir, RightFront);     // Direction Pins für Drehrichtung
    analogWrite(motorLeftPWM, 125);
    digitalWrite(motorLeftDir, LeftFront);

  }

  while (startState == HIGH)                    // solange Variable gesetzt ist wird der Stoßsensor ueberprueft
  {
    if (digitalRead(stossSensor) == LOW)
    {
      digitalWrite(motorRightPWM, LOW);           // Block für Motorstop
      digitalWrite(motorRightDir, LOW);
      digitalWrite(motorLeftPWM, LOW);
      digitalWrite(motorLeftDir, LOW);
      delay(1000); 

      analogWrite(motorRightPWM, 125);           // Block für beide Motoren Rückwärts
      digitalWrite(motorRightDir, RightBack);
      analogWrite(motorLeftPWM, 125);
      digitalWrite(motorLeftDir, LeftBack);
      delay(2000); 
      
      analogWrite(motorRightPWM, 70);             // Block für Rechtsdrehung
      digitalWrite(motorRightDir, RightBack);
      analogWrite(motorLeftPWM, 70);
      digitalWrite(motorLeftDir, LeftFront);
      delay(2000); 

      analogWrite(motorRightPWM, 125);              // Wieder vorwaerts
      digitalWrite(motorRightDir, RightFront);
      analogWrite(motorLeftPWM, 125);
      digitalWrite(motorLeftDir, LeftFront);

    } // end if
  } // end while
} // end of loop

void STOP()                                     // Funktion für den Interrupt
{
  startState = LOW;                           // Hilfsvariable wird auf LOW gesetzt und Programm wartet auf Starttaster

  digitalWrite(motorRightPWM, LOW);           //  Motorstop
  digitalWrite(motorRightDir, LOW);
  digitalWrite(motorLeftPWM, LOW);
  digitalWrite(motorLeftDir, LOW);
}

Wenn ich beide Motoren auf den "Direction-Pins" mit HIGH belege, drehen sich beide gleich schnell.
Belege ich hingegen einen mit LOW und einen mit HIGH, also zum Drehen des Mähers, dreht ein Motor langsamer als der andere.

Und hier ist die Frage: Wie bekomme ich das weg? Hat das etwas mit meinem Code zu tun? Oder kann der Treiber irgendwas nicht verarbeiten?

Außerdem kann ich beide Motoren nicht mit einem PWM Wert von 255 ansteuern, sonst dreht einer so gut wie gar nicht und der andere recht schnell. Es funktioniert erst ab einem Wert von 125 (also pro Motor das halbe maximale PWM Signal 2,5 V).

Hoffe ihr könnt mir weiterhelfen.
Vielen Dank im Voraus.

Wie hochwertig sind die Motoren?

Hab hier einen Bastelsatz für so ein Dreirad-Fahrzeug, vorne lenkrolle, links und rechts Getriebemotor, die drehen alles andere als gleich und haben vorwärts und rückwärts unterschiede. Also einfach mechanisch unterstes Niveau. Für 10 Euro zum testen wars ok, aber mehr nicht wert.

Und wie stark ist deine Spannungsquelle. Motoren haben ziemliche Anlaufströme, da sollte das Netzteil nicht begrenzend wirken. Pi mal Daumen sollte da schon das doppelte an Strom geliefert werden können. PWM heist ja eben nicht das der Strom kleiner ist sondern nur Impulsweise abgerufen wird. Das muss dann der Endstufenkondensator des Netzteils bringen.

Hier könnte es vieleicht schon helfen am Ausgang des Netzteils mal einen 4700µF dran zu hängen. Grober Schätzwert: 1000µF/Ampere das fliesen soll.

Schon mal Danke für die Antwort.

Das sind die Original Motoren aus einem Rasenmäherroboter von Ambrogio (L200R), welche auch nicht gerade billig sind. Also denke ich, dass es an denen nicht unbedingt liegt.

Meine Spannungsquelle ist ebenfalls der Original-Akku (Li-Ion) der in dem Robo verbaut war.
Nominal Voltage 25,2 V
Max Charge Voltage 29,3 V
Max. Current 4 A

Die Spannung regle ich aber über einen Step-Down Converter (LM2596) auf 24V herunter.
Demnach denke ich, dass der Akku auch genug Strom liefert.

Was ich noch vergessen habe zu erwähnen ist, dass ich zwischen der H-Brücke und den Motoren noch ein so genanntes Protector-Board gehängt habe.
https://www.marotronics.de/Protector-Board-zum-Schutz-der-Motortreiber-vor-hohen-Induktionsspannungen

An diesem liegen meine 24 V an und leitet diese dann an meinen Treiber "geschützt" weiter.
Die Ausgänge des Treibers gehen dann über das Board an die Motoren.
Ich hab mal einen Auszug von meinem Schaltplan angehängt.

Auf diesem ist neben etlichen Dioden auch ein verhältnismäßig großer Kondensator, am Ausgang zum Treiber angelötet. Der aber, dachte ich jedenfalls, zum Entstören von Spannungsschwankungen gedacht ist.
Kann mich natürlich auch täuschen.

Das seltsame an der Sache ist ja, dass sich die Motoren (zumindest annähernd) gleich schnell drehen, wenn der Strom an beiden Motoren in die selbe Richtung fließt. Also wenn ich sie beide mit HIGH bzw. LOW ansteuere.

Nur eine kurze Anmerkung. 2 Motoren aus einem Rsenmäher aber 1 Akku aus diesem Rasenmäher. Der Akku ist mit Sicherheit nicht für 2 Motoren ausgelegt.

Gruß Tommy

Der Step down bringt nicht 4A sondern nur 3A.
Der Anlaufstrom ist 5 bis 10 mal Nennstrom.

Grüße Uwe

Naja, hochwertig ist so ne Sache. Heute werden Geräte so gebaut das sie den Anforderungen genau entsprechen. Reserve ist ein Garant für den Untergang der Firma. Selbst Miele baut heute Sollbruchstellen ein. Eine Miele Waschmaschine die 20 Jahre hält ist schlecht für die Firma. Sie muss nur länger halten als die Konkurrenz.

Aber trotzdem sollte es zumindest halbwegs passen. Läuft der Rasenmäher eigentlich im normalen Betrieb auch rückwärts? zB sind Schneckengetriebe nicht immer Symetrisch. Die Schnecke hat eine bevorzugte Laufrichtung. Ebenfalls ein Quell des Ärgers wäre eine systemgewünschte langsamere Geschwindigkeit rückwärts. Der Mensch der den Rasenmäher führt läuft vorwärts schneller als rückwärts, die Motoren bilden das dann ab.

Auch wenn man es nicht immer vermutet, in den Motoren kann eine komplette Leistungselektronik drin stecken. Nimm dir mal einen billigen CPU-Lüfter (3-Draht oder 4-Draht)und zerlege ihn. Du stösst auf eine Platine, mit FET, Controllern, passiven Bauteilen. Auch das könnte in deinem Motor drin stecken. Von aussen nicht sichtbar. Und ein PC steuert auch mit PWM den Lüfter. Trotzdem steckt innen noch zusätzliche Elektronik.

Sind alles nur Möglichkeiten, ich kenne das Gerät nicht. Funktional gibts am Arduino keinen Unterschied, ob du Direction links oder rechts aktivierst.

Und nicht zu vergessen was Uwe sagte: du fährst an der Lastgrenze mit deinen Bauteilen. So kann man keine Motoren betreiben. Motoren müssen mindestens ihren doppelten Nennstrom abfordern können. Ein Lithiumakku ist eher selten begrenzend. 4A erscheint mir da extrem wenig, vermutlich ist das der Sicherungswert. Lithiumakkus können typischerweise C10 bringen oder mehr, bis hin zu C40. Das heist sie leifern bei 2Ah 20A Spitzenstrom bis 80A Spitzenstrom (10x kapazität C). Im normalen Betrieb liefern sie also Reserven weil die Sicherung träge ist und der Überstrom nicht nur 2ms sondern 1-2sec anstehen muss. Deine Elektronik hingegen liefern genau 3A und nicht einen Krümel mehr.

Ich würde dir also erstmal vorschlagen: schmeiss den Regler raus. 24V Motoren schaffen auch die 29V Ladeschlusspannung des Lipo. Die Spannungsfestigkeit ist irgendwo bei 1000V oder weit drüber. Motoren heizen sich kaputt, wenn sie zuviel Spannung bekommen. Thermisch sind die auf eine bestimmte Leistung ausgelegt. Mit 24V und sagen wir 2A (48W) würden bei 29V dann 2,4A fliesen (70W). 22W mehr und damit einen höheren Abwärmeanteil. Nun regelst du aber mit PWM ja schon zurück. Und bei einem Wirkungsgrad von sagen wir 80% bringt ein 48W Motor 9,6W Abwärme, bei Überlast 14W. Wenn aussen rum nun nicht all zu heiss wird, schafft er das locker weg.

Dazu kommt, wie lange sind deine lipo auf 29V? So 2-3 Minuten, dann sinken die recht flott ab auf ihre Nennspannung von 26V. es dürfte also schwer fallen den Motor zu überlasten auf diesem weg.

So..genug Theorie. Schmeiss den 24V Regler einfach raus und geh direkt auf die Akkus. Und schau ob dann der Effekt weg ist.

Tommy56:
Nur eine kurze Anmerkung. 2 Motoren aus einem Rsenmäher aber 1 Akku aus diesem Rasenmäher. Der Akku ist mit Sicherheit nicht für 2 Motoren ausgelegt.

Der Akku betreibt im Original auch noch den Messermotor und die Hauptplatine + Display Karte.

chefin:
Naja, hochwertig ist so ne Sache. Heute werden Geräte so gebaut das sie den Anforderungen genau entsprechen. Reserve ist ein Garant für den Untergang der Firma. Selbst Miele baut heute Sollbruchstellen ein. Eine Miele Waschmaschine die 20 Jahre hält ist schlecht für die Firma. Sie muss nur länger halten als die Konkurrenz.

Aber trotzdem sollte es zumindest halbwegs passen. Läuft der Rasenmäher eigentlich im normalen Betrieb auch rückwärts? zB sind Schneckengetriebe nicht immer Symetrisch. Die Schnecke hat eine bevorzugte Laufrichtung. Ebenfalls ein Quell des Ärgers wäre eine systemgewünschte langsamere Geschwindigkeit rückwärts. Der Mensch der den Rasenmäher führt läuft vorwärts schneller als rückwärts, die Motoren bilden das dann ab.

Geb' ich dir vollkommen recht. Aber solange sie noch laufen sollte eventuell mangelnde Qualität nicht der Auslöser für mein Problem sein.

Ja, der läuft im normalen Betrieb vorwärts, rückwärts und dreht sich links/rechts. Das Getriebe, das dran hängt ist ein Planetengetriebe.
Da die Motoren ja vorwärts sowie rückwärts gleich schnell laufen und nur in der Drehbewegung unterschiedlich schnell laufen, dürfte das auch nicht der Fall sein.

chefin:
Auch wenn man es nicht immer vermutet, in den Motoren kann eine komplette Leistungselektronik drin stecken. Nimm dir mal einen billigen CPU-Lüfter (3-Draht oder 4-Draht)und zerlege ihn. Du stösst auf eine Platine, mit FET, Controllern, passiven Bauteilen. Auch das könnte in deinem Motor drin stecken. Von aussen nicht sichtbar. Und ein PC steuert auch mit PWM den Lüfter. Trotzdem steckt innen noch zusätzliche Elektronik.

Das darin nichts weiter als eine Encoder-Platine mit Hallsensor zur Drehzahlüberwachung verbaut ist weiß ich.
Die benutze ich aber gar nicht.

chefin:
Sind alles nur Möglichkeiten, ich kenne das Gerät nicht. Funktional gibts am Arduino keinen Unterschied, ob du Direction links oder rechts aktivierst.

Kann das nicht irgendwie mit der Richtung zu tun haben, in die der Strom fließt?
Da es ja einen Unterschied gibt, ob ich die Motoren mit HIGH oder LOW ansteuere. Bedeutet ja ich lassen den Strom in die jeweils andere Richtung fließen.

chefin:
Und nicht zu vergessen was Uwe sagte: du fährst an der Lastgrenze mit deinen Bauteilen. So kann man keine Motoren betreiben. Motoren müssen mindestens ihren doppelten Nennstrom abfordern können. Ein Lithiumakku ist eher selten begrenzend. 4A erscheint mir da extrem wenig, vermutlich ist das der Sicherungswert. Lithiumakkus können typischerweise C10 bringen oder mehr, bis hin zu C40. Das heist sie leifern bei 2Ah 20A Spitzenstrom bis 80A Spitzenstrom (10x kapazität C). Im normalen Betrieb liefern sie also Reserven weil die Sicherung träge ist und der Überstrom nicht nur 2ms sondern 1-2sec anstehen muss. Deine Elektronik hingegen liefern genau 3A und nicht einen Krümel mehr.

An der Lastgrenze bin ich lediglich bei den Protector-Boards. Die sind für 24 V ausgelegt. Oder was genau meinst du?
Mit Akkus kenne ich mir leider nicht so gut aus, diese C werte sagen mir auch nichts.
Ich weiß, dass der Akku 6,9 Ah hat mit den oben genannten Daten.

chefin:
Ich würde dir also erstmal vorschlagen: schmeiss den Regler raus. 24V Motoren schaffen auch die 29V Ladeschlusspannung des Lipo. Die Spannungsfestigkeit ist irgendwo bei 1000V oder weit drüber. Motoren heizen sich kaputt, wenn sie zuviel Spannung bekommen. Thermisch sind die auf eine bestimmte Leistung ausgelegt. Mit 24V und sagen wir 2A (48W) würden bei 29V dann 2,4A fliesen (70W). 22W mehr und damit einen höheren Abwärmeanteil. Nun regelst du aber mit PWM ja schon zurück. Und bei einem Wirkungsgrad von sagen wir 80% bringt ein 48W Motor 9,6W Abwärme, bei Überlast 14W. Wenn aussen rum nun nicht all zu heiss wird, schafft er das locker weg.

Wie oben gesagt, sind meine Protector-Boards für 24V ausgelegt, nur deswegen ist der Regler überhaupt vorhanden.
Aber ich werd's mal ausprobieren, kurze Zeit werden die das bestimmt mit machen. Mehr als eine Sicherung kann auf den Boards glaube ich eh nicht kaputt gehen.
Die Motoren werden in der Original-Software des Mähers mit der maximalen Spannung die der Akku liefert betrieben, das habe ich mal raus gemessen als ich noch mit denen gearbeitet habe.

Ich werd das mit dem Regler mal probieren, aber ich glaube nicht dass das die Lösung ist,
da die Motoren ja gleich schnell drehen können wenn ich sie genau gleich ansteuere.

Elektrisch gibts keinen Unterschied wierum der Strom fliest bzgl der Leistung. Weder Widerstand noch Kondensatoren noch Spulen haben eine Polarität die den Stromfluss verändert. Lediglich Elkos sind polarisiert und damit zerstören sie sich bei falscher Polung...das ist aber Sonderfall und hier nicht relevant.

Eine H-Brücke ist nichts anderes wie 4 Transistoren, wobei jeweils nur 2 durchschalten und mal links + und rechts - drauf legen und umgedreht. Alle weiteren Spielereien die man damit machen kann sind nur Varianten davon im zeitlichen Ablauf.

Allerdings...sollte einer der 4 Transistoren defekt sein und nur halblebendig leiten könnte das natürlich einfluss haben. Das kann man rausfinden, wenn man die Motortreiber tauscht und schaut ob der Effekt nun beim anderen Motor auftaucht.

Die Schutzplatine dürfte man ausschliessen können, ihrem Schaltbild nach liegen alle Teile nur parallel zur Motorspannung. Aber falls möglich, versuche mal den Strom zu messen der fliest. Ob der Motor der langsamer dreht auch weniger Strom braucht und tausche auch die Schutzplatinen mal gegeneinander aus.

Von hier aus ist es schwer den Fehler zu erkennen, aber mit obigen Versuchen grenzt du das ganze ein.

Dokumentier möglichst genau welche Ergebnisse du bei welchem Tauschen hast und ganz wichtig: immer nur eine Sache verändern und neu testen.

Und ja, an den regler glaube ich nicht wirklich...aber jedes Teil im Strompfad das unnötig ist ist nur eine unnötige Fehlerquelle. Wenn sich nichts ändert, kannst den Regler ja wieder einbauen.

Also ich bin gestern Abend endlich mal dazu gekommen das ganze zu testen.

Hab alle Bauteile einzeln getauscht bzw. weggelassen und getestet.
Hat alles nichts bewirkt.

Bin aber trotzdem dahinter gekommen was da los ist.

Als ich mal Plus und Minus an einem Motor getauscht hab und ihn mit HIGH statt LOW für den Rechtslauf angesteuert hab, ist mir aufgefallen, dass wenn ich mit meinem PWM Signal runter gehe, die Drehzahl nach oben geht.

Hab mir das so erschlossen dass, wenn ich den Pin der für die Richtung verantwortlich ist mit LOW ansteuere, der Strom über die Positiven Pulse fließt.
Steuere ich ihn hingegen mit HIGH an, fließt der Strom über die "Null-Pulse" in Richtung des PWM-Pins, also wenn er gerade keinen Strom raus schickt.

Und da ich beim Wendemanöver ein PWM von 80 raus schicke, dreht sich der Motor der mit HIGH angesteuert wird schneller als der den ich mit LOW ansteuere, da die "Null-Pulse" länger dauern als die Positiven.

Jetzt muss ich das ganze nur so angleichen, dass für beide Richtungen die selbe Drehzahl raus kommt.

Die einzige Frage die jetzt noch übrig bleibt ist:
Warum kann ich die Motoren, wenn ich sie angenommen beide mit LOW ansteuere, nicht mit dem maximalen PWM von 255 ansteuern, sondern nur mit 125, also der Hälfte.
Lege ich an beide Motoren ein höheres PWM-Signal als 125 an, dreht sich der eine Motor schneller und der andere so gut wie gar nicht, wenn er überhaupt anfängt zu drehen.

Hat dazu noch jemand eine Idee?

robomow21:
Hat dazu noch jemand eine Idee?

Ich weiß nicht wirklich, was Du da treibst, aber eine Idee hätte ich, da ich in einem anderen Thema gerade einen Überlauf hatte: 127 ist die Hälfte von 255 und damit die Grenze für vorzeichenbehaftete Variablen mit 8 Bits. Ist möglicherweise eine Variable falsch deklariert?

agmue:
Ich weiß nicht wirklich, was Du da treibst, aber eine Idee hätte ich, da ich in einem anderen Thema gerade einen Überlauf hatte: 127 ist die Hälfte von 255 und damit die Grenze für vorzeichenbehaftete Variablen mit 8 Bits. Ist möglicherweise eine Variable falsch deklariert?

Naja ich will zwei Motoren links/rechts ansteuern.

Nein das kann nicht sein. Entweder ich habe die Zahlen direkt in's analogWrite geschrieben oder mit einer Integer-Variable, welche ja nen Bereich von 16 Bits hat.

also so:

void ruckWarts()
{
  analogWrite(motorRightPWM, 125);
  digitalWrite(motorRightDir, LOW);

  analogWrite(motorLeftPWM, 125);
  digitalWrite(motorLeftDir, HIGH);
}

void vorWarts()
{
  analogWrite(motorRightPWM, 125);
  digitalWrite(motorRightDir, HIGH);

  analogWrite(motorLeftPWM, 125);
  digitalWrite(motorLeftDir, LOW);
}

void linksDrehung()
{
  analogWrite(motorRightPWM, 80);
  digitalWrite(motorRightDir, HIGH);

  analogWrite(motorLeftPWM, halb);
  digitalWrite(motorLeftDir, HIGH);
}

void rechtsDrehung()
{
  analogWrite(motorRightPWM, 80);
  digitalWrite(motorRightDir, LOW);

  analogWrite(motorLeftPWM, 80);
  digitalWrite(motorLeftDir, LOW);
}

Im Prinzip ist es nicht mehr als das.
Gehe ich über diese 125 (127) läuft ein Motor kaum mehr.

robomow21:
Naja ich will zwei Motoren links/rechts ansteuern.

Nein das kann nicht sein. Entweder ich habe die Zahlen direkt in's analogWrite geschrieben oder mit einer Integer-Variable, welche ja nen Bereich von 16 Bits hat.

analogWrite kann aber nur 8 Bit (0...255), nimmt also nur das niederwertige Byte von Integer.

Gruß Tommy

robomow21:
Gehe ich über diese 125 (127) läuft ein Motor kaum mehr.

Mit diesem Code

void ruckWarts()
{
  analogWrite(motorRightPWM, 200);
  digitalWrite(motorRightDir, LOW);

  analogWrite(motorLeftPWM, 200);
  digitalWrite(motorLeftDir, HIGH);
}

bekomme ich diesen Kurvenverlauf

robomow21_PWM.jpg

Viel HIGH, wenig LOW. Daher scheint der Sketch zu funktionieren :slight_smile:

Der Fehler ist irgendwo, wo Du nicht hinschaust. So finde ich sowas:

const int motorRightPWM = 10; // PWM-Steuerung für RM, max. 125 pro Motor
...
const int stossSensor = 10;

Tommy56:
analogWrite kann aber nur 8 Bit (0...255), nimmt also nur das niederwertige Byte von Integer.

Das niederwertige Byte ist dann was? Habe den Begriff noch nicht gehört und finde auch keine Erklärung dazu.
Bedeutet das, wenn ich eine int Variable mit z.B. 300 beschreibe, der analogWrite Befehl sich nur die ersten 8 Bits schnappt und die anderen 8 ignoriert?
So würde ich mir das jetzt schlussfolgern.

agmue:
Viel HIGH, wenig LOW. Daher scheint der Sketch zu funktionieren :slight_smile:

Der Fehler ist irgendwo, wo Du nicht hinschaust. So finde ich sowas:

const int motorRightPWM = 10; // PWM-Steuerung für RM, max. 125 pro Motor

...
const int stossSensor = 10;

Was meinst du mit 'Daher scheint der Sketch zu funktionieren"?

Bin grade dahinter gekommen. Hab einfach den Wald vor lauter Bäumen nicht mehr gesehen.
Ich hab mir mein Problem oben schon selbst beantwortet.

Wenn ich beide Motoren mit 255 und LOW/HIGH (wie oben) ansteuere, kommt beim rechten Motor 5 V (am Treiber) an und beim Linken kann nichts fließen, weil der Strom über die LOW Phasen in Richtung PWM Pin will und wenn kaum oder keine LOW Phasen vorhanden sind, kann sich da auch kein Motor in Bewegung setzen.

Ist mein Gedankengang nachvollziehbar? :smiley:

Und wegen der Doppelbelegung im Code:
Das ist nicht mein Original-Code, den hab ich nur fix zusammen geschrieben/kopiert um mein Problem zu schildern, da das Original etwas zu lang und komplex für das eigentliche Problem ist. Falls den wirklich jemanden interessiert kann ich den auch mal hier rein stellen.

Und btw, darf ich fragen was das für ein Programm ist mit dem du das Diagramm gemacht hast?
Ich darf über die ganze Schoße noch eine Dokumentation schreiben, da ist ein Tool mit dem sich das einfach darstellen lässt eventuell ganz hilfreich. :wink:

Grüße und vielen Dank für eure Hilfe

robomow21:
Das niederwertige Byte ist dann was? Habe den Begriff noch nicht gehört und finde auch keine Erklärung dazu.
Bedeutet das, wenn ich eine int Variable mit z.B. 300 beschreibe, der analogWrite Befehl sich nur die ersten 8 Bits schnappt und die anderen 8 ignoriert?
So würde ich mir das jetzt schlussfolgern.

Wenn Du 300 in einen int schreibst ist das 0x12C in HEX-Schreibweise. Dabei ist das höherwertige Byte = 0x1 (256 DEC) und das niederwertige 0x2c (44 DEC).
Du würdest bei 300 also 44 auf analogWrite ausgeben.

Gruß Tommy

Tommy56:
Du würdest bei 300 also 44 auf analogWrite ausgeben.

Der HEX-Code sagt mir zwar grade nicht so viel, zumindest das "0x" bzw. "1x" nicht, aber im Binärcode würde das selbe raus kommen.
Die ersten 8 Bits (von rechts gelesen natürlich) würden dann auch 44 ergeben, wenn er die hinteren 8 Bits ignoriert. Also das "neunte" Bit für die 256 weg lässt.

Habe verstanden und danke :slight_smile:

Ob binär oder Hex - es sind nur 2 Schreibweisen für den gleichen Inhalt.
Hex schreibt sich kürzer, besonders wenn es um 32 Bit geht. :wink:

Gruß Tommy

Meine Rede :smiley:
Mir ist Binär trotzdem umgänglicher, bis auf's Umrechnen in der Schule hatte ich nie was mit HEX am Hut.
Aber bin froh wieder was dazu gelernt zu haben :wink:

robomow21:
Und btw, darf ich fragen was das für ein Programm ist mit dem du das Diagramm gemacht hast?

Ich nutze BitScope, weil das auch analog kann. Sonst habe ich noch Saleae. Was Du siehst, ist ein Bildausschnitt.