Onda Senoidal o Sinusoidal Con Arduino UNO

Generar onda aproximadamente Senoidal con Arduino En el trabajo 108 habíamos hecho un generador de onda senoidal con un

Views 266 Downloads 2 File size 203KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Generar onda aproximadamente Senoidal con Arduino En el trabajo 108 habíamos hecho un generador de onda senoidal con un PIC. Aquí lo repetimos con un Arduino UNO. En este trabajo se genera una onda fija, de 50 KHz. Se varía la frecuencia con el valor de delay. Si el retardo es cero, la frecuencia es de 250 KHz. La generación se basa en el principio mostrado en la imagen siguiente, que fue tomado de una página de Internet, no así todo el desarrollo, que es propio.

Son 4 resistencias en paralelo, que forman un divisor de tensión, con la quinta, de 1K. Esta disposición permite 16 combinaciones de valores 1 o 0 de las salidas del PIC.

Cada una de esas combinaciones da un valor de tensión que se usa para general una onda parecida a una onda senoidal. 1

Esta es la onda generada:

Se ven los escalones producidos. En los máximos y mínimos se repiten varias veces los valores para poder producir el achatamiento. En la salida se pone un condensador a tierra para que suavice la curva.

Esta es la curva generada y suavizada por el condensador a tierra. Como pueden apreciar, toda la curva está por arriba del cero, porque el PIC solo genera tensiones positivas. Para corregir esto, alimentamos la salida con una tensión negativa, que la lleva a una onda con parte positiva y parte negativa. El trimmer permite ajustarlo, como se ve en la imagen siguiente, obtenida variándolo.

La de la izquierda es la onda simétrica. 2

Esquema

Firmware No se debe armar con ciclo for porque se introducen retardos que modifican la curva. // R 9.4K al 4 // R 4.7K al 5 // R 2.2K al 6 // R 1 k al 7 // Tierra a Gnd int T = 600;

// Valor del delay para ajustar la frecuencia a 50 Hz aprox.

void setup() { //

76543210

DDRD = DDRD | B11110000; // Setea el puerto completo con uso del Serial 1 = OUTPUT / 0 = INPUT } void loop() { PORTD= 128;

// 9

delayMicroseconds(T); PORTD= 144;

// 10

delayMicroseconds(T); PORTD= 160;

// 11

delayMicroseconds(T); PORTD= 176;

// 12

delayMicroseconds(T); PORTD= 192;

// 13 3

delayMicroseconds(T); PORTD= 208;

// 14

delayMicroseconds(T); PORTD= 224;

// 15

delayMicroseconds(T); PORTD= 240;

// 16

delayMicroseconds(T); PORTD= 224;

// 15

delayMicroseconds(T); PORTD= 208;

// 14

delayMicroseconds(T); PORTD= 192;

// 13

delayMicroseconds(T); PORTD= 176;

// 12

delayMicroseconds(T); PORTD= 160;

// 11

delayMicroseconds(T); PORTD= 144;

// 10

delayMicroseconds(T); PORTD= 128;

// 9

delayMicroseconds(T); PORTD= 112;

// 8

delayMicroseconds(T); PORTD= 96;

// 7

delayMicroseconds(T); PORTD= 80;

// 6

delayMicroseconds(T); PORTD= 64;

// 5

delayMicroseconds(T); PORTD= 42;

// 4

delayMicroseconds(T); PORTD= 32;

// 3

delayMicroseconds(T); PORTD= 16;

// 2

delayMicroseconds(T); PORTD= 0;

// 1

delayMicroseconds(T); PORTD= 16;

// 2 4

delayMicroseconds(T); PORTD= 32;

// 3

delayMicroseconds(T); PORTD= 42;

// 4

delayMicroseconds(T); PORTD= 64;

// 5

delayMicroseconds(T); PORTD= 80;

// 6

delayMicroseconds(T); PORTD= 96;

// 7

delayMicroseconds(T); PORTD= 112;

// 8

delayMicroseconds(T); } // FIN del void loop()

5