Problema con Driver TB6612fng

Tengo un problema con este driver supongo que es por el código, si logro mover los motores como yo quiero pero con muy poca fuerza y no se porque será. Espero que me puedan ayudar. Este es el código que estoy usando:

#define TxD 1 //definir pin TxD
#define RxD 0 //definir pin RxD


//enable
int STBY = 26; //standby

//Motores derechos
int PWM1 = 2; //velocidad motor 1, ruedas derechas
int IN11 = 22; //Dirección
int IN21 = 23; //Dirección

//Motores izquierdos
int PWM2 = 3; //velocidad motor 2, ruedas izquierdas
int IN12 = 27; //Dirección
int IN22 = 30; //Dirección

//otros
int dato = 0; // Asignación de variable, letra leía por el bluetooth
int luz = 31;
void setup() {

  Serial.begin(9600);

  pinMode(STBY, OUTPUT);

  pinMode(PWM1, OUTPUT);
  pinMode(IN11, OUTPUT);
  pinMode(IN21, OUTPUT);

  pinMode(PWM2, OUTPUT);
  pinMode(IN12, OUTPUT);
  pinMode(IN22, OUTPUT);

  pinMode(luz, OUTPUT);
}

//****************************************************************ciclo principal*********************************************************************

void loop() {

  //////////////configuración del acelerómetro/////////////////////

  if (Serial.available() > 0) {
    dato = Serial.read();

    ////////////fin de la configuracion del acelerometro/////////////

  }
  if (dato == 'a') //al recibir la letra "a" ejecute lo siguiente, carro hacia delante
  {
    Serial.println("a");
    adelante(); //llama al ciclo secundario
  }

  if (dato == 'k') //al recibir la letra "a" ejecute lo siguiente, carro hacia atras
  {
    atras(); //llama al ciclo secundario
  }

  if (dato == 'b')  //al recibir la letra "b" ejecute lo siguiente, el carro va a la derecha
  {
    Serial.println("b");
    derecha(); //llama al ciclo secundario
  }

  if (dato == 'c')  //al recibir la letra "c" ejecute lo siguiente, el carro va a la izquierda
  {
    izquierda(); //llama al ciclo secundario
  }

  if (dato == 'g')  //al recibir la letra "g" ejecute lo siguiente, el carro se detiene
  {
    detenerse(); //llama al ciclo secundario
  }

  if (dato == 'd') //al recibir la letra "d" ejecute lo siguiente, enciende las luces del carro
  {
    digitalWrite(luz, HIGH);
  }
  if (dato == 'h') //al recibir la letra "h" ejecute lo siguiente, apaga las luces del carro
  {
    digitalWrite(luz, LOW);
  }
}


//*****************************************************Funciones*************************************************************************


void adelante()
{
  digitalWrite(STBY, HIGH);
  analogWrite(PWM1, 255);
  analogWrite(PWM2, 255);
  digitalWrite(IN11, HIGH);
  digitalWrite(IN21, LOW);
  digitalWrite(IN12, LOW);
  digitalWrite(IN22, HIGH);
}

void atras()
{
  digitalWrite(STBY, HIGH);
  analogWrite(PWM1, 255);
  analogWrite(PWM2, 255);
  digitalWrite(IN11, LOW);
  digitalWrite(IN21, HIGH);
  digitalWrite(IN12, HIGH);
  digitalWrite(IN22, LOW);
}

void derecha()
{
  digitalWrite(STBY, HIGH);
  analogWrite(PWM1, 255);
  analogWrite(PWM2, 255);
  digitalWrite(IN11, LOW);
  digitalWrite(IN21, HIGH);
  digitalWrite(IN12, LOW);
  digitalWrite(IN22, HIGH);
}

void izquierda()
{
  digitalWrite(STBY, HIGH);
  analogWrite(PWM1, 255);
  analogWrite(PWM2, 255);
  digitalWrite(IN11, HIGH);
  digitalWrite(IN21, LOW);
  digitalWrite(IN12, HIGH);
  digitalWrite(IN22, LOW);
}

void detenerse()
{
  digitalWrite(STBY, LOW);
}

Hablas de motores, que motores? Que fuentes de alimentación usas? Que esquema de conexión usas?