Pages: [1]   Go Down
 Author Topic: Help me to setup the PWM frequency to 10khz  (Read 509 times) 0 Members and 1 Guest are viewing this topic.
PT
Offline
Newbie
Karma: 0
Posts: 11
 « on: August 18, 2011, 11:18:25 am » Bigger Smaller Reset

I am working on a project of a converter for Photovoltaic modules and
I am using an Arduino Uno board to generate a PWM to controll a IGBT.
I need at least 10khz frequency pwm and using analogWrite i get 490 hz.

Can you help me configuring the timers to have a 10khz frequency???

here is the code:

/*
* 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);
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);
}

Thank you a lot!!!
 Logged

Portugal
Offline
God Member
Karma: 5
Posts: 962
 « Reply #1 on: August 18, 2011, 11:37:58 am » Bigger Smaller Reset

 Logged

PT
Offline
Newbie
Karma: 0
Posts: 11
 « Reply #2 on: August 18, 2011, 12:21:02 pm » Bigger Smaller Reset

thank you for the reply Senso!!
the text is long but i will read it all.

thanks
 Logged

Bristol, UK
Offline
Edison Member
Karma: 0
Posts: 1197
Exhibitor at UK Maker Faire
 « Reply #3 on: August 18, 2011, 12:25:44 pm » Bigger Smaller Reset

Code:
int D = 0.500; // duty-cycle
int dD = 0.001; // perturbation

This isn't going to work. An integer is a whole number, without a fractional or decimal part.  Maybe you meant:

Code:
float D = 0.500; // duty-cycle
float dD = 0.001; // perturbation

But, remember that 'float' variables and calculations are much slower than 'int's. Could you scale all your calculations to use integers, say in the range of 0..1023 or 0..255?
 Logged

Humboldt, CA
Offline
Full Member
Karma: 1
Posts: 220
Arduino BBB
 « Reply #4 on: August 18, 2011, 03:02:18 pm » Bigger Smaller Reset

Check this out, too:  http://www.arduino.cc/playground/Code/PwmFrequency
Tops out at 65kHz before you get deeper into the various timer registers.
 Logged

Global Moderator
UK
Offline
Brattain Member
Karma: 138
Posts: 19067
I don't think you connected the grounds, Dave.
 « Reply #5 on: August 18, 2011, 03:43:55 pm » Bigger Smaller Reset

Code:
int D = 0.500; // duty-cycle
int dD = 0.001; // perturbation
Think of your calculations like this:
Code:
int D = 0; // duty-cycle
int dD = 0; // perturbation
 Logged

Pete, it's a fool looks for logic in the chambers of the human heart.

PT
Offline
Newbie
Karma: 0
Posts: 11
 « Reply #6 on: August 19, 2011, 05:22:22 am » Bigger Smaller Reset

hello guys!!
Anachrocomputer, you are right. I shall use float numbers for dutycycle and perturbation.

AWOL, the perturbation must be greater than zero.

Thank you!!

 Logged

Global Moderator
UK
Offline
Brattain Member
Karma: 138
Posts: 19067
I don't think you connected the grounds, Dave.
 « Reply #7 on: August 19, 2011, 05:45:09 am » Bigger Smaller Reset

Quote
AWOL, the perturbation must be greater than zero.
So don't assign a sub-unity value to an integer - it will be truncated to zero.
 Logged

Pete, it's a fool looks for logic in the chambers of the human heart.

 Pages: [1]   Go Up