Go Down

Topic: Control gear motor like a Servo, project , suggestions (Read 1 time) previous topic - next topic

Selda81

Gente,

In my project I`am using a geared motor like a Servo, I adapted a pot (100 k), for reading its potition; My Idea is move it to left or right until reach limit points in both ways (almost a 45 degree from mid potition, both ways) I'm using a L293D like h bridge and PWM.

this is my gear motor:


My test video:

http://www.youtube.com/embed/AXtEeYBjr3g

this is my code, a simple one, but worked I want to improved, any suggestion? what about PID?

thanks,

Code: [Select]
//Programa para control de carro v.1.1, dirección 
//Selwins Maturana Oct 2012 

int pot2 = A5; //joystick dirección   
int enable = 3; //Enable IC L293D - PWM control de velocidad 
  int right = 9; // Señal para ir hacia la derecha
int left = 7; // Señal para ir hacia la izquierda
int LED = 13; //verificación 
int sign;// Señal potenciometro moto reductor

void setup(){ 
      pinMode(enable, OUTPUT); 
     pinMode(forward, OUTPUT); 
      pinMode(backward, OUTPUT); 
     Serial.begin(9600); 

void loop(){ 

      dir = analogRead(pot2);  // joystick
     sign = analogRead(A3);  //Posición del moto reductor
     sign = map(sign, 0,1023, 0, 255); 
     Serial.println(sign); 
     delay(1000);   

     if(dir >= 344 && sign > 105) { 
         digitalWrite(left, LOW); 
         analogWrite(enable, 70); // Para que gire despacio
         digitalWrite(right, HIGH); 
         delay(1000); // pausa para que no se pase
         digitalWrite(right, LOW); 
         delay(10); 
           } 
           else if (dir <= 334 && sign < 127){ 
              digitalWrite(right, LOW); 
              analogWrite(enable, 80); 
              digitalWrite(left, HIGH); 
              delay(1000); 
              digitalWrite(left, LOW); 
              delay(10); 
           } 
             else 
             {                 
             digitalWrite(right,LOW); 
             digitalWrite(left, LOW); 
             analogWrite(enable, 0); 
             } 
  } 



PeterH


I want to improved, any suggestion?


What aspect do you want to improve? Does it actually do what you want at the moment?
I only provide help via the forum - please do not contact me for private consultancy.

Selda81



I want to improved, any suggestion?


What aspect do you want to improve? Does it actually do what you want at the moment?


The reading of the pot inside the gear motor, is inaccurate, sometimes it goes throw the limit points and I want to quit the delays.

PeterH

Your logic to decide which way to move the motor (and how fast) looks very strange. I'd expect you to decide what the desired position was based on the joystick, compare that with the actual position to determine how far the motor was from the desired position and in which direction, and determine the motor speed and direction from that. Instead you're just comparing the motor and joystick positions against some limits. Presumably this means that the motor is just supposed to go between two fixed positions rather than follow the joystick. Could you clarify what behaviour you're aiming for?

The technique of setting the motor speed and then waiting for a second before you do anything else pretty much guarantys that the motor will overshoot. If I were you I'd do the position comparison as fast as possible and decide what direction/speed you want the motor to move, tell it to move in that direction / speed and then immediately do the position comparison again etc.
I only provide help via the forum - please do not contact me for private consultancy.

Selda81


Your logic to decide which way to move the motor (and how fast) looks very strange. I'd expect you to decide what the desired position was based on the joystick, compare that with the actual position to determine how far the motor was from the desired position and in which direction, and determine the motor speed and direction from that. Instead you're just comparing the motor and joystick positions against some limits. Presumably this means that the motor is just supposed to go between two fixed positions rather than follow the joystick. Could you clarify what behaviour you're aiming for?

The technique of setting the motor speed and then waiting for a second before you do anything else pretty much guarantys that the motor will overshoot. If I were you I'd do the position comparison as fast as possible and decide what direction/speed you want the motor to move, tell it to move in that direction / speed and then immediately do the position comparison again etc.


the code part is really simple, I just control the motor's direction with the h - bridge  (joystick signal, right or left), and I use the pot signal like to limit. now I'm searching about PID (I`m Mech Engineer but automatization is not my strength) I realize improved as had recomendade (control P) but how can I figure out the constant (Kp) to do like you say  speed = (desired position - actual position)*Kp



Go Up