Autor Tema: como cambio la frecuencia en un pwm echo con 16f84?  (Leído 3706 veces)

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

Desconectado davo_tlax

  • PIC10
  • *
  • Mensajes: 3
como cambio la frecuencia en un pwm echo con 16f84?
« en: 14 de Octubre de 2009, 16:48:17 »
que tal amigos quisiera saber en el siguiente programa en ensamblador como le cambio la frecuencia con el que me sale el pwm sale aprox de 24.72 Hz pero yo necesito una frecuencia de 7000 Hz me harian un gran favor compartiendome sus conocimientos espero su respuesta gracias

a continuacion pongo el programa en .asm

;Programa de regulación de velocidad de un motor de corriente continua mediante la modulación
;de anchura de pulso(PWM). Por la linea de salida se genera una onda cuadrada de frecuencia
;constante s 100Hz(periodo de 10 ms) y ciclo de trabajo variable desde 0% a 100%, dependiendo
;del valor de la entrada del Puerto A. Es decir, el tiempo en alto varia entre 0 ms (0%) y 10
;ms (100%) de acuerdo con la siguiente tabla:

;                                 (Ciclos_ON)            (Ciclos_OFF)
;         Entrada         CD(%)      SEMIPERIODO ALTO      SEMIPERIODO BAJO
;         -------         -----      ----------------      ----------------
;            0         0%          0 mn = 0 x 1 ms      10 ms = 10 x ms
;            1         10%          1 ms = 1 x 1 ms       9 ms = 9 x 1 ms
;            2         20%          2 ms = 2 x 1 ms       8 ms = 8 x 1 ms
;            ...         ...            --------            -------
;            9         90%          9 ms = 9 x 1 ms       1 ms = 1 x 1 ms
;            10         100%      10 ms = 10 x 1 ms       0 ms = 0 x 1 ms
;            >10         0%
;
;ZONA DE DATOS***************************************************************************

      __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
      LIST   P=16F84A
      INCLUDE <P16F84A.INC>

      CBLOCK 0x0C
      Ciclos_ON
      Ciclos_OFF
      GuardaEntrada
      Var
      ENDC

   MaximaEntrada   EQU      .10

;ZONA DE CODIGOS*************************************************************************

      ORG      0
   Inicio:
      bsf      STATUS,RP0
      movlw   b'00001111'            ;RA3:RA0 como entradas.
      movwf   TRISA
      clrf   TRISB               ;Las lineas del Puerto B se configuran como salidas.
      bcf      STATUS,RP0
   Principal
      movf   PORTA,W               ;Lee el puerto de entrada.
      andlw   b'00001111'
      movwf   GuardaEntrada         ;Guarda el valor.
      btfsc   STATUS,Z            ;Si RA3:RA0=0 el motor se detiene
      goto   DC_CeroPorCiento
      sublw   MaximaEntrada         ;(W)=10-(PORTA)
      btfsc   STATUS,Z
      goto   DC_100PorCiento
      btfss    STATUS,C            ;¿C=1?,¿(w)positivo?,¿(PORTA)<=10?.
      goto    DC_CeroPorCiento      ;Ha resultado(PORTA>10).
      movwf   Ciclos_OFF            ;10-(PORTA)-->(Ciclos_OFF).
      movf   GuardaEntrada,W
      movwf   Ciclos_ON            ;Carga RA3:RA0 en (Ciclos_ON).
   Motor_ON
      movlw   b'10000000'            ;Habilita los drivers y un sentido de giro.
      movwf   PORTB
      call    Retardo_1ms
      decfsz   Ciclos_ON,F            ;Si(Ciclos_ON)=0 salta a Motor_OFF.
      goto   Motor_ON            ;+2
   Motor_OFF
      clrf   PORTB               ;Inhabilita los drivers. Motor parado.
      call   Retardo_1ms
      decfsz   Ciclos_OFF,F         ;Si(Ciclos_OFF)=0 salta a Principal.
      goto   Motor_OFF            ;+1
      goto   Fin
   DC_CeroPorCiento
      clrf   PORTB               ;Inhabilita los drivers. Motor Parado.
      goto   Fin
   DC_100PorCiento
      movlw   b'10000000'            ;Habilita los drivers y un sentido de giro
      movwf   PORTB
   Fin:
      goto    Principal

      INCLUDE<RETARDO.INC>
   END

Desconectado mcpiebot

  • PIC10
  • *
  • Mensajes: 8
    • Ingeniero Maker
Re: como cambio la frecuencia en un pwm echo con 16f84?
« Respuesta #1 en: 14 de Octubre de 2009, 19:19:36 »
que tal?

asi como tienes el programa, tienes que reducirle el tiempo a los retardos,
aunque a mi parecer, seria mas eficiente que hicieras el PWM por  interrupcion
por si el micro tiene que hacer alguna otra cosa a parte del PWM.

saludos!!

Desconectado davo_tlax

  • PIC10
  • *
  • Mensajes: 3
Re: como cambio la frecuencia en un pwm echo con 16f84?
« Respuesta #2 en: 15 de Octubre de 2009, 11:21:24 »
que tal pues lo unico que tiene que hacer el pic es el pwm no hace otra funcion yrealmente soy un novato con esto del ansamblador o peor que eso y no le se mucho pero le tengo que cambiar en donde dice  lo de 1 ms? o me tengo que ir al retardos.asm y ahi cambiarle? perdona mi ignorancia  y ya calcule mas o menos a cuanto le tengo que poner y tendria que ser a 10 us (micro segundos) para que teoricamente me salga a 5 khz y gracias por tu ayuda que tengas un buen dia

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como cambio la frecuencia en un pwm echo con 16f84?
« Respuesta #3 en: 15 de Octubre de 2009, 14:35:43 »
Lee el siguiente enlace para que tengas ideas de como funciona en general, las creaciones de demoras y sabrás que cambiar.


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

Desconectado davo_tlax

  • PIC10
  • *
  • Mensajes: 3
Re: como cambio la frecuencia en un pwm echo con 16f84?
« Respuesta #4 en: 15 de Octubre de 2009, 19:03:05 »
thnks suky se ve bueno espero poder darme un tiempesito para poder leerlo y asi aprender mas espero me ayude y te vuelvo a reiterar mis mas sincers agradecimientos que estes bien.

Desconectado mcpiebot

  • PIC10
  • *
  • Mensajes: 8
    • Ingeniero Maker
Re: como cambio la frecuencia en un pwm echo con 16f84?
« Respuesta #5 en: 16 de Octubre de 2009, 01:37:13 »
pues si solamente tiene que hacer eso puede ser asi:

la frecuencia que necesitas es de 5kHz, por lo que el tiempo que tiene que durar cada retardo es de 2 veces 5kHz,
porque la frecuencia la da medio ciclo en alto y medio ciclo en bajo por lo que el retardo debe durar
1s/10kHz=  0.0001s=100us
asi que haremos un retardo de aproximadamente 100us

y simplemente, haremos que encienda y apague el pin con ese retardo
algo asi:
;-------------------------------------------------------------------------------------------------------------
INICIO:            bsf    portb,0
                       call    Retardo10uS

                       bcf    portb,0
                       call    Retardo10uS
                       goto inicio


Retardo100uS:    movlw .33
                        movwf num1
espera:             decfz   num1,F
                        goto     espera
                        return
;-------------------------------------------------------------------------------------------------------------


es el caso mas simple que te puedo poner, ya si necesitas variar el ciclo de trabajo, habra que tener un retardo para
apagado y otro para encendido, y hacer que se complementen en tiempo.

espero te sirva.

saludos!

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: como cambio la frecuencia en un pwm echo con 16f84?
« Respuesta #6 en: 17 de Octubre de 2009, 12:40:28 »
Saludos

En forma de sugerencia. Si quieres que los retardos te queden más precisos utiliza interrupciones por timers asi habra más exactitud en los tiempos por lo tanto también en la frecuencia.
Un saludo desde Pereira - Colombia