Bonjour,
Grâce à une raspberry je contrôle un servo pour faire tourner un réseau de diffraction. Je ne suis pas loin d'avoir un prototype fonctionnel et le servo me pose problème.
La première fois que j'ai testé l'application python pour le contrôle des ports GPIO du raspberry tout allait bien le moteur tournait sans faire de bruit parasite.
Cependant après avoir monté un autre circuit (pour une liaison I2C avec un ADC) et le moteur sur une breadboard le moteur semblait avoir du mal et faisait des bruits très mauvais sans parvenir à bouger. Rien n'avait changé niveau logiciel. Finalement j'arrive sous certaines conditions obscures à faire tourner le moteur mais le bruit était persistant et inquiétant, j'ai réussi à récupérer un fonctionnement plutôt normal lorsque j'utilisais l'alimentation 3.3V au lieu de 5V et je ne comprends pas la raison. J'ai decider d'utiliser une alimentation externe dédiée au moteur pour épargner la carte d'une charge trop importante. Il s'agit d'une petite alimentation de breadboard mais qui a toujours fait le travail pour de petits projets pour moi. J'ai connecté un oscilloscope a l'alimentation et effectivement il y a un phénomène que je ne serais pas expliqué. J'ai besoin d'aide pour savoir si c'est un phénomène normal ou s'il s'agit d'un défaut de montage.
Le montage est vraiment simple où j'ai branché l'alimentation du moteur à mon alim indépendante de la carte et le signal de contrôle PWM a ma sortie PWM du raspberry.
Le bout de code qui s'occupe du test du servo:
Si vous avez des indication sur le phénomène ou des solutions ou des références je suis preneur.Code:PWM_pin = 32 # GPIO 12 GPIO.setmode(GPIO.BOARD) #set pin numbering system GPIO.setup(PWM_pin,GPIO.OUT) PWM = GPIO.PWM(PWM_pin, 50) #50Hz ie 20ms de période PWM.start(0) data = [] nbr_acquisitions = 100 duty = lambda angle: np.clip((angle+90), -75, 75) * 5/90 + 2.5 long_onde = lambda angle : d/m*(np.sin(np.deg2rad(angle))-np.sin(np.deg2rad(beta-angle))) angles = np.linspace(-beta, 90-beta, nbr_acquisitions) for angle in angles : PWM.ChangeDutyCycle(duty(angle)) time.sleep(0.1) #stabilisation du moteur 0.1s a verifier data.append((long_onde(angle), convertisseur.read_value())) PWM.ChangeDutyCycle(0) return data
Servo utilisé :
parallax standard servo sku 900-00005
Raspberry 4
Merci d'avance pour vos commentaires.
-----