Fully Rectified Sine Wave With PWM

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

rect.bmp (213 KB)

If you want to rectify a sinus you have to use abs(sin...) in your case -abs since you want to invert it.

With the help of my old ti85:

  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

QAMember:
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.

Semicolo, thank you, very much, for the code.