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

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #15 en: 07 de Febrero de 2023, 18:07:04 »
Si amigo tienes rasib debo Hacer el Carry Cero para el otro Ciclo pues se modifica el dato...................amigo gracias...............con respecto al filtro puedes usar un simple filtro RC para eso hay una ley experimental que dice que se puede usar un filtro cuya frecuencia de corte sea 10 o 100 veces la frecuencia del PWM usar un filtro pasa bajos por lo minimo pues lo que me importa es que e haga bien el PWM luego hacer un filtro que deje poco armonicos es allgo mas sensillo
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 #16 en: 17 de Febrero de 2023, 23:07:20 »
hola amigo le emviera lo que he hecho hasta ahora..........use un pic con una frecuencia de 10 MHz
« Última modificación: 18 de Febrero de 2023, 23:42:48 por akira_ve »
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 #17 en: 18 de Febrero de 2023, 23:40:53 »
Hola amigos buenas noches logre resolver la modulacion de manera continua, usando interrupciones, pues sin el uso de interrupciones se generan retardos del orden de los milisegundos, con el uso de interrupciones todo funciona muy bien, cree una table de datosy no funciona a continuacion les muestro el codigo

List   p=16F877A      ;Tipo de procesador
   include   "P16F877A.INC"   ;Definiciones de registros internos

   __config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC

   CBLOCK 0x20
    Periodo, Duty,Temp
    ENDC

   org      0x00
   goto   Inicio   
   org      0x04
   goto   Int

Int
   movlw    .51
   xorwf    Duty,W
   btfsc    STATUS,Z
   clrf       Duty
   MOVLW   0x06         ; Memoria de programa p gina 0 subpagina 6
   MOVWF   PCLATH      ; Carga el PCLATH para el salto en memoria
   movfw   Duty         ; Carga el offset en W
   ;call      PWM_H      ; Busca la correci¢n del  ngulo   
   movwf   CCPR1L      ; µngulo corregido a usar
   incf      Duty,F
   bcf      PIR1,TMR2IF
   retfie   

Inicio      
   clrf      PORTC         ;  Borra salidas
   bsf      STATUS,RP0   ;  Selecciona banco 1
   clrf      TRISC         ;  RC2 salida
   movlw   .49
   movwf   PR2         ;  Carga el registro de periodos
   movlw   b'11000000'
   movwf   INTCON
   movlw   b'00000010'
   movwf   PIE1
   bcf      STATUS,RP0   ;  Selecciona banco 0   
   movlw   b'00111100'
   movwf   CCP1CON
   movlw   b'00000110'
   movwf   T2CON         ;  T2 en On
   movlw   .28
   movwf   CCPR1L      ;  Carga la anchura del pulso
   clrf      Duty
   
Loop      
   nop
   goto   Loop         ;  Bucle infinito      

   ORG   600h         ; i nicio de la tabla en 0600h= P gina 0, subpagina 6
PWM_H
   addwf    PCL,F

   DT   0x1a,0x1d,0x20,0x23,0x26,0x28,0x2b,0x2d,0x2f,0x30,0x32,0x32,0x33,0x33,0x33,0x32,0x31,0x30,0x2e,0x2c
   DT   0x29,0x27,0x24,0x21,0x1e,0x1b,0x18,0x15,0x12,0xf,0xc,0xa,0x7,0x5,0x3,0x2,0x1,0x0,0x0,0x0
   DT   0x1,0x1,0x3,0x4,0x6,0x8,0xb,0xd,0x10,0x13,0x16,0x1a

   end            ;  Fin del programa fuente

si elimino el uso de la table modula funciona bien la table la genere con la siguiente direccion

https://daycounter.com/Calculators/Sine-Generator-Calculator.phtml

Use como maxima amplitus 51 al igual que el numero de puntos...........espero me ayuden pues solo falta resolver eso y se podria generar ondas senoidal con el PWM y asi no usar el DAC para generar las señal abaratando el diseño.........luego pienso crear una rutina que permita sincronisar este pwm con la red ac......................asi se podria hacer UPS esta idea la tomo de los ups de la marca APC que usa un microcontrolador INTEL para generar la señal senoidal pero con un DAC y con este sincronizan tambien el inversor con la red AC.....................si alguien tiene una idea puede comentarlo asi podriamos hace UPS ON LINE y OFF LINE
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 #18 en: 19 de Febrero de 2023, 11:11:42 »
AC.....................si alguien tiene una idea puede comentarlo así podríamos hace UPS ON LINE y OFF LINE

Si tu idea es algo didáctico o para un proyecto estudiantil, está bien. Pero comercialmente, tal sea más barato y más rentable comprar y revender UPS, al menos que tengas el dinero suficiente para montarte tu empresa y competir con otro fabricantes locales y extranjeros.

También debes considerar que no todo UPS genera o sintetiza una onda sinusoidal. Aquellos que son económicos sólo generan una onda cuadrada en base a un circuito similar a este.




Si quieres indagar más en el tema, Texas Instruments tiene guías de desarrollo para productos comerciales, por ejemplo para un UPS simple tienes este enlace:

https://www.ti.com/solution/single-phase-online-ups#tech-docs

Son de buena referencia para crear un producto comercial, no necesariamente con dispositivos de TI, debes tomarlo como una referencia.

MCHP también tiene guías de desarrollo de productos:

https://www.microchip.com/en-us/development-tool/Digital-Pure-Sine-Wave-UPS



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

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #19 en: 19 de Febrero de 2023, 15:39:42 »
 No deberías utilizar la interrupción del timer2 para actualizar el ciclo de trabajo. Te recomiendo que uses otro timer como el timer 0. De hecho así puedes usar un PWM con frecuencia mayor, así la frecuencia del PWM es independiente del periodo de la señal seno que quieres generar. En tu caso configuras el timer0 para la frecuencia de 60 x 51 = 3060.
Así como lo tienes solo funciona para valores mayores a 28 de ciclo de trabajo, porque el timer 2 sigue avanzando desde que ocurre la interrupción y mientras se procesa la interrupción, y si refrescas con un valor de ciclo de trabajo menor a 28, no se produce el cambio de valor de la señal pwm.

Saludos.

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #20 en: 19 de Febrero de 2023, 15:52:06 »
amigo soy ua persona que me gusta conocer las cosas, pues soy curioso, no soy de dar las cosas por sentadas, me gusta entenderlas hasta donde sea posible, hace muchos años yo me puse a averiguar si sepodia crear una comparador de voltaje que reemplazara a un amplificador operacional mediante  un pic............aqui tambien cuestionaron eso..................amigo ha habido gente que han hecho cosas asi.....................alguien una vez diseño un pelador de papas con una laser, la red wifi es lo que es gracias a 2 personas, una actris que tenia un amigo musico y adapto la idea de la pianola para que un sistema de radio cambiara de frecuencia en canales fijos pero de manera aleatoria, y un cientifico que desarrolloaba un algoritmo para deteccion de cuerpos celestes en radio astronomia la idea no funciono pero dicho algoritmo es importante para que se detecten los puntos en una red inalambrica.................y asi la lista sigue y sugue, ideas que consideraban absurdas, y resulta que esa absurda idea fue importante para resolver otra, alguien dijo....................si una idea no es ansurda.............dudo que dure ,ucho.......................no subestimo ninguna idea concepto pues dentro de todo eso hay algo que puede ser una joya oculta............por eso trabajo en esta idea pues senti curiocidad y ademas permite perfeccionar mis habilidades en programacion de hecho estoy trabajando en algo mas para lograr mas velocidad y su hay dados que se repiten tomar en cuenta esto asi no usar mucho la tabla.......................osea estoy planteando ideas que antes no habia pensado.........de todas maneras te agradesto las direcciones que me ofreces gracias
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 #21 en: 19 de Febrero de 2023, 15:59:15 »
es mas en internet consegui a alguien que logro hacer que un pic 16f84a se pueda conectar a un puerto usb, otro que por medio de procesador propeller operar el cabeza de una impresora epson, hizo una ingenieria revesa del cabezal y esarrollo toda la logica de control............................un ing realizo una ingenieria reversa sobre FPGA...................y esto desato furor pues ahora podemos programarlos de manera mas sensilla sin las atadurs de ciertos fabricantes de FPGA
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 #22 en: 19 de Febrero de 2023, 16:03:36 »
Amigo  uZYNQ casual mente consegui recien una trabajo de ua persona que hacia uno muy basico pero usando el moduloCCP1 pero como comparador y justo me di cuenta de lo que dices..................solo que no logro entender bien como hacer PWM asi............por fa me lo puedes explicar,,,,,,????
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #23 en: 19 de Febrero de 2023, 16:15:56 »
 Solo eso, tu puedes generar una frecuencia mayor de tu pwm (20KHz por ejemplo) modificando el prescaler y dejando igual el 51 como amplitud (PR2). Luego tienes que configurar tu timer 0 para que genere la interrupción a la frecuencia de 3K, y en la rutina de interrupción barres la tabla con los valores de ciclo de trabajo como lo tienes. de hecho si luego modificas la frecuencia del timer 0 puedes cambiar la frecuencia de la onda seno (dentro de cierto rango).
 
 Yo lo hice para una frecuencia de 25Khz de PWM, y con un valor de amplitud de 200, para tener mayor resolución.

Saludos
« Última modificación: 19 de Febrero de 2023, 16:18:46 por uZYNQ »

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #24 en: 19 de Febrero de 2023, 18:40:46 »
Si amigo entiendo tu punto pero el detalle de hacer el T_ON y el T_OFF el TIMER haria el T_ON pero el resto del tie,po para completar el PWM como lo hago pues si varia el total del tiempo estoy variando la frecuencia y no el ciclo de trabajo, pues se necesita el T_ON, un T_OFF para conservar ese tiempo total
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #25 en: 19 de Febrero de 2023, 19:12:29 »
El timer0 es para refrescar el ciclo de trabajo, ya el pwm se encarga de los tiempos ON y OFF.
 Así como esta tu código debería funcionar pero hay un problema con el refrescamiento de ciclo de trabajo. Una solución es utilizar el postcaler para generar la interrupción por cada 4 del timer y para compensar puedes configurar un prescaler de 4 del timer.

 Prueba configurando el timer con este valor:
Código: [Seleccionar]
      movlw   b'00011101'
      movwf   T2CON         

Solo modificando eso vas a ver el resfrecamiento correctamente. pero sigues atado a la frecuencia del timer2. Utilizando el timer0 puedes hacer ese refrescamiento de forma independiente y por lo tanto puedes generar la onda seno con otra frecuencia.

Saludos.

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #26 en: 19 de Febrero de 2023, 19:39:21 »
  Así tu frecuencia de pwm queda en 12500 y la frecuencia de la interrupción para el ciclo de trabajo de 3125 que divido por 51 te quedan los 60 hz aproximadamente.

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #27 en: 19 de Febrero de 2023, 21:23:14 »
a ok.......dejame ver si entendi.....dejo activo el Timer0 generando una interrupcion solamanete para refrescar el CCP1........por cada  4 interrupciones del PWM del CCP1 se genera una del Timer0.............es asi???
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado uZYNQ

  • PIC16
  • ***
  • Mensajes: 123
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #28 en: 19 de Febrero de 2023, 21:31:14 »

 Prueba primero con el cambio del timer 2. (esa es una opción)

Citar
      movlw   b'00011101'
      movwf   T2CON

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re:No logro generar el PWM para generar onda senoidal
« Respuesta #29 en: 22 de Febrero de 2023, 09:19:08 »
Buenos das.............amigo  uZYNQ anoche probe loque me aconsejaste y vaya si funciono, pocedi a ajustar todo para  que el PWM diera 16 mS, baje el postcaler de 4 a 2 reajuste el prescaler y el PR2 quedando el postscaler en 2 el prescaler en 4 y el PR2 en 78 con los 2 bit bajos en 11 y dio jstamente los 16,6 mS amoche mismo obtune la table de valores para la onda senoidal, hoy la convierto para tener las 2 tablas prar que sea carhada, si mas no me equivoco son 234 valores que debo modificar al hacer todo aviso de los resultados  gracias por tu consejo
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela