Motordriver Dual für Power Functions 2A mit dem Schaltkreis TC78H660FNG

Motordriver Dual für Power Functions 2A mit dem Schaltkreis TC78H660FNG

Zu beziehen über Ebay

Der Motordriver ist ein Breakoutboard für den modernsten Schaltkreis von Toshiba TC74H660FNG.

Technische Daten

  • Motor Spannung 3 … 16 V
  • Motor Strom <2 A
  • Geschwindigkeitssignal (Speed) PWM  3.3 V oder 5 V
  • Richtungssignal (Direction) 3.3 V oder 5 V

Beschaltung mit einem Arduino Nano oder Uno

Pinout

Signale zur Motorsteuerung

Es ist zu beachten, dass IN1 das PWM Signal ist und IN2 das Richtungssignal. Ist IN2 LOW, bewegt sich der Motor in die eine Richtung, und zwar so, dass der Motor anhält, wenn IN1 auch null ist (analogWrite( IN1, 0);.

Die maximale Geschwindigkeit wird erreicht, wenn IN1 HIGH ist: analogWrite(IN1, 255);.

Ist IN2 dagegen HIGH, dreht sich der Motor in die entgegengesetzte Richtung, und zwar so, dass er stoppt, wenn IN1 ebenfalls HIGH ist: analogWrite(IN1, 255);.

Wird der Wert von IN1 abgesenkt, dreht sich der Motor immer schneller und hat seinen höchsten Geschwindigkeitswert bei analogWrite(IN1, 0);

Das Stoppen kann auch durch Standbye STBY an Pin13 des Breakoutboards erreicht werden, wenn dieses Pin auf LOW gezogen wird. Der Anschluss des STBY Signals ist allerdings optional. Auf dem Breakoutboard befindet sich ein pull up Widerstand.

Christian Rempel

22/07/24

Beispielprogramm: P220724_TC78H660FNG_Test

/* www.beerlecada.com
 *  Test and Example Program for Motordriver Dual TC78H660FNG break out
 *  Author: Christian Rempel
 *  Licence: one glass of red wine, when you meet the author
 *  Date: 22/07/24
  */




#define IN1A 5 // PWM H660FNG break out 4 - yellow
#define IN2A 4 // DIR H660FNG break out 14 - green
#define IN1B 9 // PWM H660FNG break out 2 - yellow
#define IN2B 8 // DIR H660FNG break out 3 - green
#define STAND_BY 2 // low active H660FNG break out 13 - brown


// OUT A+ H660FNG break out 5
// OUT A- H660FNG break out 6
// OUT B+ H660FNG break out 12
// OUT B- H660FNG break out 11
// Motor Voltage + H660FNG break out 7 or 15
// Vlog logical voltage + 5V Arduino Nano or Uno H660FNG break out 8
// Gnd ground H660FNG break out 1 or 16

// Mode is internally pulled to ground by a 10 k resistor, results in IN mode
// Stand By Pin 14 von TC78 und H660FNG break out 13 intern ¸ber 10 k an 5V
// OSCM Pin 13 von TC78 intern ¸ber 47 k an Masse
// Vref Pin 12 von TC78 intern ¸ber 10 k an 5V und 5 K an Masse
// Man darf wahrscheinlich nicht an die Motorpins mit einem Spannungsmessger‰t gehen
// wenn IN1A - IN2A > 0, dann ist vom H660FNG break out Pin 5(OUT A+) positiv und Pin 6(OUT A-) negativ

void setup() {
  Serial.begin(9600);
  pinMode(IN1A, OUTPUT);
  pinMode(IN2A, OUTPUT);
  pinMode(IN1B, OUTPUT);
  pinMode(IN2B, OUTPUT);

  pinMode(STAND_BY, OUTPUT);

  
}

void loop() {
  // ensure the starting condition
  digitalWrite(STAND_BY, LOW);
  digitalWrite(IN1A, LOW);
  digitalWrite(IN2A, LOW);
  digitalWrite(IN1B, LOW);
  digitalWrite(IN2B, LOW);
  digitalWrite(STAND_BY, HIGH);


  Serial.println("increase speed A forward");
  digitalWrite(IN2A, LOW);
  //digitalWrite(STAND_BY, HIGH); // Standby aus
  for (int i = 0; i < 256; i++) {
    analogWrite(IN1A, i);
    //Serial.println(i);
    // H660FNG break out 5(OUT A+) Plus; H660FNG break out 6(OUT A-) Minus
    delay(20);
  }
  delay(1000);


  Serial.println("increase speed B forward");
  digitalWrite(IN2B, LOW);
  //digitalWrite(STAND_BY, HIGH); // Standby aus
  for (int i = 0; i <= 255; i++) {
    analogWrite(IN1B, i);
    //Serial.println(i);
    // H660FNG break out 5(OUT A+) Minus; H660FNG break out 6(OUT A-) Plus
    delay(20);
  }
  delay(1000);
  digitalWrite(STAND_BY, LOW); // Stand by on
  Serial.println("Standby");
  delay(1000);
  digitalWrite(STAND_BY, HIGH); // Standby aus
  delay(1000);

  Serial.println("decrease speed A and B forward");

  //digitalWrite(STAND_BY, HIGH); // Standby aus
  for (int i = 255; i >= 0; i--) {
    analogWrite(IN1A, i);
    analogWrite(IN1B, i);
    //Serial.println(i);
    // H660FNG break out 5(OUT A+) Minus; H660FNG break out 6(OUT A-) Plus
    delay(20);
  }

  delay(1000);
  Serial.println("increase speed A and B backwards");
  digitalWrite(STAND_BY, LOW); // Stand by on
  digitalWrite(IN2A, HIGH);
  digitalWrite(IN2B, HIGH);
  digitalWrite(IN1A, HIGH);
  digitalWrite(IN1B, HIGH);
  digitalWrite(STAND_BY, HIGH); // Stand by aus
  for (int i = 255; i >= 0; i--) {
    analogWrite(IN1A, i);
    analogWrite(IN1B, i);
    //Serial.println(i);
    // H660FNG break out 5(OUT A+) Minus; H660FNG break out 6(OUT A-) Plus
    delay(20);
  }
  delay(1000);
  digitalWrite(STAND_BY, LOW); // Stand by on
  Serial.println("Standby");
  delay(1000);
  digitalWrite(STAND_BY, HIGH); // Stand by aus
  delay(1000);

  Serial.println("decrease speed A and B backwards");

  //digitalWrite(STAND_BY, HIGH); // Stand by aus
  for (int i = 0; i <= 255; i++) {
    analogWrite(IN1A, i);
    analogWrite(IN1B, i);
    //Serial.println(i);
    // H660FNG break out 5(OUT A+) Minus; H660FNG break out 6(OUT A-) Plus
    delay(20);
  }
  delay(1000);
}

Zurück