Autor Tema: Duda PWM  (Leído 2121 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Duda PWM
« en: 17 de Octubre de 2010, 15:18:50 »
Hola compañeros, se que hay mucha info por el foro, pero llevo toda la tarde con ello y cuanto mas lo miro peor. No entiendo las formulas, necesito mover un servo a su posicion central 1480us+20ms=1500us, pero cuando intento aplicar las formulas, me da valores tanto para el PR2 como el CCPR1L muy altos que ni con resolucion de 10bits me alcanza.
Alguien puede enseñarme como hacerlo, para conseguir este periodo de 1500us con un duty de 1480us, tengo esto hasta el momento:
Código: ASM
  1. LIST        P=16F877A
  2.             INCLUDE        <P16F877A.INC>
  3.             __CONFIG    _CP_OFF & _PWRTE_ON & _WDT_ON & _HS_OSC
  4. ;
  5. ;---------------------------------------------------------------
  6. ; VARIABLES.
  7. ;---------------------------------------------------------------
  8. ;
  9.             CBLOCK        H'20'
  10. ;
  11.             ENDC
  12. ;
  13. ;---------------------------------------------------------------
  14. ; CONSTANTES.
  15. ;---------------------------------------------------------------
  16. ;
  17.     Periodo         equ            .101        ;Periodo de 100us.-
  18.     Duty            equ            .25         ;Anchura 25us
  19. ;
  20. ;**** Configuracion de puertos ****
  21.  
  22. RESET        ORG            H'00'            ;Aqui comienza el micro.-            
  23.             GOTO        Inicio            ;Salto a inicio de mi programa.-
  24.             ORG            H'05'            ;Origen del codigo de programa.-
  25. ;
  26. Inicio        clrf        PORTA
  27.             clrf        PORTB
  28.             clrf        PORTC            ;Borra salidas.-
  29.             bsf            STATUS,RP0        ;Banco 1.-
  30.             movlw        0x06            ;Configuramos todos los pines...
  31.             movwf        ADCON1            ;..como entradas digitales.-
  32.             movlw        b'11111110'
  33.             movwf        TRISB            ;Bit 0 PORTB salida resto entradas.-
  34.             movlw        b'11111011'
  35.             movwf        TRISC            ;Bit 2 PORTC salida resto entradas.-
  36.             movlw        b'11101111'
  37.             movwf        OPTION_REG        ;Preescaler de 128 asociado al WDT.-
  38.             movlw        Periodo-1
  39.             movwf        PR2                ;Carga el registro de periodos.-
  40.             bcf            STATUS,RP0        ;Banco 0.-
  41.            
  42.             movlw        Duty
  43.             movwf        CCPR1L            ;Carga la anchura del pulso.-
  44.  
  45. ;**** El modulo CCP1 actua en el modo PWM con salida de señal por RC2/CCP1 ****
  46.  
  47.             movlw        b'00001100'
  48.             movwf        CCP1CON
  49.  
  50. ;**** El TMR2 trabaja con un preescaler 1:1 por lo que con una frecuencia de 4MHz
  51. ; evoluciona cada us (4*Tosc) ****
  52.            
  53.             movlw        b'00000100'
  54.             movwf        T2CON            ;T2 en ON.-
  55.  
  56. Loop        clrwdt                        ;Refrescamos el WDT.-
  57.             goto        Loop            ;Bucle infinito.-
  58.            
  59. ;
  60.             END                            ;Fin del programa fuente.-
Gracias

Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda PWM
« Respuesta #1 en: 17 de Octubre de 2010, 15:22:54 »
Puede ser porque la frecuencia que necesitas implementar no es posible realizarla. 50 Hz con un cristal HS  :? Quiere PWM por software!  :mrgreen:


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda PWM
« Respuesta #2 en: 17 de Octubre de 2010, 15:43:48 »
Hola Suky, lo primero gracias, entiendo que con el CCPx no es posible realizarlo con un cristal HS, a no ser que lo haga con temporizaciones de algun Timer.

Gracias
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Duda PWM
« Respuesta #3 en: 17 de Octubre de 2010, 19:32:57 »
Yo creo que se podría implementar tranquilamente con el Timer1 todo el funcionamiento. Obviamente depende de más quieras hacer.

Yo haría algo así.

la primera vez que entrás en la interrupción hacés "1" tu salida y configurás el Timer para que cuente 1500us, salís de la interrupción.
cuando vuelve a entrar hacés "0" la salida y configurás el Timer para que cuente 20ms, salís de la interrupción.

y así se repite el ciclo
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda PWM
« Respuesta #4 en: 18 de Octubre de 2010, 04:08:18 »
Hola de nuevo, precisamente es la manera de hacerlo lo que no tengo claro, si es mas conveniente hacerlo por interrupciones o por temporizaciones, ya que tengo que gobernar x servos con posiciones diferentes.
Estuve mirando la manera de controlar 8 servos con una sola interrupcion del maestro Redpic, http://picmania.garcia-cuervo.net/picc_servos_x_8.php pero no estoy seguro si son las mismas temporizaciones para los 8 servos o si puedo poner diferentes temporizaciones una para cada servo.

Gracias.
             Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Duda PWM
« Respuesta #5 en: 18 de Octubre de 2010, 10:10:36 »
  Por lo que leí muy por arriba el programa que muestra RedPic parece ser que todos los servos se mueven igual. Pero eso no importa. Se puede hacer para movimientos distintos. Sí vas a tener que evaluar que otras cosas tiene que hacer tu programa como para saber si te conviene usar interrupciones o podés hacerlo directamente dentro de un loop.

  En www.e-radiocontrol.com.ar hay mucha información acerca del radiocontrol y vas a encontrar un par de decodificadores con PIC (uno de 7 y otro de 8 canales) hechos por mí. No creo que sea lo que estás buscando pero tal vez pueda darte una idea. Y si no, seguimos viéndolo por aquí a ver a que se llega.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything