Carte Stepper Motor HAT Servo+Moteur
Posté : dim. 2 oct. 2016 00:51
Bonsoir à tous,
Je suis en train de réaliser un projet à base de raspberry pi 3 et d’une carte Stepper Motor HAT, qui permet d’ajouter jusqu’à 4 moteurs à courant continu ou 2 moteurs pas à pas et 4 servo.
Pour faire fonctionner ce petit monde j’utilise Domoticz. Un logiciel de domotique qui gère l’activation des scripts python selon l’état des capteurs et ça marche très bien.
MAIS, j’ai un problème pour faire fonctionner mon moteur CC et les servos en même temps.
Je m’explique :
Je lance le script python pour faire fonctionner le moteur, il se met en route normalement, mais dès que je lance le script des servos, le moteur s’arrête.
Et inversement, je lance les scripts des servos sans problème, et dès que je lance celui du moteur, les servos s’agitent dans tous les sens et tremble. Je suis obligé de redémarrer le RPI pour arrêter les tremblements.
J’ai remarqué que les deux scripts avaient la même adresse I2C (6f). Après avoir fait un i2cdetect, j’ai vu qu’il y avait 2 adresses I2C de disponible :
- 6f
- 70
J’ai donc mis une adresse pour les scripts moteur (6f) et l’autre pour les servos (70).
Mais ça ne fonctionne toujours pas ensemble, à la différence prés que je ne suis pas obligé de redémarrer le RPI quand les servos commence à trembler. Je relance le script des servos et ils exécutent la commande.
Cette carte est sensé pouvoir faire fonctionner les moteurs et les servos en même temps, elle a était conçu pour des projets de robotique. Je ne sais pas si j’ai loupé quelque chose, mais votre aide me serait d’un grand secours.
Si vous avez besoin de plus de précision n’hésitez pas.
Je met le pdf du descriptif de la carte ainsi que les scripts python à votre disposition.
En vous remerciant par avance et espérant trouver une solution à mon problème.
Bonne soirée.
Descriptif Carte Stepper Motor HAT
http://vctec.co.kr/web/product/BAE/img/397653.pdf
Scipt python servo
#!/usr/bin/python
from Raspi_PWM_Servo_Driver import PWM
import time
# ===========================================================================
# Example Code
# ===========================================================================
# Initialise the PWM device using the default address
# bmp = PWM(0x40, debug=True)
pwm = PWM(0x70)
# change l'amplitude Min Max
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
if (True):
# Change speed of continuous servo on channel 0 & 1
# pwm.setPWM(1, 0, servoMin)
# pwm.setPWM(0, 0, servoMin)
# time.sleep(1)
pwm.setPWM(1, 0, servoMax)
time.sleep(1.5)
pwm.setPWM(0, 0, servoMax)
Script python moteur
#!/usr/bin/python
from Raspi_MotorHAT import Raspi_MotorHAT, Raspi_DCMotor
import time
# create a default object, no changes to I2C address or frequency
mh = Raspi_MotorHAT(addr=0x6f)
################################# DC motor test!
myMotor = mh.getMotor(3)
#Initialise le moteur en marche avant
myMotor.run(Raspi_MotorHAT.FORWARD);
#Demarre le moteur a la vitesse 70 a 255
if (True):
for i in range(70,255):
myMotor.setSpeed(i)
time.sleep(0.02)
Je suis en train de réaliser un projet à base de raspberry pi 3 et d’une carte Stepper Motor HAT, qui permet d’ajouter jusqu’à 4 moteurs à courant continu ou 2 moteurs pas à pas et 4 servo.
Pour faire fonctionner ce petit monde j’utilise Domoticz. Un logiciel de domotique qui gère l’activation des scripts python selon l’état des capteurs et ça marche très bien.
MAIS, j’ai un problème pour faire fonctionner mon moteur CC et les servos en même temps.
Je m’explique :
Je lance le script python pour faire fonctionner le moteur, il se met en route normalement, mais dès que je lance le script des servos, le moteur s’arrête.
Et inversement, je lance les scripts des servos sans problème, et dès que je lance celui du moteur, les servos s’agitent dans tous les sens et tremble. Je suis obligé de redémarrer le RPI pour arrêter les tremblements.
J’ai remarqué que les deux scripts avaient la même adresse I2C (6f). Après avoir fait un i2cdetect, j’ai vu qu’il y avait 2 adresses I2C de disponible :
- 6f
- 70
J’ai donc mis une adresse pour les scripts moteur (6f) et l’autre pour les servos (70).
Mais ça ne fonctionne toujours pas ensemble, à la différence prés que je ne suis pas obligé de redémarrer le RPI quand les servos commence à trembler. Je relance le script des servos et ils exécutent la commande.
Cette carte est sensé pouvoir faire fonctionner les moteurs et les servos en même temps, elle a était conçu pour des projets de robotique. Je ne sais pas si j’ai loupé quelque chose, mais votre aide me serait d’un grand secours.
Si vous avez besoin de plus de précision n’hésitez pas.
Je met le pdf du descriptif de la carte ainsi que les scripts python à votre disposition.
En vous remerciant par avance et espérant trouver une solution à mon problème.
Bonne soirée.
Descriptif Carte Stepper Motor HAT
http://vctec.co.kr/web/product/BAE/img/397653.pdf
Scipt python servo
#!/usr/bin/python
from Raspi_PWM_Servo_Driver import PWM
import time
# ===========================================================================
# Example Code
# ===========================================================================
# Initialise the PWM device using the default address
# bmp = PWM(0x40, debug=True)
pwm = PWM(0x70)
# change l'amplitude Min Max
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
if (True):
# Change speed of continuous servo on channel 0 & 1
# pwm.setPWM(1, 0, servoMin)
# pwm.setPWM(0, 0, servoMin)
# time.sleep(1)
pwm.setPWM(1, 0, servoMax)
time.sleep(1.5)
pwm.setPWM(0, 0, servoMax)
Script python moteur
#!/usr/bin/python
from Raspi_MotorHAT import Raspi_MotorHAT, Raspi_DCMotor
import time
# create a default object, no changes to I2C address or frequency
mh = Raspi_MotorHAT(addr=0x6f)
################################# DC motor test!
myMotor = mh.getMotor(3)
#Initialise le moteur en marche avant
myMotor.run(Raspi_MotorHAT.FORWARD);
#Demarre le moteur a la vitesse 70 a 255
if (True):
for i in range(70,255):
myMotor.setSpeed(i)
time.sleep(0.02)