Go Down

Topic: Fully Rectified Sine Wave With PWM (Read 1 time)previous topic - next topic

QAMember

Apr 03, 2013, 03:41 pm
I need to create a sine wave function through the PWM pins where the sine wave is pointy at the crests and 2 times wide at the bottom. I'm guessing a function which emulates the full rectification of a sine wave would be the way to go. Here is some of the current code I am using:

void loop() {
float a = 128.0;
float b = 128.0;
float c = 28000.0;
float d = 2.0;
float e = 18.3;    //offset
{
int value = a + b * sin((millis()/c) * d * PI );
analogWrite(2,value);
}

semicolo

#1
Apr 03, 2013, 05:45 pm
If you want to rectify a sinus you have to use abs(sin...)
in your case -abs since you want to invert it.

semicolo

#2
Apr 03, 2013, 05:58 pm
With the help of my old ti85:

Code: [Select]
`  float a = 255.0;  float b = 255.0;  float c = 28000.0;  float d = 2.0;void loop() {{  int value = a - b * abs(sin(d*PI*millis()/c));  analogWrite(2,value);}`

You'll get a full intervall each 14s

GoForSmoke

#3
Apr 04, 2013, 01:39 am

I need to create a sine wave function through the PWM pins where the sine wave is pointy at the crests and 2 times wide at the bottom. I'm guessing a function which emulates the full rectification of a sine wave would be the way to go. Here is some of the current code I am using:

void loop() {
float a = 128.0;
float b = 128.0;
float c = 28000.0;
float d = 2.0;
float e = 18.3;    //offset
{
int value = a + b * sin((millis()/c) * d * PI );
analogWrite(2,value);
}

You could put a tiny capacitor across the pin and ground. That would slant leading and trailing edges.

PWM is about changing the duty cycle.
2) http://gammon.com.au/serial
3) http://gammon.com.au/interrupts

QAMember

#4
Apr 05, 2013, 08:24 pm
Semicolo, thank you, very much, for the code.

Go Up

Please enter a valid email to subscribe