|
Raccordement :
Pour le servomoteur Feetech FS5115M
- 0 à 180 ° --> Période 20 ms et temps à l'état haut de 500 us à 2500 us
- 4,8 à 6V
- Datasheet
|
Pilotage : il faut générer un signal MLI (Modulation de Largeur d'Implusion, PWM Pulse Width Modulation en anglais) de période 20ms (= 50Hz).
Les valeurs peuvent varier en fonction du servomoteur. Exmple :
|
|
Programme permettant de piloter un servomoteur en position
Programme permettant de piloter un servomoteur en position et vitesse
Programme permettant de piloter un de piloter un servomoteur avec 2 boutons-poussoirs
Programme permettant de piloter un servomoteur à partir d'un potentiomètre
Programme permettant de piloter un servomoteur en position
|
La commande s'effectue à l'aide de l'instruction suivante : servo( Angle voulu) avec Angle voulu en ° (exemple : 0 à 180°)
from microbit import *
def servo(angle): pin2.set_analog_period(20) # MLI période 20 ms temps_haut = (2000/180) * angle + 500 # temps état haut en us, coefs en fonction du servomoteur utilisé rp_cyclique = int((temps_haut / 20000) * 1023) # rapport cyclique de 0 à 1023 pin2.write_analog(rp_cyclique) while True: servo(0) sleep(2000) servo(180) sleep(2000)
|
Programme permettant de piloter un servomoteur en position et vitesse
|
La commande s'effectue à l'aide de l'instruction suivante : servo_deplacement( Angle départ, Angle voulu, Temps déplacement ) avec :
Angle départ
en °
exemple 0 à 180°
|
Angle voulu
en °
exemple : 0 à 180°
|
Temps déplacement
en ms
|
# pour servomoteur Feetech FS5115M from microbit import * angle = 90
def rp_cy(angle): temps_haut = (2000/180) * angle + 500 rp_cyclique = (temps_haut / 20000) * 100 return int((rp_cyclique / 100) * 1023)
def servo_deplacement(angle_depart, angle_voulu, temps_deplacement_ms): delta = angle_voulu - angle_depart nb_iteration = int(temps_deplacement_ms / 10) print('delta=', delta, ' nb_iteration=', nb_iteration)
for i in range(nb_iteration): angle_depart = angle_depart + (delta / nb_iteration) print('angle=', angle_depart, ' i=', i)
pin1.set_analog_period_microseconds(20000) # MLI période 20ms pin1.write_analog(rp_cy(angle_depart)) sleep(10)
while True: servo_deplacement(0, 180, 500) # Déplacement de la position 0° à la position 180° en 500ms sleep(2000) servo_deplacement(180, 0, 500) sleep(1000)
|
Programme permettant de piloter un servomoteur avec BPA et BPB
|
#pour servomoteur Feetech FS5115M ou autre from microbit import * impulsion = 1500
def set_servo(impulsion): alpha = (impulsion / 20000) * 100 # rapport cyclique de 0 à 100 % duty = (alpha / 100 ) * 1023 # rapport cyclique de 0 à 1023
pin1.set_analog_period_microseconds(20000) # MLI période 20ms pin1.write_analog(duty) # écriture sur la broche P1 du rapport cyclique (MLI) print('impulsion=',impulsion, ' alpha=', alpha, ' duty=', duty) # affichage sur la console REPL
while True: if button_a.was_pressed() and impulsion>500 : impulsion = impulsion - 100 display.show('-', delay=90, clear=True)
if button_b.was_pressed() and impulsion<2500: impulsion = impulsion + 100 display.show('+', delay=90, clear=True)
set_servo(impulsion) sleep(500)
|
Programme permettant de piloter un servomoteur à partir d'un potentiomètre
|
Pour piloter un servomoteur, il faut générer une impulsion comprise entre 0.2 et 2.3 ms (par exemple) avec une période de 20ms.
- pour 0.2 ms le rapport cyclique est de 0.2 / 20 = 0.01 (1%) soit write.analog( ) 0.01 x 1023 = 10
- pour 2.16 ms le rapport cyclique est de 2.3 / 20 = 0.115 (11.5%) soit write.analog( ) 0.115 x 1023 = 118
from microbit import *
def servo(angle): rapport_cyclique = ((118-10)/180) * angle + 10 # calcul du rapport cyclique entre 0 et 1023 (0-100%) pin1.set_analog_period(20) # MLI avec période de 20ms pin1.write_analog(rapport_cyclique) # écriture du rapport cyclique sur la broche P1
while True: pot = pin0.read_analog() angle = pot /1023 * 180 print ('angle = ',angle , 'deg') servo(angle) # appel de la fonction angle sleep(500)
|
Créé avec HelpNDoc Personal Edition: Environnement de création d'aide complet