Servomoteurs

Ce que l'on va faire ici

Ici, nous allons voir comment contrôler servomoteur en Micropython.

Solution 1 : Générer une onde de contrôle de Servomoteur en PWM

On peut générer l'impulsion utile pour contrôler un servomoteur à l'aide de la PWM en utilisant une fréquence de 50Hz et en jouant sur la largeur d'impuslion.

from machine import Pin, ADC, PWM, Timer 

pwm=PWM(Pin(16)) # crée un objet PWM sur la broche 25 (Led onboard)
pwm.freq(50) # fixe la fréquence de l'onde PWM pour servomoteurs - 50 Hz

#sensor=ADC(0) # la broche analogique ADC0

timerPwm=Timer() # objet Timer pour appeler la boucle variation PWM

# fonction pour changement d'échelle
def rescale(valeur, in_min, in_max, out_min, out_max):
    return (valeur - in_min) * (out_max - out_min) / (in_max - in_min) + out_min


def loopPwm(timerPwm): # fonction de variation de la PWM

        angle=rescale(90, 0,180, 1638,8192) # calcule duty en fonction angle en degrés
        pwm.duty_u16(int(angle)) # fixe largeur cycle HAUT PWM en 16 bits (max=65535)
        # la mesure est aussi en 16 bits

timerPwm.init(freq=200, callback=loopPwm) # forme minimale - par frequence

# Todo

# à 50 hz = 20ms de période = impulsion servomoteurs : le pulse 100% est à 65536, 50% à 32767
# 20ms = 20000µs du coup, le pulse 500µs est à 1638 de duty cycle(0°) est à , le pulse de 2500 µs(180°) est à 8192
# d'une manière générale : le pulse servo pour duree_µs est 65536*duree_µs/20000

Solution 2 (plus complète) : Utiliser la classe servo ?

Liens utiles :