MoteurSynchrone : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Les MLI)
Ligne 7 : Ligne 7 :
  
 
== Les MLI ==
 
== Les MLI ==
<br>
+
<br> Nous avons commencé le projet avec une carte demo, ce que nous a permis de faire de testes sur le moteur, pendant la réalisation de notre carte.  
Nous avons commencé le projet avec une carte demo, ce que nous a permis de faire de testes sur le moteur, pendant la réalisation de notre carte.  
 
 
<br/>
 
<br/>
 
<br>Pour la génération des MLI, d'abord nous avons commencé par une étude  [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf de la datasheet du microcontrôleur ATMEGA32u4].
 
<br>Pour la génération des MLI, d'abord nous avons commencé par une étude  [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf de la datasheet du microcontrôleur ATMEGA32u4].
La carte Arduino Leonardo, propose un timer (le Timer 4) avec une fréquence d'horloge de l'ordre de 64MHz, 3 sorties PWM avec ses complémentaires et un mode de génération de signaux appelé PWM6 permettant de contrôler un moteur brushless. Nous avons donc utilisé ce timer pour générer 6 MLI avec une fréquence autour de 8kHz.   
+
La carte Arduino Leonardo, propose un timer (le Timer 4) avec une fréquence d'horloge de l'ordre de 64MHz, 3 sorties PWM avec ses complémentaires et un mode de génération de signaux appelé PWM6 permettant de contrôler un moteur brushless. Nous avons donc utilisé ce timer pour générer 6 [https://fr.wikipedia.org/wiki/Modulation_de_largeur_d%27impulsion  MLI]avec une fréquence autour de 8kHz.<br/>
 
+
 
  <br/>
+
<br> Aprés avoir étudié la datasheet, nous avons réussi à générer les signaux de tests : <br/>
 +
 
 +
{{boîte déroulante début | Code MLI}}
 +
<source lag=c>
 +
int main()
 +
{
 +
   //broches 6 et 7
 +
 +
 
 +
  DDRC|=((1<<PC7)|(1<<PC6));//OCRA et oposé 13 et 5
 +
  DDRD|=((1<<PD6)|(1<<PD7));//OCRD et oposé 5 et 12
 +
  DDRB|=(1<<PB5)|(1<<PB6); // OCRB et oposé 9 et 10
 +
 
 +
 
 +
//Choix du mode pwm
 +
TCCR4A|=(1<<PWM4A)|(1<<PWM4B);
 +
TCCR4C|=(1<<PW4D);
 +
 
 +
//Choix du prescaler division par 1024
 +
TCCR4B|=(1<<CS41)|(1<<CS40);
 +
 
 +
///Connection de complementarité entre les broches
 +
TCCR4A|=(1<<COM4A0)|(1<<COM4B0);
 +
TCCR4C|=(1<<COM4D0);
 +
 
 +
//VALEUR MAXIMALE DU COMPTEUR
 +
OCR4C=255;
 +
 
 +
//Temps mort
 +
DT4 |=1<<DT4L1;
 +
 
 +
while(1)
 +
{
 +
OCR4A++;
 +
OCR4B++;
 +
OCR4D++;
 +
_delay_ms(20);
 +
}
 +
 
 +
}
 +
 
 +
</source>
 +
{{boîte déroulante fin}}

Version du 10 avril 2021 à 00:16

Description du projet

Les MLI


Nous avons commencé le projet avec une carte demo, ce que nous a permis de faire de testes sur le moteur, pendant la réalisation de notre carte.

Pour la génération des MLI, d'abord nous avons commencé par une étude de la datasheet du microcontrôleur ATMEGA32u4. La carte Arduino Leonardo, propose un timer (le Timer 4) avec une fréquence d'horloge de l'ordre de 64MHz, 3 sorties PWM avec ses complémentaires et un mode de génération de signaux appelé PWM6 permettant de contrôler un moteur brushless. Nous avons donc utilisé ce timer pour générer 6 MLIavec une fréquence autour de 8kHz.


Aprés avoir étudié la datasheet, nous avons réussi à générer les signaux de tests :

Code MLI

int main()
{
  //broches 6 et 7
 

  DDRC|=((1<<PC7)|(1<<PC6));//OCRA et oposé 13 et 5
  DDRD|=((1<<PD6)|(1<<PD7));//OCRD et oposé 5 et 12
  DDRB|=(1<<PB5)|(1<<PB6); //  OCRB et oposé 9 et 10


//Choix du mode pwm
TCCR4A|=(1<<PWM4A)|(1<<PWM4B);
TCCR4C|=(1<<PW4D);

//Choix du prescaler division par 1024
TCCR4B|=(1<<CS41)|(1<<CS40);

///Connection de complementarité entre les broches
TCCR4A|=(1<<COM4A0)|(1<<COM4B0);
TCCR4C|=(1<<COM4D0);

//VALEUR MAXIMALE DU COMPTEUR
OCR4C=255;

//Temps mort 
DT4 |=1<<DT4L1;

while(1)
{
	OCR4A++;
	OCR4B++;
	OCR4D++;
_delay_ms(20);
}

}