Go Down

Topic: Ajuda precisa-se!!! CRIAR PWM de 10khz. (Read 2680 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