L298n not working properly.


i experiencing issue l298n motor driver board.i have arduino controlling l298n motor driver board.even set same instruction both motors,they spin @ different rpm :o .i not able find problem lies(arduino or motor driver).i have 10v power supply powering board.any appreciatedthe code using is:
code: [select]
/*  l298n_dual_h_bridge

this program controls 2 separate dc motors using l298n
h bridge chip.


          *the subroutines work follows*

motora(mode, speed)
% replace b control motor b %

mode number 0 -> 3 determines motor
will do.
0 = coast/disable h bridge
1 = turn motor clockwise
2 = turn motor counter clockwise
3 = brake motor

speed number 0 -> 100 represents percentage of
motor speed.
0 = off
50 = 50% of full motor speed
100 = 100% of full motor speed

example
say need have motor turn clockwise @ 33% of its
full speed.  subroutine call following...

motora(1, 33);

created
iain portalupi http://www.youtube.com/iainportalupi
1/2/2014

this code in public domain.
*/

#define ena 5  //enable on pin 5 (needs pwm pin)
#define enb 3  //enable b on pin 3 (needs pwm pin)
#define in1 2  //in1 on pin 2 conrtols 1 side of bridge a
#define in2 4  //in2 on pin 4 controls other side of a
#define in3 6  //in3 on pin 6 conrtols 1 side of bridge b
#define in4 7  //in4 on pin 7 controls other side of b
int sensor = 0;
void setup()
{
  //set of outputs
  pinmode(ena, output);
  pinmode(enb, output);
  pinmode(in1, output);
  pinmode(in2, output);
  pinmode(in3, output);
  pinmode(in4, output);
}

void loop()
{
  motora(1,30);
  motorb(1,30);
  delay(5000);
  motora(1,70);
  motorb(1,70);
  delay(5000);
}

//******************   motor control   *******************
void motora(int mode, int percent)
{
 
  //change percentage range of 0 -> 100 pwm
  //range of 0 -> 255 using map function
  int duty = map(percent, 0, 100, 0, 255);
  switch(mode)
  {
    case 0:  //disable/coast
      digitalwrite(ena, low);  //set enable low disable a
      break;
     
    case 1:  //turn clockwise
      //setting in1 high connects motor lead 1 +voltage
      digitalwrite(in1, high);   
     
      //setting in2 low connects motor lead 2 ground
      digitalwrite(in2, low); 
     
      //use pwm control motor speed through enable pin
      analogwrite(ena, duty); 
     
      break;
     
    case 2:  //turn counter-clockwise
      //setting in1 low connects motor lead 1 ground
      digitalwrite(in1, low);   
     
      //setting in2 high connects motor lead 2 +voltage
      digitalwrite(in2, high); 
     
      //use pwm control motor speed through enable pin
      analogwrite(ena, duty); 
     
      break;
     
    case 3:  //brake motor
      //setting in1 low connects motor lead 1 ground
      digitalwrite(in1, low);   
     
      //setting in2 high connects motor lead 2 ground
      digitalwrite(in2, low); 
     
      //use pwm control motor braking power
      //through enable pin
      analogwrite(ena, duty); 
     
      break;
  }
}
//**********************************************************


//******************   motor b control   *******************
  void motorb(int mode, int percent)
{
 
  //change percentage range of 0 -> 100 pwm
  //range of 0 -> 255 using map function
  int duty = map(percent, 0, 100, 0, 255);
 
  switch(mode)
  {
    case 0:  //disable/coast
      digitalwrite(enb, low);  //set enable low disable b
      break;
     
    case 1:  //turn clockwise
      //setting in3 high connects motor lead 1 +voltage
      digitalwrite(in3, high);   
     
      //setting in4 low connects motor lead 2 ground
      digitalwrite(in4, low); 
     
      //use pwm control motor speed through enable pin
      analogwrite(enb, duty); 
     
      break;
     
    case 2:  //turn counter-clockwise
      //setting in3 low connects motor lead 1 ground
      digitalwrite(in3, low);   
     
      //setting in4 high connects motor lead 2 +voltage
      digitalwrite(in4, high); 
     
      //use pwm control motor speed through enable pin
      analogwrite(enb, duty); 
     
      break;
     
    case 3:  //brake motor
      //setting in3 low connects motor lead 1 ground
      digitalwrite(in3, low);   
     
      //setting in4 high connects motor lead 2 ground
      digitalwrite(in4, low); 
     
      //use pwm control motor braking power
      //through enable pin
      analogwrite(enb, duty); 
     
      break;
  }
}
//**********************************************************

motors spin @ different rpms, if of same type. need shaft encoders , pid code control speed of rotation.


Arduino Forum > Using Arduino > Motors, Mechanics, and Power (Moderator: fabioc84) > L298n not working properly.


arduino

Comments