Discussions Générales > Discussions ouvertes

Problème pour utiliser l'horloge externe du PCA9685

(1/14) > >>

hinano70:
Bonjour
Je veux commander une quarantaine de cantons en PWM avec plusieurs PCA9685. Lorsqu'une loco change de canton, les 2 signaux de commande sont identiques pour éviter un court-circuit. Ca marche très bien si 2 cantons successifs sont reliés au même PCA9685. Mais si je les relie à 2 PCA9685 différents, il y a un court-circuit. J'ai mis du temps à trouver la raison : les signaux PWM doivent être déphasés entre PCA différents !
J'ai vu qu'on pouvait utiliser une horloge externe qui règlerait ce problème de désynchronisation et qu'on pouvait la "piloter" avec la fonction : setExtClk ()
http://adafruit.github.io/Adafruit-PWM-Servo-Driver-Library/html/class_adafruit___p_w_m_servo_driver.html
Mais à partir de là, je coince ! Mon circuit est commandé avec un Arduino Méga, où puis-je récupérer un signal d'horloge et qu'en faire avec le PCA9685 ?
Il y a bien une broche EO, mais je ne sais quoi en faire...
Merci pour votre aide ....
J'ai oublié de dire qu'il y a derrière les PCA des ponts en H L298N sur chaque alimentation de canton et que malheureusement je n'ai pas commandé tous les PCA9685 en même temps et chez le même fournisseur

simontpellier:
Bonsoir,

J'ai la même configuration : PWM généré par PCA9685 et un L298N pour chaque section. Sauf que j'ai (beaucoup) moins de 16 sections et donc un seul PCA9685, pour l'instant en tous cas.
Sans avoir donc l'expérience de ce qui peut se produire dans votre cas, je pense toutefois que le problème n'est pas un problème de désynchronisme.
Ce problème existe, on le constate si l'on utilise les ports d'un Arduino, les ports PWM sont distribués sur plusieurs timers non synchrones. Mais sauf erreur de polarisation des ponts H, ça ne peut pas conduire à un court-circuit ; l'effet se limite à une accélération transitoire de la motrice au moment où elle s'alimente en même temps sur deux sections différentes : les "ondes" de PWM se superposent (leur temps "1") ce qui se traduit par une augmentation de la tension moyenne.
Ce problème a été traité (et résolu !) par "Jean-Luc", un des pionniers de ce site et je n'ai pas fait l'effort de fouiller pour vous fournir le lien du sujet mais vous pourriez y arriver avec cette info. Je ne me souviens pas mais je ne crois pas qu'une horloge externe était nécessaire. (Peut-être qqn d'autre saura-il retrouver le lien facilement ?)


hinano70:
Merci
Cela m'a permis de trouver ça :
https://www.locoduino.org/spip.php?article203
"Dans un prochain article nous attaquerons le problème de la synchronisation des PWM entre les cantons qui pourront donc être commandés par des Arduino séparés."
C'est tout à fait ce qu'il me faut, mais je n'ai pas trouvé l'article.
Je suis tombé la dessus: http://forum.locoduino.org/index.php?topic=36.0. Je n'ai pas tout compris, il y a une bibliothèque à télécharger https://dl.dropboxusercontent.com/u/67740546/SyncPWM.zip mais le lien ne fonctionne plus !
Chez moi, ça devrait être plus simple puisque je n'ai qu'un seul Méga qui commande tout (pour l'instant)

hinano70:
Le problème est que les PCA9685 possèdent leur propre horloge et que celles-ci ne sont pas synchro.
Je viens de parcourir le datasheet https://www.nxp.com/docs/en/data-sheet/PCA9685.pdf (c'est assez obscur pour moi), mais on voit bien qu'il y a possibilité de mettre une horloge externe, mais j'ai beau retourner dans tout les sens le shield, il n'y a pas de pin supplémentaire. Aïe ! Mauvais signe :
external clock input[2]   --->   [2]This pin must be grounded when this feature is not use
Dommage ! Plus loin on trouve
To use the EXTCLK pin, this bit must be set by the following sequence:1.  Set the SLEEP bit in MODE1. This turns off the internal oscillator.2.  Write logic 1s to both the SLEEP and EXTCLK bits in MODE1. The switch is now made. The external clock can be active during the switch because the SLEEP bit is set.This bit is a ‘sticky bit’, that is, it cannot be cleared by writing a logic 0 to it. The EXTCLK bit can only be cleared by a power cycle or software reset.EXTCLK range is DC to 50 MHz
Je ne comprends pas tout, mais il semble que la solution était là. Encore fallait-il que je sois capable d'accéder aux registres !!!
Il me reste une solution : si les décalages de phase sont faibles (j'en doute vu ce qui se passe entre 2 : l'alim disjoncte, avec 2 autres les trains broutent aux changement de canton) je peux décaler les signaux PWM:  pwm3.setPWM(N°, 0, vitesse) ---> pwm3.setPWM(N°, 0+x, vitesse+x)

Toutes les remarques pouvant m'aider sont les bienvenues !

hinano70:
En fait décaler un signal par rapport à un autre est ridicule !
J'ai utilisé un oscillo pour visualiser les signaux PWM. Ils glissent l'un par rapport à l'autre (les horloges étant légèrement décalées) ce qui ne génère pas de court-circuit au passage du train en juxtaposant les signaux dans 2 cantons consécutifs. Je ne me l'explique pas ! Par contre les trains broutent (signaux en phase, décalés, en phase ....). J'ai eu des problèmes de court-circuit en alimentant les 2 cantons consécutifs avec 2 disjoncteurs différents (faits avec des MAX471 + relais...)
Il me reste donc à m'arranger pour mettre les jonctions entre cantons alimentés par des PCA9685 différents dans les parties cachées, mais avec 35 cantons, ça va être dur !
Il y a peut être des modules équivalents au PCA9685 ?

Navigation

[0] Index des messages

[#] Page suivante

Utiliser la version classique