Pages: [1] 2 3   Go Down
Author Topic: Autonomous Robot, motor driver  (Read 3550 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: February 22, 2013, 12:14:34 pm by husein06 » Logged

Queens, New York
Online Online
Faraday Member
**
Karma: 100
Posts: 3639
"Of all the things I've ever lost, I miss my mind the most" -Ozzy Osbourne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

What you using to power it on the ground?
Logged

Created Libraries:
TFT_Extension, OneWireKeypad, SerialServo, (UPD)WiiClassicController, VWID

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Johannesburg. UTC+2
Offline Offline
Faraday Member
**
Karma: 99
Posts: 4400
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Roy from ITCrowd: Have you tried turning it off and on again?
I'm on LinkedIn: http://www.linkedin.com/in/jimbrownza

Queens, New York
Online Online
Faraday Member
**
Karma: 100
Posts: 3639
"Of all the things I've ever lost, I miss my mind the most" -Ozzy Osbourne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Created Libraries:
TFT_Extension, OneWireKeypad, SerialServo, (UPD)WiiClassicController, VWID

texas
Offline Offline
God Member
*****
Karma: 27
Posts: 862
old, but not dead
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Experience, it's what you get when you were expecting something else.

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Johannesburg. UTC+2
Offline Offline
Faraday Member
**
Karma: 99
Posts: 4400
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: February 22, 2013, 01:34:54 pm by JimboZA » Logged

Roy from ITCrowd: Have you tried turning it off and on again?
I'm on LinkedIn: http://www.linkedin.com/in/jimbrownza

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Johannesburg. UTC+2
Offline Offline
Faraday Member
**
Karma: 99
Posts: 4400
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Roy from ITCrowd: Have you tried turning it off and on again?
I'm on LinkedIn: http://www.linkedin.com/in/jimbrownza

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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;
     }
Logged

Johannesburg. UTC+2
Offline Offline
Faraday Member
**
Karma: 99
Posts: 4400
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Roy from ITCrowd: Have you tried turning it off and on again?
I'm on LinkedIn: http://www.linkedin.com/in/jimbrownza

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
 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;
     }
« Last Edit: February 22, 2013, 02:22:30 pm by husein06 » Logged

Johannesburg. UTC+2
Offline Offline
Faraday Member
**
Karma: 99
Posts: 4400
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Roy from ITCrowd: Have you tried turning it off and on again?
I'm on LinkedIn: http://www.linkedin.com/in/jimbrownza

Pages: [1] 2 3   Go Up
Jump to: