DIY - [OpenFFBoard + VESC + BISSC] Connection en CANBus, command de couple numérique : feedback et code source...

  • Bonsoir,

    comme vous le savez probablement, je me suis créé un premier setup il y a de cela une grosse année avec MMOS et un contrôleur de moteur VESC pour mon mige 15015 :siffle:

    Ce setup, qui m'est revenu à 400€, vient de subir un petit lifting ;) :++:

    Au menu :

    -> passage sur OpenFFBoard pour avoir une fréquence de calcul du FFB plus rapide et surtout OpenSource pour y contribuer :merci:

    -> mise en place d'une commande numérique de "couple/position encodeur" entre le VESC et la discovery (STM32) :euh2:

    -> gestion de l'encodeur par le vesc.

    Bilan : ca n'a absolument rien à voir par rapport à la première version en PWM+DIR :yep: : le volant est plus souple et tout me semble plus détaillé :

    • Les effets de faibles amplitudes sont "clairs" et se sentent bien dans les mains,: à vitesse réduites, je ressens très précisément les bosses et les trous de la route sans exagération, sans à-coups, vraiment très doux, je pense que cela vient de la précision de la commande numérique qui envoie une consigne de couple extrêmement précise
    • Les effets de dynamiques de voitures sont instantanés : je sens la voiture qui commence à perdre de l'adhérence, à ce moment les détails du sols redeviennent clairs et à la reprise de grip, le couple est franc sans pic.
    • Les crashs, coups de raquette et autre sont violent, mais ne font pas mal et c'est pas un grand coup de couple comme avant, mais quelques choses de plus précis, la descente est douce et je devine se qui se passe... C'est pas du ON/OFF

    Autrement dit, j'ai perdu tout mes repères :jecpa:

    Une petite video pendant laquelle j'ai essayé de faire un peu de tout :

    • de l'herbe et gravier à faible vitesse pour que vous voyez le détail de la commande de couple avec une très, très faible amplitude.
    • De grands virage avec perte/reprise d'adhérence
    • de petits virages avec un "laissé coulé" (c'est ce qui m'a le plus surpris... on peut décrire la route avec les yeux fermés)

    La courbe rouge, c'est la commande de couple reçu par le vesc, vous avez la valeur en numérique en dessous.

    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.

    Si vous tendez l'oreille, vous entendrez le jeu, le son est pris par le micro de mon casque audio, vous m'entendrez aussi souffler, et le bruit de mon pédalier... quand au volant : aucun bruit.

    :bounce2:

    Choses promises, chose dues ! le code source :

    de la doc viendra par la suite si certain veulent tester ;)

    Vincent

    Pour info j'utilise un vesc 4.12 ou un minivesc 4.2 sur lesquelles j'ai fait l'adaptation suivante :

    1. suppression du filtre RC sur les entrées du port du capteur de position pour l'encodeur ABI de 2500cpr
    2. remplacement des deux shunts de 0.001ohm par des 0.005 pour passer les vescs d'une plage -160A/+160A à -32A/+32A, ce qui améliore la précision par 5 du systhème de contrôle de courant !

    A venir : prendre du plaisir avec le volant, essayer de gérer des encodeurs BISS-c de mige dans le vesc.

    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)

  • Moi j ai hâte d essayer j ai quelques cartes STM32 il me manque la carte VESC si tu as des liens je suis preneur !

    j ai un moteur BMH1002P36F2A      avec un codeur 32768 points/tour Sinocs Hiperface monotour

    si tu a les démarches pour charger les softs j ai un souvenir pour MMOS sur la stm32 et peut une procédure

    a respecter

    Merci a toi

    si tu as besoin n hésite pas en MP

    n oubliez pas qu un con qui marche ira toujours plus loin qu 'un intellectuel assis

    AMD 5800X3D W10 RTX4070Super 3X27pouces et Pico 4 MMOS2014 Ionicube

    :aspi:

  • Je vais faire des petits tutos videos, et écrire un guide de mise en place.

    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)

  • Salut Carlton,

    tu sais si tu as une lecture du VBUS dispo sur ta carte ?

    Histoire de pouvoir intégrer une résistance de freinage (si toutefois le vbus est routable vers un comparateur).

    Car d'après ce que j'ai compris tu utilises une batterie Lithium avec VESC configuré avec un frein régénératif, qui marche bien sur batterie mais peut être fatal à une alimentation stabilisée.

    Dès que je peux, je vais regarder si l'on peut porter VESC sur la carte X-NUCLEO-IHM08M1 de ST, qui a le bon goût d'avoir 3 capteurs de courant au lieu de 2, tout en étant moins chère et peut être d'une meilleure qualité que les clones VESC chinois.

    En tout cas, si tout se passe bien on est bien parti pour proposer une solution encore plus low cost que ce qui existe dans le commerce; l'histoire se répète sur ce forum :)

    Je suis d'ailleurs extrêmement surpris que 10 ans après personne n'ait encore proposé ce genre de montage DIY pour le driver. A l'époque, ce type de cartes n'existaient pas.

    Message modifié 7 fois, dernière modification par Mizoo (31 août 2021 à 11:33).

  • Oui il y a une mesure du VBUS, c'est assez facile d'écrire une application pour commuter un mofset sur une résistance de freinage : il faut compter une petite heure de boulot ;)

    Pour ce qui est des cartes a 3 shunts, je rejoins ton avis : ca doit être encore mieux ! Mais là, à deux shunts callés pour avoir une plage de +/-30A max, c'est déjà génial.

    J'ai regardé la carte FOCCer 2, elle a l'air carrément top, et j'en profiterai bien pour changer les shunts directement pour caller la lecture à 30A.

    Après le truc excellentissime, serait d'avoir une mesure sur 2 gains, un pour les courant <5A et un pour le 30A comme sur les IONI, il y a assez d'entrée analogique sur le VESC pour le faire... Je ne m'y connais pas assez en électonique analogique pour faire un tel étage, mais je peux le coder dans le vesc. Pour infos la lecture des ADCs est callée à la vitesse du FOC, 25khz par défaut et je le pousse à 30khz dans nos cas.

    Je vais changer les shunts de ma carte clone vesc6 pour voir si je peux en faire quelque chose...

    Par contre, je ne te rejoins pas sur ta dernière phrase, j'ai partagé un firmware de vesc il y a un an pour se faire une carte moteur DIY en PWM+DIR qui est utilisé par des simracer sous MMOS, Hoan et OpenFFBOard :)

    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)

  • Idéalement le VBUS doit arriver sur un comparateur, histoire de commuter le plus vite possible, et sans trop d'intervention CPU.

    Concernant la mesure de courant, il faut s'assurer qu'elle est faite par des ADC distincts, et non sur plusieurs canaux d'un même ADC, le timing est très important, il faut faire les mesures en même temps sur les 3 (ou 2) branches.

    La carte NUCLEO-G474RE que je voudrais coupler à la carte de puissance a 5 ADC (!), dont 3 câblés pour les mesures de courant. Mais bien sûr elle est introuvable en ce moment.

    Concernant ton firmware je voulais dire un équivalent au Ioni, avec tout ce qui permet d'affiner le rendu (filtre de reconstruction, de lissages, etc ...).

    Mais c'est difficilement le travail d'un seul homme sur son temps libre.

    Message modifié 4 fois, dernière modification par Mizoo (31 août 2021 à 12:30).

  • Tu n'as pas eu trop de mal à rentrer dans le code de VESC ?

    De mémoire, quand j'avais regardé il y a plusieurs années, c'était assez usine à gaz sans trop de commentaires.

    Message modifié 1 fois, dernière modification par Mizoo (31 août 2021 à 13:18).

  • je suis en train de me documenter sur VESC project il y pas mal d infos et matière a travailler j espère en comprendre un maximum pour

    vous suivre dans ce projet .

    n oubliez pas qu un con qui marche ira toujours plus loin qu 'un intellectuel assis

    AMD 5800X3D W10 RTX4070Super 3X27pouces et Pico 4 MMOS2014 Ionicube

    :aspi:

  • Ca peut t'aider (et d'autres aussi) à comprendre à quoi sert un driver: Motor control

    Il manque quelques infos mais je pense que ce sont les meilleures vidéo d'introduction sur le sujet du contrôle des moteurs sans balais.

    EDIT: pouarf! :doh: je viens de me rappeler ton métier :LOL:

    Ca servira à d'autres.

    Message modifié 5 fois, dernière modification par Mizoo (31 août 2021 à 15:15).

  • super merci ca va m occuper pas trop de taf aujourd'hui réviser les bases ne fait jamais de mal !!!

    n oubliez pas qu un con qui marche ira toujours plus loin qu 'un intellectuel assis

    AMD 5800X3D W10 RTX4070Super 3X27pouces et Pico 4 MMOS2014 Ionicube

    :aspi:

  • Rentrer dans le code du vesc, il m'a fallu 1 an de hobbyst, j'y ai passé des heures au carrés...

    Je l'utilise dans d'autre application que le simracing.

    Pour la lecture de l'ADC, ce n'est pas une lecture séquentielle dans le code, mais "pseudo parallèle" par le CPU avec mise à dispo des infos par DMA. Concrètement vue la vitesse du timer pour l'ADC on est large, il fait toutes les mesures d'un coup et les échantillons sont frais à chaque calcul de FOC. Les calculs du foc sont quand à eux callés sur la freq du PWM de pilotage des mofsets, dans mon cas à 30khz.

    Actuellement, sur le 4.12, le vesc lit d'un coup les entrées suivantes : 2 shunts, la BEMF des 3 phases, la tension d'entrée (VBUS/VIN), 2 ADC "externes" (EXT & EXT2 sur le connecteur accessoire), la temperature du moteur, la temperature a coté des mofset et pour finir la Vref Intermédiaire du STM32

    Nous avons donc à notre dispo des ADC de dispo pour mesurer une 3eme phase par exemple ou pour rajouter un second étage de mesure de shunt sur un autre niveau de gain.

    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)

  • Oui, ça c'est l'ancienne méthode de la V4, la lecture sé. Sur VESC V6, ainsi que tous les autres frameworks FOC que je connais, les shunt de courant sont lus en même temps avec plusieurs ADC.

    C'est d'autant plus important quand tu n'as que deux shunts.

    Benjamin Vedder avait fait un semi article sur les bénéfices réels de ce changement.

    Un autre article intéressant sur le contrôle moteur: https://community.nxp.com/t5/Model-Based…-1-2/m-p/781020

    Chapitre "HARDWARE SUPPORT" il revient sur la nécessité d'avoir un ADC par shunt de courant.

    EDIT: c'est ce qui me semblait, que VESC était une grosse bête. Je vais commencer avec le Motor Control SDK de ST, même si je ne suis pas fan de leurs outils en général.

    Message modifié 1 fois, dernière modification par Mizoo (31 août 2021 à 15:47).

  • Pour être certain que nous parlions de la même chose : sur le vesc4 et le vesc6, tous les channels des 2 ADCs sont lus en même temps :-D

    C'est pour cela d'ailleurs que la lecture est callé sur la clock PWM, ca permet de mesurer de manière synchro avec les mofset commuté pour éviter le bruit sur les changement d'état.

    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)

  • Pour être certain que nous parlions de la même chose : sur le vesc4 et le vesc6, tous les channels des 2 ADCs sont lus en même temps :-D

    C'est sur le "en même temps" que l'on ne se comprend pas. Un ADC ne peut faire qu'une seule mesure à la fois. Toutes les mesures que tu citais sont faites séquentiellement (mais sur 2 ADC). Mais je suppose que la mesure de courant est la première des deux ADC.

    Tu as quel STM32 sur ta carte ?

    Message modifié 3 fois, dernière modification par Mizoo (31 août 2021 à 16:08).

  • Oui on parle bien de la même chose du coup :)

    j'ai une STM32F407 sur la discovery et le vesc, de mémoire les ADC peuvent tourner à 40Mhz, donc à 30khz.

    Je me souviens avoir fait les calculs des timings, et c'était bon.

    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)

  • Tu saurais mesurer la durée de la boucle de régulation de courant ?

    Entre la fin de la mesure de l'ADC et la mise à jour du PWM.

    Alors là, j'ai mal à la tête :) je viens de passer 1heure dans le code, et je ne comprends pas tout ce qui est fait au niveau des timer.

    Bon dans notre cas, c'est le Timer2 qui sert à caller le rythme des ADC, et ils sont callés à 42Mhz (oui ils sont overclocker), mais je ne sais plus combien de temps de clock il faut pour lire les 3 ADCs et les copier en RAM. Je pense que c'est de l'ordre de 20 cycles au moins, donc 2Mhz de capture.

    Et j'ai dit une bêtise : le calcul du FOC est fait à cette vitesse des ADC des que le DMA a copié les données, c'est le PWM des mofset qui est callé à 30khz

    L'init de l'ADC, du DMA et du déclenchement du calcul sont callé ici :

    https://github.com/vedderb/bldc/b…cpwm_foc.c#L529

    Donc pour répondre à ta question sur les mesures de timings entre les deux. Par contre le FOC calcul beaucoup plus vite et souvent que la période des PWM, un ratio qui doit être de l'ordre de 2.1Mhz de FOC (hypothèse) pour 30khz de commande de pwm.

    Une dernière chose, les mesures de courant à travers les coils que je t'ai partagées sont sur un timer qui a une fréquences encore différentes des autres, je pense que ca n'aide pas à la lecture d'un signal stable. C'est pour limiter le volumes de samples...

    Je pense que c'est pour ca que le résultat au feeling est meilleur que ce que l'analyseur donne.

    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é 2 fois, dernière modification par Carlton (1 septembre 2021 à 00:10).

  • TI se targue d'avoir une boucle de courant d'une durée inférieure à 1µs sur les derniers C2000, je voulais donc savoir, pour référence, à combien était celle de VESC sur un F407.

    C'est la routine qui prend en entrée les différentes mesures (courant et angle rotor principalement) et qui sort la config PWM (pour le SVPWM). Normalement, elle est appelée depuis l'ISR ADC.

    Message modifié 1 fois, dernière modification par Mizoo (1 septembre 2021 à 10:04).

  • Salut,

    Ca commence à dépasser mes connaissances, mais j'ai pris mon courage a deux mains en rouvrant le datasheet du stm32f405.

    Dans la partie ADC, ce que je comprends, c'est qu'il faut 15clk d'ADC à 42Mhz, ca fait 0,5µs par capture.

    Mais il me semble qu'il y a 10 captures en séries plus le temps du DMA.

    je vais essayer de mettre des traces dans le code, ce sera plus simple qu'avec le datasheet :)

    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 (1 septembre 2021 à 14:54).