TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: flexjax 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 
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
-
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.
-
Con un cristal de 1MHz puedes lograr periodos PWM muy grandes.
-
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..
-
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
-
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)
-
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.
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.
-
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
-
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.
-
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 
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.
-
Muchas gracias por las respuestas..
Ahora tengo otras dudas ![Llorica Llorica]()
tengo todo conectado y no funciono. ![Llorica 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
-
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.
-
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 Angelito]()
gracias denuevo
-
Segun ma dicho nocturno con el dsPIC, que tiene un timer de 32bits se puede lograr el PWM de 50hz
es otra opcion ...
-
probe la conexion serial con otro pc y anda bien
![Llorica Llorica]()
.. 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 
estoy mal por que necesito que funcione con el adaptador
ojala alguien me oriente un poco gracias
-
Escrito originalmente por flexjax
probe la conexion serial con otro pc y anda bien ![Llorica Llorica]()
.. 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 
estoy mal por que necesito que funcione con el adaptador
ojala alguien me oriente un poco gracias
Algunos adaptadores usb-serie son realmente MUY malos... y no cumplen ni a medias la especificacion de un puerto serie.
Dime una cosa, tu solo utilizas TX y RX o además utilizas RTS, DTS , etc ?
-
Escrito originalmente por maunix
Escrito originalmente por flexjax
probe la conexion serial con otro pc y anda bien ![Llorica Llorica]()
.. 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 
estoy mal por que necesito que funcione con el adaptador
ojala alguien me oriente un poco gracias
Algunos adaptadores usb-serie son realmente MUY malos... y no cumplen ni a medias la especificacion de un puerto serie.
Dime una cosa, tu solo utilizas TX y RX o además utilizas RTS, DTS , etc ?
solo Tx y Rx
-
Si solo utilizas TX y RX, puedes decirme si realmente recibes algo del lado del PIC?
Tienes un osciloscopio?
Sabes si realmente ese adaptador funciona? Si hace algo? Puedes transmitir? Te aparece como un puerto COM perfectamente identificado por windows? (asumo que usas windows) .