Pages: [1]   Go Down
Author Topic: Ajuda precisa-se!!! CRIAR PWM de 10khz.  (Read 2051 times)
0 Members and 2 Guests are viewing this topic.
PT
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!!
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 124
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.arduino.cc/playground/Main/TimerPWMCheatsheet
http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM
http://smacula.blogspot.com/2011/04/creating-variable-frequency-pwm-output.html
Logged

Ribeirao Preto - Brazil
Offline Offline
Full Member
***
Karma: 0
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Precisa de produtos para seu Arduino?
Não deixe de ver meus produtos no Mercado Livre!
http://lista.mercadolivre.com.br/_CustId_76934379

PT
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 124
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

ou


Code:
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.
Logged

PT
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: