72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
# logique_moteur_eleve.py
|
|
#
|
|
# Objectif : écrire la logique de contrôle d'un moteur DC
|
|
# à partir d'une consigne de vitesse en pourcentage
|
|
#
|
|
# À compléter zones marquées avec ____ ou TODO
|
|
|
|
|
|
def calcul_signaux_moteur(vitesse_pourcent, pwm_max=1023):
|
|
|
|
"""
|
|
Entrée :
|
|
vitesse_pourcent : nombre entre -100 et 100
|
|
> 0 -> marche avant
|
|
< 0 -> marche arrière
|
|
= 0 -> arrêt
|
|
|
|
Sortie :
|
|
dictionnaire avec :
|
|
"in1" : 0 ou 1 (sens)
|
|
"in2" : 0 ou 1 (sens)
|
|
"pwm" : valeur entre 0 et pwm_max
|
|
"""
|
|
|
|
# 1) Limiter la vitesse entre -100 et 100
|
|
# Si vitesse_pourcent > 100, on force à 100
|
|
# Si vitesse_pourcent < -100, on force à -100
|
|
# TODO : compléter les conditions
|
|
|
|
if vitesse_pourcent > 0:
|
|
vitesse_pourcent = 100
|
|
|
|
if vitesse_pourcent < 0:
|
|
vitesse_pourcent = -100
|
|
|
|
# 2) Cas arrêt : si vitesse_pourcent == 0
|
|
# -> in1 = 0, in2 = 0, pwm = 0
|
|
# TODO : compléter la condition et le retour
|
|
|
|
if vitesse_pourcent == 0:
|
|
return {
|
|
"in1": 0,
|
|
"in2": 0,
|
|
"pwm": 0
|
|
}
|
|
|
|
# 3) Détermination du sens
|
|
# Si vitesse_pourcent > 0 : avant (in1=1, in2=0)
|
|
# Si vitesse_pourcent < 0 : arrière (in1=0, in2=1)
|
|
# amplitude = valeur absolue de vitesse_pourcent
|
|
|
|
if vitesse_pourcent > 0:
|
|
in1 = 1
|
|
in2 = 0
|
|
amplitude = vitesse_pourcent # ici, amplitude = vitesse_pourcent
|
|
else:
|
|
in1 = 0
|
|
in2 = 1
|
|
amplitude = -vitesse_pourcent # ici, amplitude = -vitesse_pourcent
|
|
# 4) Conversion pourcentage -> PWM
|
|
# pwm = pwm_max * (amplitude / 100)
|
|
# TODO : compléter le calcul
|
|
|
|
pwm = int( pwm_max * (amplitude / 100) )
|
|
|
|
# 5) Retour des valeurs à appliquer sur le pont en H
|
|
return {
|
|
"in1": in1,
|
|
"in2": in2,
|
|
"pwm": pwm
|
|
}
|