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://arduino.cc/en/Tutorial/SecretsOfArduinoPWM
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). 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.

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.

https://www.youtube.com/watch?v=FdgI4FxxRtI

boa sorte!