#include <math.h>
#define N 360 /* Nombre de points dans les tables des sinusoïdes */
#define pi 3.1415926535897932384626433832795
// Table pour stocker les valeurs des 3 sinusoïdes
uint8_t sinTable_1[N]; //phase 1
uint8_t sinTable_2[N]; //phase 2
uint8_t sinTable_3[N]; //phase 3
// Indice pour la table des sinusoïdes
uint8_t i = 0;
void setup() {
// Initialisation du port série pour le débogage
Serial.begin(9600);
// Génération des tables des sinusoïdes en format 8 bits
for (uint16_t i = 0; i < N; i++)
{
sinTable_1[i] = (uint32_t)(127*(1+sin((0.050*(i+0)*180/pi)/ N))); // [-1,1] => [0,255] - déphasage 0°
sinTable_2[i] = (uint32_t)(127*(1+sin((0.050*(i+120)*180/pi)/ N))); // [-1,1] => [0,255] - déphasage 120°
sinTable_3[i] = (uint32_t)(127*(1+sin((0.050*(i+240)*180/pi)/ N))); // [-1,1] => [0,255] - déphasage 240°
// Initialisation des broches PWM (exemple pour une broche 9 sur Arduino UNO)
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
}
void loop()
{
// Sortie de la valeur de la sinusoïde sur la broche PWM
analogWrite(11, sinTable_1[i]);
analogWrite(10, sinTable_2[i]);
analogWrite(9, sinTable_3[i]);
// Affichage de la valeur pour le débogage
Serial.print(sinTable_1[i]);
Serial.print("\t");
Serial.print(sinTable_2[i]);
Serial.print("\t");
Serial.print(sinTable_3[i]);
Serial.println();
// Incrémentation de l'indice et retour à 0 si nécessaire
i = (i + 1)% N ;
// Délai pour ajuster la fréquence de sortie de la sinusoïde
delayMicroseconds(100); // Ajustez le délai pour changer la fréquence de la sinusoïde
}