Go Down

Topic: Autonomous Robot, motor driver (Read 4292 times) previous topic - next topic

husein06

Feb 22, 2013, 05:42 pm Last Edit: Feb 22, 2013, 06:14 pm by husein06 Reason: 1
Hello all,

So, long story short, I made an autonomous robot.

2 Problems: Wont drive when put on the ground and everything shuts down when not using CPU power.

My robot works perfectly when not put on any surface, the wheels are spinning very well, then the first time I tried it on a surface it worked for 10 seconds only, then after that every-time I put the robot on any floor surface it can't drive, then I lift it it works fine, and so on. My robot all together only weighs 4lbs.
Using a 7.2V rechargeable Battery
Motors: Motor Ratings (at 7.2 VDC):
No-load Current: 0.27 A @ 310 RPM
Stall Current: 4.8 A
Max Torque: 4.6 lb-inch (5.3 kg-cm)

Motor Driver:
Operating voltage: 5-28 V
Maximum PWM frequency: 10 kHz
Current sense: 0.59 V/A
Time to overheat at 5 A*: 2 s
Time to overheat at 4 A*: 21 s
Time to overheat at 3 A*: 165 s
Current for infinite run time*: 2.5 A

What seems to be the problem, wrong motor driver, motors too weak?

HazardsMind

What you using to power it on the ground?
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

husein06


What you using to power it on the ground?

Using a 7.2V rechargeable Battery for the motors, and arduino 9v and laptop cord for the rest of the project, but the main problem is the motors spin perfectly when not on the ground.

JimboZA

It might be a simple mechanical problem to do with (lack of) gearing.

Have you got a motor driver chip in the mix somewhere though?- if you have say a 298 in there you'll be losing volts at the best of times but even more if the current is high with a motor trying to get the robot started. What's the voltage at the motors?
Arduino ethernet server here.... http://jimboza.gotdns.com:8085/

No PMs for help please

HazardsMind

Your motors probably dont have enough torque, in which case you will some kind of gear system.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

afremont

The stall current of the motors is such that they would overheat the controller pretty fast, but I assume that you aren't just turning them on at 100% duty cycle from a stand-still, are you?  What PWM frequency are you using, 10kHz is pretty high.  Depending upon your motors, they might have too much inductance to actually draw much power at that frequency.
Experience, it's what you get when you were expecting something else.

husein06


The stall current of the motors is such that they would overheat the controller pretty fast, but I assume that you aren't just turning them on at 100% duty cycle from a stand-still, are you?  What PWM frequency are you using, 10kHz is pretty high.  Depending upon your motors, they might have too much inductance to actually draw much power at that frequency.

Your motors probably dont have enough torque, in which case you will some kind of gear system.

It might be a simple mechanical problem to do with (lack of) gearing.

Have you got a motor driver chip in the mix somewhere though?- if you have say a 298 in there you'll be losing volts at the best of times but even more if the current is high with a motor trying to get the robot started. What's the voltage at the motors?


I'm using these motors,
http://www.parallax.com/StoreSearchResults/tabid/768/List/0/SortField/4/ProductID/587/Default.aspx?txtSearch=motor+wheel+kit
and this motor driver
http://www.pololu.com/catalog/product/1213

husein06


The stall current of the motors is such that they would overheat the controller pretty fast, but I assume that you aren't just turning them on at 100% duty cycle from a stand-still, are you?  What PWM frequency are you using, 10kHz is pretty high.  Depending upon your motors, they might have too much inductance to actually draw much power at that frequency.


I'm not sure what you mean, I'm using the arduino PWM 155/255 so .58 duty ratio.

JimboZA

#8
Feb 22, 2013, 07:31 pm Last Edit: Feb 22, 2013, 07:34 pm by JimboZA Reason: 1
Are you accelerating the motors gradually from standstill? Those look to me like large wheels to run without gearing.... (without doing any calculations that is.)

Edit.... ah, I see those are geared motors, but still might be prudent to accelerate gradually
Arduino ethernet server here.... http://jimboza.gotdns.com:8085/

No PMs for help please

husein06


Are you accelerating the motors gradually from standstill? Those look to me like large wheels to run without gearing.... (without doing any calculations that is.)


Would accelerating be considered doing PWM?
not sure what you mean by accelerating. I'm using an Arduino and just sending a PWM signal.

JimboZA

I mean are you sending just one PWM value to set it to 155, or are you looping through a pwm command and increasing the value from 0 to 155 in steps of say 10.

Arduino ethernet server here.... http://jimboza.gotdns.com:8085/

No PMs for help please

husein06


I mean are you sending just one PWM value to set it to 155, or are you looping through a pwm command and increasing the value from 0 to 155 in steps of say 10.




This is how I'm doing it.

Code: [Select]
if ( turn == 128 ){
  drive_forward(); 
  analogWrite(PWMR, 255);// speed control
  analogWrite(PWML, 255);// speed control
  }
void drive_forward()
     {
  digitalWrite(RFWD,HIGH);// right wheel foward h-bridge
  digitalWrite(RRVS,LOW);
  digitalWrite(LFWD,HIGH);//left wheel foward h-bridge
  digitalWrite(LRVS,LOW);
  return;
     }

JimboZA

Looks to me that you're blasting it straight to full speed immediately? (You need to post more of the code)

It might be worthwhile to have a speedstep of say 10 and a speed of 0, then loop through a section of code that sets speed = speed + speedstep and pwms it the new value of speed, and do the loop until the speed is the value you want.
Arduino ethernet server here.... http://jimboza.gotdns.com:8085/

No PMs for help please

husein06

#13
Feb 22, 2013, 08:20 pm Last Edit: Feb 22, 2013, 08:22 pm by husein06 Reason: 1

Looks to me that you're blasting it straight to full speed immediately? (You need to post more of the code)

It might be worthwhile to have a speedstep of say 10 and a speed of 0, then loop through a section of code that sets speed = speed + speedstep and pwms it the new value of speed, and do the loop until the speed is the value you want.

I don't understand how would i include that?. My issue is, the code works perfectly, as long as the car isn't on the ground.  I can hold it up in the air, and the drive motor does what it is supposed to, and the turn motor works when it is supposed to.  But when I put it down, it works on a nice flat surface for a few seconds.  It wont move at all on carpet.

Code: [Select]
 if (errorSum < 25)
 {
   drive_stop();
 }
 else {
 if ( Stotal> 2100 )
 {
 drive_stop();
 }
 else {
 if ( turn == 128 ){
 drive_forward();  
 analogWrite(PWMR, 255);// speed control
 analogWrite(PWML, 255);// speed control
 }

 if ( turn > 129 ){
 drive_right();
 analogWrite(PWMR, 255);// speed control
  }
  if ( 127 > turn ){
  drive_Left();
 analogWrite(PWML, 255);// speed control
  }
}
 }
//delay(100);
}

void drive_forward()
    {
 digitalWrite(RFWD,HIGH);// right wheel foward h-bridge
 digitalWrite(RRVS,LOW);
 digitalWrite(LFWD,HIGH);//left wheel foward h-bridge
 digitalWrite(LRVS,LOW);
 return;
    }
   
void drive_Left()
    {
 digitalWrite(RFWD,HIGH);// right wheel foward h-bridge
 digitalWrite(RRVS,LOW);
 digitalWrite(LFWD,LOW);//left wheel foward h-bridge
 digitalWrite(LRVS,HIGH);
 return;
    }
   
void drive_right()
    {
 digitalWrite(RFWD,LOW);// right wheel foward h-bridge
 digitalWrite(RRVS,HIGH);
 digitalWrite(LFWD,HIGH);//left wheel foward h-bridge
 digitalWrite(LRVS,LOW);
 return;
    }
   
void drive_stop()
    {
 digitalWrite(RFWD,LOW);// right wheel foward h-bridge
 digitalWrite(RRVS,LOW);
 digitalWrite(LFWD,LOW);//left wheel foward h-bridge
 digitalWrite(LRVS,LOW);
 return;
    }

JimboZA

Yes the code may works perfectl, but it seems to run the motors at 255 which is full speed. When you try to get the wheels to move the robot at full speed immediately, it stalls. But if you do an analogWrite(pin, 10) followed by a short delay and an analogWrite(pin, 20) etc etc it might start moving.

But instead of hard-coding the 10 and 20 etc into a zillion analogWrites, you would increment a variable called speed and have analogWrite(pin, speed) to get it up to speed gradually.
Arduino ethernet server here.... http://jimboza.gotdns.com:8085/

No PMs for help please

Go Up