Cours:TPS 2103 tp miniqv2
Révision datée du 16 mai 2016 à 10:58 par Bjacquot (discussion | contributions)
moteur !
Cette partie ayant été étudiée en TD, on partira du code suivant :
#include <avr/io.h>
#include <util/delay.h>
// prototype des fonctions
void initMoteur();
inline void setVitesse (int8_t, int8_t) __attribute__((always_inline));
inline void setMoteurG (int8_t) __attribute__((always_inline));
inline void setMoteurD (int8_t) __attribute__((always_inline));
#define topPWM 100 // la vitesse des moteurs varie de -topPWM à topPWM
int main()
{
initMoteur();
while(1)
{
}
}
void initMoteur()
{
DDRD |= (1<<PD7) | (1<<PD6);
DDRE |= 1<<PE6;
DDRC |= 1<<PC6;
TCCR4B |= (1<<PWM4X) // inverse les sortie OCRxA et OCRxA/
|(1<<CS42)|(1<<CS41)|1<<CS40; // prédiviseur
TCCR4A |= (1<<PWM4A) | (1<<COM4A0); // PWM sur COM4A/
TCCR4C |= (1<<PWM4D) | (1<<COM4D0) | (1<<COM4D1); // PWM sur COM4D
TC4H=0;
OCR4C=topPWM; // valeur max PWM -> fmli = fq / (topPWM * prediv )
}
void setVitesse(int8_t vG, int8_t vD)
{
setMoteurD(vD);
setMoteurG(vG);
}
void setMoteurG(int8_t vit)
{
if (vit<0)
{
vit = -vit;
PORTD |= (1<<PD6);
}
else PORTD &=~ (1<<PD6);
if (vit>topPWM) vit=topPWM;
OCR4A = vit;
}
void setMoteurD(int8_t vit)
{
if (vit<0)
{
vit = -vit;
PORTE |= (1<<PE6);
}
else PORTE &=~ (1<<PE6);
if (vit>topPWM) vit=topPWM;
OCR4D = vit;
}
Utiliser ces fonctions pour que la trajectoire du robot soit un cercle