Zwei 24V Motoren, beide Richtungen

Serenifly: Ja, das Shield sieht gut aus.

Das ist aber leider nicht 100%ig Mega kompatibel. Die PWM Geschichte ist das Problem. Alles andere geht glaube ich.

Die Library macht PWM auf zwei Arten: 1.) über analogWrite() was standardmäßig sehr langsam ist (kann man zwar leicht erhöhen, aber auf 31kHz und der Treiber macht nur 20kHz) 2.) Über einen Timer mit richtigen 20kHz

Das ist aber für den UNO gemacht und der Mega hat die Timer-Ausgänge auf anderen Pins.

Die PWM Pins für das Shield sind 9 und 10. Also OC1A und OC1B. Auf dem Mega ist das aber 11 und 12

Nachtrag:

Ist doch kein großes Problem, da man das direkt in der Hardware anpassen kann: https://www.pololu.com/docs/0J49/6.a

Es ist also kein Problem das anders zu verdrahten. Man kann die Verbindungen von 9, 10 und 12 auftrennen. Dann legt man PWM auf 11 und 12 und M2EN/DIAG auf 9 oder 10 (vorher Pin 12) :)

Dann muss man noch die Library anpassen. Also aus dem hier:

#if defined(__AVR_ATmega168__)|| defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32U4__)

Macht man das:

#if defined(__AVR_ATmega168__)|| defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega2560)

Dann wird dieser Code auch auf dem Mega ausgeführt.

PWM geht dann automatisch auf 11 und 12 und die restlichen Pins muss entweder programmatisch über den Konstruktor definieren:

DualVNH5019MotorShield::DualVNH5019MotorShield(unsigned char INA1, unsigned char INB1, unsigned char EN1DIAG1, unsigned char CS1,
unsigned char INA2, unsigned char INB2, unsigned char EN2DIAG2, unsigned char CS2)

Oder man passt das im Header fest im Default-Konstruktor an:

DualVNH5019MotorShield::DualVNH5019MotorShield()
{
  //Pin map
  _INA1 = 2;
  _INB1 = 4;
  _EN1DIAG1 = 6;
  _CS1 = A0;
  _INA2 = 7;
  _INB2 = 8;
  _EN2DIAG2 = 12;
  _CS2 = A1;
}

Letzteres ist weniger Arbeit

Aber probiere es ruhig erst mal normal. Dann kann man es immer noch ändern. Diese niedrigen PWM Frequenz hört man allerdings i.d.R. Deshalb die 20kHz

Und generell mal die Seite gründlich durchlesen: https://www.pololu.com/docs/0J49

Da steht auch was zur Wärmeentwicklung:

Soo, das bestellte shield ist endlich gekommen. Also, wenn ich das richtig verstehe mache ich jetzt folgendes:

Verbindungen auf Unterseite an den offenen Punkten bei 9,10 und 12 trennen. 9 auf pin 11 vom arduino legen und 10 auf das Loch von der 12. Die vorherige 12 auf arduino 9 legen.

Soweit richtig? Und damit habe ich dann die 20kHz PWM?

9 auf pin 11 vom arduino legen und 10 auf das Loch von der 12. Die vorherige 12 auf arduino 9 legen.

Würde es eher so beschreiben: M1PWM auf 11 M2PWM auf 12 M2EN/DIAG auf 9 oder 10

rukenshia: Und damit habe ich dann die 20kHz PWM?

Damit hast du dann erst mal die Pins so gelegt, dass sie auf die Mega PWM Pins gehen.

Danach musst du noch die Library etwas anpassen. Da war übrigens noch ein Fehler. Am Ende fehlen zwei Unterstriche:

if defined(AVR_ATmega168)|| defined(AVR_ATmega328P) || defined(AVR_ATmega32U4) || defined(AVR_ATmega2560)

Ohne das letzte "defined" wird der Code nicht auf dem Mega ausgeführt.