Autor Tema: Generar señal PWM 56.5 Hz con duty cycle variable en Arduino uno  (Leído 1518 veces)

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

Desconectado Bukanan

  • PIC10
  • *
  • Mensajes: 1
Generar señal PWM 56.5 Hz con duty cycle variable en Arduino uno
« en: 16 de Septiembre de 2015, 12:54:00 »
Hola a todos, haber si me podeis ayudar por aqui. Necesito una señal PWM a una frecuencia de 56.5 Hz y un periodo de 17,7ms y con un duty cycle que va del 90% al 92%, es decir, va de 15.93 ms a 16,3ms aprox. La cuestion es que el duty cycle lo tiene que controlar una emisora RC que funciona a otra frecuencia exactamente 62,5 Hz y un periodo de 16ms con un duty cycle que va de 1ms a 2 ms. He escrito algo de codigo para generar la señal y mas o menos consigo ver la señal en el osciloscopio pero no consigo que varie el ciclo de trabajo. Os pego el codigo.

=================================================================


static const int pin_in = 2; // pin entrada emisora
static const int pinPWM = 9; // pin salida señal

unsigned long duty = 0;
int escalado = 0;
int iteraciones = 1922;  // con estas iteraciones tenemos T = 17.7ms y F = 56,5 Hz
int umbral = 0; //iteraciones / 11; // variando en +- 1 o 2 unidades el divisor se tendria la variacion del duty deseado
int cont = 0;                  // pero no consigo hacerlo de una forma dinamica
boolean estado = 0;



void setup() {

Serial.begin(9600);
pinMode(pin_in,INPUT);
pinMode(pinPWM, OUTPUT);

}
void loop(){
 
  duty = pulseIn(pin_in,HIGH);
  escalado = map(duty,1000,2000,10,13);
  umbral = iteraciones/escalado;
 
  if(cont > umbral)
  {
    estado = 1;   
  }
  else
  {
    estado = 0;
  }
    digitalWrite(pinPWM, estado);
    cont ++;
     
  if (cont > iteraciones)
  {
    cont = 0;
  }

====================================================================

Para calcular las iteraciones he generado una señal cuadrada al 50% escribiendo un valor alto y seguidamente una bajo en un pin para ver la frecuencia maxima de salida del pin. De ahi he cogido el tiempo en estado ON y he dividido el prediodo que quiero conseguir entre tiempo en estado ON de la onda cuadrada, es dedir, iteraciones= 17.7ms / T_ON.

En cuanto al codigo, es cencillo de entender, pero me gustaria buscar otra alternativa en los Timers si esto no me llega a funcionar bien.

Por otra parte, he estado leyendo por ahi que el Timer 1 de Arduino tambien se utiliza para generar señales de frecuencia y/o duty cycle variables pero no controlo los Timers, aunque parece que no es muy dificil, pero me lio.

Os agradeceria vuestra ayuda.

posdata: No se si he cometido algun error a la hora de publicar en el foro, si es asi, pido disculpas por adelantado.

Gracias.