DIY - quel type d'asservissement pour développer un bon FFB (débat)

  • Ah ok, on en avait deja parler sur l'ancien forum :)

    Asus Prime X570-P - AMD 5800X3D - 32GB CAS16 - Gigabyte RTX 4090 Waterforce - Pimax Crystal.

    Simucube1 20Nm Mige - Wave Italy Monza - Bash Pro Actice HShifter - DSD ButonBox - Ascher F28SC & BM16SC - XeroPlay QR - PT Actuator Champion GT

  • Comment ça on a perdu la trace où Léo m'insulte parce que j'ai copié son travail ?

    Il n'en n'était pas sorti grandi de celle-là...

    Message modifié 1 fois, dernière modification par Mizoo (7 septembre 2021 à 11:43).

  • Mais à l'occasion j'ouvrirai un topic pour parler de ça (ou un gentil administrateur fera le déplacement), parce que là on a bien a pourri le topic de Carlton avec un truc qui a rien à voir.

    hop, le ménage est fait : si besoin tu peux même renommer le topic ;)

    ► La liste de mes tutos 

    Gseat à presssion, harnais 2DOF, Simucube 1 mige normal, CSP V3, TH8RS moddé, FaM loadcell, ThroneThumper, triple 24"

    ►Les impacts de la 5G ? doc en français exposition 24H/24 à des niveaux de rayonnement RF (+20 000 satellites braquant leur faisceaux sur la terre + stations relais au sol). Si vous ne voulez pas muter à seule fin d'avoir un frigo connecté, signez la pétition

  • C'est intéressant ce topic. Moi pour essayer d'ouvrir un peu je déteste devoir rajouter des effets côté matériel. Je pense que plein de simu calculent mal leurs effets ou alors c'est pas trop mal calculé côté pneus mais derrière c'est mal géré dans les liaisons les bras de suspension la crémaillère... C'est là où on doit avoir de la friction et c'est la géométrie de suspension qui doit amener de la stabilité (essentiellement la chasse mais aussi le pincement et le carrossage)... Bref si c'était bien fait. Ça devrait être plus smooth côté avec ou sans les mains dessus et sans effet supplémentaire.

  • bonjour messieurs, dame :coucou:

    Je suis passé en mode silence depuis 4/5 mois, parce que j'ai arrêté de coder et je me suis pris pour un pilote, mauvais je l'accorde :) :hihihi:

    Petit focus sur le vesc 4.2 et la version PWM que tu avais testé Etienne, il y avait un bug dans la détection de l'inductance et du linkage, qui faisait que le gouverneur prenait la main sur le capteur de position : bilan au lieu d'utiliser le capteur de position de position, il la corrigeait avec une position théorique, d'ou l'apparition d'un cogging. la règle des 5C :euh2:

    Un pwm 32b c'est bien pour commander un générateur de courant, mais j'ai comme un doute sur la capacité des systèmes à transmettre / recevoir ce signal de manière qualitative entre deux carte. je l'ai vu en écrivant le décodeur coté vesc, soit tu fais une sale lecture adc (beurkkkk), soit tu fais une lecture de longueur de cycle, mais il faut avoir une clock sacrément bien calé pour avoir de la précision : 16khz * 2* 2^32 ca fait beaucoup... sans compter que quand tu n'as plus de signal, tu ne sais pas détecter de 0 parce que tu n'as plus de tick sur un signal de synchro. On arrive à faire des choses, mais je ne trouve pas ca propre : passage au CAN.

    je me replonge donc le code avec pour but d'améliorer dans un premier temps le moteur ffb avec des technos que j'ai sous la main. En l'occurence celui d'openFFBBoard : contrôle par courant en regardant de plus près ce qui se passe avec les filtres. Les filtres numériques sont grisant et les développeurs vont vite dans la mise en place, mais comme en audio, quand on commence à rajouter des filtres, sur des filtres, avec des booster de gain qui rentrent dans des filtres, il reste quoi à la fin ? Et bien comme tu dis Etienne : du caca :ptdr:

    Alors pour commencer, je ne crois que ce que je vois et on n'améliore que ce que l'on mesure, donc je commence à la base, j'ai rajouté un monitoring de FFB qui permet de mesurer ce que l'on a comme effet et leur volume max, parce que s'il n'y a pas d'effet conditionnel et bien la donne est plus simple, c'est au jeu de se débrouiller avec ce qu'il recoit comme info (la position). Et bien les choses évolues : je commence à voir du damper, du spring...

    Je prends donc les sujets dans l'ordre, il faut une lecture de position et de vitesse de précision et quite à y etre, autant prendre l'accélération par les cornes. Si le capteur est borgne, aucune chance que l'effet soit roi et HiFi. Et comme je suis une bille en math, bein j'ai codé un truc visuel... Il est maintenant pour moi in-envisageable d'avoir un moteur FFB sans réglage fin de l'encodeur, on peut mettre autant de filtre de construction/reconstruction, limiteur de gain et autre booster, si le signal est pourri, il est pourri :D et comme les effets sont calculés à partir de ce signal : FAIL.

    J'ai modifié une version du firmware pour y coder les settings qui vont bien dans la partie de capture de position et de calcule de la vitesse/accel. Un pas de geant dans le ressenti du volant, je sens immédiatement les variations de damper en jeu, les survirages, et je peux compter les zones rouges et blanches des vibreurs dans les mains... Parce que franchement, caller la réponse d'un système FFB pour que ca marche avec encodeur 2500cpr, ca n'a juste aucun, mais aucun sens.

    Pour mettre en lumière ce que tu cries haut et fort depuis longtemps Etienne, (attention anglophile, vos oreilles vont saigner) :D

    External Content youtu.be
    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.

    Dans un second temps, j'ai prévu de regarder le temps de réponse en couple dans un système fermé. La linéarité de la reproduction du couple permettra de maximiser le ressenti. Je vais tester le loadcell en mode balance, avec un arbre sur l'axe pour mesurer deux choses. Premièrement la linéarité de réponse sur une commande "full torque" ca devrait permettre de mesurer aussi les latences et les effets des pi(d) des algos de foc. Puis dans un second temps des mesures 0-10%, 0-20%, etc. et voir si je peux sortir une map prédictive de réponse de couple pour booster les signaux si les systèmes de production physiques sont trop mou. Si ca marche, je l'intégrerait au firmware à la mode LUT.

    Voilà ou j'en suis dans mes réflexions et développement, et au plaisir d'être lu et challengé pour progresser ;)

    Volant DIY (OpenFFBoard + BusCAN + VESC + Mige15015 + BissC c.f. forum pour plus d'info), Pédales DIY (LoadCell, capteur à effet hall, impression 3d, sans fil), Roue DIY (16 boutons, 4 encodeurs, sans fil)

    Message modifié 1 fois, dernière modification par Carlton (26 février 2022 à 09:49).

  • Merci pour ces partages d'info et pour tes contributions :)

    Intéressant le bug que tu as trouvé ! Il va falloir que je trouve un peu de temps pour restester le FW 4.2 avec la correction, chaud car je suis toujours déjà sur 10 trucs en même temps :B . Tu me diras ce qu'il faut faire, s'il suffit d'uploader un FW mis à jour ou si c'est plus compliqué.

    Super ta vidéo, bon effectivement j'ai du sang dans les oreilles mais ça montre très bien ce que j'ai expliqué il y a des années déjà :)

    Pour la précision de la pwm de commande, je ne vois pas l'intérêt de passer en 32 bits, dans la mesure où les ADC qui mesurent le courant pour l'asservissement auront n'auront jamais plus de 16 bits de précision (à mon avis plutôt autour de 12/14 bits max, en sachant que les STM32 utilisés sur le VESC (et la plupart des drives que j'ai vu passer à base de STM32) ont des ADC 12 bits. Peut être en ayant 2 chaines de mesures, une pour les faibles courant et une pour les fort courant (je ne sais pas si ça se fait, la jointure entre les 2 n'étant pas forcément évidente).

    Sur les méthodes pour mesurer la PWM, je suppose que quand tu parles d'ADC, c'est avec un filtre passe bas en amont, donc lag donc faut clairement oublier. Les seules méthodes correctes c'est avec un timer HW, soit dédié et déclenché/arrêté automatiquement, soit avec des interruptions qui mesurent le rapport cyclique à l'aide d'un timer global.

    Mais je ne comprends pas ton calcul 16khz * 2* 2^32 (pourquoi tu multiplie par 2 ?).

    Pour moi :

    Si on se place dans le cas où le drive ne fait pas les effets de friction/damping/inertie et que c'est le MCU FFB qui les calcule, alors si la commande est rafraichie à 16 Khz, avec 32 bits en utilisant un timer HW il faudrait une clock à 16000*2^32 = 65 Thz ! (1 Ghz pour 16 bits), donc effectivement c'est pas possible avec les MCU dont on dispose.

    Si on prend 1 KHz en 16 bits, on est à 65 Mhz, c'est déjà plus réaliste, et même si ce n'est pas idéal, on a déjà un truc pas mal.

    Mais on est d'accord que dans cette configuration, où ce n'est pas le drive qui gère la friction/damping/inertie et où la commande est envoyée en PWM, il faudrait monter plus haut pour profiter d'un encodeur ultra précis et faire des effets friction/damping/inertie très fins.

    Donc clairement pour améliorer la situation, il faut communiquer numériquement entre le mcu FFB et le drive, et ensuite il n'y a que 2 voies : rester à 1 KHz (par ex) mais laisser le drive gérer friction/damping/inertie (donc en plus de la commande de couple, envoyer ces 3 gains), ou monter beaucoup plus haut et gérer tout sur le MCU.

    Par contre je trouve que le can bus comme protocole est overkill pour 2 systèmes qui sont sont à côté et dont on maitrise la connectique. Un UART serait largement suffisant, par ex à 1 MBits/s, même en utilisant des commandes sur 32 bits, on passe facilement 16 bits à 16 KHz ou 4x32 bits à 4 KHz. Et en plus une com série classique c'est full duplex pour récupérer la position en même temps qu'on envoie la commande. Utiliser du can nécessite de rajouter une électronique d'adaptation, et ce n'est pas full duplex.

    Pour ce qui est de l'utilisation des filtres numériques, c'est clair qu'en cherchant sur internet et tu vas vite trouver des algos magiques. Le seul soucis c'est que pour utiliser des filtres il faut maitriser les maths qu'il y a derrière tout ça pour ne pas faire n'importe quoi. Et là c'est une autre histoire que de copier coller 2 lignes de codes. J'ai malheureusement vu ça très souvent, que ce soit dans la gestion de FFB ou dans les algorithmes pour la gestion des mouvement de simus...