Autor Tema: Control de servomotor con pwm  (Leído 6397 veces)

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

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
Control de servomotor con pwm
« en: 10 de Noviembre de 2005, 15:50:00 »
Holap, tengo un pic 16f877a y necesito controlar 2 servomotores, ahora me vengo a dar cuenta que el pic es muy rapido con el pwm. Mi pregunta es si existen o cuales son circuitos para reducir la frecuencia de salida del pwm del micro...
lo otro seria poner un cristal que funcione mas lento loco

ojalá me puedan aconsejar

el pic mio anda con clock interno de 20mHz y necesito controlar estos 2 servomotores y recibir la posición por puerto serial
gracias

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: Control de servomotor con pwm
« Respuesta #1 en: 10 de Noviembre de 2005, 21:21:00 »
Hola, primero que nada debes decirnos en que lenguaje de programacion trabajas para poderte ayudar.

Para poder controlar los servomotores es necesario enviar un PWM con un periodo de 20ms con un Duty Cycle entre 0.3ms a 2.5ms varia de acuerdo al servo a controlar. Ahora sabiendo esto nos damos cuenta que usando el modulo PWM del PIC no podemos lograr eso a menos que usemos un cristal de poca frecuencia o un arreglo RC (una opcion totalmente descartada), la opcion mas logica y razonable es que se hagan algoritmos que utilizan retardos para generar el PWM.

Te recomiendo que revises los otros subforos de Basic, C o Asembler, alli puedes encontrar lo que necesitas, pues este tema no es nuevo aca en el Foro.

Un abrazo.Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Control de servomotor con pwm
« Respuesta #2 en: 12 de Noviembre de 2005, 17:27:00 »
Con un cristal de 1MHz puedes lograr periodos PWM muy grandes.

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
RE: Control de servomotor con pwm
« Respuesta #3 en: 13 de Noviembre de 2005, 14:55:00 »
Según mis calculos con un cristal de 1Mhz no alcanzo los 50hz en el pwm para los motores, necesitaria uno de 800Khz . nose si existiran, pero ya me pone mal hacer funcionar mas lento el micro, voy a intentar hacerlo por interrupciones..

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Control de servomotor con pwm
« Respuesta #4 en: 14 de Noviembre de 2005, 16:05:00 »
Recuerdo que yo hice el control de 2 servos de modelaje que supuestamente deben trabajar con un periodo pwm de 20ms.

Tampoco me daba con 4MHz, y Pocher propuso una vez que usáramos de 1MHz, pero no los encontré, así que decidí ponerle uno de 1.25MHz.

Lo más que logré fueron 13ms de periodo (76.9Hz) y conecté el motor. Experimenté con varios dutys times y con los 13ms. El motor funcionó bien, giraba de 0° a 180° normalmente.

Conecté otro motor y sus duty times cambiaron, pero funcionó con 13ms también.

Talvez no sea forzoso que eches a andar tus motores con 20ms como recomienda Arifox, intenta echarlos a andar con 13ms, y si no funcionan, pues habrá que hacerlo con interrupciones como mencionas.

Salu2 Divertido

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
RE: Control de servomotor con pwm
« Respuesta #5 en: 15 de Noviembre de 2005, 15:53:00 »
Yo estoy funcionando con el clock interno del micro (20mhz) y según el manual, tengo 200ns instruction cycle.

no se muy bien como funciona el timer con post escalador pero si por ejemplo tengo configurado el timer 2 con pre escalador de 16 y post escalador de 16 tendria:

(256*16)*16=65.536 ciclos..

65.536*200ns=0,0131072 seg --> 76,29Hz

Por lo que leí en tu post tus motores si funcionaron a esa frecuencia (yo tengo motores hitec HS-311, que según manual lo hacen "recomendablemente" a 50 hz)

mi pregunta es si estoy calculando bien lo de los tiempos...( cada 0,013seg empesaria mi ciclo de pwm nuevamente)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Control de servomotor con pwm
« Respuesta #6 en: 15 de Noviembre de 2005, 19:03:00 »
Suenan bien  tus cálculos, pero falta multiplicarlos por 256-N, donde N es lo que le cargas al contador del timer2

Sólo cárgale 255, para que al primer conteo se desborde y genere una frecuencia de 79Hz.

t=(256-255)*16*16*0.2us=13ms

Ahora el problema que tienes que resolver es el duty time, ¿puedes lograr que tu timer2 genere tiempos menores a 13ms? No creo que se pueda. Llorando Talvez usando timer1 para dutys y timer2 para 13ms. Pero ten en cuenta que la probabilidad de que tu motor funcione a 13ms es baja.

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
RE: Control de servomotor con pwm
« Respuesta #7 en: 17 de Noviembre de 2005, 15:51:00 »
gracias por las respuestas, ahora configurando todo, tengo una duda existencial

según manual tengo estos datos:
Operating speed: DC- 20 MHz clock input
                             DC- 200ns instruction cylce

al configurar el timer sale

0= internal clock (Fosc/4)

mmm entonces cuanto se demora en contar uno (ejemplo de 127 a 128) ¿200ns?
no entiendo eso del Fosc/4  Llorando

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Control de servomotor con pwm
« Respuesta #8 en: 17 de Noviembre de 2005, 18:40:00 »
Pues es una duda que surge cuando uno comienza a programar PICs

En los PICs hay dos cosas distintas...

- Ciclo de reloj. Un ciclo de reloj es igual a

Tosc= 1/fosc
Tosc= 1/20MHz=0.05us

- Ciclo de instrucción. Un ciclo de instrucción es igual a 4 ciclos de reloj...

4Tosc=(0.05us)(4)=0.2us=200ns

Los PIC tardan 4 ciclos de reloj en hacer una instrucción sencilla. Las instrucciones de bifurcación por ejemplo, les toman 2 ciclos de intrucción, es decir, 8 ciclos de reloj.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Control de servomotor con pwm
« Respuesta #9 en: 22 de Noviembre de 2005, 08:03:00 »
Escrito originalmente por flexjax
gracias por las respuestas, ahora configurando todo, tengo una duda existencial

según manual tengo estos datos:
Operating speed: DC- 20 MHz clock input
                             DC- 200ns instruction cylce

al configurar el timer sale

0= internal clock (Fosc/4)

mmm entonces cuanto se demora en contar uno (ejemplo de 127 a 128) ¿200ns?
no entiendo eso del Fosc/4  Llorando


Para explicarlo de otra forma más breve.

Dado un Oscilador externo que uses (o interno da igual), la frecuencia de procesamiento de instrucciones será la frecuencia del Oscilador / 4.

Entonces si tienes un Cristal de 20 Mhz, funcionará a 5Mega instrucciones por segundo, es decir una instrucción cada 200nseg.

Si tienes un cristal de 4Mhz, funcionará a 1Mega instrucciones por segundo, es decir una instrucción cada 1useg.

Es una suerte que los pics tengan esta modalidad, ya que otros microprocesadores tienen tiempos de ejecución muy variables de acuerdo a la instrucción.

Goto, Call, return, retfie, retlw  toman 2 ciclos de instrucción
btfss, btfsc, decfsz, incfsz (si se da la condición verdadera) toman siempre 2 ciclos de instrucción.



En los PIC18 hay instrucciones que llevan hasta 3 ciclos de instrucción.









- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
RE: Control de servomotor con pwm
« Respuesta #10 en: 28 de Noviembre de 2005, 20:34:00 »
Muchas gracias por las respuestas..

Ahora tengo otras dudas Llorica

tengo todo conectado y no funciono. Llorica

si conecto 2 motores servo, el micro, el max232, a una fuente regulable, no sera peligroso para el micro? como podría hacer algunas protecciones?, no me tinco conectar los motores con una fuente, y los integrados con otra fuente por los problemas de tierra, esop ojalá me ayuden!! gracias Enfurruñado

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Control de servomotor con pwm
« Respuesta #11 en: 29 de Noviembre de 2005, 13:30:00 »
A tu pic y max ponles un 7805 como reg de 5V. Supongo que ya revisaste el voltaje de funcionamiento de tus motores, usa la fuente regulable para ellos. La tierra va en común a la de 5V, pero asegúrate de que por el cable que pone en común a los 5V con la regulable NO circule corriente que alimente al PIC.

Esto te puede crear ruido y resetarte el pic. Usa una línea de cable para alimentar al pic y max, y otra línea para los motores.

Además coloca capacitores de 0.1uF en Vdd y Vss del PIC para disminuir el ruido.

Divertido

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
RE: Control de servomotor con pwm
« Respuesta #12 en: 08 de Diciembre de 2005, 20:12:00 »
muchas gracias por las respuestas... por fin el pwm me esta resultando con interrupciones solo me funciono en simulaciones (proteus).. cambie el cristal a 32768Hz y funcionan a la perfeccion los PWM.. ahora el problema que tengo es con la comunicacion serial, estoy sospechando que puede ser el pic aca va las partes del codigo donde configuro el usart (velocidad 110 bps), para que lo vean un poco

movlw (1<<SPEN)|(1<<CREN)
movwf RCSTA

BSF STATUS,RP0
MOVLW (1<<RCIE) ;Habilitado interrup. USART(recepción)
MOVWF PIE1
clrf TRISA ;puerto A todos los pines salida
clrf TRISB ;puerto B todos los pines salida
clrf TRISC ;puerto C todos los pines salida
bsf TRISC,7 ;Entrada recepción de datos

;configuracion del USART
movlw D"18"
movwf SPBRG
movlw (1<<BRGH)|(1<<TXEN) ;High Speed, modo asincronico transmicion habilitada
movwf TXSTA

LOOP
 
   movlw 0xff
   movwf TXREG
   BSF STATUS,RP0
ir   BTFSS TXSTA,TRMT
   goto ir
   BCF STATUS,RP0   
  goto LOOP
eso me deberia llenar la pantalla del hyperterminal Angelito

gracias denuevoloco

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Control de servomotor con pwm
« Respuesta #13 en: 09 de Diciembre de 2005, 08:14:00 »
Segun ma dicho nocturno con el dsPIC, que tiene un timer de 32bits se puede lograr el PWM de 50hz Divertido es otra opcion ...
Si juegas contra el mejor, pierdes como los demás.

Desconectado flexjax

  • PIC10
  • *
  • Mensajes: 11
RE: Control de servomotor con pwm
« Respuesta #14 en: 09 de Diciembre de 2005, 15:08:00 »
probe la conexion serial con otro pc y anda bien LloricaLlorica .. ahora tengo la gran pregunta tengo un adaptador usb-serial con esto no me anda bien... esta mal configurado? al probarlo sin este ada`ptador funciona bien desquiciado
estoy mal por que necesito que funcione con el adaptador
ojala alguien me oriente un poco gracias


 

anything