TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: juanml en 01 de Junio de 2012, 19:01:54

Título: Consulta sobre implementar DAC con PWM
Publicado por: juanml en 01 de Junio de 2012, 19:01:54
Tengo un problema, estoy tratando de implementar un DAC mediante PWM. Estoy usando una tabla con valores de una onda senoidal, pero lo que pasa es que la onda resultante tiene como "saltos". Esto que digo se puede ver mejor en este video:


El código es el siguiente:

Código: [Seleccionar]
unsigned char i = 0;
unsigned char sine[256]={
127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,
225,223,221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,
96,93,90,87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,
12,14,15,16,18,20,21,23,25,27,29,31,33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124};

void interrupt VectorNumber_Vtpm1ovf tpm1ovf_isr(void)
{
TPM1SC_TOF = 0;
TPM1C0V=sine[i];
i++;
if (i==256)
{
 i=0;
}
}

void main(void)
{

  TPM1SC = 0b01101000;
  TPM1C0SC = 0b00101000;
  TPM1MOD = 0x00FF;
  TPM1C0V = sine[i];
  EnableInterrupts;  // enable interrupts
  while (1)
  {
  }
}

Estoy usando un SH8 con una frecuencia de bus de 8Mhz con el oscilador interno.
Tienen idea cuál puede ser el problema?
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: Suky en 01 de Junio de 2012, 19:35:20
El if( i==256 ) no tiene sentido. Si declaras i como una variable de 8-bits y además el buffer tiene 256 posiciones, entonces solo debes incrementar i. Después veo que en los extremos colocas varios intervalos repetidos, es por alguna razón?


Saludos!
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: juanml en 01 de Junio de 2012, 19:40:24
El if( i==256 ) no tiene sentido. Si declaras i como una variable de 8-bits y además el buffer tiene 256 posiciones, entonces solo debes incrementar i. Después veo que en los extremos colocas varios intervalos repetidos, es por alguna razón?


Saludos!

Tenés razón con lo del if! Pasa que primero estaba usando tablas con menos valores entonces si tenía que hacer la comparación.

A que te referís con lo de varios intervalos repetidos?

Gracias por responder!
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: Suky en 01 de Junio de 2012, 19:45:00
Perdón, era valores repetidos. 254,254,254.... Por ahi cuando creas el vector podes disminuir la amplitud.
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: juanml en 01 de Junio de 2012, 20:18:09
Probé con vectores de menos puntos y también con amplitudes más chicas, pero sigue pasando lo mismo. Me tiene medio perdido esto.
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: Suky en 01 de Junio de 2012, 21:02:43
Yo tampoco veo nada que genere ese problema en el código que muestras  :tongue:
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: juanml en 01 de Junio de 2012, 22:57:04
Ya está! Era un problema con el watchdog.
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: cicloide2 en 02 de Junio de 2012, 14:23:49
Muy buen ejercicio juanml, me podrias explicar tu o RICHI777, como interpreto esa serie numerica ?, como una tabla que se va barriendo en forma concecutiva?y se van cargando en TPM1C0V?

Porque esa serie? como es que con esa serie se logra conformar una señal senoidal? es prueba y error  o hay un metodo?

Gracias.
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: Suky en 02 de Junio de 2012, 15:39:55
Muy buen ejercicio juanml, me podrias explicar tu o RICHI777...

 :D

como una tabla que se va barriendo en forma concecutiva?y se van cargando en TPM1C0V?

Si, eso mismo.

Porque esa serie? como es que con esa serie se logra conformar una señal senoidal? es prueba y error  o hay un método?

Porque quieres una senoidal. Primero que nada debes entender como es el tema del PWM, que pasa si le aplicas un filtro pasabajos, entonces vas a entender porque esa serie. Luego no es prueba y error, mediante algún programa puedes crear esa tabla en base a una senoidal. Un programa conocido por todos para usar sería el Excel.


Saludos!



Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: cicloide2 en 02 de Junio de 2012, 22:42:58
Bueno debi poner Juanml, RICHI777 y..... Suky

Gracias ;-)
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: RICHI777 en 03 de Junio de 2012, 12:02:55
Hola, borrame de la lista. Yo no hubiese podido ayudarte.

Saludos !
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: cicloide2 en 03 de Junio de 2012, 13:04:34
Yo creo que hay mucho craneos por aca, y si es por ser umilde se agradece tambien pero creo que tu perteneces a ese grupo

Salu00010 :-/
Título: Re: Consulta sobre implementar DAC con PWM
Publicado por: RICHI777 en 03 de Junio de 2012, 13:39:48
Hola, gracias por el halago, pero hay muchos temas que no domino, el PWM es uno de ellos.


Saludos !