Modifications

Sauter à la navigation Sauter à la recherche
1 784 octets ajoutés ,  19 juin 2018 à 21:16
Ligne 101 : Ligne 101 :  
Parce qu'elles ne seraient pas efficace à cet emplacement. Le bruit/parasite doit être éliminé à la source sinon les fils de raccordement du moteur vont agir comme des antennes et propager les parasites sur le reste du système!
 
Parce qu'elles ne seraient pas efficace à cet emplacement. Le bruit/parasite doit être éliminé à la source sinon les fils de raccordement du moteur vont agir comme des antennes et propager les parasites sur le reste du système!
   −
== Pourquoi mes moteurs pas-à-pas ne vont pas plus viite? ==
+
== Pourquoi mes moteurs pas-à-pas ne vont pas plus vite? ==
 
Puisque le moteur est contrôlé par I2C, le débit maximum des pas est limité par la vitesse du bus I2C. Par défaut, la vitesse du bus est de 100KHz et peut être augmenté à 400KHz en édtant un fichier de la bibliothèque/librairie d'Arduino. Le fichier se trouve à l'emplacement hardware/libraries/wire/utility/twi.h.
 
Puisque le moteur est contrôlé par I2C, le débit maximum des pas est limité par la vitesse du bus I2C. Par défaut, la vitesse du bus est de 100KHz et peut être augmenté à 400KHz en édtant un fichier de la bibliothèque/librairie d'Arduino. Le fichier se trouve à l'emplacement hardware/libraries/wire/utility/twi.h.
   Ligne 107 : Ligne 107 :     
et modifié la comme suit "#define TWI_FREQ 400000L"
 
et modifié la comme suit "#define TWI_FREQ 400000L"
 +
 +
{{underline|Note MCHobby:}}
 +
 +
Il est également possible de modifier la vitesse du bus I2C avec
 +
 +
Wire.setClock(400000)
 +
 +
== Limites de setSpeed() à base / haute vitesse ==
 +
=== A basse vitesse ===
 +
Le délai entre les pas est réalisé par delayMicroseconds() qui ne fonctionne pas pour un argument >16283.
 +
=== A haute vitesse ===
 +
A haute vitesse, le calcul du délai entre deux pas ne tient pas compte du délai d'exécution du pas (envoi de la commande par I2C+temps d'établissement du courant dans les bobinages). Or, dans un test de réalisé par Mr Pierre M., Ce délai à été étalonné à 1250µs.
 +
 +
La succession des pas ne peut donc pas dépasser 1/1250µs=800pas/s (donc 4tour/s sur un moteur 200 pas ou encore 240tour/min).
 +
Ce qui est honorable pour une application hobbyiste.
 +
 +
Cependant, pour cette même vitesse {{fname|setSpeed()}} calcule précisément 1250µs de délai entre deux pas... auquel vient s'ajouter les 1250µs de transfert et activation des bobines... donc la vitesse chute de moitié.
 +
 +
=== Corriger ces limitations ===
 +
Il est nécessaire de corriger la bibliothèque Adafruit. Voici 2 liens utiles
 +
* https://forums.adafruit.com/viewtopic.php?f=31&t=117341&sid=19678adc72726090cdff79e3674beb6c
 +
* https://forums.adafruit.com/viewtopic.php?f=31&t=57041&p=408072
 +
 +
== Bibliothèque I2C et Interruption ==
 +
Si vous ajoutez un interrupteur de fin de course activant une interruption en vue d'arrêter le moteur (avec myMotor->release() depuis la routine ISR)
 +
 +
Alors SACHEZ QUE CELA NE FONCTIONNERA PAS!
 +
 +
car il n'est pas possible d'envoyer un ordre sur le bus I2C durant le traitement ISR.
 +
 +
La seule solution est de modifier une variable globale depuis l'ISR... et d'attendre que la routine principale, lisant cette même variable globale, arrête le moteur.
    
{{Adafruit Motor Shield V2-TRAILER}}
 
{{Adafruit Motor Shield V2-TRAILER}}
29 917

modifications

Menu de navigation