Gamoover

Vous aimez GAMOOVER ? Vous avez trouvé la perle rare grâce à notre forum ?
Alors pourquoi pas nous soutenir en effectuant un petit don Paypal sur : contribution@gamoover.net
C'est peut être un détail pour vous, mais nous, ça nous aiderait beaucoup !

[Beta] - BackForceFeeder : feeder vJoy FFB pour racecabs

Démarré par njz3, Mardi 17 Mars 2020, 19:02:44 PM

njz3

ATTENTION
La version modifiée de vjoy que j'utilise ne s'installe pas sur Windows 11, car non compatible. Elle est uniquement compatible Windows 7 et Windows 10.
Vu le prix de la certification Microsoft (plus de 700€ annuel pour un certificat) et de la paperasse nécessaire à être reconnu par Microsoft, je ne peux pas m'engager dans cette voie. Merci de ne pas me remonter ce bug.

Soft de pilotage FFB pour PC

Bonjour à tous,
Pour éviter de poluer les sujets d'autres personnes et mon WIP sur un twin scud race, je crée un sujet à part pour mon soft d'interfacage de vJoy avec force feedback, principalement pour racecabs. Ce topic a pour but de mettre ici les infos importantes et d'assurer les échanges permettant d'aider ceux qui voudraient se lancer.

Suite à une phase de test avec Bandicoot et dvseb de la version alpha de mon soft, on va dire que mon soft peut passer en béta, tout du moins pour ceux utilisant le mode PWM analogique avec un arduino Leonardo, ou PWM digital via la carte d'Aganyte.

Tutoriel avec le FFB d'Aganyte

Un excellent tutoriel sur base du FFB controller d'Aganyte a été fait par Gojirien là: https://www.gamoover.net/Forums/index.php?topic=42842.0
Un grand merci à lui pour le temps qu'il a passé à cette rédaction, et aux autres pour les tests et essais (dvseb, bandicoot, marcus, ... et évidemment Aganyte !).

Fonctionnalités disponibles
- supporte le retour analogique du volant par potentiomètre (retour par encodeur pas encore supporté) avec calibrage du volant pour l'offset de centrage.
- configuration de vJoy : choix des axes qui seront reportés par le soft: X, Y, Z, RX, ... c'est vous qui choisissez les axes qui seront utilisés par le soft, en fonction de ce que vos jeux supportent.
- support des 11 effets de force-feedback issus de DirectInput, gestion du cumul d'effets (jusqu'à 100 simultanément).
- mode commande en couple : sortie analogique PWM, PWM centré, ou digitale (via uart). Ces modes permettent de piloter un variateur du marché, un variateur custom (ou un moteur DC via un L6203), un PWM2M2, ou la carte FFB Converter.
- mode compatibilité pour driveboard Sega Model 2/3 : cablage en direct sur la driveboard, type M2PAC. Support des driveboards avec EPROM Indy500, Le Mans, Scud Race (ECA/Dirtdevil), Sega Rally 2. Dans ces modes, la driveboard est basculée en mode commande en couple, ce qui permet d'émuler tous les effets. Avec certaines driveboard (Indy500 et Lemans) possibilité de tricher en utilisant une commutation haute fréquence des commandes (100Hz), ce qui augmente virtuellement la résolution du couple au détriment d'une légère vibration.
- mode RAW pour driveboard. Dans ce mode, le soft fait exactement pareil que le M2PAC, c'est à dire envoi en brut de la donnée de FFB des jeux Model1, Model 2 ou Model3 vers la driveboard. Attention, mon soft ne vérifie rien dans ce cas, c'est à vous de vérifier que votre driveboard "comprends" les données du jeu!!
- gestion de jeux de paramètres (control set) que l'on peut changer à la volée pour le mapping des boutons et les plages de variation des axes en fonction du jeu. Les jeux de paramètres sont sauvés dans des fichiers XML que l'on peut s'échanger.
- mapping de bouton au choix, gestion de toggle, autofire, décodage des shifters en H, ou émulation par séquentiel.
- calibrage des axes volant et pédales pour chaque control set.
- tuning des effets et des gains de FFB pour chaque control set.
- configuration du mapping des lampes vers les sorties raw pour chaque control set.
- auto-détection du jeu en cours via nom d'exécutable et nom de fenêtre pour switcher automatiquement de control set selon le jeu démarré.
- paramètre en ligne de commande "-c nom_control_set" pour forcer un control set (par exemple depuis un fichier script .bat). Attention, dans ce cas il faut désactiver l'auto-détection.
- gestion des sorties (lampes) des jeux racing de nebula model 2, model 3, MAME (Virtua Racing/outrun/ridge racer/rave racer, cruis'n, ...) et Teknoparrot. Attention, il faut préciser comment les données sont à lire dans chaque control set.
- mode lights only (avec arduino, mais sans vjoy)
- option de démarrage avec Windows, option de réduction de l'appli vers le trayicon.
- émulation d'appui de touche (seulement jeux ou applications qui supportent la lecture d'un clavier en mode DirectInput ou via les API Win32 SendInput)

La dernière version beta est là:
Release 0.7.0 (explorateur de control set, possibilité de forcer les valeurs des axes et des entrées pour tester sans panel disponibles, correction de bugs)

Des control sets (exemples de configuration) sont disponibles dans l'archive.

Roadmap

Next en Beta :
- ajout d'un port de communication (type TCP en mode texte) pour envoyer des commandes depuis un autre soft ou via une ligne de commande afin de modifier le control set à la volée sans avoir besoin de relancer le logiciel, ou pour le cas où la détection automatique du processus du jeu est impossible.
- gestion d'entrée codeur incrémenal pour diminuer le bruit de mesure et affiner l'estimateur de vitesse et la commande en mode boucle fermée (spring notamment).
- gestion de carte d'extension d'IO sur base PCF8574 ou MCP23017 en I2C (pour ceux qui utilisent le leonardo en PWM et qui veulent bénéficier des sorties lampes).

Ce qui est rayé veut dire que c'est intégré de mon côté mais pas forcément libéré pour vos tests.
Attention pour les lampes, il peut subsister des erreur de mapping. Ce sera résolu au fur et à mesure des jeux.

Installation

Mon soft nécessite une config PC moyenne pour les jeux model 2/3 et assez haut de gamme pour les jeux Tecknoparrot ou les simulateurs PC. Prévoir un PC de moins de 3 ans, avec au moins 4 coeurs. Mon soft utilise presque 10% de charge sur un coeur pour assurer une communication et un traitement assez rapide des infos de FFB vers l'arduino. Si vous observez des ralentissements du retour d'effort (décalage des effets ou de la position volant), c'est probablement que la charge CPU est à 100% et que le jeu est trop gourmand. Essayez de diminuer la qualité des détails du jeu, ou prévoyez un CPU un poil plus costaud.

Pour l'installation, il faut aller chercher le zip contenant tous les softs et le code Arduino.
En premier lieu, si vous utilisez une config model 2/3 ou PWM seul, vous devez flasher le code arduino sur un Leonardo ou un Mega2560. Dans le cas de la carte FFB Converter d'Aganyte, prenez le firmware compatible avec mon protocole de communication.

Au niveau soft PC, installez d'abord "vJoySetup 2.2.1 signed.exe".
Ensuite, installez mon application en lancant "setup.exe". Faites l'installation par défaut.
Configurez vJoy via l'outil "Configure vJoy" (disponible dans le menu démarrer) pour avoir au moins 3 axes et 16 boutons.



Si vous aviez une ancienne installation de vJoy, vous devez faire un "reset all" de la configuration, puis refaire la configuration telle que montrée ci-dessus.

Ensuite lancez l'application BackForceFeeder GUI et configurez le type de matériel via le bouton "Configure Target Hardware".


Dans cette page, plusieurs options de configuration sont disponibles.


Pour choisir la plateforme cible, il faut d'abord stopper le service de gestion en cliquant sur "Manager status" (le bouton doit devenir rouge), puis selectionner le type de plateforme : PWM, PWM centré, Driveboard (pour l'instant Indy500, LeMans, Scud Race, SegaRally2), RAW (M2PAC). Le choix Lindbergh generique est pour l'instant non fonctionnel.
Une fois choisi, vous pouvez relancer le service de gestion en cliquant à nouveau sur "Manager status" pour qu'il repasse en vert.

Si votre Arduino est connecté et votre cablage réalisé, vous devriez déjà voir les valeurs "raw" de l'axe X changer quand vous tournez le volant, ou l'axe Y, Z quand vous appuyez sur les pédales. De même, les raw inputs doivent changer quand vous appuyez sur les boutons.

Pour mapper la plage de variation du volant ou des pédales, le logiciel utiliser une table linéaire avec des points de contrôle.
La configuration d'un axe particulier se faire en cliquant sur "Axis mapping Editor".

Dans cet éditeur, l'axe horizontal correspond à l'entrée analogique "raw" (en % de l'entrée physique), et l'axe vertical correspond à la sortie calculée pour l'axe logique vJoy (en % de la valeur vJoy).

Pour vous aider à configurer un mapping pour le volant ou les pédales, vous avez les boutons "Calibrate wheel" et "Calibrate pedal" qui affichent un wizard permettant de rapidement calibrer ces entrées. Il suffit de suivre les indications et cliquer sur Next.

Si vous souhaitez un comportement non linéaire, par exemple pour certains jeux comme MarioKart Gamecube où la progression du joystick doit être non linéaire au centre pour éviter des gauches droites permanent du kart, il est possible de rajouter des points de contrôles et de les modifier en sélectionnant le point (cliquez dessus) puis en bougeant les sliders horizontaux et verticaux pour modifier le point.

De même, vous pouvez réassigner les boutons liés aux entrées physiques (raw inputs cablées sur l'arduino) vers les boutons logiques exposés par vJoy en cliquant sur le  bouton "Configure buttons". Par défaut, chaque entrée physique (raw) est cablée sur le bouton logique (vJoy) de même numéro. Mais il est possible de supprimer un mapping (aucun numéro logique vJoy associé), ou de mapper une entrée vers n'importe quel bouton logique (raw 1 vers vjoy 5), voir même plusieurs boutons simultanés (raw 1 vers vJoy 1,2,3,4, soit 4 boutons logiques activés simultanéments sur une entrée physique).

Les options "AutoFire" et "Toggling" sont fonctionnelles.
Il est possible de décoder un shifter en H ou émuler un shifter en H via un Up/Down (ou des palettes). Ce post explique par exemple comment émuler un shifter en H avec un Up/Down.

Le logiciel permet de simuler des appuis de touche clavier pour certains cas où il est difficile de gérer un joystick (cas de Hyperspin, ou pour quitter un émulateur via Esc). On peut donc créer des "règles" pour définir un comportement propre à chaque control set. Chaque règle doit définir au moins une source et un code de touche à simuler. Il est possible de définir différentes sources (entrées raw, boutons vJoy, axes raw, axes vJoy) et même de les combiner avec des opérations logiques (ET, OU) pour détecter des appuis simultanés et d'y ajouter une tempo (HoldTime) pour éviter les fausses manip. L'idée est par exemple de quitter un émulateur en émulant la touche ESC quand on reste appuyer sur Start + VR1 pendant 3 secondes.
Pour les axes, il faut définir un seuil en % pour détecter le passage dans un sens, et cocher "Inv" et mettre un autre seuil plus bas détecter un passage dans l'autre sens. Ainsi on peut émettre des codes de touches "flèche gauche" ou "flèche droit" pour le volant.

Pour un exemple avec les axes, voir ce post.

Les effets FFB peuvent être réglés en intensité (gain) et en progressivité ou zone morte. Il est aussi possible de modifier individuellement les gains des effets.
Ces réglages sont disponibles dans la fenêtre "Tune FFB Effects".

Par sécurité, les paramètres de gain sont grisés et on ne peut les modifier que si la case "Allow detailled effct tuning below" est coché. Attention, ces paramètres peuvent être dangereux et rendre instable le volant.
Le paramètre "global gain" sert à régler le gain global du couple. C'est un gain proportionnel appliqué à la fin des calculs de résultante de couple une fois que tous les effets sont appliqués.
Le paramètre "power law" sert à donner un profil non linéaire au couple, par exemple pour atténuer les petits effets, ou à l'inverse les accentuer. Avec la valeur 1.0, la relation entre l'entrée et la sortie est linéaire. Avec 0.5, on accentue les petits effets (ce qui peut provoquer des oscillations), et à l'inverse avec 1.5 ou 2, on atténuer les petits effets (par exemple pour enlever les oscillations du volant en lignes droite).

Le paramètre "deadband" est, comme son nom l'indique, une zone morte, ou seuillage, qui permet de supprimer les demandes de couple trop petites.

Toutes ces modifications sont enregistrées dans des fichiers de configuration XML dans votre répertoire Documents\BackForceFeeder\Configuration

Il y a probablement beaucoup de bugs, alors un peu d'indulgence et de patience  ;)

Au fur et à mesure des questions, je complèterai ce topic avec schémas et d'autres précisions.
Je compte par contre sur vous pour me faire des retours et pourquoi pas un tutoriel avec photos et schémas.

Les questions sont les bienvenues !


Principe de fonctionnement

Le soft s'appuie sur vJoy qui permet d'avoir un joystick virtuel avec gestion des effets de force feedback (ffb). Il requière donc une installation de vJoy et une configuration préalable avec au moins 3 axes et 16 boutons.
Le logiciel est écrit en C# et contient deux exécutables : un avec GUI (interface graphique) pour la configuration, un en version console qui consomme moins de ressources (pour les petites config PC).

Dans mon développement, j'ai pris comme première hypothèse que la plateforme cible est une borne arcade équipée de potentiomètres pour le retour de position angulaire du volant et pour les pédales. Donc pas besoin de codeur, même si j'envisage de supporter ce retour de position volant dans le futur.
Pour l'instant seuls quelques modes sont supportés :
- PWM + Direction (testé par Bandicoot)
- PWM centré (testé par DVSeb via carte FFB Converter d'Aganyte qui supportera les servoboards en version Midi=838-14174 pour Chihiro, Naomi et en version RS422=838-14592 pour Lindbergh, et testé par Marcus600 via PWM2M2)
- Driveboard Model 2 type Indy 500 ou Le mans (testé par moi). Rendu très bon, tous les effets sont émulables via les commandes en couple, malgré le faible nombre de pas de résolution (8 niveaux).
- Driveboard Model 3 type Scud avec EPR-19338A : attention non polyvalente (testé par moi). Ne marche bien uniquement qu'en mode Raw avec jeux compatibles. Après quelques essais, je trouve le rendu très moyen en mode compatibilté (couple), car il n'y a pas assez de plage de couple disponible pour émuler tous les effets.
- Driveboard Model 3 type SegaRally2 avec EPR-20512 : rendu très bon, tous les effets sont émulables via les commandes en couple. Résolution de la commande : 64 niveaux dans chaque sens.

Le soft utilise une carte Arduino pour faire les entrées/sorties mais toute l'intelligence est réalisée côté PC. La carte Arduino a un soft assez basique permettant uniquement de rafraichir des valeurs ou de piloter des sorties. La communication se fait par port série (via l'USB). Un mode d'autodétection permet de s'affranchir de configurer le port COM sur le PC.
Un arduino Leonardo (mode PWM) ou un Mega2560 (pilotage driveboard sega) sont les plateformes pour l'instant retenues. A savoir qu'un pro-micro est équivalent à un Leonardo pour moins de 5€.

De base, le soft gère des entrées analogiques de l'Arduino pour :
- le potentiomètre volant (A0)
- les potentiomètres pédales : accel (A1), frein (A2), embrayage (A3)

Au niveau entrées tout ou rien (boutons) :
- Leonardo : 12 boutons sur D2 à D8 puis D12 : 8 premiers boutons, puis D0/D1 et A4/A5 : 4 boutons suivants
- Mega2560 : pas encore défini mais pour l'instant idem Leonardo.

En sorties :
- Leonardo mode PWM+Dir : PWM (D9) + directions forward (D10)/reverse(D11)
- Leonardo mode PWM +/- dual : PWM forward (D9)/PWM reverse(D10) + Enable (D11)
- Leonardo en mode pwm centré digital (PWM2M2) : Tx sur pin D1, Rx sur pin D0
- Mega2560 mode driveboard, repris du M2PAC et donc compatible avec son cablage : sorties D22 à D29 vers les 8 entrées des driveboard Lemans/Scud (8bits), 8 sorties de pilotage de lampes sur A8 (Leader lamp, output 8 ), A10 (Start lamp, output 3), puis A11 à A14 (Viewbuttons, output 4 à 7) à relayer avec un module 6 sorties relais 5V. Les sorties A9 et A15 sont les outputs 1 et 2.

Lien vers le code source du feeder :
Readme du projet BackForceFeeder sur Github

Lien vers le code source Arduino (ino) :
dossier fichiers Arduino


njz3

#1
Troubleshooting guide/FAQ

Version en ligne (sera probablement plus récente) : ici

  • Réinstallation de vJoy, plus de FFB : si vous avez réinstallé vJoy, alors vous devez refaire la configuration de vJoy via vJoy Configure : reset, puis remettre la config, puis Apply. Rebootez le PC.
  • Mon volant oscille de gauche à droite dans certains jeux (Daytona 1 et 2): baissez le Global Gain et ajoutez une petite deadband (zone morte) de 0.05
  • J'ai mis le bazar dans BackForceFeeder, comment réinitialiser la config ? Allez dans Documents\BackForceFeeder et supprimez les fichiers xml. Les fichiers de control set sont dans %HOMEPATH%\Documents\BackForceFeedeer (ou aussi C:\Users\%USERNAME%\Documents\BackForceFeeder)
  • Parfois il y a un gros ralentissement et un décalage dans la position du volant et les effets : votre PC est peut être à bout (CPU à 100%) et le décodage des trames entre le PC et l'arduino a pris du retard. Soit vous baissez la qualité du jeu, soit vous devez changer de config PC.
  • Depuis que j'ai installé vJoy, certains de mes jeux ne se lancent plus (ex: GTA V) : certains jeux testent les périphériques supportant le FFB (vJoy est un périphérique FFB) et attendent une réponse, même si le jeu n'utilise pas le périphérique en question. Si le Feeder n'est pas démarré, il se peut que ces jeux plantent lamentablement (cas de GTA V). La solution est de démarrer le feeder au premier lancement du jeu. Après le premier lancement, il n'y a parfois plus besoin de lancer le feeder pour passer l'étape.

Quelques astuces

J'ai mis dans le dossier "gameassets" des fichiers ou des scripts pour faciliter votre vie.
Ces fichiers ne viennent souvent pas de moi, ils ont été trouvés sur le net. Il faut remercier les auteurs respectifs.

Sorties lampes:
- pour le cablage, assurez vous que votre borne a des lampes dont une des pin est reliées en permanence au +5V (cas des Sega), soit au 0V. Les sorties des arduinos doivent passer par une carte relais qui va basculer l'autre pin de la lampe soit à 0V (cas des Sega), soit à +5V. La carte ULN2003 vous permet de faire ce relais de manière électronique pour vraiment pas cher.
- le soft peut fonctionner en mode 'lights only', sans installation de vJoy. Voir ici pour les détails.
- pour MAME ou supermodel, ne pas oublier d'ajouter les options de sortie "windows" à la commande en ligne de l'émulateur ou dans le fichier de config de l'émulateur, et choisir le Output type MAME_WIN dans le control set (profil) de BackForceFeeder.
- Pour faire fonctionner les lampes sous Daytona 1, il faut utiliser la ROM Daytona (Saturn Ads) ("daytonas") et le script lua que je fournis. Ensuite il faut configurer le control set pour l'émulateur NEBULA MODEL2 et choisir le output type RAW_MEMORY_READ. Voir ici pour les détails
- Pour OutputBlaster : mettre la DLL et le fichier INI dans le répertoire de l'executable du jeu (comme pour FFBPlugin) et cocher 'enable outputs' dans Teknoparrot UI. Attention à bien prendre la version x86 ou x64 selon le jeu et non selon votre windows. Par exemple : Daytona USA Championship est un jeu 32 bits, il faut la version x86 de la DLL, même si votre PC est sous Windows x64. ici pour un exemple

Matériel et cablage pour mode Compatibilité ou RAW DriveBoard Model 2/3 (Mega2560 obligatoire)

Pour la compatibilité entre votre driveboard et celles supportées par mon soft, voir le tableau de BigPanik:


Le cablage de la driveboard est similaire au m2pac : utiliser les 8 sorties PORTA du Mega2560 et les envoyer sur l'entrée de la drive board qui est le connecteur à 10 pins sur le côté de la DRVBD. Il faut cabler les pins de 1 à 8 de la DRVBD sur les pins 22 à 29 du Mega2560, et mettre du +5V sur la pin 10 de la DRVBD (par exemple en le prenant sur une des bornes du Mega2560).

Pour les pédales et le volant, il faut renvoyer les signaux des potentiomètres qui reviennent au niveau du connecteur du panel U/P et les brancher sur les A0, A1, A2 de l'arduino Mega2560 avec le GND et le +5V. Sur les fils violets il faut mettre +5V et les marrons à GND. Le vert est le volant (à mettre sur A0), le bleu est l'accel (à mettre sur A1) et le noir est le brake (à mettre sur A2).

Les boutons doivent être cablés sur les entrées suivantes : D2 à D8 puis D12 : 8 premiers boutons, puis D0/D1 et A4/A5 : 4 boutons suivants.
Par défaut les entrées sont en pull-up (5V), et il faut mettre à GND quand les boutons sont appuyés. Je n'ai pas encore regardé comment faire au plus simple au niveau branchement.

Pour les lampes, les 8 sorties de pilotage de lampes sont sur A8 (Leader lamp, output 8 ), A10 (Start lamp, output 3), puis A11 à A14 (Viewbuttons, output 4 à 7). Les sorties A9 et A15 sont les outputs coins (1 à 2) qui sont souvent inutilisées.
Toutes les sorties sont à relayer avec une carte relais 5V, par exemple l'ULN2003.
Attention sur les cabs Sega les lampes sont connectées au 5V en permanence et c'est le 0V qu'il faut envoyer par la carte relais !

Schéma avec Mega2560 (driveboard+lampes) :



Matériel et cablage pour PWM+Dir, PWM Forward/Reverse ou PWM centré (Leonardo préférable pour l'instant)

Pour le volant, les pédales et les boutons, câbler comme avec le mode Compatibilité ou RAW DriveBoard ci-dessus.
Pour la commande du moteur:

  • En mode PWM+Dir (ex: variateur brushless): cabler la sortie D9 (PWM 15,6kHz) vers l'entrée de votre carte variateur. Cabler D10 sur entrée forward, et D11 sur entrée reverse.
  • En mode PWM forward/reverse/enable (ex: pilotage moteur CC via un L6203): cabler la sortie D9 pour le Forward (PWM 15,6kHz) et D10 pour le reverse. D11 est l'enable.

Voilà les schémas pour ces modes PWM avec Leonardo:



Matériel et cablage pour servoboard Sega Midi, Lindbergh ou plus récent via la carte FFB Converter d'Aganyte (base Mega2560)

Le signal PWM est transféré par port série directement au firmware d'Aganyte par le cable USB, donc il n'y a pas de cablage spécifique pour mon soft.
Voir la page tuto de Gojirien pour le cablage de la carte FFB Converter avec les servoboards Lindbergh selon la configuration de votre racecab.

Matériel et cablage pour PWM2M2 ou PWM2HAPP d'Aganyte (Leonardo ou mega2560)

Le cablage est similaire à celui du model 2/3 pour les entrées et sorties.
Le pilotage du PWM2M2 ou du PWM2HAPP se fait par un signal PWM_CENTERED transféré par port série (Digital PWM) directement au firmware d'Aganyte via l'uart présent sur le Leonardo ou le Mega. La communication se fait depuis la pin Tx (D1) du Leonardo vers la pin Rxi des Pro Mini ou Pro Micro. Un seul fil suffit, mais il faut relier les masses entres elles pour éviter d'avoir une référence flottante (GND commun).
Si vous utiliser un Mega2560, vous pouvez profiter de plus d'entrées boutons et des sorties de lampes sur A8-A14. Pour la partie communication, le cablage avec un Mega2560 passe par la pin Tx3 (port série 3) sur le Mega2560 et non Tx0 (pin D1), qui est à relier vers le Rxi du PWM2M2.

Voilà les schémas pour ces modes PWM digitaux avec le PWM2M2/PWM2HAPP et un Leonardo.



Le code Arduino FeederIOBoard de la carte passerelle (Leonardo ou Mega) est fournit dans les archives BackForceFeederSetupXXX.zip. Chaque version de mon soft à son propre code FeederIOBoard compatible, donc ne mixez pas les codes de versions du soft PC et de la carte passerelle.

Matériel et cablage pour les sorties lampes (Mega2560)

Pour activer la lecture des sorties lampes au niveau du soft, quelque soit le jeu ou les jeux, il faut déclarer un control set par type de sorties pour dire au soft comment il doit surveiller le process du jeu qui tourne et récupérer les informations.
Il y a actuellement 3 modes de récupération (Output Type) :
- RAW_MEMORY_READ : pour les jeux m2emulator uniquement (Daytona 1 Saturn Edition, Sega Rally, ...). Le soft va ouvrir la mémoire du process de l'émulateur et y lire directement en mémoire les octets des lampes à des adresses connues. Attention, il semble que la dernière version de la dll OuputBlaster permette également de récupérer les sorties de lampes de m2emulator en utilisant la même technique de lecture en mémoire, dans ce cas choisir le mode ci-dessous.
- MAME_WIN: pour les émulateurs comme MAME, Supermodel et avec la Dll OutputBlaster. Dans ce cas, le soft va s'abonner à un message Windows envoyé périodiquement par la fenêtre de l'émulateur ou le jeu. Ce message Windows contient les données du type "variable = valeur" et le soft va simplement interpreter certaines variables comme des sorties lampes et va les envoyer à la carte passerelle.
- MAME_NET: c'est la version TCP de la messagerie, qui est juste une alternative portable à MAME_WIN. Utilisable avec MAME et avec la dll OutputBlaster.



Pour le cablage, je conseille de partir sur la solution du M2PAC, à savoir un ULN2003 (voir le sujet de BigPanik).
Sur les bornes Sega, les lampes ont en permanence un commun à 5V et la masse est ramener par le stack qui va fermer un transistor quand la sortie est à activer.

L'ULN2003 fait exactement cela : il va "tirer" à la masse le signal de retour des lampes qui arrive au niveau du connecteur du stack. Ainsi, les lampes vont avoir un 5V permanent, et un retour qui sera mis à la masse quand le mega va activer une sortie, c'est à dire une entrée de l'ULN2003.
Pour cabler l'ULN2003, il ne faut pas oublier de l'alimenter en 5V et d'y mettre la masse.
Pour avoir le 5V permanent au niveau des lampes, il faut ponter le 5V qui va vers les lampes depuis un autre connecteur du harness qui a du 5V.

Note : il est possible de tester les sorties lampes sans passer par le soft BackForceFeeder en ouvrant le port série de l'arduino avec un terminal série, comme par exemple le "Monitor Serial" de l'IDE Arduino. La vitesse de communication est de 1000000baud.
Pour allumer les lampes, faire la commande O00OFF (lettre O suivi de 2 chiffre zéros, puis lettre O suivi de 2 lettres FF).
Pour éteindre les lampes, faire la commande O00O00 (lettre O suivi de 2 chiffre zéros, puis lettre O suivi de 2 zéros).

Test de votre matériel sans le BFF

Le soft BFF pilote le moteur grâce à une carte passerelle (Arduino) qui est elle même connecté à une servoboard Sega, à un PWM2M2, un PWM2HAPP ou un variateur fonctionnant en mode entrée PWM. Le protocole de communication entre le PC et la carte passerelle est détaillé ici.

Il consiste à échanger des messages texte entre le PC et la carte passerelle à l'aide du port série COM qui est créer quand vous plugguer la carte sur votre PC à l'aide du port USB. Par défaut, la vitesse de communication est de 1 000 000baud.
Les commandes sont au format texte et regroupées par mots. Une trame se termine par un caractère nouvelle ligne '\n', permettant de taper à la main des commande dans un port série.

Les mot de commandes suivants sont supportés et permettent de tester votre setup :

  • "V" comme Version va vous renvoyer la chaîne d'identification de la carte passerelle.
  • "G" comme Gadget va vous renvoyer la liste des gadgets supportés par la carte passerelle. Un gadget est un éléments hardware du type entrée digitale (I), sortie digitale (O), entrée analogique (A), sortie analogique pwm (P), encodeur (E), ... Cette liste permet de savoir ce que supporte la carte passerelle.
  • "U" comme Update va vous renvoyer une trame contenant les status des gadgets, sous forme de mots Ixxx, Axxx, Exxxxxxxx, chaque mot correspondant à un gadget.
  • "Oxx" comme Output avec "xx" un nombre hexadecimal entre 00 et FF. Chaque bit correspond à des sorties que vous souhaitez piloter, donc dans un mot il y a maximum 8 sortie. Si votre carte passerelle supporte plus que 8 sorties, alors il suffit d'envoyer un second mot de commande.

    1er exemple dans le cas du FFB Converter ou du Mega2560 : "O00OFF" va mettre les 8 première sorties à 0 et les 8 suivantes à 1, le premier mot correspond à des sorties pilotant la direction du moteur, et le second mot correspond à des sorties lampes.
    2ème exemple avec un Mega2560 : "O00O00O80" va mettre les 16 premières sorties à 0, et les sorties du 3ème gadget à 0x80. Si votre Mega2560 est connecté à une driveboard Model 2/3 en mode 8bits parallèle, cela permet d'envoyer la commande 0x80 à la driveboard.
  • Pxxx comme Pwm avec "xxx" un nombre hexadecimal entre 000 et fff. Correspond à une sortie analogique pilotée en PWM. Valeurs entre 0 et 4095.

    exemple dans le cas du FFB Converter, un PWM2M2 ou un PWM2HAPP : "P800" est une commande indiquant 0 couple en sortie car ces cartes attendent un PWM centrée. La commande "P000" signifie sortie PWM au minimum, ce qui provoque normalement un couple maximal vers la gauche. "Pfff" un PWM au maximum, ce qui provoque un couple maximal vers la droite.

bandicoot

#2
Bravo pour tout ton taff..
Le Monsieur a fait un truc bien pas cher et on garde notre cher potentiometre .
Merci a lui d'avoir mit sont talent pour faire un truc bien cool.
Ayant pas mal tester le delire j'essayerai d'aider au maximum.
Ce sujet est complementaire a ce qu'AGANYTE  met en oeuvre .
L'a  c'est vraiment la parti Windows qui est le sujet et pour avoir embeté NJZ3  pour manque d'effet sur certain SOFT , là je n'ai plus rien a redire  ^-^ ^-^
Merci a vous deux gros bisous  ^- ^- ^- ^- ^- ^- ^-
Mon pincab
https://www.gamoover.net/Forums/index.php?topic=23174.0
Excusez mes fautes d'orthographe , je tape vite et ne me relis qu'en diagonale , mais j'espère ne pas être le pire :)

njz3

C'est gentil, je vais rougir !
A ce propos, ma dernière version doit permettre de gérer ton bug de fenetre qui disparait: essaie de cliquer droit sur le trayicon et de faire "Show".
Pour faciliter l'intégration avec un lanceur type zspin, j'ai aussi ajouté une option pour démarrer automatiquement le soft avec windows, et une autre pour ne mettre que le trayicon au démarrage de l'appli (fenetre toujours accessible via le trayicon).

delo

Franchement bravo  ^-

T'as fait un super dev que personne n'avait trop réussit avant  :)

Autant en électronique on arrive toujours à se dépatouiller mais coté programmation j'y connais pas grand chose alors ça me bluffe toujours de voir ce type de résultat  :exclam: bon je dis ça j'ai pas testé  :D :D mais tout ça est bien tentant  ;D

Peut-être cela vaudrait le coup que tu alimentes tes explications avec un petit schéma de montage et d'installation  =?=

revengemanx

Salut njz3
Qd on est déjà possesseur d une configuration m2pac est ce qu l on peut utiliser ton soft juste en modifiant la partie logiciels ?
J ai acheté ma borne deja avec cette config d ou mes questions ne l ayant pas montée moi même .

njz3

#6
Salut,
Il y a un peu de recablage à faire (lampes et boutons), mais c'est très simple.
Je te mets des schémas dans le premier post.

Il te faut garder les sorties TX (pin 22-29) connectés vers la drive board.
Quelle est ta drive board ?

bandicoot

#7
 ^- ^- cool un nouveau challenger , tu devrais te faire plaisir , et niveau cablage pas grand chose d'insurmontable  ^-^
J'avais pas vu tes schémas de cablage , c'est propres et precis bref ce qu'il faut ici  ^- ^-
Mon pincab
https://www.gamoover.net/Forums/index.php?topic=23174.0
Excusez mes fautes d'orthographe , je tape vite et ne me relis qu'en diagonale , mais j'espère ne pas être le pire :)

njz3

Oui d'accord avec toi Bandicoot, c'est cool d'avoir des courageux !
Je vais essayer d'alimenter un peu le sujet pour les débutants, c'est l'occasion de rajouter des infos.
Il faudra que je mette le schéma de cablage de ton L6203 + moteur CC. Pas mal de monde doit avoir une borne de type Midway avec ce genre de moteur, ca peut les intéresser.

revengemanx

#9
j ai une driveboard daytona usa 

le premier proprietaire a tout connecté sur la filter board

delo


njz3

#11
@revengemanx: Tu ne devrais normalement avoir qu'à recabler les entrées boutons et sorties lampes du Mega2560 et reflasher ce dernier pour qu'il soit de nouveau vu comme un Arduino classique. Ou alors tu as un autre Arduino Mega 2560
Pour l'instant, essaie déjà d'installer mes softs sur un PC assez puissant et de voir si la communication avec le Mega2560 fonctionne.
Comme c'est une driveboard que je n'ai jamais testé, il faudra peut être qu'on fasse des allers-retours pour la mise au point.

@delo: j'y pense, si tu veux et si tu as un arduino Leonardo, tu pourrais également tester avec ton variateur ioni via le mode PWM+Dir, PWM+/- ou PWM centré. Dans ton cas cela ne fera pas économiser au niveau budget, mais tu pourras nous faire ton retour d'expérience sur le ressenti.

delo

@njz3..bien vu  ;) j'y pensais justement
Mais la ioni que j'ai ici sur place est déjà intégrée à la partir STM32  :-\ (simucube) Par contre je pourrai tester avec le driver Argon :



dont je me suis servi pour faire la partie volant de ma Daytona 2 dx revisitée. A l'époque j'avais monté une STM32 avec mmos qui pilote ce driver. ça marche très bien d'ailleurs  :D
Donc, avec ta solution Arduino (je dois bien avoir ça qui traîne) je pourrai en effet tester  ;D

Au passage, impec tes schémas !! c'est plus clair  ^-

Par contre, ayant :
- une driveboard Daytona 2 DX (model 3)
- et une driveboard SR2 (model 3 aussi)
il est possible de tester ta solution à partir du Mega si j'ai bien pigé  :) direct branché dessus  =:))

SDF

Cool pour le tuto, juste un truc si je peux me permettre, pour eviter les erreurs de cablage , sur le cablage des potards, si tu peux mettre les bornes A1, A2... sur la borne du millieu des potards, ca evitera (je pense) d'avoir des mecs qui comprennent pas pourquoi ca marche pas. Sinon nickel.  ^-^

Sinon, de mon coté, j'attend la carte ffb d'aganite pour beta test le model 2 sans driveboard.

njz3

Le soft (Fritzing) ne permet pas de changer les bornes sur le dessin, il force la connexion selon le schéma électrique, et malheureusement chez eux les potars sont cablés avec le point diviseur de tension sur la 3ème borne du dessin. Je vais ajouter une note en texte dans le schéma pour bien préciser.

Delo, oui tu peux tester avec le Mega et tes drives boards aussi. Comme je passe par de l'emulation d'effets via les commands "couple constant" des driveboards, il faudrait probablement tester au cas par cas. Pour l'instant je n'ai pu déboguer et valider que la Le Mans chez moi.

Aganyte

#15
On peut aussi rajouter la section pour les panels model 2 (avec le pwm2m2).

Dans l'idée, il y aurait 2 schémas;

- celui avec les premières cartes Pwm2m2 (à base de pro micro, donc il faut faire arriver la liaison série sous la carte, sur un point test que j'avais prévu au cas ou)

- les nouvelles Pwm2m2 (à base de pro mini et là, on attaque directement les pins UART dispo sur le coté de la carte)

Encore merci à toi Njz3 pour tout ce que tu fais pour la communauté  :-* ^-^