Auteur Sujet: Carte Servomoteurs DCC + CAN  (Lu 143366 fois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #15 le: janvier 29, 2016, 10:09:23 am »
En fait non.  ElectroDragon a remboursé ma commande. En effet c'est le nouvel an chinois et la fab ne rouvre que le 12 ou 13 février.
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #16 le: janvier 30, 2016, 11:06:23 am »
En attendant je vais donc m'occuper du soft  :P Thierry, j'accueille ta participation avec plaisir  :)

La carte est donc à géométrie variable. On peut la piloter en DCC ou en CAN. Doit-on embarquer le même logiciel qui s'adapte à l'un ou à l'autre ? Pourquoi pas il y a assez de place je pense.

Quoiqu'il en soit, la carte sera configurable par la ligne série grâce à CommandInterpreter pour :
  • lui donner une adresse.
  • déterminer si l'expandeur de fin de courses est en place ou non. La présence du composant indique qu'au lieu de se caler sur des butées définies logiciellement, le mouvement se poursuit jusqu'à arriver à la butée physique avec tout de même des butées logicielles pour éviter de dépasser les valeurs min ou max des servos si la butée physique dysfonctionne. Vous pouvez vous référer à http://modelleisenbahn.triskell.org/spip.php?article35 pour des servomoteurs avec butées physique. La platine a été redessinée pour avoir le même ordre de signaux.
  • activer/désactiver des servos car toutes les sorties ne sont pas forcément utilisées.
  • fixer la période d'émission de la position effective des servos.

La configuration de la carte s'effectue si le bouton CFG est enfoncé au démarrage. En pratique, on appuie sur CFG puis sur RESET et la carte redémarre en mode configuration. La configuration est stockée en EEPROM afin d'être conservée d'un allumage à l'autre.

Les commandes de configuration et de lecture de la carte seront les suivantes :
  • exp : affiche oui si l'expandeur de fins de course est utilisé, non sinon.
  • exp oui : active l'utilisation de l'expandeur de fin de course. Idéalement le logiciel devrait tenter de communiquer avec le circuit et afficher 'ok' ou 'erreur' si l'expandeur répond ou non.
  • exp non : désactive l'utilisation de l'expandeur de fin de course
  • can : demande de l'état d'activation du CAN, réponse : oui ou non selon que le CAN est utilisé ou non.
  • can oui : active l'utilisation du CAN.
  • can non : désactive l'utilisation du CAN.
  • canad : affiche l'adresse CAN, c'est à dire l'identifiant de message que la carte reçoit, cet identifiant est utilisé pour programmer les filtres et les masques.
  • canad <adresse> : configure l'adresse CAN.
  • dcc : demande l'état d'activation du DCC, réponse oui si le DCC est activé, non sinon.
  • dcc oui : active le DCC.
  • dcc non : désactive le DCC.
  • dccad : affiche l'adresse DCC.
  • dccad <adresse> : configure l'adresse DCC.
  • retro : affiche oui, suivi de l'identifiant des trames et de la période d'émission des trames de rétrosignalisation en millisecondes si la rétrosignalisation est activée, non sinon.
  • retro oui <id> <periode> : active l'envoi des trames de rétrosignalisation avec des messages CAN d'identifiant <id> et avec une période d'émission <periode> en millisecondes.
  • retro non : désactive l'envoi des trames de rétrosignalisation.
  • servo : affiche l'état des 8 servos. Le résultat est : '<num> : ' suivi de 'non' si le servo est désactivé ou bien '<type> : <min>, <pos>, <max> : <vitesse min vers max>, <vitesse max vers min>' si le servo est activé. <type> est le type de mouvement (pour l'instant dans SlowMotionServo il y a 3 types de mouvement : linéaire, doux, c'est à dire une courbe sinus de 0 à π/2, et doux avec rebond, c'est à dire un sinus suivi d'un amortissement en sens inverse), <min> est la position minimum, largeur de l'impulsion en µs, <pos> est la position actuelle, largeur de l'impulsion en µs et <max> est la position maximum, largeur de l'impulsion en µs. <vitesse min vers max> et <vitesse max vers min> sont respectivement les vitesses de déplacement de l'angle min vers l'angle max et de l'angle max vers l'angle min.
  • servo <num> : affiche l'état du servo <num>. Voir ci-dessus
  • servo <num> <commande> : change les réglages du servo <num>. Les <commande> peuvent être :
     
    • min <valeur> : fixe l'angle min en µs
    • max <valeur> : fixe l'angle max en µs
    • vitesse <valeur> : fixe la vitesse de déplacement à la fois de min vers max et de max vers min
    • vitesse max <valeur> : fixe la vitesse de déplacement de min vers max.
    • vitesse min <valeur> : fixe la vitesse de déplacement de max vers min.
    • go <valeur> : demande au servo d'aller à une position relative de 0 à 1 en mouvement lent.
  • fdc : lit l'état des fins de course si l'expandeur est utilisé.
  • fdc <num> : lit l'état du fin de course <num> si l'expandeur est utilisé.
  • fdc <num> oui : prend en compte le fin de course <num>.
  • fdc <num> non : ne prend en compte le fin de course <num>. En effet, bien qu'utilisant les fin de course, on peut, sur certains servos, utiliser les butées logicielles

L'utilisation d'une détection de fins de course change le fonctionnement de SlowMotionServo. Actuellement la bibliothèque utilise les butées logicielles. Il faut que je lui ajoute une méthode permettant de stopper le mouvement avant d'arriver sur la butée logicielle. Cette méthode sera appelée lorsque le fin de course est détecté. Il faut aussi que le mouvement continue un peu plus après le stop. En effet, si on arrête le mouvement dès la détection du fin de course, l'interrupteur est à la limite du contact. Pour bien l'enfoncer, il faut continuer un peu le mouvement. Je n'ai pas lister les commandes pour régler ce dépassement par rapport à stop pour l'instant.

La conséquence est que la totalité de la courbe de mouvement ne sera pas parcourue sauf si on ajuste les butées logicielles de manière à les faire coïncider avec les butées matérielles. Ce n'est pas grave car l'utilisation de fins de course sera essentiellement sur les aiguillages et les signaux mécaniques. Sur des animations type passage à niveau ou portes, on utilisera les butées logicielles. On peut également faire en sorte que les butées logicielles coïncident toutes seules avec les butées matérielles en ajustant chaque butée logicielle à la butée matérielle correspondant : le logiciel apprend. De cette manière on récupère la courbe complète.

J'ai certainement oublié des trucs mais ce fil de discussion va me servir à établir l'architecture fonctionnelle qui va évoluer selon vos remarques.
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #17 le: janvier 30, 2016, 07:00:16 pm »
Beau sujet, effectivement bien en continuité de tes articles sur ton blog.  :-*

A partir du moment où tu gères un bus I2C pour le MCP23017, il est tentant pour moi de demander qu'on puisse ajouter une carte fille sur laquelle j'aurais 8 entrées d'occupation de l'aiguille.
Sur ta carte, juste pouvoir "sortir" le bus I2C et une alim quelconque (2,5 V - 7 V) . Sur ma carte fille, un PCF8574 et 8 broches d'entrées.
Il n'est pas question d'ajouter ça à ta carte qui a déjà les dimensions idéales (1/2 format Electrodragon) et certainement peu de gens intéressés.

J'ai, par ailleurs, adapté ta partie mécanique côté servo en mettant 6 micro rupteurs au lieu de tes 4.

J'utilise une cornière alu 2,35 x 4,35 cm à 7,20 € dans laquelle je découpe des tranches de 2,4 cm (pour être < 2,56 cm PECO N)
http://www.leroymerlin.fr/v3/p/produits/corniere-inegale-rainure-en-aluminium-brut-l1m-x-l4-35cm-x-h2-35cm-x-ep0-15cm-e17191#&xtmc=corniere_alu&xtcr=45
Pour fixer les SG90, je fais un trou rond de 12, ce qui m'évite un trou carré dans l'alu.

J'ai tout le matériel (TME), mais je suis parti sur TCO en Processing et ça m'a détourné  :D :D
Donc, je vais monter le matériel et voir si ça marche, mécaniquement.

Mais ça n'a aucun impact sur ta carte.

Concernant le logiciel, ton choix de la fonction sinus est une idée simple (pour  simuler une accélération/décélération on devrait prendre une sigmoïde 1/(1+exp(-x)  :D), mais ça me parait plus simple de s'en tenir à sinus. Et la différence sera complètement invisible dans les faits.
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #18 le: janvier 30, 2016, 07:20:08 pm »
Heureusement que nous entrons dans l'année du singe :)

J'ai pas tout compris. Qu'entends-tu occupation de l'aiguillage ? En quoi ajouter 2 micro rupteurs ajoute de l'information par rapport aux deux qui renseignent sur la position effective du servo ?

Quoiqu'il en soit, je vais voir où ajouter un connecteur 4 broches. Il te faut aussi l'alimentation.
« Modifié: janvier 30, 2016, 07:39:09 pm par Jean-Luc »
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #19 le: janvier 30, 2016, 08:20:25 pm »
Si on ne peut plus singer ... ;D
Comment veux-tu qu'on résiste à de si belles propositions ?

Pour mes contacts supplémentaires, je te joins un début d'article potentiel.

"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #20 le: janvier 30, 2016, 11:08:04 pm »
Ok, tu veux alimenter seulement la lame qui sert et isoler l'autre.

Je pense que tu t'embêtes pour pas grand chose. Tu isoles les lames du coeur et tu raccordes chaque lame au rail correspondant sous la table. Elles sont donc tout le temps alimentées mais tu ne risque pas de court circuit.

Concernant les arcs électriques, d'après ce que j'ai lu, il faut au moins 340V. Il n'y a aucun risque Aves le 20V du DCC :)
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #21 le: janvier 31, 2016, 09:32:17 am »
Que nenni !  :P

La solution que tu proposes est la solution classique (voir PJ).
Certes, il n'y a plus de problème côté lames mobiles puisqu'elles sont à la même polarité que le rail voisin.
Mais on n'a pas résolu le problème : on l'a déplacé.
C'est maintenant sur les croix du schéma qu'on trouve deux rails proches à des potentiels opposés ! :(
Le schéma le montre bien.

Le maître mot, et tu l'a cité, c'est "isoler".

En isolant le rail qui ne sert pas, il n'y a plus aucun endroit où il pourrait y a voir un court-circuit. On élimine totalement la cause.

Cela ne côte qu'un inverseur de plus à côté du servo (20 centimes par 250, ceux que tu connais bien, chez TME )
http://www.tme.eu/fr/details/msm-22/microcommutateurs-a-connecteurs/ninigi/msw-22/ pour ceux qui découvrent.
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #22 le: janvier 31, 2016, 09:46:12 am »
Certes mais tu pourrais poursuivre le raisonnement pour les jonctions entre cantons et continuer à ajouter des interrupteurs pour résoudre de manière compliquée un problème que tu résous par l'informatique plus simplement. Ça coûte un interrupteur par aiguille mais également un expandeur, une carte, de la filasse et de la complexité qui ne me semble pas nécessaire.

Par ailleurs si tu veux effectivement isoler une des deux lames il te faut un interrupteur mais tu veux également remonter cette information ? Il te faut un 2e interrupteur. Pourquoi ? C'est la même que celle donnée par la paire d'interrupteurs de fin de course. Le PCF8574 va te donner la même info que le MCP23017.
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #23 le: janvier 31, 2016, 10:01:44 am »
Nous avons un décalage...

Mon contact supplémentaire ne cherche à résoudre qu'un problème de train qui aurait déraillé. Et ce problème ne se pose qu'aux aiguilles. Il n'y a pas ce problème au niveau des cantons.

Par ailleurs, je ne cherche surtout pas à remonter cette info. C'est purement local et ça ne sort pas de l'espace servo-aiguille.

L'info que je veux remonter, c'est l'occupation de l'aiguille par un train qui n'aurait pas déraillé. C'est pour le PRS qui doit effacer les aiguilles au fur et à mesure de la progression du train sur le grill.
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #24 le: janvier 31, 2016, 10:08:35 am »
Ah ok. On mélangeait donc deux choses et du coup je ne comprenais plus rien.

Je croyais que tu avais par ailleurs des détecteurs d'occupation.
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #25 le: janvier 31, 2016, 10:23:56 am »
Oui, j'ai par ailleurs des détecteurs d'occupation.
Mais pour remonter cette info dans le bus CAN, je pensais qu'il était plus simple d'ajouter un PCF8574 sur le "bus" I2C que tu avait créé pour ta carte.

"bus", un bien grand mot puisqu'il n'y a que 2 composants : l'Arduino et le MCP23017  ;)
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #26 le: février 13, 2016, 10:53:31 am »
Bon,

Ça ne rentre pas. J'arrive à caser l'électronique de l'ACK DCC, l'électronique de détection de perte d'alimentation mais je n'arrive pas à faire rentrer le connecteur.

Je peux faire rentrer le connecteur en sacrifiant l'ACK DCC.

Il va falloir faire un choix. Denis, tes détecteurs d'occupation sont de toutes façon à réaliser séparément. Tu peux sans doute y mettre l'occupation de tes aiguillages ?
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #27 le: février 13, 2016, 11:40:21 am »
Il ne faut rien sacrifier et surtout pas le DCC.
Je détecte l'occupation des aiguilles à part.
Soit tu arrives à mettre 2 picots (je ne "veux" rien de plus) sur le bus I2C, soit je mets un module CAN supplémentaire avec la détection et c'est totalement indépendant.
Bon courage !
Et merci d'avance. :D
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #28 le: février 13, 2016, 12:16:50 pm »
Finalement j'y suis arrivé  :)

L'I2C avec alimentation est disponible sur un connecteur SPOX droit (K13) : http://www.tme.eu/fr/details/mx-5267-04a/connecteurs-de-signal-pas-250mm/molex/022035045-22-03-5045-5267-04a/

Voici la schématique :

http://www.locoduino.org/pic/carteServoCANDCC1.5/schematique1.5.pdf

Une partie du typon







J'envoie ça aujourd'hui avec d'autre trucs, il y a 10% de réduction pour le nouvel an chinois  8)
« Modifié: février 13, 2016, 01:32:57 pm par Jean-Luc »
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2889
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #29 le: février 13, 2016, 01:42:45 pm »
Belle carte !
Bravo !
Cordialement,
Dominique