DIY - RFR Wheel by Ai-Wave (Arduino Leonardo + Ioni)

Votez pour l'image du mois
  • Bonjour à tous,

    Constatant qu'il y a finalement pas mal de monde qui se sont fait un volant DIY basé sur mon logiciel WheelConfig et son Firmware associé pour l'Arduino Leonardo, et ayant laissé le soft accessible en téléchargement, je remet ici le tuto de l'époque.

    Note importante : je ne ferais plus de mises à jour de ce logiciel ou du firmware, les bugs présents resteront là et il faudra faire avec.

    Les bugs connus à ce jour sont :

    - Les modes PWM +/- et VNH5019 ne fonctionnent plus, seule le mode PWM+Dir est utilisable.

    - L'utilisation d'un potentiomètre pour l'axe X (du volant donc) ne fonctionne plus, seul le mode Encodeur fonctionne.

    - L'upload du FW depuis WheelConfig ne fonctionne plus, il faut utiliser un outil externe comme BitBurner et télécharger le FW manuellement ici


    Attention : La réalisation de ce volant nécessite des connaissance en électricité / électronique. Ici on travaille avec des puissances élevées (1 KW), il faut être rigoureux et méthodique, et suivre précisément les instructions. Si vous n'avez pas d'oscilloscope, un lien est fourni dans la liste des courses afin de vous équiper. Un multimètre est également indispensable. Utilisez des câbles blindés afin de limiter les interférences.

    Note : si vous recherchez la latence la plus faible possible, utilisez plutôt la solution à base de SimuCube.

    Résumé des fonctionnalités :

    - Rafraîchissement de l'asservissement à 500 Hz

    - Position volant sur 16 bits, une entrée sur 16 bits (pour la Load Cell par ex) + 2 autres entrées sur 12 bits (pour l'accélérateur et l'embrayage par ex) + 32 boutons.

    - Au total 12 à 15 entrées possibles, dont 9 à 11 analogiques (selon la configuration).

    - Support de la puce HX711, pour brancher des Load Cells.

    - Possibilité de régler des fonctions non linéaires sur les entrées (type exposant) -> utile pour une pédale de frein à dureté progressive par ex.

    - Effets supportés (pour le moment) : Friction, Spring, Damper, Sine, Constant force, Ramp, Square, Triangle, SawtoothUp, SawtoothDown, Inertia

    - 2 mode de PWM supportées : PWM Simple (consigne zero -> rapport cyclique de 50 %), PWM + Dir.

    - Possibilité de régler la fréquence de la PWM (4 ou 8 KHz pour les modes PWM Simple, PWM + Dir)

    - Possibilité de régler les PPR de votre moteur si vous utilisez un encodeur quadratique.

    - Possibilité de mettre plusieurs effets personnels forcés, en plus de ceux des jeux.

    - Possibilité régler le gain global par un potentiomètre externe.

    - Gestion de profils de réglages, avec possibilité d'auto détection du jeu.

    Voici quelques photos :


    GS_Wheel.jpg           Shield_Ioni_LoadCell.jpg

    -Le volant, avec son moyeu usiné par Rider63, le support volant fait par son pote, et la roue Oreca 300 mm.----------------------Le shield que j'ai bricolé pour brancher l'IONI et la load cell-------


    LoadCellWiiBalance_H.jpg -------------------LoadCellWiiBalance_L.jpg

    ---------------- La jauge de contrainte de Wii balance vue de haut ---------------------------------------------------------------------- Vue de coté ------------------------------


    Liste de courses :

    - Arduino Leonardo

    - Un câble USB mini

    - IONICube 1x

    - Ioni Pro ou Ioni Pro HC

    - Alim 48V 12.5A

    - Alim 24V 1.1A

    - Moteur Mige 130ST-M10010 avec un encodeur quadratique 10000PPR

    - Roue 300 mm

    - Connecteurs Mâles+Femelles DB15 à souder avec les capots

    - Condensateur 10000 µF 80V

    - Diode de commutation de puissance

    - Connecteurs HE10F20 Femelles

    - Cables pour connecter le moteur et l'encodeur à l'IONI

    - Cable 16 conducteurs pour le câble qui récupère les signaux de l'encodeur pour les envoyer à l'IONI (si vous voulez le faire vous même)

    - Option : shield load cell HX711 + WiiBalance d'occasion pour récupérer 4 load cells de qualité pour 15 €...

    - Oscilloscope si vous n'en avez pas (très utile en cas de problème) : http://www.nooelec.com/store/dso138.html

    Note pour le shield load cell HX711 de yourduino : pour avoir un 80 SPS au lieu de 10 SPS, il faut désouder la patte 15 du chip (RATE) qui est soudée à la masse, et la connecter au 5V (broche 16). Sinon il y a un shield similaire chez Sparkfun, avec un juste pont à souder à la place...

    Options (pas testées personnellement)

    - A la place du Mige 130ST-M10010, il semblerait que le 130ST-M10015 soit plus adapté (testé par Loopingz), mais à mon avis il faut une alim un peu plus puissante.

    CablageLeonardoIoni.jpg

    Le câblage pour la VSD est ici : https://docs.google.com/spreadsheets/d/1PqD...t#gid=653735787

    - Pour connecter un seul bouton par entrée, ou une entrée analogique (pédales, etc.), il faut utiliser les montages suivants :

    Bouton_Analog.jpg


    - Pour connecter plusieurs boutons sur une seule entrée analogique, utilisez le câblage suivant (c'est le montage BoDAC) :

    Boutons_4.jpg


    Vous trouverez des informations et outils pour tester votre Bodac ici : https://docs.google.com/spreadsheets/d/1PqD...#gid=1312111957

  • Les réglages de l'IONI sont "classiques", sauf le "Torque Bandwith Limit" que j'ai mis à 100 Hz :

    Granity_Connect.jpg ------Granity_Goals.jpg

    Granity_Machine.jpg ------Granity_Tuning.jpg

    Granity_FaultLimits.jpg

    Pour éviter tout problèmes, Il faut mettre à jour le firmware de l'IONI, Ça se trouve ici : http://granitedevices.com/wiki/IONI_firmware_releases

    Il faut également installer Granity pour configurer l'IONI : Ça se trouve ici : http://granitedevices.com/wiki/Granity#Download

    Le soft de configuration se télécharge ici :

    http://www.aiwave.fr/wc_updates/1033/WheelConfig_0.21.exe

    Vous trouverez ici la liste des utilisateurs, des courses, les schémas et autres infos : https://docs.google.com/spreadsheets/d/1PqD...d=0&vpid=A1

    Mini tuto :

    Première étape : Câblage

    Câblez tout ce qui est sur le schéma (sauf la LoadCell et le potentiomètre externe si vous n'en avez pas). Soyez rigoureux, n'improvisez pas, utilisez de la gaine thermo-rétractable et des câbles blindés. Si vous ne fixez pas vos éléments dans un boitier tout de suite, utilisez du double face ou un autre système pour éviter les courts circuits accidentels. Ne vous précipitez pas, ne jouez pas avec le feu, on joue avec des puissances de l'ordre de 1000 W et avec des tensions/courants élevés. La moindre touchette d'un 24V sur une pin de l'Arduino le détruira en quelques micro-secondes. L'Ioni est assez bien protégée, mais pas indestructible non plus...

    Évitez les câbles de mauvaise qualité (notamment les câbles USB), même si je sais que c'est plus facile à dire qu'à trouver...

    Si vous avez un multimètre, vérifiez toutes vos connections. Sachez qu'au moins 50 % des problèmes que vous allez probablement rencontrer seront des problèmes de connectique.

    Si vous avez un oscilloscope, même un pas cher, vous pourrez vérifier vos signaux.

    Deuxième étape : Configuration/test de la partie puissance

    Configurer l'IONI (ou le drive que vous utilisez) et vérifiez que tout marche bien (vérification de la récupération de la position de l'encodeur, tests en mode couple et vitesse).

    Ne passez pas à l'étape suivante tant que ce n'est pas ok à ce niveau, sinon vous perdrez votre temps (et celui de ceux à qui vous allez demander de l'aide parce que ça ne marche pas :/)

    Troisième étape : Installation/configuration de la Leonardo

    Installez la dernière version de l'IDE Arduino : https://www.arduino.cc/en/Main/Software#

    Vous en aurez besoin pour installer les pilotes de la carte la première fois que vous la brancherez.

    Les instructions pour installer les pilotes sont ici : https://www.arduino.cc/en/Guide/ArduinoLeon...oLeonardo#toc10

    Une fois que les pilotes sont correctement installés, vous pouvez continuer.

    1 ) Branchez votre Arduino Leonardo. Pas besoin d'installer un sketch, il peut être vierge.

    2 ) Débranchez votre câble spirale relié à vos boutons si vous en avez un (au cas ou vous n'avez pas câblé l'encodeur ou les phases du moteur dans le même sens que moi).

    3 ) Installez le soft. Sous windows 8 (et peut être sous d'autres versions), il faut installer en tant qu'administrateur (bouton droit sur l'exe -> exécuter en tant qu'administrateur). Le mieux est de ne pas l'installer dans "Program files", mais plutôt dans un dossier qui ne pose pas de problèmes de sécurité pour Windows (sur Windows 8, l'OS crée un répertoire "Virtual Store" si le programme essaie d'écrire dedans, par ex pour un fichier de config).

    4 ) Ensuite à la fin de l'installation, laissez coché "Run WheelConfig", ça va lancer le soft (attention la fenêtre peut être cachée, je n'ai pas encore réussi à la faire passer devant).

    5) Choisissez le port série sur lequel est connecté votre Arduino Leonardo.

    6) Cliquez sur "Check Now".

    7 ) Si vous avez une alerte de connexion de votre pare feu, autorisez la connexion vers l’extérieur. Ayyyez cooonfiannnce (:D)

    8 ) Normalement il va vous dire qu'il y a une mise à jour de firmware de disponible, cliquez sur "Oui".

    9 ) Le Leonardo devrait automatiquement être détecté et le firmware devrait être installé.

    10 ) Une fois le firmware installé le volant va se calibrer automatiquement et rechercher le signal d'index. Voir ci dessous pour la signification du clignotement de la Led de l'Arduino.

    11 ) Si votre volant ne se calibre pas comme il faut et part en rotation indéfinie, cochez "Invert" dans le cadre "Wheel".

    12 ) Normalement à cette étape le volant doit se calibrer et chercher l'index. La led du Leonardo clignote à différentes fréquences en fonction de l'étape.

    13 ) Mettre le "Main Gain" à zero, centrez votre volant et cliquez sur "Center Wheel". Remettre "Main Gain" à 100 %

    14) Réglez le "Max angle" comme vous le souhaitez.

    15) En cliquant sur "Advanced Settings", vous pouvez configurer les paramètres spécifiques de votre drive et les mappings des pins d'entrée et de réglage de gain.

    16) Si vous voulez pouvoir régler le gain avec un Potar, connectez le sur la pin A5 du Leonardo (ou celle choisi à l'étape précédente). Sinon configurez la pin "External Gain" sur "None" dans "Advanced Settings".

    17) Si vous voulez jouer avec la version de dev, il y a un raccourci dans le menu démarrer....

    18) Si vous avez un problème ou si vous avez trouvé un bug, merci de le signaler afin que je mette à jour le topic.

    Led de l'Arduino : ses différents états

    - Arduino en mode "Bootloader" : la led varie d'intensité progressivement à 1 Hz pendant 8 secondes.

    Pour avoir des infos liées au fonctionnement du volant, il faut sélectionner D13 dans "Advanced Settings/Satus LED" (config par défaut)

    - Calibrage du volant / analyse de la direction (non disponible pour l'instant) : la led clignote à 10 Hz pendant 2 secondes max.

    - Calibrage du volant / recherche d'index (encodeur quadratique) : la led clignote à 2 Hz pendant 10 secondes max.

    - Calibrage du volant / recherche des butées mécaniques (potentiomètre) : la led clignote à 2 Hz pendant 3 secondes max pour chaque recherche de butée.

    - Calibrage du volant / retour au centre après calibration réussie : la led clignote à 5 Hz pendant 10 secondes max.

    - Erreur de calibrage : la led clignote à 0.5 Hz (1 clignotement toutes les 2 secondes).

    - Fonctionnement une fois calibré : la led s'allumera quand la commande de couple est au max (clipping).

  • Utilisation

    Steering

    - "Max Angle" : Réglez sur l'angle maximum que vous voulez.

    - "Center Wheel" : Centrez votre volant (mettez l'effet "Desktop Spring" à zéro si c'est trop dur) puis cliquez sur ce bouton.

    - "Invert" : Si le volant physique ne tourne pas dans le même sens que le volant dans un jeu, cochez cette case. Cette option est sauvegardée par profil de jeu.

    - "Calibrate" : cliquez sur ce bouton si le volant n'est pas calibré ou s'il s'est décalé.

    - "Manual" : si le volant n'arrive pas à se calibrer automatiquement (pb moteur), cochez cette case, cliquez sur "Calibrate" et tournez le volant jusqu'à ce que le "Device Status" dans WheelConfig passe à "Homing" ou "Ready".

    Status

    - "Device Status" :

    = "Disconnected" : Carte déconnectée, vérifiez que le câble est branché et que vous avez sélectionné le bon port com dans WheelConfig.

    = "Connected" : Carte connectée, normal si vous n'avez jamais flashé le firmware et que les pilotes de la Leonardo sont correctement installés, pas normal sinon.

    = "Calibration error" : Carte connectée, mais il y a eu un problème dans la phase de calibration. Vérifiez que l'alimentation de puissance est activée.

    = "Ready" : Carte connectée, volant correctement calibré. Prêt à jouer (IMG:style_emoticons/default/lol5.gif)

    - "External Gain" : Si vous avez configuré la pin dans "Advanced Settings" et connecté un potentiomètre externe, vous verrez la valeur refléter votre réglage.

    Update

    - "Automaticaly check for updates" : Cochez si vous voulez que WheelConfig cherche une mise à jour à chaque lancement (autorisez votre pare feu s'il y a une alerte).

    - "Check Now" : cliquez pour vérifier manuellement la présence de mise à jour disponible.

    - "Firmware version" : doit être différent de "0.0".

    - "Software version" : version de WheelConfig, aussi affichée dans le titre de la fenêtre.

    Game Profiles

    - "New" : Cliquez sur ce bouton pour créer un profil. Allez voir dans votre gestionnaire de tache Windows le nom du processus (Ctrl+Shift+Echap).

    - "Edit" : Pour modifier un profil existant.

    - "Remove" : Pour supprimer un profil existant.

    - "Detect Game" : Si vous voulez que WheelConfig détecte automatiquement quand le jeu est lancé et applique le profil, cochez cette case. Afin de limiter les accès à la carte (vérification du statut toutes les secondes), minimisez WheelConfig, l'icone va se mettre dans la barre de tâche en base à droite.

    Select

    - "Gaming Device" : Sélectionnez le périphérique de jeu qui correspond à votre volant.

    - "Wheel Com Port" : Sélectionnez le port série qui correspond à votre carte Leonardo.

    - "Advanced Settings" : voir ci dessous ...

    Advanced Settings

    Drive Settings

    - "Command Mode" : Choisissez le mode de commande du drive. Pour la VSD il faut utiliser "PWM", pour l'IONI : "PWM+Dir", Attention, les modes "PWM+/-" ne fonctionnent plus !

    - "PWM Frequency" : Pour la VSD, IONI, Argon il faut utiliser 8 KHz.

    - "Encoder PPR" : mettre ici la valeur du nombre de points par révolution de votre encodeur quadratique (2500, 5000 ou 10000 pour les Mige, selon les versions). C'est la même valeur que dans Granity. Attention ce n'est pas le nombre d'impulsions par tour est qui est 4 fois cette valeur quand on utilise les fronts montants et descendants des 2 signaux en quadratures.

    Digital Inputs

    Choisissez pour chaque bouton que vous avez câblé les entrées correspondantes de l'Arduino Leonardo. Pour les Bodacs, A4(1) par ex signifie "Bouton 1 du Bodac connecté sur la pin A4".

    Analog Inputs

    - Pour l'axe du volant, sélectionnez "Enc(0-1)" si vous avez un encodeur quadratique (voir schéma). Attention, l'entrée analogique pour cet axe ne fonctionne plus !

    - Pour les autres axes vous pouvez choisir une entrée analogique, ou "LC(5-7)" si vous utilisez un shield HX711 connecté à une jauge de contrainte ("Load Cell", voir schéma).

    - Pour chaque axe vous pouvez modifier la courbe de linéarité, ce qui permet de compenser une non linéarité (ex pédale de frein avec ressort non linéaire, butée en mousse, etc...).

    - "Ext Gain" : permet de configurer le réglage de gain externe par potentiomètre (voir schéma).

    Output Mapping

    - "Status Led" : Led d'état général. Voir plus haut la signification des différents clignotements.

    - "LC Sync" : Signal haut lors de la récupération de la valeur sur le HX711 (Load Cell)

    - "Send Sync" : Signal haut lors de l'envoi des entrées au PC par USB.

    - "Ctrl Sync" : Signal haut lors du rafraichissement de la boucle de contrôle.

    Reset To Defaults : Réinitialise toute la configuration de la carte et met les valeurs par défaut (comme si vous installiez le firmware pour la première fois).

    Réglages des Effets

    Main Gain : Gain principal, agit sur tous les effets en même temps, y compris ceux du bureau, mais pas sur les butées.

    Game Effects : Ce sont tous les effets qui peuvent être crées lorsque vous lancez un jeu. La plupart des jeux n'utilisent pas tous les effets, donc si le réglage d'un effet ne semble pas changer le rendu, c'est probablement que l'effet n'est pas utilisé.

    User Effects Ce sont des effets ajoutés "par dessus" les "Game Effects". Les réglages des "User Effects" sont indépendants des réglages "Game Effects". Ils ne doivent être utilisé qu'avec parcimonie.

    L'effet "User Spring" ne doit jamais être utilisé, sauf dans un jeu qui n'a pas de FFB.

    Les effets "User Friction, Damper et Intertia" peuvent être utilisés dans le cas d'un Direct Drive pour compenser la faible friction et la faible inertie d'un volant de ce type.

    Filter : Permet d'éliminer le grain produit par les effets Friction, Damper et Intertia. Habituellement je met entre 20 et 30 %.

    Steering Stop : Réglages des butées. Ne pas les régler le "Damper" trop fort pour limiter le rebond. Habituellement je met 100 % de Spring et 35 % de Damper.

    Desktop Effect : Effet utilisé sur le bureau. Usuellement on met un peu de "Spring" et un peu plus de "Damper" pour ramener le volant au centre doucement (par ex 5%/20%). Ça permet d'éviter un a-coup quand on lance un jeu et que le volant n'est pas centré.

    Effets

    - Spring : Effet ressort : ramène le volant à une position comme si un ressort plus ou moins dur y était attaché.

    - Friction : simule une friction statique : par exemple quand on essaie de faire glisser un objet assez lourd sur une surface qui ne glisse pas trop, on doit pousser une certaine force minimum avant que l'objet ne se déplace. Ensuite une fois qu'il bouge, les frottements sont limités (dans une certaine mesure).

    - Damper : simule un amortisseur. S'oppose à la vitesse. Plus on tourne vite le volant, plus ça freine.

    - Inertia : simule l'inertie due à la masse du volant (et du train de roue etc...). "rajoute du poids au volant". Il faudra exercer une plus grande force pour faire bouger ou arrêter le volant.

    - Constant : ça en fait, c'est une commande directe en couple sur le volant. C'est utilisé par certains jeux pour piloter directement le volant ou pour émuler certains effets, et aussi lors des chocs.

    - Sine : Ce réglage affecte tous les effets périodiques (sinus, rampe, carré, triangle, dents de scie). La plupart du temps utilisé pour les vibrations (moteur, vibreurs, etc). Parfois utilisé pour autre chose.

    - Force Table : pas encore implémenté, mais c'est l'équivalent d'un sample audio. Permet de générer des vibrations un peu plus riches que des sinus, mais jusqu'à maintenant pas mal de volants ne le supportaient pas

    - Filter : filtre utilisé par les effets Friction, Damper et Inertia

  • Bugs connus

    - Volant qui part en rotation infinie après l'allumage de l'IONI -> Mettre à jour le Firmware de l'IONI, ou désactiver les connections des capteurs Hall dans Granity.

    - Carte Leonardo qui n'apparait pas (port série), ou port série qui apparait mais qui n'est pas utilisable -> débrancher et rebrancher la carte / changer de port USB / réinstaller les pilotes / redémarrer Windows / tout jeter par la fenêtre (IMG:style_emoticons/default/lol5.gif)

    - Si vous connectez un autre périphérique USB après l'Arduino de votre volant, il est possible que l'Arduino disparaisse ou change de port com -> débrancher et de rebrancher l'Arduino, et relancez WheelConfig.

    - Pertes de centrage : la Leonardo n'ayant pas de circuit de décodage pour les signaux quadratiques, la solution utilisée ici (interruptions) semble plus sensible que les cartes à base STM32 (comme la Discovery). Si vous expérimentez des pertes de centrage fréquentes malgré l'utilisation de câbles blindés, passez à la solution MMos.

    Vous trouverez une liste de cas et diverses solutions ici : https://docs.google.com/spreadsheets/d/1PqD...#gid=2034136337

    Un petit screenshot de la version dev :

    WheelConfigDev.jpg

    WheelConfig_as.jpg --------WheelConfig_le.jpg

    Ce qu'il reste à faire :

    - Implémenter l'effet 'Custom Force" (table de forces) qui est le seul qui manque.

    - Adapter tout ça sur Node Blue !

    - Faire un pilote sur Windows pour optimiser les transferts d'info FFB et améliorer la réactivité du système.

    - Calibration de l'ADC (c'est implémenté dans Node Blue)

    - Gestion des montages classiques de boutons sur entrées analogiques (c'est implémenté dans Node Blue)

    - Configuration/Calibrage des BoDAC et montages classiques (c'est implémenté dans Node Blue)

    - Traduction en Français

    - Gestion de boite en H avec des potentiomètres (c'est implémenté dans Node Blue)

    - Gestion des matrices de boutons (c'est implémenté dans Node Blue)

    - Gestion des circuits de multiplexage en SPI ou I2C pour les boutons

    - Gestion des afficheurs à LED et écrans tactiles pour la télémétrie et/ou la configuration (c'est implémenté dans Node Blue avec SimHub et Fanaled)

    - Gestion des roues Fanatec (c'est implémenté dans Node Blue)

    - Boutons pour centrer le volant et régler l'angle max. (ça sera facile à implémenter dans Node Blue)

    - Développement d'une API pour permettre jeux l'accès aux réglages de butées.

    - et plein d'autres choses...

    Merci à tous les membres du forum qui ont contribué à ce projet RFR Wheel. :yes: :+++::biga::merci::pardon:

    Ma vidéo de présentation :

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    Vidéos tutos réalisées par d'autres gens (je ne suis responsable en rien du contenu de ces vidéos, en particulier de la musique :B ou des idées à la noix de remplacer l'index par un bouton....) :

    Note : Au lieu d'utiliser XLoader pour uploader le FW, je recommande plutôt BitBurner

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.