Autor Tema: No logro generar el PWM para generar onda senoidal  (Leído 2484 veces)

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

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
No logro generar el PWM para generar onda senoidal
« en: 01 de Febrero de 2023, 01:28:33 »
Hola amigos escribi un programa para un 16F877A para generar uma onda senoidal de 60 Hz con el modulo CCP, el Pic  corre a 20Mhz pero no completa todo el PWM el modulo esta como PWM con un pre scaler en 4 si lo configuro para que el pre scaner con valor 1 funciona bien les envio el codigo..........coloque como comentario ciertas partes del programa que de momento no importaban a mi parecer, lo quiero con el pre scaler con valor 4 pues asi tengo tiempo para cargar los valores de la tabla gracias de antemano

   list p=16f877a
   include "p16f877a.inc"

   CBLOCK 0X20
   Cuenta1, Cuenta2, ANGULO
   ENDC
 
   ORG   0
   GOTO   INICIO

Tabla_P:
    ADDWF   PCL,F

    DT      .0,     .3,     .6,     .9,  .13,  .16,  .19,   .22,  .25,  .28,.31,.34,.37,.40,.43,.46,.48,.51,  .54,  .56,  .59,  .62,   .64,  .67,  .69
    DT     .71,  .73,  .76,   .78,  .80,  .82,  .84,   .85,  .87,  .89,.90,.92,.93,.94,.96,.97,.98,.99,.100,.100,.101,.102,.102,.102,.103
   DT   .103,.103,.103,.103,.103,.102,.102,.102,.101,.100,.99,.99,.98,.97,.95,.94,.93,.92,  .90,  .89,  .87,  .85,   .83,  .81,  .79
   DT     .77,   .75,  .73,  .71,  .69,  .66,  .64,   .61,  .59,  .56,.53,.51,.48,.45,.42,.39,.36,.34,  .31,  .28,  .24,  .21,   .18,  .15,   .12
    DT       .9,     .6,     .3

INICIO
   BSF   STATUS,RP0
   CLRF   TRISC               ; SALIDA
   MOVLW D'103'                ;
   MOVWF   PR2
   bcf      STATUS,RP0
   bcf      T2CON,1             ; Prescaler en 4
   bsf      T2CON,0
   BCF   CCP1CON,5          ;
   bcf      CCP1CON,4          ;
   bsf      CCP1CON,3            ; 1100 PWM
   bsf      CCP1CON,2
   bcf      CCP1CON,1
   bsf      CCP1CON,0
   clrf      PORTC
   clrf      ANGULO
   bsf      T2CON,2            ; TMR2 ON

START
   BTFSS   PIR1,TMR2IF
   GOTO   START
   ;MOVF   CCP1CON,W         ; 0010 1100
   ;ANDLW   B'00001100'            ; 0000 1100
   ;MOVWF   Cuenta2
   ;MOVLW D'10'
   MOVF   Tabla_P,W    
   MOVWF   CCPR1L
   ;MOVWF   cuenta1            ; 11000000
   ;RRF   Cuenta1,F
   ;RRF   Cuenta1,F; 00110000
   ;MOVF   Cuenta1,W
   ;ADDWF   cuenta2,F;
   ;MOVF   Cuenta2,W
   ;MOVWF   CCP1CON

   movlw    D'104'
   xorwf    ANGULO,W
   btfsc    STATUS,Z
   clrf      ANGULO
   movf    ANGULO,W
   call       Tabla_P
   movwf   CCPR1L
   incf    ANGULO,F
   bcf       PIR1,TMR2IF

   GOTO   START
   END
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #1 en: 02 de Febrero de 2023, 22:33:29 »
la precuencia del PIC son 20 Mhz
la frecuencia del PWM es 120000, pues los valores son periodicos osea cada mediociclo es igual al otro por lo tanto no son 60 Hz son 120
t asumi 100 valores por cada semi ciclo por lo tanto la frecuencia del PWM son 120Khz
uso el pre scaler con valor 4 por lo tanto el PR2 Vale 103
hago una tabla dode cada valor varia un equivalente del valoe del seno de 1,75 grados 103 valores pero al simularlo en PWM resultante es Discontinuo pero si el pre scaler vale 1 es continuo........necesito que sea prescaler de valor 4 pues quiero hacer que esta onda senoidal resultante se soncronice con los 60 Hz de la red pues esto es para hacer un inverson de un UPS
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #2 en: 02 de Febrero de 2023, 22:34:52 »
Pedon la Frecuencia del PWM es de 12 Khz
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #3 en: 03 de Febrero de 2023, 12:12:48 »
Hola amigos escribi un programa para un 16F877A para generar uma onda senoidal de 60 Hz con el modulo CCP, el Pic  corre a 20Mhz pero no completa todo el PWM el modulo esta como PWM con un pre scaler en 4 si lo configuro para que el pre scaner con valor 1 funciona bien les envio el codigo..........coloque como comentario ciertas partes del programa que de momento no importaban a mi parecer, lo quiero con el pre scaler con valor 4 pues asi tengo tiempo para cargar los valores de la tabla gracias de antemano

   list p=16f877a
   include "p16f877a.inc"

   CBLOCK 0X20
   Cuenta1, Cuenta2, ANGULO
   ENDC
 
   ORG   0
   GOTO   INICIO

Tabla_P:
    ADDWF   PCL,F

    DT      .0,     .3,     .6,     .9,  .13,  .16,  .19,   .22,  .25,  .28,.31,.34,.37,.40,.43,.46,.48,.51,  .54,  .56,  .59,  .62,   .64,  .67,  .69
    DT     .71,  .73,  .76,   .78,  .80,  .82,  .84,   .85,  .87,  .89,.90,.92,.93,.94,.96,.97,.98,.99,.100,.100,.101,.102,.102,.102,.103
   DT   .103,.103,.103,.103,.103,.102,.102,.102,.101,.100,.99,.99,.98,.97,.95,.94,.93,.92,  .90,  .89,  .87,  .85,   .83,  .81,  .79
   DT     .77,   .75,  .73,  .71,  .69,  .66,  .64,   .61,  .59,  .56,.53,.51,.48,.45,.42,.39,.36,.34,  .31,  .28,  .24,  .21,   .18,  .15,   .12
    DT       .9,     .6,     .3

INICIO
   BSF   STATUS,RP0
   CLRF   TRISC               ; SALIDA
   MOVLW D'103'                ;
   MOVWF   PR2
   bcf      STATUS,RP0
   bcf      T2CON,1             ; Prescaler en 4
   bsf      T2CON,0
   BCF   CCP1CON,5          ;
   bcf      CCP1CON,4          ;
   bsf      CCP1CON,3            ; 1100 PWM
   bsf      CCP1CON,2
   bcf      CCP1CON,1
   bsf      CCP1CON,0
   clrf      PORTC
   clrf      ANGULO
   bsf      T2CON,2            ; TMR2 ON

START
   BTFSS   PIR1,TMR2IF
   GOTO   START
   ;MOVF   CCP1CON,W         ; 0010 1100
   ;ANDLW   B'00001100'            ; 0000 1100
   ;MOVWF   Cuenta2
   ;MOVLW D'10'
   MOVF   Tabla_P,W    
   MOVWF   CCPR1L
   ;MOVWF   cuenta1            ; 11000000
   ;RRF   Cuenta1,F
   ;RRF   Cuenta1,F; 00110000
   ;MOVF   Cuenta1,W
   ;ADDWF   cuenta2,F;
   ;MOVF   Cuenta2,W
   ;MOVWF   CCP1CON

   movlw    D'104'
   xorwf    ANGULO,W
   btfsc    STATUS,Z
   clrf      ANGULO
   movf    ANGULO,W
   call       Tabla_P
   movwf   CCPR1L
   incf    ANGULO,F
   bcf       PIR1,TMR2IF

   GOTO   START
   END

Pídele a la IA que te ayude, explícale paso a paso las cosas que has hecho, es posible que llegue a darte una ayuda:

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #4 en: 03 de Febrero de 2023, 13:14:03 »
No respodio algo que no sepa.....................ayer cree una hoja de calculo con exel  para calcular los valores de PR2 y los valores de  CCPR1L: CCP1CON y me di cuenta que los valores de CCPR1L: CCP1CON eran erroneo hoy corrijo eso y les aviso
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #5 en: 03 de Febrero de 2023, 13:18:57 »
No respodio algo que no sepa.....................ayer cree una hoja de calculo con exel  para calcular los valores de PR2 y los valores de  CCPR1L: CCP1CON y me di cuenta que los valores de CCPR1L: CCP1CON eran erroneo hoy corrijo eso y les aviso

Obviamente no lo sabe, es una herramienta de búsqueda y ayuda bastante a crear código sin necesidad de romper mucho la cabeza. Obviamente no es perfecta, pero te guía en lo que deseas hacer.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #6 en: 03 de Febrero de 2023, 14:44:42 »
No es la causa del problema, pero el último valor de la tabla es Tabla_P[102] , por lo que cuando va a leer el 103 termina saltando al comienzo del programa sin ejecutar el retlw --> stack overflow después de 9 iteraciones (tiene 8 niveles).

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #7 en: 03 de Febrero de 2023, 15:51:38 »
a ok el final de la tabla esta mal???....................como deberia ser???
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #8 en: 03 de Febrero de 2023, 15:56:08 »
hoy hice una hpja de calculo y todo loos calculos se hicieron automaticamente..............y fue que me di cuenta pues se generaba todos los valores a cargarse en los registros y me di cuenta que los valores no eran los correctos solo PR2 era correcto............pero  CCPR1L: CCP1CON no eran corectos y los tiempos no cuadran nunca............por eso di por sentado que es la rason.............pero lo qwue dices es valido........por eso te pregunto como seria eso lo de la tabla.......
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #9 en: 03 de Febrero de 2023, 16:36:38 »

Código: [Seleccionar]
..............
   movlw    D'103'
   xorwf    ANGULO,W
   btfsc    STATUS,Z
   clrf      ANGULO
..............

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #10 en: 03 de Febrero de 2023, 17:29:28 »
a ok entiendo................gracias un detalle que se me paso...............probare y aviso
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #11 en: 06 de Febrero de 2023, 01:44:21 »
Buenas noches recien fue que logre ponerme a  res escruibir el programa y ahora si logra funcionar continuamente pero en la simulacion no veo la señal tipica del PWM de la onda Senoidal solo veo una PWM desordenada pero es un progreso pues la dodulacion es desordenada pero continua seguire revisando abajo pego el programa corregido.......re scribi la carga de  CCPR1L: CCP1CON y el valoe de PR2 segun los valores calculador

    list p=16f877a
   include "p16f877a.inc"

   CBLOCK 0X20
   Cuenta1, Cuenta2, ANGULO
   ENDC
 
   ORG   0
   GOTO   INICIO

Tabla_P:
    ADDWF   PCL,F

    DT      .52, .55, .58, .61, .64, .67, .70, .73, .76, .79, .82, .84, .86,.89,.91,.93,.95,.97,.98,.99
    DT      .101,.102,.102,.103,.104,.104,.104,.104,.104,.103,.102,.102,.101,.99,.98,.97,.95,.93,.91,.89
   DT      .86, .84, .82, .79, .76, .73, .70, .67, .64, .61, .58, .55, .52,.49,.46,.43,.40,.37,.34,.31
   DT      .28, .25, .22, .20, .18, .15, .13, .11,  .9,  .7,  .6,  .5,  .3, .2, .2, .1, .0, .0, .0, .0
    DT       .0,  .1,  .2,  .2,  .3,  .5,  .6,  .7,  .9, .11, .13, .15, .18,.20,.22,.25,.28,.31,.34,.37
   DT     .40, .43, .46, .49, .52   

INICIO
   BSF   STATUS,RP0
   clrf      TRISC               ; SALIDA
   MOVLW .25                ;
   MOVWF   PR2
   bcf      STATUS,RP0
   bsf      T2CON,1             ; Prescaler en 16
   bsf      T2CON,0
   bsf      CCP1CON,3            ; 1100 PWM
   bsf      CCP1CON,2
   bcf      CCP1CON,1
   bsf      CCP1CON,0
   clrf      PORTC
   clrf      ANGULO
   bsf      T2CON,2            ; TMR2 ON

START
   BTFSS   PIR1,TMR2IF
   GOTO   START   
   movlw    D'104'
   xorwf    ANGULO,W
   btfsc    STATUS,Z
   clrf      ANGULO
   movf    ANGULO,W
   call       Tabla_P
   MOVWF   Cuenta1            ; 11000000
   RRF   Cuenta1,F
   btfsc   STATUS,C
   goto   Uno
   bcf      CCP1CON,4

VolverY
   RRF   Cuenta1,F
   btfsc   STATUS,C
   goto   Dos
   bcf      CCP1CON,5

VolverX
   MOVF   Cuenta1,W    
   MOVWF   CCPR1L
   incf    ANGULO,F
   bcf       PIR1,TMR2IF
   GOTO   START

Uno:
   bsf      CCP1CON,4
   goto   VolverY

Dos:
   bsf      CCP1CON,5
   goto   VolverX
   
   END
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #12 en: 06 de Febrero de 2023, 08:34:32 »
Me imagino que estás utilizando un filtro para eliminar la componente de alta frecuencia de la señal ¿Verdad?

Tal vez deberías compartir el esquemático.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado nbc

  • PIC10
  • *
  • Mensajes: 39
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #13 en: 06 de Febrero de 2023, 15:17:51 »
debes poner un filtro rc , lo ideal seria lc , para integrar la señal y poder ver la onda senoidal

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #14 en: 07 de Febrero de 2023, 14:17:54 »
.... logra funcionar continuamente pero en la simulacion no veo la señal tipica del PWM de la onda Senoidal solo veo una PWM desordenada pero es un progreso pues la dodulacion es desordenada

En
Código: [Seleccionar]
VolverY
RRF Cuenta1,F
btfsc STATUS,C
goto Dos
bcf CCP1CON,5
te olvidaste que con RRF el carry va a parar al bit7 de Cuenta1  --> te hace percha Cuenta1
el resultado es pseudoaleatorio, algunas no pasaba nada porque el carry estaba en 0 pero en otras si.

Debió ser
Código: [Seleccionar]
VolverY
   bcf      STATUS,C
   RRF      Cuenta1,F
   btfsc    STATUS,C
   goto     Dos
   bcf      CCP1CON,5

Antes tambien usaste RRF , pero ligaste porque ahi siempre llegabas con carry=0