Autor Tema: como paro un servo-motor activado previamente por PWM?  (Leído 3343 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
como paro un servo-motor activado previamente por PWM?
« en: 26 de Marzo de 2005, 06:47:00 »
Hola, alguien me puede decir como parar un motor que he puesto en marcha mediante PWM. Con la sentencia setup_cpp(cpp_OFF); no consigo parar el motor, ni tampoco enviando un 0 por la salida del PWM. Alguien me podria decir como consigo pararle el modo PWM para que el motor este kieto y luego poder activarle otra vez cuando kiera?

Desconectado mirazulado

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 142
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #1 en: 26 de Marzo de 2005, 09:01:00 »
yo trabaje en un 16f628 y con la instruccion setup_ccp1(CCP_OFF) se detiene el PWM te adjunto una parte del codigo utilizado para veas..

void sonido(int boton){
int duty;
setup_ccp1(CCP_PWM);
switch (boton){
   case 1:
         setup_timer_2(T2_DIV_BY_16,238,1);        //do 262
         duty=478;
         break;
   case 2:
         setup_timer_2(T2_DIV_BY_16,212,1);        //re 293
         duty=426;
         break;
   case 3:
         setup_timer_2(T2_DIV_BY_16,189,1);        //MI 329
         duty=380;
         break;
   case 4:
         setup_timer_2(T2_DIV_BY_16,178,1);        //FA 349
         duty=358;
         break;
   case 5:
         setup_timer_2(T2_DIV_BY_16,158,1);        //SOL 392
         duty=318;
         break;
   case 6:
         setup_timer_2(T2_DIV_BY_16,141,1);        //LA 440
         duty=284;
         break;
   case 7:     //pip
         setup_timer_2(T2_DIV_BY_16,126,1);        //SI 492
         duty=246;
         break;
   case 8:     //falla
         setup_timer_2(T2_DIV_BY_16,255,1);        //244
         duty=512;
         break;

}
   set_pwm1_duty(duty);
}

void sonidooff(void){
   setup_ccp1(CCP_OFF);
}

Esto anda !!!

Un abrazo Mariano..

Desconectado I3iT

  • PIC12
  • **
  • Mensajes: 50
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #2 en: 26 de Marzo de 2005, 09:05:00 »
Holas.

Con el setup_ccp1 o setup_ccp2 configuras el modulo de captura/comparacion/pwm.

Yo pongo setup_ccp1(CCP_PWM);
Luego el timer2 se usa para hacer el duty, te pego un cacho de codigo que estoy usando yo:



setup_ccp2(CCP_PWM);     // Seleccionamos PWM para el módulo CCP2.
  setup_timer_2(T2_DIV_BY_1,255,1);       // Para cristal de 4 mhz, T2_DIV a 1. Para calcular el periodo:
                                                                          //             T = (4/frecuencia cristal)*T2_DIV*(PR2+1)
                                                                         //             T = (4/4000000)*1*(255+1) = 0.000256seg         f=3.90625 MHz
                                                                         // Para calcular el tiempo en nivel alto, dado que usamos un LONG, sería:
                                                                         //             Ancho_Impulso = duty_PWM1*T2_DIV*(1/frecuencia del cristal)
                                                                       // Para saber maximo valor para duty_PWM1, duty cycle -> 100% :
                                                                         //             0.000256seg/(1*(1/4000000)) = 1024
                                                                      // Max_duty_PWM1=1023




Luego solo queda poner el valor del duty_cicle que quieras:

set_pwm2_duty(value);

Espero te sirva de ayuda.

Salu2

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #3 en: 26 de Marzo de 2005, 09:20:00 »
Cuando dices "motor", ¿te estás refiriendo a un servo?.

Los servos no se paran cuando dejan de recibir pulsos (la verdad es que no sé qué hacen cuando dejan de recibir pulsos, nunca lo he probado). La teoría de los servos dice que se están quietecitos con una anchura de pulsos de 1500us. Mira este gráfico:


Tornar, no te contesto al otro post, porque veo que aquí se resuelve tu duda.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #4 en: 27 de Marzo de 2005, 09:30:00 »
Gracias a todos por las respuestas, lo que kiero hacer como dice nocturno es parar un servo que previamente he puesto en marcha por PWM, asi que la solucion seria meterle un duty_cicle de 1500us cuando kiera pararle?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #5 en: 29 de Marzo de 2005, 01:21:00 »
Cuando quieras "parar" al servo (posición 0ºGiño debes enviar pulsos de 1ms.

Cuando quieras posicionar al servo en 180º debes enviar pulsos de 2ms.

Para posiciones (grados) intermedias hay que hacer reglas de tres.

Como vés siempre hay que enviar pulsos.

Un saludo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #6 en: 29 de Marzo de 2005, 04:19:00 »
Permíteme discrepar, gran Pocher.
Según he leído, la posición de reposo es la de 90º, siendo 0º y 180º los dos extremos.
La posición de 90º, que será la posición neutral, se consigue con pulsos de 1,5ms

Además, aunque Tornar no lo aclara, sospecho que se trata de un servo modificado para hacer rotación continua, tal y como se explica en esta página:
http://www.infolaser.net/franpr/tecnica/modserv/modserv.html


Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #7 en: 29 de Marzo de 2005, 04:37:00 »
Si, se trata de un servo modificado, pero no exactamente como el de la figura, yo lo que he hecho con mi servo es kitarle el tope para que gire libre, y tambien kitarle toda la electronica que posee. Ademas le he dejado solo con 2 de los 3 cables que tiene en un principio, que van soldados directamente al motor, uno le uso para enable/disable y el otro para el control de giro del motor.

Con este servo modificado de esta manera es posible utilizar PWM para cambiarle al angulo que desee, solo modificando el tren de impulsos? Y si es asi, que patita deberia ser por la que enviase impulsos? la de enable/disable o la de giro?


Siento preguntar tanto, pero es que estoy muy verde en este tema. Y eso que he estudiado PWM en la universidad, pero como siempre pasa de la teoria a la practica.....

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #8 en: 29 de Marzo de 2005, 04:50:00 »
No creo que haya sido buena idea quitar toda la electrónica, puesto que habría sido "fácil" controlarlo con PWM.
Si has dejado sólo los dos cables que entran al motor, imagino que habrá que tratarlo ahora como un motor de continua, haciendo un puente en H que permita invertir el giro y controlando la potencia con PWM:


Hay integrados como el L293 que te simplifican bastante el tema.

De todas formas, ¿no tienes posibilidad de dejarlo como estaba?

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #9 en: 29 de Marzo de 2005, 05:01:00 »
no me es posible dejarlo como estaba; de todas formas voy a usar una placa llamada movdrv de selekron la cual ya trae un circuito para manejo de motores como el que dices; y ofrece para cada motor dos entradas una para enable/disable y otra para controlar el sentido de giro; de esta forma puedo usar pwm correctamente?

tambien se me ha ocurrido usar la interrupcion por desbordamiento del timer cero controlada para que se desborde cada cierto tiempo; y en esta interrupcion ir haciendo las modificaciones del sentido de giro; enable/disable del motor;etc asi no perderia tanto tiempo en delays y podria usar el main para otras tareas

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: como paro un servo-motor activado previamente por PWM?
« Respuesta #10 en: 29 de Marzo de 2005, 14:48:00 »
Tienes razón Nocturno, no está bien expresado, el escribir deprisa tiene esto. No debiera haber dicho: Para "parar" al servo (posición 0ºGiño debes enviar pulsos de 1ms, si no que debiera haber dicho: Para posicionar al servo en 0º debes enviar pulsos de 1ms.

Para posicionar al servo en cualquier posición entre 0º y 180º debes de enviar la temporización correcta. Una vez posicionado el servo en una determinada posición si dejas de mandar pulsos el servo conserva esta posición, la diferencia es que ahora podemos mover el eje manualmente y el servo se dejará, sin embargo, enviándo pulsos contínuos el servo ofrece resistencia y retorna a la posición.

El 1ms (0ºGiño, 2ms(180ºGiño, 20ms(Periodo) no son valores obligatorios, puedes usar otros valores dependiendo del Servo a utilizar.

tornar has trucado el servo para que gire 360º y como comentas una vez desvirgado el servo quitándole el tope ya no es posible dar marcha atrás. Dices que: le he dejado solo con 2 de los 3 cables que tiene en un principio, que van soldados directamente al motor, uno le uso para enable/disable y el otro para el control de giro del motor. Me imagino que los cables que has dejado son los de alimentación del servo, entonces este te servirá como un motor de contínua pudiendo mediante pwm controlar su velocidad en un sentido u otro, pero no vas a poder controlar su "paro" en una determinada posición enviándole pulsos.

Hay una forma para controlar el "paro" en una determinada posición de los 360º y era utilizando el potenciómetro interno del servo y soldándole dos resistencias en serie a los extremos del potenciómetro y el punto central de estas al punto central del potenciómetro. Se seguían usando los tres cables del Servo, alimentación, masa y entrada de pulsos. No recuerdo ahora mismo, el valor de las resistencias.

Respecto al software para generar los pulsos puedes hacerlo de varias maneras: te recomiendo por interrupción de algún timer o usando el módulo de comparación.

Cuando tengas algo del programa si quieres postealo y le pegamos un vistazo.

Un saludo