DC Motor and H-Bridge

Hello, everyone!

I set up an H-bridge to control a DC motor with 4 PIT122 transistors. I couldn't get the IC I wanted from the store (even the transistors weren't the ones I wanted). Anyway, the H-bridge seems to be working properly. My problem is that I read only 2.6V near the DC motor, despite the input voltage (I tried several input voltages: 9V, 12V and 30V). Based on the data of the datasheet it appears only base-emitter current is going through. This is the first time I'm working with this transistors, but, according to my understanding of this transistors, shouldn't the voltage around the DC motor be the same or near the input voltage?

I've attached the PIT122 datasheet and a pic of my circuit (sorry about the mess). Basically, I have transistors 1 and 2 on when 3 and 4 are off, and vice-versa. The Arduino out pins are connected to 270 ohm resistors (ideally they should be 50 ohm resistors: 5V/50ohm = 0.1A, so it meets datasheet specs).

Thanks in advance,
Chiroptera

TIP122.pdf (58.7 KB)

An H-bridge generally doesn't have 4 NPN transistors in it. The "bottom two" are NPN while the "top two" are PNP. Do you have a schematic that you used for implementing your circuit? Perhaps show us that?

--
The Gadget Shield: accelerometer, RGB LED, IR transmit/receive, speaker, microphone, light sensor, potentiometer, pushbuttons

Yes, I forgot to mention that I followed this tutorial: http://www.instructables.com/id/H-Bridge-on-a-Breadboard/

I followed the tutorial up to a point, in order to control the motor with Arduino.

Also, this is the sketch I'm running:

//este sketch foi usado num circuito composto por 4 transistors de modo a formar uma H-Bridge.

int control = 3; //variavel para controlar direcao do motor com comunicacao serial

void setup()
{
  pinMode(11, OUTPUT);//o pin 11 controla uma direcao e o pin 9 controla outra
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println(control,BYTE); //vai comunicando o estado da variavel controlo
  delay(1000);
  
  if (Serial.available() > 0) //le novo valor para a variavel controlo
  {
    control = Serial.read();
  }
  
  if (control=='0') //quando control=0 roda numa direcao e quando control=1 roda noutra, se for diferentede de 1 ou 0 nao ha movimento || os pins 1 e 0 nunca podem estar ambos a HIGH, senao ha curto-circuito
  {
      analogWrite(11, 0);
      analogWrite(9, 255);
  }
  else if (control=='1')
  {
      analogWrite(11, 255);
      analogWrite(9, 0);
  }
  else
  {
    analogWrite(11, 0);
    analogWrite(9, 0);
  }
}

The comments are in Portuguese, but fundamentally pin 9 controls transistors 3 and 4 and pin 11 controls 1 and 2. When I send '0' to Arduino, it 'opens' 3 and 4, when I send '1' it 'opens' 1 and 2, otherwise they're both 'closed'. I don't think there is any problem with the sketch, though.

The thing is, in that circuit they can apply 9V to the base of the "top two" transistors. You can't, you're only applying 5V from the Arduino. You could try to run the whole thing from 5V instead of 9V and it might work better. Of course, you're not going to get more than ~4V at your motor even if it works perfectly.

There are lots of H-bridge ideas here, many of which seem to use simple transistors:

http://www.solarbotics.net/library/circuits/driver.html

But really, getting a motor driver chip or motor shield would be easier :slight_smile:

--
The Quick Shield: breakout all 28 pins to quick-connect terminals

Thanks for the help. Gonna try to set up something different.