Autor Tema: generar señal seno con PIC y DAC  (Leído 13315 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
generar señal seno con PIC y DAC
« en: 27 de Octubre de 2011, 10:11:03 »
Hola, como dice el titulo estoy realizando una señal sinusoidal de frecuencia variable de 50 a 250 Hz entre un rango de 1Hz si es que lo puedo lograr y todo lo demás fijo. Esto lo estoy generando por un pic 18f y un DAC. Pero en este punto tengo una duda y es que frecuencia de muestreo me sirve ¿?, para generar lo mejor posible la sinusoidal ¿?. Sé que no me puedo escapar del teorema del señor Nyquist-Shannon (fsampling=2*fseñal).
Espero que me puedan responder esta pregunta.

Saludos

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: generar señal seno con PIC y DAC
« Respuesta #1 en: 27 de Octubre de 2011, 11:17:51 »
Y bueno, siguiendo el teorema de Nyquist necesitas por lo menos 2 muestras por periodo de la señal para reproducirla, aunque no es lo más adecuado. Eso tienes que evaluarlo tu, prueba si con 10 muestras por ciclo te sirve. A la salida podes colocarle un filtro pasa-bajos con Fc en 300Hz, y vas a tener una señal más suave.


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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #2 en: 29 de Octubre de 2011, 18:51:16 »
hola suky, perdon la tardanza  :lol: alfinal genere 100 puntos para la senoidal. pero ahora tengo el problemas que como genero mi entrada digital a partir del voltaje que tiene que generar el DAC para formar esta señal.
alguna idea ?

saludos

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: generar señal seno con PIC y DAC
« Respuesta #3 en: 29 de Octubre de 2011, 18:58:19 »
No entendí   :z)  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #4 en: 29 de Octubre de 2011, 19:28:05 »
 :mrgreen: todo de nuevo:

quiero generar una señal senoidal de 65 a 250 Hz con un PIC 18f y un ADC de 8. ahora mi idea es generar una tabla la cual tenga las convinaciones nesesaria digitales, para mandarle al DAC desde el PIC, para sí dar forma a la señal senoidal. en este punto mi tabla tiene 100 valores pero son el voltaje que tiene que entregar mi DAC, pero ahora yo nesesito mis entradas digitales para formar estos voltajes. mi pregunta es como puedo obtener mi entrada digital del DAC, si yo tengo los voltajes de salida de este, que es el o los voltajes que forman mi senoidal. me expreso mejor ??????

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: generar señal seno con PIC y DAC
« Respuesta #5 en: 29 de Octubre de 2011, 19:42:59 »
A! Fácil! Seguramente tu tienes una tabla con valores que van desde 0 V hasta 5 V, no es así? Bueno, si el DAC es de 8-bits, significa que le debes enviar 255 para que a la salida obtengas 5.0 V. Lo que queda es realizar una regla de tres y listo  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #6 en: 29 de Octubre de 2011, 19:51:52 »
cuack... jajaj oka no se me avia ocurrido

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #7 en: 29 de Octubre de 2011, 23:01:30 »
tengo otra duda...... :?

supongamos que quiero generar una señal senoidal de 100Hz, por lo cual el periodo de esta señal seria de 10ms. ahora para formar este periodo de la señal senoidal, el PIC tiene que entregarle al DAC 100 combinaciones para poder generar la senoidal. esto quiere desir que cada 100us tengo que enviar una combinacion desde el PIC al DAC, (claro si es que estoy bien ??)

ahora el problema que tengo es que supuestamente genere el codigo para esto pero no me da la frecuencia que quiero la de 100Hz, en que estare mal.... me pueden orientar por favor.

Código: [Seleccionar]
#include <18f4550.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock = 4000000)
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)


int8 desbordes=0;
BYTE CONST seno[100]={77,82,86,91,96,101,105,109,114,118,122,126,129,133,136,
139,142,144,146,148,150,151,152,153,153,154,153,153,152,151,150,148,146,144,142,
139,136,133,129,126,122,118,114,109,105,101,96,91,86,82,77,72,67,62,58,53,49,44,
40,36,32,28,24,21,18,15,12,9,7,5,4,2,1,1,0,0,1,1,2,4,5,7,9,12,15,18,21,24,28,32,36,
40,44,49,53,58,62,67,72,77};

#int_rtcc
void rtcc_isr(){
        output_B(seno[desbordes]);
        set_rtcc(231);
        desbordes++;
        if(desbordes>=100)
                        {
                          desbordes = 0;
                        }  
  }

void main()
  {
     set_tris_b(0x00);                    // Puerto B como salidas digitales
     setup_counters(rtcc_internal, rtcc_div_4 | rtcc_8_bit);         // Se configura con un predivisor de frecuencias 1:4
     enable_interrupts(int_rtcc);         // Se habilita interrupciòn por desborde Timer 0 y se activa la interrupciòn global    
     enable_interrupts(global);
     set_rtcc(240);
     desbordes = 0;

   while(true)
   {
  
   }
   }
« Última modificación: 30 de Octubre de 2011, 00:30:05 por japifer_22 »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: generar señal seno con PIC y DAC
« Respuesta #8 en: 30 de Octubre de 2011, 00:20:22 »
Si quieres tantos puntos, lo más adecuado es que lleves al microcontrolador a 48MHz, así tienes suficientes ciclos de reloj para trabajar entre interrupción e interrupción.

Con esas pruebas te darás cuenta si 100 puntos es necesario, o mejor disminuirlo  ;-)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #9 en: 30 de Octubre de 2011, 00:32:37 »
suky, lo he probado igual con menos puntos. pero el punto es que no se bin como generar la frecuencia del sampling  v/s la frecuencia de mi senoidal que es de 100Hz. me puedes orientar por favor.

saludos

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #10 en: 30 de Octubre de 2011, 16:15:10 »
hola bueno despues de una larga noche he investigando con esto, creo entender como generar esta señal y como cargar el TMR0, lo dejo para ver si me pueden recovorar lo que digo:

Para generar la frecuencia senoidal con un PIC y un DAC, de por ejemplo 100Hz, tenemos que ver cuantos escalones queremos para generar un periodo de ésta frecuencia, en mi caso voy a probar con 50 puntos o escalones. Donde esto quiere decir que el pic generara 50 combinaciones en el puerto B que saldrá a la entrada digital del DAC, para formar el periodo de la frecuencia que queremos (100Hz). Ahora tenemos que calcular cuánto se tiene que demorar el pic en generar estos 50 puntos para un periodo de la frecuencia a sacar de 100Hz.
El periodo de la frecuencia de 100Hz es:
Tfout=1/100 = 0.01seg  o 10ms.
Ahora tenemos que dividir este periodo en los escalones que generara el pic para un periodo, para así generar el periodo del sampling, o frecuencia de muestreo:
Tsampling= Tfout/escalones = 0.01/50= 0.0002 o 200us
Esos 200uS es cada cuanto debes entregar un solo dato al DAC.    200uS*50=10mS y este si es el periodo de tu señal
Los 200us son lo que se tiene que demorar el pic en entregarle al DAC las 50 combinaciones para formar un periodo de la frecuencia senoidal de salida del DAC.
Por lo cual la frecuencia del sampling queda expresada como:
Fsampling =1/Tsampling = 1/0.0002 = 5000Hz o 5KHz.
Una vez obtenida esta frecuencia tenemos que saber a cuanto tenemos que cargar el TMR0 para formar la frecuencia sampling.
Primero tenemos que saber cuál es la frecuencia interna del PIC, para un Cristal de 4MHz, la cual está dada por:
Fint= Fcristal / 4 = 4,000,000.0/4 = 1,000,000.0   o  1MHz
Ahora esta frecuencia fint la tenemos que dividir por el pre-escaler a utilizar, que en mi caso utilizare el pre-escaler=2
Fout pre-escaler= fint/ pre-escaler = 1,000,000.0/2 = 500,000.0  o  500KHz
Ahora esta frecuencia Fout pre-escaler la dividimos por la frecuencia del sampling y obtenemos a cuanto tenemos que cargar el TMR0, esto es:
TMR0= Fout pre-escaler/ Fsampling =500,000.0/5,000.0 = 100
Por ultimo 256-100= 156 por el cual está dentro del rango a cargar el TMR0, por el cual es el valor a cargar (156).
Bueno espero que me puedan corregir si es que en esto estoy mal, por favor.
Ahora tengo otra duda y es con respecto a por ejemplo tengo una frecuencia de 67Hz, el cual me da TMR0 = a 149.25, esto quiere decir que no voy a tener la frecuencia de salida perfecta, ahora ¿Cómo puedo compensar este delta de frecuencia, para obtener los 67.0Hz?

Espero que me puedan ayudar y recobrar lo que mencione aquí
« Última modificación: 30 de Octubre de 2011, 17:47:08 por japifer_22 »

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1696
Re: generar señal seno con PIC y DAC
« Respuesta #11 en: 30 de Octubre de 2011, 17:30:28 »
Citar
Los 200us son lo que se tiene que demorar el pic en entregarle al DAC las 50 combinaciones para formar un periodo de la frecuencia senoidal de salida del DAC.
  Decir esto es equivalente a decir que el periodo de tu señal es T=1/200uS.  y no es asi.     Esos 200uS es cada cuanto debes entregar un solo dato al DAC.    200uS*50=10mS y este si es el periodo de tu señal
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #12 en: 30 de Octubre de 2011, 17:43:13 »
 :mrgreen: see tienes razón......
modifico para que no se preste para confusiones entonces......
« Última modificación: 30 de Octubre de 2011, 17:49:49 por japifer_22 »

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1696
Re: generar señal seno con PIC y DAC
« Respuesta #13 en: 30 de Octubre de 2011, 17:51:17 »
no entré en calculos, pero usando este programa, si se puede hacer una interrupcion exactamente a 200uS

pd.  :D habia leido mal. la precarga que calculaste es correcta
« Última modificación: 30 de Octubre de 2011, 17:55:14 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: generar señal seno con PIC y DAC
« Respuesta #14 en: 30 de Octubre de 2011, 18:23:21 »
pero es raro, a pesar que me he desligado del simulador proteus, ahora lo tengo que usar devido a que en este momento no tengo las fuente de -Vcc para configurar el op-amp con el DAC, y en este me da otra frecuencia al cargar el TMR0 con el valor que digo.

proteus o yo ??