Découvrez notre nouvelle Chaîne YouTube "Ingénierie & Bourse"

Objectifs de la vidéo

  • Analyses des performances d’un signal sPWM avec Arduino
  • Savoir mesurer la fréquence réelle d’un onduleur en utilisant le signal sPWM
  • Savoir les limitations du code Arduino
  • Savoir paramétrer un signal sPWM avec Arduino
  • Analyse des d’un signal sPWM avec le port série
  • Comprendre la  le principe du signal sPWM : PWM de type sinusoïdal
  • Connaitre les paramètres d’un signal SPWM

Voir la vidéo pour plus de détails

Le Programme Arduino

#define   R_PWM       5       // Commande 1 pont H 
#define   L_PWM       6       // Commande 2 pont H 

#define   TestFreq    7       // Mesure de la fréquence 

#define   TimerBit    7       // Amplitude du  signal sinusoïdal 2^8 
#define   N           256     // Nombre d’échantillons du tableau) 512=2^9    
#define   TimerStep   16       // Pas d'incrémentation du Timer 
#define   T0_us       100     // Période d'incrémentation du Timer 
                              // Période globale T=2*N*T0_us => F=1/F: Fréquence Onduleur




unsigned long   MedSine[N];
unsigned long   TimerSPWM=0;
unsigned long   i_sin=0;
bool            sPWM_l=false;
bool            sPWM_r=true;
bool            sinePolar=false; 
double          sine_val=0; 

void setup() 
{
  // Init sortie 
  pinMode(R_PWM, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(TestFreq, OUTPUT);

  

  // Génération du signal sinusoïdal: 1/2 Période (2*N échantillons/période)
  for (unsigned int i=0; i<N; i++)
  {
    sine_val=(double)((2<<TimerBit)-1)*sin(PI*(double)i/(double)N); 
    MedSine[i]=(unsigned int)round((sine_val));   
  }
  

  // Port série affichage des signaux (sPWM + Sine )
  Serial.begin(9600); 
}

void loop() 
{
  // Prévisualisation des signaux de l'onduleur + sin(t) 
  /* 
  Serial.print(MedSine[i_sin]); Serial.print(","); 
  Serial.print(((2<<TimerBit)-1)*sPWM_l); Serial.print(","); 
  Serial.println(((2<<TimerBit)-1)*sPWM_r);
  */
    
  // Incrémentation du Timer: Compteur rapide (signal triangulaire)
  TimerSPWM+=TimerStep; 
  TimerSPWM%=N-1;

  // Incrémentation du Timer du signal: Compteur long (signal sinusoïdal) 
  i_sin+=1; 
  i_sin%=N-1;

  // Changement d'état 
  if(!i_sin) sinePolar=!sinePolar; 
  
  // Géneration des signaux PWM 
  if(sinePolar)
  {
    sPWM_l =MedSine[i_sin] > TimerSPWM; 
    sPWM_r =false;
  }
  else
  {
    sPWM_l = false; 
    sPWM_r =MedSine[i_sin] > TimerSPWM; 
  }

  // Affectation des sorties PWM 
  digitalWrite(R_PWM,sPWM_r); 
  digitalWrite(L_PWM,sPWM_l); 

  // Mise à jour signal du test 
  digitalWrite(TestFreq,sinePolar); 
   
}

Tout les projets Arduino


0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Anti-Robot *

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.