Autor Tema: Controlar Velocidad de un Motor DC conectado al PC  (Leído 3377 veces)

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

Desconectado MarioMM

  • PIC10
  • *
  • Mensajes: 6
    • Ciencia Libre
Controlar Velocidad de un Motor DC conectado al PC
« en: 28 de Septiembre de 2012, 02:04:27 »
Esto sí que es nuevo para mí.
Ya pude controlar el PIC con la PC a voluntad (¡bravo!). Pero ahora tengo un nuevo inconveniente.
Leí por aquí varias cosas al respecto y me ayudaron a solucionar como variar la velocidad, así lo pude hacer pero tengo un problema.

Tenemos un par de motores a un PIC, y un RS232 a una terminal virtual (en proteus).
Desde la terminal, al pulsar cierta tecla los motores hacen cosas:
se encienden
se apagan
giran a la derecha
giran a la izquierda
giran uno por un lado y el otro por otro
se mueven a su velocidad máxima
y se mueven a la mitad de su velocidad.
Todo es pan comido, excepto el último. Ahí, al poner un PWN, logro hacer que el condenado motor se mueva a la mitad de la velocidad, pero después de eso ya no puedo hacer nada, pues tengo
que iterar el ciclo para que el motor se mueva. Si no lo hago, el motor simplemente no se mueve.
Mi resolución fue poner un decfsz a una constante x y a partir de eso definir cuando el motor deja de girar a la mitad de su velocidad, pero luego se detiene.

Adjunto mi código, a ver si alguien me puede ayudar.

Saludos.
¿Por qué esta magnífica tecnología científica, que ahorra trabajo y nos hace la vida mas fácil, nos aporta tan poca felicidad? La repuesta es está, simplemente: porque aún no hemos aprendido a usarla con tino.
Albert Einstein

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #1 en: 28 de Septiembre de 2012, 06:42:37 »
Citar
pero después de eso ya no puedo hacer nada, pues tengo
que iterar el ciclo para que el motor se mueva. Si no lo hago, el motor simplemente no se mueve.

Claro, tienes que repetir el ciclo todo el tiempo que quieres que se mueva al 50%, ¿Que problema tienes?

Citar
Mi resolución fue poner un decfsz a una constante x y a partir de eso definir cuando el motor deja de girar a la mitad de su velocidad, pero luego se detiene.

Es que esa constante es 10, por tanto se repite 10 veces a 10ms cada vez, a los 100ms para de repetir el ciclo, se para y va a inicio.

Desconectado MarioMM

  • PIC10
  • *
  • Mensajes: 6
    • Ciencia Libre
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #2 en: 28 de Septiembre de 2012, 20:14:12 »
Citar
pero después de eso ya no puedo hacer nada, pues tengo
que iterar el ciclo para que el motor se mueva. Si no lo hago, el motor simplemente no se mueve.

Claro, tienes que repetir el ciclo todo el tiempo que quieres que se mueva al 50%, ¿Que problema tienes?

Citar
Mi resolución fue poner un decfsz a una constante x y a partir de eso definir cuando el motor deja de girar a la mitad de su velocidad, pero luego se detiene.

Es que esa constante es 10, por tanto se repite 10 veces a 10ms cada vez, a los 100ms para de repetir el ciclo, se para y va a inicio.

Si, eso lo entiendo perfectamente.

La cosa es que, al pulsar alguna otra tecla mientras el motor está en el ciclo a la mitad de su velocidad debería poder cambiar su dirección, o su velocidad, o hasta detenerse. Me está dando muchos problemas, pues incluso si leo algún dato de la terminal, el ciclo ya no se itera, o comienza a hacer cosas raras.
¿Por qué esta magnífica tecnología científica, que ahorra trabajo y nos hace la vida mas fácil, nos aporta tan poca felicidad? La repuesta es está, simplemente: porque aún no hemos aprendido a usarla con tino.
Albert Einstein

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #3 en: 29 de Septiembre de 2012, 13:14:26 »
Citar
La cosa es que, al pulsar alguna otra tecla mientras el motor está en el ciclo a la mitad de su velocidad debería poder cambiar su dirección, o su velocidad, o hasta detenerse. Me está dando muchos problemas, pues incluso si leo algún dato de la terminal, el ciclo ya no se itera, o comienza a hacer cosas raras.

Tienes que leer las teclas en mitad del ciclo y leer tambien el rs232, podrias poner en lugar de un call retardo_1ms un call inicio y que haga la recepcion del rs232 y lea las teclas, no se si en hacer todo esto consumira mas de 1ms.

DC_50PorCiento            ; Potencia del motor a 50%
   bsf PORTB,0            ; Hace un PWN básico prendiendo los motores a la derecha
   bcf PORTB,1            ; Luego ejecuta 5 retardos de 1ms y apaga los motores
   bsf PORTB,2            ; Ejecuta otros 5 retardos y los vuelve a encender.
   bcf PORTB,3
   bcf PORTB,4
   bsf PORTB,5
   bsf PORTB,6
   bcf PORTB,7
   call Retardo_1ms
   call Retardo_1ms
   call Retardo_1ms
   call Retardo_1ms
   call Retardo_1ms
   bcf PORTB,0            ; Pone 0 en cada uno de los bits
   bcf PORTB,1            ; del puerto B
   bcf PORTB,2            
   bcf PORTB,3
   bcf PORTB,4
   bcf PORTB,5
   bcf PORTB,6
   bcf PORTB,7
   call Retardo_1ms
   call Retardo_1ms
   call inicio            ;para chequear si hubo cambios   
   call Retardo_1ms
   call Retardo_1ms
   goto DC_50PorCiento

Creo que inicio tendra que incluir tambien la llamada a inicializa:

  Inicio               

    call RS232_Inicializa      ; Inicializa el MAX232
    clrf PORTB               ; Limpia el Puerto B

                  ; Subrutina principal
   call RS232_LeeDato      ; Lee dato desde la terminal y lo almacena en w
   call Teclado         ; Llama a la subrutina Teclado
   goto Inicio            ; Crea bucle

Prueba asi a ver que hace, es una solucion "de circunstancias" no la verdadera solucion. Pero para la de verdad habria que hacer la temporizacion con el TIMER0 por interrupcion y asi tener el procesador libre para leer el rs232 y el teclado.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #4 en: 30 de Septiembre de 2012, 17:23:47 »


MarioMM No has pensado en utilizar una interrupción para saber cuando llega un dato via RS232 parar dar prioridad a la orden a ejecutar?

Saludos!!!
Un saludo desde Pereira - Colombia

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #5 en: 03 de Octubre de 2012, 13:18:00 »
Como te habia indicado en el mensaje anterior NO FUNCIONA, porque de Teclado no vuelve con RETURN, esto te dara problemas ya que lo llamas con un CALL y despues retornas con GOTO.

El problema del 50% creo que se soluciona asi, pruebalo a ver si va bien:

Código: [Seleccionar]
DC_50PorCiento ; Potencia del motor a 50%
;bsf PORTB,0 ; Hace un PWN básico prendiendo los motores a la derecha
;bcf PORTB,1 ; Luego ejecuta 5 retardos de 1ms y apaga los motores
;bsf PORTB,2 ; Ejecuta otros 5 retardos y los vuelve a encender.
;bcf PORTB,3
;bcf PORTB,4
;bsf PORTB,5
;bsf PORTB,6
;bcf PORTB,7
movlw 0x65 ;esto hace lo mismo que lo que elimine
movwf PORTB
call Retardo_1ms
call Retardo_1ms
call Retardo_1ms
call Retardo_1ms
call Retardo_1ms
;bcf PORTB,0 ; Pone 0 en cada uno de los bits
;bcf PORTB,1 ; del puerto B
;bcf PORTB,2
;bcf PORTB,3
;bcf PORTB,4
;bcf PORTB,5
;bcf PORTB,6
;bcf PORTB,7
clrf PORTB              ;pone a 0 PORTB
[b]call Retardo_1ms
call RS232_Inicializa
call RS232_LeeDato
movwf Apachurrada
movf Apachurrada,w
xorlw Teclal ;si sigue pulsada la misma tecla
btfsc STATUS,Z ;continua en 50%
goto  $+5
movf Apachurrada,w
xorlw .0 ;si a traves del terminal llega 0
btfss STATUS,Z ;tambien sigue en 50%
goto Teclado[/b]
call Retardo_1ms
call Retardo_1ms
call Retardo_1ms
goto DC_50PorCiento
goto Fin

Como ves lo que hago es mirar que dato llega por el RS232 y si es el del 50% (.108) sigue ahi y si es .0 tambien (estoy suponiendo que cuando no se pulsa ninguna tecla llega un 0) si es otro numero, con cambiarlo listo.

Desconectado MarioMM

  • PIC10
  • *
  • Mensajes: 6
    • Ciencia Libre
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #6 en: 16 de Octubre de 2012, 13:24:51 »
Gracias a todos por las respuestas, y disculpen la tardanza, pero salí a prácticas de astronomía observacional;)
En fin, no se soluciona ni temporalmente el problema. Probaré lo de las interrupciones, aunque en eso no soy muy bueno ;)
Seguiré intentando, y comentaré como me va.

Gracias.
¿Por qué esta magnífica tecnología científica, que ahorra trabajo y nos hace la vida mas fácil, nos aporta tan poca felicidad? La repuesta es está, simplemente: porque aún no hemos aprendido a usarla con tino.
Albert Einstein

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #7 en: 17 de Octubre de 2012, 06:14:05 »
Citar
En fin, no se soluciona ni temporalmente el problema.

Bien eso quiere decir que vas bien, no iba a funcionar a la primera. :lol: :lol:

¿Que te hace? ¿Sabes que codigo manda el PC cuando no se pulsa ninguna tecla, si es que manda alguno?.

Prueba si pulsando la tecla de 50% manteniendola pulsada se queda en el 50%

Desconectado cesaravila1981

  • PIC10
  • *
  • Mensajes: 25
Re: Controlar Velocidad de un Motor DC conectado al PC
« Respuesta #8 en: 28 de Octubre de 2012, 07:15:32 »

no haz probado en usar el ciclo pero solo mirar puras banderas? de esa forma no se alenta en nada tu codigo

o sea entras al ciclo y vas probando bandera por bandera

por ejemplo ¿bandera de teclas? si si vas a la rutina de teclas,
¿bandera de pwm de motor? si si actualisas pwm,
¿bandera de rs232? si si recibes el dato, etc

saludos
"El camino no se acaba... continuaré sin descanso."


 

anything