Go Down

Topic: Ajuda precisa-se!!! CRIAR PWM de 10khz. (Read 2860 times) previous topic - next topic

zenilton

Eu estou a trabalhar num projeto de um conversor para os módulos fotovoltaicos e
Eu estou usando uma placa Arduino Uno para gerar um PWM para controlar um IGBT.
Eu preciso de pelo menos freqüência 10kHz PWM e usando analogWrite eu recebo 490hz

Ajudem-me a configurar os timers para ter uma freqüência de 10kHz.

aqui está o codigo:

/*
* Two Stage Single Phase Inverter control
*
* JN. Barbosa - MERCEUS - DEE - FCT-UNL
*/

int Vpv0 = 0; // inicials conditions
int Ipv0 = 0;
int P0 = 0; 
int Vpv1 = 0;
int Ipv1 = 0;
int P1 = 0;
int D = 0.500; // duty-cycle
int dD = 0.001; // perturbation

void setup()
{
   pinMode(3, OUTPUT);  // sets the pin as output
}

void loop()
{
   Vpv0 = analogRead(A1); // read the pv voltage
   Ipv0 = analogRead(A2); // read the pv current
   P0 = Vpv0*Ipv0;                // calculate instant power

  delay(1);
  Vpv1 = analogRead(A1);
  Ipv1 = analogRead(A2);
  P1 = Vpv1*Ipv1;

  int dV = Vpv1-Vpv0;
  int dP = P1-P0;
 
if (dP > 0){
   if (dV > 0){
     D = D+dD;
   }else{
     D = D-dD;
   }
}else {
   if (dV > 0){
     D = D-dD;
   }else{
     D = D+dD;
   }
}

analogWrite(pwmPin,D*255);
}

 
OBRIGADO!!!


ViniciusPolo

Olá.
Ainda nao usei PWM, mas pelo site de referencia parece ser simples como chamar apenas a funcao analogWrite(Pino, 0-255).
http://www.arduino.cc/en/Tutorial/PWM
Acho que o problema está nessa sua variavel D multiplicando o 255.
Cheque o valor dela. Tente tambem colocar um valor manualmente pequeno para conseguir uma frequencia alta.
Pois me parece que a funcao é inversamente proporcional, quanto menor o valor passado como parametro maior a frequencia.
E o amigo em cima colocou otimos sites de referencia um até com a frequencia que vc precisa de ICR1 = 100 gives f = 10kHz. Ultimo site de referencia.
Espero ter ajudado.
Precisa de produtos para seu Arduino?
Não deixe de ver meus produtos no Mercado Livre!
http://lista.mercadolivre.com.br/_CustId_76934379

zenilton

Obrigado pela resposta pessoal.

ViniciusPolo, o problema de analogWrite(n,d) em que o n é o numero correspondente ao pino e d é o dutycycle, gera pwm a uma frequencia fixa de 490 hz. Para ter frequencias maiores é preciso mexer nos setups dos timers internos. E isto ainda não domino mas chegarei lá.

obrigado mais uma vez pessoal!!

fabio_h

coloca essa linha dentro do setup()
Code: [Select]
TCCR2B = TCCR2B & 0b11111000 | 0b11;
que vai te dar no pino 3   3900HZ

ou


Code: [Select]
TCCR2B = TCCR2B & 0b11111000 | 0b1;
que vai te dar no pino 3   31250HZ

no loop calculando por alto de dar de 2 a 3 ms cada interação, > de 500 a 333 HZ, o primeiro codigo lá em cima deve ser suficiente,
pois quanto maior a frequencia, maior atenção deve se ter em relação ao acionamento do mosfet/carga.

zenilton

obrigado fabio!!
não sei se 3900hz vai chegar mas 31000hz tambem é muito visto que o meu dispositivo recomenda 20khz.
abrigado!! :smiley-mr-green:

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