Ajuda precisa-se!!! CRIAR PWM de 10khz.

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

http://www.arduino.cc/playground/Main/TimerPWMCheatsheet

http://smacula.blogspot.com/2011/04/creating-variable-frequency-pwm-output.html

Olá.
Ainda nao usei PWM, mas pelo site de referencia parece ser simples como chamar apenas a funcao analogWrite(Pino, 0-255).

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.

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

coloca essa linha dentro do setup()

TCCR2B = TCCR2B & 0b11111000 | 0b11;

que vai te dar no pino 3 3900HZ

ou

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.

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

estou querendo converter um sinal PWM de 14khz para 60hz utilizando o arduino, alguem pode me ajudar?

sei que esse post é bem antigo, mas aqui tem uma dica de como vc pode estar alterando a frequência do pwm para 7 valores pre determinados pelo código sugerido pelo cara do vídeo.

boa sorte!