SparkFun Forums 

Where electronics enthusiasts find answers.

General project discussion / help
Did you make a robotic coffee pot which implements HTCPCP and decafs unauthorized users? Show it off here!
By Adam_Dizzoty
#191509
Hello,

I am working on a project that involves controlling the speed of a windsheild wiper motor with an arduino and ardumoto motor sheild. https://www.sparkfun.com/products/9815

I hooked everything up and uploaded my code, and it worked for a minute or so. I noticed a decrease in power and then felt the IC (L298P), and it was very hot to the touch.

I am not entirely sure what would have caused this, but any help is GREATLY appreciated.

Attached, is a copy of the code I used and a URL to my wiring schematic for my motor sheild.

Thanks :D

http://imgur.com/a/D21Jo
Code: Select all
/* Ardumoto Example Sketch
  by: Jim Lindblom
  date: November 8, 2013
  license: Public domain. Please use, reuse, and modify this 
  sketch!
  
  Three useful functions are defined:
    setupArdumoto() -- Setup the Ardumoto Shield pins
    driveArdumoto([motor], [direction], [speed]) -- Drive [motor] 
      (0 for A, 1 for B) in [direction] (0 or 1) at a [speed]
      between 0 and 255. It will spin until told to stop.
    stopArdumoto([motor]) -- Stop driving [motor] (0 or 1).
  
  setupArdumoto() is called in the setup().
  The loop() demonstrates use of the motor driving functions.
*/

// Clockwise and counter-clockwise definitions.
// Depending on how you wired your motors, you may need to swap.
#define CW  0
#define CCW 1

// Motor definitions to make life easier:
#define MOTOR_A 0
//#define MOTOR_B 1

// Pin Assignments //
// Don't change these! These pins are statically defined by shield layout
const byte PWMA = 3;  // PWM control (speed) for motor A
//const byte PWMB = 11; // PWM control (speed) for motor B
const byte DIRA = 12; // Direction control for motor A
//const byte DIRB = 13; // Direction control for motor B

void setup()
{
  setupArdumoto(); // Set all pins as outputs
}

void loop()
{
  // Drive motor A (and only motor A) at various speeds, then stop.
  driveArdumoto(MOTOR_A, CCW, 255); // Set motor A to CCW at max
  delay(1000);  // Motor A will spin as set for 1 second
  driveArdumoto(MOTOR_A, CW, 127);  // Set motor A to CW at half
  delay(1000);  // Motor A will keep trucking for 1 second 
  stopArdumoto(MOTOR_A);  // STOP motor A 
  
  // Drive motor B (and only motor B) at various speeds, then stop.
  //driveArdumoto(MOTOR_B, CCW, 255); // Set motor B to CCW at max
  //delay(1000);  // Motor B will spin as set for 1 second
  //driveArdumoto(MOTOR_B, CW, 127);  // Set motor B to CW at half
  //delay(1000);  // Motor B will keep trucking for 1 second
  //stopArdumoto(MOTOR_B);  // STOP motor B 
  
  // Now spin both!
  //driveArdumoto(MOTOR_A, CW, 255);  // Motor A at max speed.
  //driveArdumoto(MOTOR_B, CW, 255);  // Motor B at max speed.
  //delay(1000);  // Drive forward for a second
  // Now go backwards at half that speed:
  //driveArdumoto(MOTOR_A, CCW, 127);  // Motor A at max speed.
  //driveArdumoto(MOTOR_B, CCW, 127);  // Motor B at max speed.
}
/*
// driveArdumoto drives 'motor' in 'dir' direction at 'spd' speed
void driveArdumoto(byte motor, byte dir, byte spd)
{
  if (motor == MOTOR_A)
  {
    digitalWrite(DIRA, dir);
    analogWrite(PWMA, spd);
  }
  else if (motor == MOTOR_B)
  {
    digitalWrite(DIRB, dir);
    analogWrite(PWMB, spd);
  }  
}

// stopArdumoto makes a motor stop
void stopArdumoto(byte motor)
{
  driveArdumoto(motor, 0, 0);
}
*/
// setupArdumoto initialize all pins
void setupArdumoto()
{
  // All pins should be setup as outputs:
  pinMode(PWMA, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);
  
  // Initialize all pins as low:
  digitalWrite(PWMA, LOW);
  digitalWrite(PWMB, LOW);
  digitalWrite(DIRA, LOW);
  digitalWrite(DIRB, LOW);
}
By skimask
#191530
Do you have ANY idea whatsoever what the wiper motors voltage/current rating is? vs. what the motor driver can drive? ANY at all?
By Adam_Dizzoty
#191535
The wiper motor is rated for 12v, and from the data sheet I believe the shield can handle up to 46v. If I'm reading the data sheet correctly, I should be well within the operating conditions.

And what is a "one post wonder?" Doesn't everyone needs to start somewhere?
By lyndon
#191539
You didn't answer the question about current!

A one post wonder is someone who posts a single question, wastes people's time when they give a complete, detailed reply, but never come back to read it or to respond. Pisses a lot of people off and it's the reason I wait for posters to act like they're actually engaged before I bother to post any kind of complex answer.
By jremington
#191542
I noticed a decrease in power and then felt the IC (L298P), and it was very hot to the touch.
The motor is drawing far too much current for that ancient chip. Pololu has the best selection of high power motor drivers, capable of the 10 or more amps of startup current that the motor probably requires.
By stellajohn
#191567
Heating is because of high current. Please see the datasheet of L298 once to know how much current it can handle and also see the current consumes by the motor during operation.

As much as I know current is only factor here which making driver hot.

To reduce for now you can use some current control IC or heat sink.
By Adam_Dizzoty
#191569
Thanks for the help everyone. I think my issue was rating the shield for the standing current, but when resistance was put on the motor, that current dramatically increased out of the working parameters of the shield.

Looks like I'm back to the drawing board.
By Sidney
#192152
jremington gave you the answer.
jremington wrote:
I noticed a decrease in power and then felt the IC (L298P), and it was very hot to the touch.
The motor is drawing far too much current for that ancient chip. Pololu has the best selection of high power motor drivers, capable of the 10 or more amps of startup current that the motor probably requires.