Go Down

Topic: Generador formas de onda mediantePWM con frecuencia y ciclo de trabajo variables (Read 927 times) previous topic - next topic

vitxu

Un saludo a todos!

Recientemente me he interesado en esta fantastica herramienta que es arduino, y he decidido orientar su aplicación hacia el area que más me gusta, el sonido. He querido empezar por algo sencillo como es el control de un trémolo, pero como siempre pasa y además las posibilidades de este aparatito son tantas, he decidido complicarme un poco más.

Basicamente de lo que se trata es de iluminar un led conectado a una salida PWM, este led enfrentado a una LDR, digamos que "abre o cierra el grifo" del input de nuestro instrumento musical, dejando pasar todo el sonido cuando esta apagado y nada cuando se enciende. Para ello quiero usar 3 potenciometros que controlen Frecuencia (de 2 a 30Hz), Ciclo de trabajo (10- 50%) y forma de onda(este sería más un selector entre cuadrada, senoidal, triangular y diente de sierra)  

En el caso de emplear una onda cuadrada el asunto es fácil tanto para controlar la frecuencia como el ciclo de trabajo porque sólo tenemos que decirle a nuestro arduino cuanto tiempo debe estar en high y cuanto en low y cuantas veces por segundo queremos que lo haga. Mi duda surge a la hora de manejar las demás formas de onda. Por ejemplo, ojeando programas de manejo de osciladores he podido observar que para producir una onda senoidal o triangular por PWM, con un bucle for, se "mapea" un array de 256 bits en el que sube de 126 a 256 (pico alto del seno) baja de 256 a 0 (pico bajo del seno) y vuelve al origen de 0 a 126. Manejando el tiempo de repeticion tendriamos la senoidal variable en frecuencia, pero el ciclo de trabajo sería siempre del 50%.

¿Cómo podría entonces variar el ciclo de trabajo? He pensado en hacer dos bucles for, uno que mapee el semiciclo "alto" y otro que haga lo propio con el "bajo", pero aún no me aclaro bien como debería configurar los timers.

Si alguien me puede orIentar para solventar esta duda, o tiene otra posible solución, no dude en responder.

Un saludo y gracias de antemano.    

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy