Raccordement : 



Pour le servomoteur Feetech FS5115M

  • 0 à 180 ° --> 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). Attention, les valeurs peuvent varier en fonction du servomoteur : 

Raspberry Pi Pico MicroPython servomoteur

Programme permettant de piloter un de piloter un servomoteur avec 2 boutons-poussoirs 


from machine import Pin, PWM
from time import *

pwm0 = PWM(Pin(16))   # creation d'un objet PWM sur GP16
pwm0.freq(50)         # période 20ms = fréquence 50Hz


bp_1 = Pin(18, Pin.IN)      # crée une broche d'entrée sur GP18
bp_2 = Pin(20, Pin.IN)      # crée une broche d'entrée sur GP20


duree_imp = 1500

def set_servo(duree_imp):
    rp_cyclique = (duree_imp / 20000) * 100                   # rapport cyclique de 0 à 100 %
    rp_cyclique_pico = int((rp_cyclique / 100 ) * 65535)      # rapport cyclique de 0 à 65536
    pwm0.duty_u16(rp_cyclique_pico)                           # écriture du rapport cyclique
    print('duree_imp = ',duree_imp, ' rp_cyclique = ', rp_cyclique, ' rp_cyclique_esp = ', rp_cyclique_pico)     

while True:
    if bp_1.value() == 1 and duree_imp>500 :
        duree_imp = duree_imp - 100
    
    if bp_2.value() == 1 and duree_imp<2500:
        duree_imp = duree_imp + 100

    set_servo(duree_imp)
    sleep_ms(500)




Raspberry Pi Pico MicroPython servomoteur

Programme permettant de piloter un servomoteur en position et en vitesse

La commande  s'effectue à l'aide de la fonction suivante :       

servo.deplacement ( Angle départ, Angle voulu, Temps déplacement )      avec : Angle départ en °, Angle voulu en °, Temps déplacement en ms



from machine import Pin, PWM
from time import *

pwm0 = PWM(Pin(16))   # création d'un objet PWM sur GP16
pwm0.freq(50)         # période 20ms = fréquence 50Hz


def rp_cy(angle):
    temps_haut = (2000/180) * angle + 500
    rp_cyclique = (temps_haut / 20000) * 100
    return int((rp_cyclique / 100) * 65535)

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)
        pwm0.duty_u16(rp_cy(angle_depart))                 # écriture du rapport cycliques
        sleep_ms(10)


while True:
    servo_deplacement(0, 180, 500)      # déplacement de la position 0° à la position 180° en 500ms
    sleep_ms(2000)
    servo_deplacement(180, 0, 500)      # déplacement de la position 180° à la position 0° en 500ms
    sleep_ms(1000)




















































































Créé avec HelpNDoc Personal Edition: Environnement de création d'aide complet