Go Down

### Topic: Motors to H-Bridge Problem (Read 2603 times)previous topic - next topic

#### BrianBot

##### Mar 16, 2011, 01:38 am
Alright, here is a simple program that isn't working as it should and I have no idea why.

I have hooked a motor to an H-Bridge and placed pins 5 (PD3) and 6 (PD4) to my ATmega328 (from the UNO) to the logic of the H-Bridge and placed pin 3 (PD1) to the enable of the H-Bridge. Now, the idea is to PWM the enable of the H-Bridge while the Arduino pins 5 & 6 control the direction the motor will spin.

The PWM works fine (the motor spins faster and slower over time), but it spins only in one direction and I have no idea why. Here is a simple program that I made for testing:

Code: [Select]
`//Motor Through H-Bridge Testvoid driveMotor(int);void setup() {  Serial.begin(9600);  delay(100);  pinMode(5, OUTPUT);  pinMode(6, OUTPUT);}//end setup()void loop() {  for (int i = -250; i <= +250; i += 25 ) {    driveMotor(i);    delay(100);  }//end for}//end loop()void driveMotor(int torque)  {  //pins 5 and 6 go to logic of H-Bridge.  if (torque >= 0)  {// drive motors forward    digitalWrite(5, LOW);     digitalWrite(6, HIGH);      } else if (torque < 0) { // drive motors backward    digitalWrite(6, LOW);    digitalWrite(5, HIGH);        torque = abs(torque); //turn value pos.  }//end if      analogWrite(3,torque); //PWM to enable of H-Bridge}//end driveMotor()`

This is part of a balancing robot that I'm working on, so... help?

Thanks.
Brian

#### BrIDo

#1
##### Mar 16, 2011, 02:10 am
Is it a bought H Bridge motor driver, or one you've made yourself?
What sort of motors are you using? Voltage, current rating etc?
Also, might help if you post a schematic of your circuitry.

I'm still new to all this myself to be honest, but providing the above information will make it easier for folk to help...

One thing I would say, have you tested your setup with a simpler program e.g. one that just brings the logic levels high and low for a period of time? Then you would know if the problem is in the program or in the wiring...

#### zoomkat

#2
##### Mar 16, 2011, 02:20 am
Hqave you tried operating the h-bridge without the arduino to see if it works?
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

#### BrianBot

#3
##### Mar 16, 2011, 02:22 amLast Edit: Mar 16, 2011, 02:35 am by BrianBot Reason: 1
I know the problem isn't my H-Bridge, because when I physically put the bridge logic to HIGH and LOW, then the motors spin in a certain direction and when I reverse to LOW and HIGH the motors spin in the opposite direction (as it's suppose to). The problem is in the ATmega328 isn't sending the signal as I would expect and want to know if it's a coding error.

Thanks, though. I shall attempt to throw a schematic up there, too.

Oh, the H-Bridge is purchased and is the L298.

#### BrianBot

#4
##### Mar 16, 2011, 02:34 amLast Edit: Mar 16, 2011, 02:50 am by BrianBot Reason: 1
As requested, here is the schematic:

#### cr0sh

#5
##### Mar 16, 2011, 05:27 am
Hmm - the only thing that I see odd with your code is the "+250" in the comparison of the for loop; normally you would just use "250":

Code: [Select]
`for (int i = -250; i <= 250; i += 25 ) {`

...I am not sure if that is necessarily causing the issue. What happens if you change the code to:

Code: [Select]
`for (int i = -250; i <= 0; i += 25 ) {`

...also:

Code: [Select]
`for (int i = 0; i <= 250; i += 25 ) {`

I guess I am wondering which side of the zero point the issue is happening on.

I had something like this happen to me once on a 2n3055 TO-3 transistor h-bridge I had made, but that was due to a faulty alligator clip (needed clips to connect the collectors together); this isn't the issue in your case, though - obviously...

I will not respond to Arduino help PM's from random forum users; if you have such a question, start a new topic thread.

#### borref

#6
##### Mar 16, 2011, 07:33 am
You need to check your port to pin assignments. In Arduino land, PD1 is digital pin 1 and PD4 is digital pin 4 (rather than the physical package pins 5 and 6 as used in your sketch).

Here's the full list for AtMega 168/328:

http://www.arduino.cc/en/Hacking/PinMapping168

#### BrianBot

#7
##### Mar 16, 2011, 09:37 pm

You need to check your port to pin assignments. In Arduino land, PD1 is digital pin 1 and PD4 is digital pin 4 (rather than the physical package pins 5 and 6 as used in your sketch).

Here's the full list for AtMega 168/328:

http://www.arduino.cc/en/Hacking/PinMapping168

Yes, you were very much correct; the problem was my pins. apparently when declaring:
pinMode(5, OUTPUT);
the 5 refers to PD5 and not pin 5.

I'm shocked I made it this far without knowing this. Perhaps I did know it in the past and am just too stupid to remember. Either way, thank you very much for the help.

#### cr0sh

#8
##### Mar 16, 2011, 11:45 pm

You need to check your port to pin assignments. In Arduino land, PD1 is digital pin 1 and PD4 is digital pin 4 (rather than the physical package pins 5 and 6 as used in your sketch).

Here's the full list for AtMega 168/328:

http://www.arduino.cc/en/Hacking/PinMapping168

Yes, you were very much correct; the problem was my pins. apparently when declaring:
pinMode(5, OUTPUT);
the 5 refers to PD5 and not pin 5.

I'm shocked I made it this far without knowing this. Perhaps I did know it in the past and am just too stupid to remember. Either way, thank you very much for the help.

Glad you sorted it out, but I wasn't aware that the labels on the diagram had anything to do with the code; from your description, you seemed fairly confident it was the code, not the hardware, so I made the (wrong) assumption that your code was configure properly for the hardware, and the hardware was hooked up properly. Hmm - next time you post something like this, you should post your -entire- schematic (all parts and connections) included, along with your complete code (which you did); it would save all of us time.

I will not respond to Arduino help PM's from random forum users; if you have such a question, start a new topic thread.

Go Up