Autor Tema: Generador Funciones  (Leído 6464 veces)

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

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
Generador Funciones
« en: 07 de Enero de 2005, 06:17:00 »
Buenas,

Tengo que programar un generador de funciones (sinusoidal, triangular y cuadrada) con una PIC 16F877 y un DAC.
Me han recomendado realizar una tabla con los valores típicos del seno y irla recorriendo tan rápido como marque un timer.
Lo de pasarle estos valores al DAC no lo tengo muy claro porqué estos valores oscilan entre 0 y 1 (en el caso del seno ) y solo se pueden poner valores enteros en la salida, en el portb por ejemplo.

Alguien ha hecho alguna vez algo similar? Gracias

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Generador Funciones
« Respuesta #1 en: 07 de Enero de 2005, 06:21:00 »
Sabes que DAC vas a utilizar?
A qué frecuencias va a trabajar?

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: Generador Funciones
« Respuesta #2 en: 07 de Enero de 2005, 06:28:00 »
Escrito originalmente por Modulay
Sabes que DAC vas a utilizar?
A qué frecuencias va a trabajar?


El DAC aun no lo he comprado, por lo que puedo usar el que me recomendeis.
A la salida del DAC necesito como mínimo 1 amperio y los valores de tensión deben oscilar entre +8 i -8 V pero para esto ya me preocupare de mirar los datasheet de los correspondientes DAC que me podais recomendar.

En cuanto a la frecuencia debe ir de 0 a 8Khz, debo ser capaz de cambiarla con botones de más y menos frecuencia, pero esta parte la tengo más o menos programada. El problema lo tengo con esto que comentaba, con lo los valores que pasarle al DAC.

Gracias

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Generador Funciones
« Respuesta #3 en: 07 de Enero de 2005, 08:03:00 »
Holas...

Nunca he trabajado con un ADC, pero recuerdo que en un examen (hace tiempo ya...) hicimos algo que quizas te pueda orientar. Pongo el documento (está mal escaneado y sólo tengo el enunciado)



La cuestión es que se quiere sacar una tensión entre 0 y 5V, entonces mediante la ecuación de la senoide, se van hallando los valores que hay que sacar al puerto B.

Es decir que para un tiempo t por ejemplo de 10 ms se tiene que llevar al puerto B el valor 2,5+2,5*sen(100*pi*10ms)=2.5V, este valor de tensión es el que se debe llevar al adc.Esto se puede hacer mediante una simple regla de tres.

Por ejemplo la tensión máxima que hay que sacar serían 5V y como disponemos de 8 bits, haces una regla de tres para sacar el valor a llevar al adc.

255-------5V
XXX-------2,5V (2.5+2.5*sen(100*pi*10ms))

Lo que salga en la x es lo que tienes que llevar al puerto B para sacar ese nivel de tensión. (unos 128 maomenos)

Ahora tienes que extrapolar esto a tu problema, tendrás que hacer los calculos para sacar +/-8V en lugar de 0/5V y a distintas frecuencias.

Es un trabajo largo, la verdad es que en el examen fue una putada, no por la dificultad, sino por el tiempo.

No se si es exactamente lo que preguntas, pero a mi me ha sonado a esto, pienso que podrías hacerlo de esta forma (entre otras posibles que seguro habrá).

Un saludo.


Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Generador Funciones
« Respuesta #4 en: 07 de Enero de 2005, 08:13:00 »
Bueno,con esos datos ya creo que alguien que se haya manejado con DACS te puede orientar sobre cual elegir,aunque  el DAC por sí solo no creo que pueda proporcionarte la corriente que comentas,necesitarás una etapa de potencia a su salida para tal fin.Sobre la gama de valores que le debes ir mandando al DAC,lo veo simple.No estoy seguro,pero supongo que estos dispositivos,al igual que los ADC,cuentan con pines destinados a conectar tensiones de referencia.Por ejemplo,si el DAC es de 8 bits y le mandas el dato 11111111,dará supuestamente a su salida el valor de tensión máximo,que sería +Vref (tensión de referencia),con respecto a masa o a una tension -Vref de 0 voltios.Si le mandas un 0 (00000000),te dará una tensión de 0 V,y así todos los valores intermedios,256 valores posibles en total para 8 bits...
A ver si alguien nos ilustra un poco con el uso de estos dispositivos

Desconectado cHiPmAn

  • PIC16
  • ***
  • Mensajes: 110
RE: Generador Funciones
« Respuesta #5 en: 07 de Enero de 2005, 08:52:00 »

Hay un generador de muy bajo coste q vende maxim. Su referencia es el MAX038 y creo q genera todas las señales que necesitas y se puede ajustar el duty, amplitud,...

Espero que te sirva de ayuda.

Salu2!

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: Generador Funciones
« Respuesta #6 en: 10 de Enero de 2005, 02:35:00 »
Escrito originalmente por cHiPmAn

Hay un generador de muy bajo coste q vende maxim. Su referencia es el MAX038 y creo q genera todas las señales que necesitas y se puede ajustar el duty, amplitud,...



Lo siento pero no me sirve, no puedo usar un chip que sea un generador de funciones. Debo hacerlo mediante un microcontrolador más un DAC.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Generador Funciones
« Respuesta #7 en: 10 de Enero de 2005, 07:19:00 »
Usando la función sin van a haber problemas, ya que tarda mucho tiempo en ejecutarse (bastantes ms) con lo cual quizá no se pueda conseguir la frecuencia deseada.

Para usar una tabla que es como te recomendaron, vas a tener que meter "unos cuantos valores" si no quieres ver la función seno en forma de escalera.

Haciéndolo con una tabla creo que no habrá ningún tipo de problema.

Un saludo

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: Generador Funciones
« Respuesta #8 en: 11 de Enero de 2005, 03:02:00 »
La tabla la he tenido que hacer de 64 posiciones pq si la hacia de 128 me decia que no tenia suficiente RAM (en una pic 16F877)

La he rellenado asi para que lleguen 8 bits al DAC (la tabla simula una onda triangular, la sinusoidal la dejo para luego):

for(i=0;i<31;i++){
      taula = 8*i;
   }
   i=32;
   for(j=32;j<63;j++){
      taula[j] = (8*i)-1;
      i--;
   }  

Lo probé encima de la PIC directamente con un DAC q tenia por ahi y no me acaba de funcionar.

Sabeis como puedo simular esto con el simulador de oshonsoft  para ver el tipo de onda que me sacaria? no hay manera de añadir la etapa de un DAC al simulador verdad?

Gracias por vuestro tiempo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Generador Funciones
« Respuesta #9 en: 11 de Enero de 2005, 06:54:00 »
No entiendo como lo has hecho. El tiempo támpoco creo que lo usas. ¿Como sacarías entonces una triangular de 50Hz (T=20ms) por ejemplo?

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: Generador Funciones
« Respuesta #10 en: 12 de Enero de 2005, 01:43:00 »
[cita title=Escrito originalmente por pocher]No entiendo como lo has hecho. El tiempo támpoco creo que lo usas. ¿Como sacarías entonces una triangular de 50Hz (T=20ms) por ejemplo?[/cita]


Primero relleno la tabla con valores para luego ir recorreriendola:

freq = 100; // por ejemplo
if(start == 1){ // generador ON
     if(i == 64){
         i = 0;
     }
     port_c = taula;
     i++;
     delay_ms(freq);
}

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Generador Funciones
« Respuesta #11 en: 12 de Enero de 2005, 04:35:00 »
Para evitar malentendidos, deberías activar la casilla "Usa codigos Mi@" que tienes activa al redactar tu mensaje.

Al tenerla activa, MiArroba interpreta la secuencia "" como letra en cursiva y por eso, en tus dos programas no aparece el índice detrás de la variable taula y se malinterpretan.
Esa es la causa, además, de que aparezcan en cursiva a partir de ese punto del programa.

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: Generador Funciones
« Respuesta #12 en: 12 de Enero de 2005, 05:24:00 »
[cita title=Escrito originalmente por nocturno66]Para evitar malentendidos, deberías activar la casilla "Usa codigos Mi@" que tienes activa al redactar tu mensaje.

Al tenerla activa, MiArroba interpreta la secuencia "" como letra en cursiva y por eso, en tus dos programas no aparece el índice detrás de la variable taula y se malinterpretan.
Esa es la causa, además, de que aparezcan en cursiva a partir de ese punto del programa.[/cita]

Gracias, lo que tenía que hacer era desactivarla para que no interprete la como cursiva

Está el código corregido

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Generador Funciones
« Respuesta #13 en: 12 de Enero de 2005, 06:45:00 »
A ver, ya voy entendiendo cosas.

Unos consejillos:

- Estas usando una amplitud para la triangular de 8, ¿porqué no la usamos de 5V, que es el margen del PIC?

- La ecuación de la rampa de subida está bien, pero la ecuación que aplicas para calcular los puntos en la rampa de bajada creo que está mal.

- En las ecuaciones de ambas rectas sigue sin aparecer el tiempo y creo que debiera.

- Para el tiempo entre punto y punto aplicas delay_ms(freq); esto creo que también estaría mal. El tiempo entre punto y punto sería el periodo dividido entre el número de puntos a representar, en tu caso 64.

Un saludo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Generador Funciones
« Respuesta #14 en: 12 de Enero de 2005, 06:58:00 »
Yo creo que no está expresado de una manera muy inteligible, pero que funcionaría, o al menos eso es lo que me parece. No obstante, creo que sería más fácil de interpretar si la rampa de bajada la escribes así:
 
for(i=31;i>0;i--){
   taula[63-i] = (8*i);  
}


 

anything