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