IMA5 2018/2019 P04
Sommaire
Présentation générale
Description
Les casques de réalité virtuelle permettent une immersion visuelle de grande qualité. Mais il manque le retour tactile des objets que l'on touche virtuellement. Pour pallier ce problème, il existe des gants haptiques qui fournissent sur les doigts de l’utilisateur des stimulations tactiles physiques. Ces gants utilisent des moteurs, des capteurs, des convertisseurs, une batterie pour actionner des effecteurs qui viennent stimuler la pulpe du doigt. C’est un système embarqué sur la paume de la main. La conception nécessite une bonne gestion énergétique (grâce à des convertisseurs) et le dimensionnement optimal des composants du système (moteur/réducteur/…)
Un prototype du VRtouch est déjà réalisé, mais qui possède des défauts. En particulier une mauvaise gestion énergétique qui réduit très fortement la durée de vie de la batterie, et qui ne permet pas au système d'avoir une dynamique suffisante à l'application qu'il vise. Une étude a donc été réalisée par les chercheurs de l'IRCICA pour chercher les solutions possibles à ce problème
L'objet de ce projet est d'abord de simuler le fonctionnement du système avec la modification proposée, pour pouvoir déterminer sa capacité à résoudre les problèmes évoqués, ensuite étudier et choisir des composants pour mettre en place cette solution, et enfin la fabrication d'un prototype réel.
Objectifs
Le travail se découpe en 3 parties :
- Réalisation d’un prototype virtuel, sous Matlab/Simulink
- Optimisation énergétique des éléments : estimation de la durée de vie de la batterie, choix des composants,
- Prototype réel : fabrication / réalisation d’un élément du gant (impression 3D , PCB, …)
Préparation du projet
Cahier des charges
Le cahier des charges est défini en trois parties distinctes, correspondant aux trois parties du projet. Comme chaque partie dépend de la précédente, le cahier des charges va se préciser au fur et à mesure de l'avancée du projet.
- Réalisation d’un prototype virtuel sous Matlab/Simulink. Pour cela il faut :
- Simuler chaque composant du système : hacheur, capacité, inductances, moteur...
- Pour chaque composant, vérifier son modèle
- Obtenir un modèle fiable du prototype
- Optimisation énergétique des éléments : estimation de la durée de vie de la batterie, choix des composants,
- Prototype réel : fabrication / réalisation d’un élément du gant (impression 3D , PCB, …)
Choix techniques : matériel et logiciel
Liste des tâches à effectuer
Les tâches barrées sont celles qui sont déjà effectuées à ce jour
Réalisation du prototype virtuel
Création d'une simulation simplifiée de la partie électrique sous Matlab :
Définition du schéma électriqueCréation d'un visuel du schéma électriqueDéfinition des équations du systèmeÉlaboration de la REM du systèmeCréation d'un visuel pour la REMImplémentation sous MATLAB de la REM et les équations du systèmeChoix éventuels de valeurs de composants- Vérification du modèle du moteur
Ajout de l'asservissement de la tension de la capacité
- Modification de la REM et ajout de l'asservissement
Calcul des paramètres du correcteurFiltrage de la consigne pour éviter les overshootsAsservissement tout ou rien de la tension de la capacité
Ajout du correcteur de courant
Choix du correcteurCalculs des paramètresImplémentation sous MATLABVérification des résultats
Ajout du correcteur de vitesse
Choix du correcteurCalculs des paramètresImplémentation sous MATLAB- Vérification des résultats
Rapport de projet
- Elaboration de la REM
- Expliquer l'élabortation de la REM
- Expliquer l'implémentation sous MATLAB
- Valider la simulation
- Elaboration de la REM
Calendrier prévisionnel
- Mi-Octobre 2018 : Simulation fonctionnelle
- Fin Novembre 2018 : Tests sur le système existant
Réalisation du Projet
Semaine 0
La première entrevue avec le tuteur a permis de poser les bases du projet. Ont été définis les différents objectifs, la méthode et les rendez-vous concernant le projet.
Pour les objectifs, on a vu en particulier ceux concernant la première étape du projet, à savoir la modélisation du système.
- Dans un premier temps, il s'agit de mettre en place un modèle du système. On se base sur la REM de ce système.
- Nous avons ensuite modéliser la commande de ce système. En effet, le but est d'ajouter un LTC3125 qui doit permettre de garantir la limitation du courant. Ce composant est placé entre la batterie et la capacité, il sert à l'asservissement du courant issu de la batterie.
Semaine 1
La première étape de notre projet est la définition des équations qui définissent notre système. Pour chaque composant de notre schéma électrique, nous trouvons son équation temporelle que nous transformons dans le domaine de Laplace. Puis nous les mettons en forme pour respecter les causalités. Ainsi nous obtenons des équations faciles à implémenter sous Simulink.
A partir de ces formules, nous pouvons définir une Représentation Énergétique Macroscopique (REM). L'avantage de cette représentation, c'est qu'elle décompose le système en blocs soit linéaires, soit avec le fonctionnement d'un premier ordre. de plus, ils nous donnent un bon aperçu des échanges énergétiques effectués au sein de notre système. Ce qui nous permet facilement de les simuler et de les contrôler par la suite.
Dans un premier temps, cette représentation ne comprends que le système sans sa partie commande. L'ajout de la partie commande sera fait par la suite.
On peut alors implémenter le système sous Matlab. Il faut alors vérifier la justesse du modèle, nous commencerons par la partie qui connecte la capacité et la batterie.
TODO : Rajout des vérifs du système
Semaine 2
La semaine passée, nous avions vérifié que notre simulation correstpondent aux valeurs de composants que nous lui avions donné. Cependant, les valeurs ne correspondaient pas à la réalité par manque d'informations. Elles ont été rectifiées pour mieux y correspondre.
Notre modèle est à présent vérifié dans sa partie Batterie-Capacité, et comprend les bonnes valeurs. Il va maintenant falloir émuler le LTC3125 pour la suite de notre projet. Ce composant est un convertisseur DC-DC avec possibilité de limiter le courant. Dans notre schéma structurel, il est représenté par une inductance et un hacheur élévateur. On commence par asservir le courant pour modéliser le limiteur de tension.
Notre but est d'asservir le courant de la batterie soit Icharge, à partir du hacheur, commandé par K1. Nous devons donc inverser tous les blocs entre les deux soit notre hacheur Hach1 et le stockeur d'énergie Lcharge. Pour ce stockeur d'énergie, nous utilisons un PID, dont nous calculons les paramètres par identification.
On implémente alors notre correcteur sous Matlab-Simulink.
Du temps a également été consacré à la réalisation d'un schéma électrique pour le rapporta ainsi que le wiki. C'est le schéma présent en semaine 0 dans ce rapport. Par la même occasion, un visuel de la REM a été fait pour illustrer la semaine 1.
Semaine 3
La semaine précédente, nous avons implémenté notre contrôleur sous Matlab. Nous avons choisi un PI dans notre cas, le PID réduit le temps de réponse, mais il induit un plus fort dépassement.
Nous allons maintenant calculer nos paramètres de PI. Pour ce faire, nous calculons la fonction de transfert en boucle fermée; nos calculent prennent en paramètres les constantes du PI. Une fois ces calculs effectués, nous calculons les paramètres de notre PI, en fonction des paramètres du système et des performances qu'on lui réclame.
Sous matlab, on entre directement les valeurs des paramètres du PI en fonction des paramètres du modèle, pour qu'ils se recalculent automatiquement si on modifie une valeur du modèle.
Une fois cela implémenté, on observe la réponse de notre système à une consigne.
On voit que la réponse subit un dépassement de la consigne supérieur à 10%, alors que nous avons paramétré notre système pour qu'il n'y ait pas de dépassement, puisque notre but est de limiter les courants dans la batterie. Nous verrons par la suite si nous pouvons améliorer cet aspect.
Nous avons également modifié des paramètres moteurs , qui étaient erronés.
Semaine 4
Nous avions implémenté un correcteur pour asservir le courant dans la batterie. Mais nous avions encore un dépassement assez conséquent (>10%), alors que le LTC3125 n'en aura qu'un minime. Nous cherchons à réduire ce dépassement pour que notre simulation soit la plus exacte possible. Ce dépassement est dû au fait que le numérateur de notre fonction de transfert ne soit pas d'ordre zéro et qui induit donc un effet de dérivateur. Pour atténuer cet effet, nous allons filtrer la consigne en amont (Ce qui physiquement parlant a du sens puisque nous maîtrisons totalement notre consigne). Le résultat obtenu est pleinement satisfaisant.
Nous avons également continué de compléter notre modèle. Pour ce faire nous avons rajouté un asservissement de la tension de la capacité. Le but de notre système est de maintenir notre capacité à la tension de 5V à l'aide d'un asservissement en tout ou rien. Nous avons donc fixé deux seuils de tensions, l'un haut pour arrêter la recharge de la capacité une fois qu'il est atteint, l'autre bas qui déclenche la recharge de la capacité si la tension tombe en deçà. Dans notre exemple, nous avons une charge qui débite un courant. Cette charge est totalement arbitraire et ne sert qu'à tester notre asservissement.
Semaine 5
Pour cette semaine, nous avons commencé par la correction de la charge mécanique, qui jusque là avait des valeurs arbitraires. Nous lui avons donnés les valeurs de frottement et d'inertie du moteur. ainsi nous avons des valeurs qui ont un sens physiquement et qui nous permettent d'avoir une idée beaucoup plus précise du fonctionnement du système. pour cette partie mécanique, il restera à simuler le reste de la partie mécanique, à savoir le réducteur linéaire, le réducteur angulaire et la poutre qui entre en rotation.
La grosse partie du travail de cette semaine a été la mise en place de l'asservissement en position. Pour ce faire, nous devons d'abord asservir le courant moteur, ce qui nous permet de contrôler le couple appliqué sur le réducteur en sortie du moteur. On pourra ensuite ajouter une boucle d'asservissement en vitesse, ce qui nous permet de maîtriser la position.
Dans ce but, nous choisissons de mettre en place un régulateur PI. Pour le calcul des paramètres, nous procédons par placement de pôles. On calcule donc la fonction de transfert avec le correcteur, qui est une fonction de transfert de second ordre. On pose la fonction de transfert attendue sous la forme canonique, et on identifie ainsi les paramètres du correcteur. Une fois l'implémentation sous Matlab-Simulink réalisée, on obtient les résultats suivants pour une consigne en échelon :
On peut voir que la position est correctement asservie, mais avec un transitoire assez violent. Mais dans notre cas le suivi d'une consigne en échelon n'est pas très utile, on vérifie donc le comportement de la boucle fermée pour une consigne sinusoïdale.
On voit que le système en boucle fermée ne suit pas la consigne sinusoïdale. En effet, une erreur en vitesse s'installe et nuit au suivit de la consigne de vitesse. On va donc devoir trouver une autre solution d'asservissement.
Semaine 6
Le correcteur de position implémenté la semaine passée est probélématique. En effet, on asservit la vitesse et non la position. Naïvement, on pourrait penser qu'il suffit de donner en consigne en vitesse la dérivée de la consigne en position, et laisser l'asservissement en vitesse donner les résultats. Cela fonctionne pour une consigne de type échelon, mais on a une erreur de vitesse qui apparaît si on fait suivre une rampe un un signal sinusoïdal. On choisit donc d'abandonner le PI pour ce correcteur, pour passer à un correcteur à retour d'état. Ce correcteur permet d'asservir simultanément des variables physiques et d'autres représentations de ces variable, comme la vitesse et la position, qui sont deux manières de représenter une même variable physique.
On trouve donc les équations d'états, que l'on met ensuite sous forme matricielle. On ajoute ensuite une matrice contenant les coefficients correcteurs, et on calcule la fonction de transfert du système obtenu en boucle fermée. On peut alors identifier notre fonction de transfert la fonction de transfert idéale pour notre système, et en déduire les valeurs de la matrice de correction. On teste alors notre implémentation par le suivi d'une rampe, puis d'un sinus.
TODO : Insérer suivi de sinus et de steps
Semaine 7
On a vu la semaine passée les résultats de notre implémentation du retour d'état. On a pu constater que le système a l'air de fonctionner, mais les courants sont élevés pour un système à vide. On vérifie donc les paramètres de la simulation.
On s'aperçois donc que les paramètres qui décrivent le moteur sont erronnés, on les modifie donc pour obtenir des performances beaucoup plus réalistes à la suite de la modification. Par ailleurs, les paramètres des correcteurs sont directement calculés en fonction des paramètres du système dont ceux du moteur. On n'a pas eu à les recalculer manuellement.
Cette semaine a enfin servi à la rédaction du rapport. Ce rapport a été rédigé pour à la fois dans un but purement académique, mais il a aussi pour vocation de renseigner les différentes idées et les choix qui ont été fait durant ce projet.
Semaine 8
Nous avons poursuivi la modélisation du système par l'ajout de la partie mécanique.
L'intérêt de simuler la partie mécanique, c'est de pouvoir vérifier que notre système peut fonctionner selon la dynamique recherchée et dans les contraintes énergétiques données. On doit pour cela modéliser les échanges d'énergie de la batterie au doigt de l'utilisateur, ce qui nécéssite de prendre en compte sa mécanique.
Nous avons commencé par l'ajout des réducteurs et des inerties. Nous ne considérons que les frottements du moteur dans un premier temps. On réalise donc le schéma mécanique du système.
TODO : Insérer shcéma de la mécanique du modèle
Pour en réaliser la simultation, on retrouve des problèmes de causalité qui nous empêchent de réaliser simplement la REM du système. Un avantage non négligeable est le fait qu'avec cette équivalence, si on ramène les différentes inerties au niveau de celle du moteur, les paramètres sont très facilement calculables puisqu'il suffira alors de remplacer l'inertie du moteur par l'inertie équivalente du système.
On réalise donc un schéma équivalent du système, qui ramène les différentes inerties en un point unique. On obtient donc un schéma équivalent de notre système mécanique.
TODO : Photo schéma équivalent
On peut alors obtenir facilement les équations du système puis sa REM. On peut alors l'implémenter sous Matlab Simulink. On peut alors tester l'asservissement de ce nouveau système pour une consigne sinusoïdale.
TODO : consigne sinusoïdale avec charge mécanique
Semaine 9
Pour finir notre modélisation, nous voulons modéliser le doigt de l'utilisateur dans notre système. Si on suit le schéma mécanique, le doigt de l'utilisateur est en contact avec la poutre qui effectue la vibration. Pour modéliser le doigt, nous considérons qu'il impose une force résistante sur la poutre, qui dépend de son déplacement.
En d'autres termes, nous allons modéliser la force imposée par le doigt de l'utilisateur par un bloc qui génère une force dépendant de la position de la poutre. Nous l'ajoutons à la simulation, mais les calculs deviennent beaucoup plus long, sans que nous en ayons trouvé la raison. On choisit donc de laisser de côté la modélisation de la force du doigt, pour pouvoir continuer nos tests.
Par la même occasion, nous avons découvert la suite logicielle permettant la génération de code depuis Matlab, la compilation du code, et son envoi sur le micro-contrôleur. Nous utilisons donc STM32Cube pour générer un fichier de configuration de la carte à programmer, nous l'importons dans Matlab-simulink où nous créons le schéma à importer sur la carte. Nous générons ensuite le code C pour la carte, que nous compilons à l'aide du programme System Workbench for STM32. Le même logiciel nous permet également de téléverser le programme sur la carte.
On teste donc la chaîne de développement par un petit programme permettant de faire clignotter une led. On génère le code, compile et téléverse le tout sur la carte, la led clignote, le programme est fonctionnel.
Semaine 10
Cette semaine a d'abord été marquée par un problème récurrent à la génération de code. Lors de celle-ci, une erreur apparaît : "The code is successfully generated, but project generation have a problem". Et de cette erreur il découle l'impossibilité de compiler le code et de l'executer sur le Nucléo. Mais cette erreur a finalement pu être corrigée. En effet, elle est due à un problème dans le fichier de configuration de la carte électronique. En effet, le type de projet sélectionné n'était pas le bon, ce qui empêchait la génération de code de se faire.
En parallèlle de la recherche d'une solution à ce problème, un travail a été fait sur le driver de moteur qui doit être piloté par le Nucleo F401RE. On ne peut pas l'utiliser directement avec cette carte, cependant le driver est compatible avec les arduino Uno. Pour prendre en main de driver, nous avons connecté les deux, et essayé de contrôler le moteur de manière efficace. Nous avons donc pu mettre en place un premier banc d'essai pour bien comprendre cette carte. Après quelques heures de travail, nous arrivons à contrôler parfaitement le moteur. Ainsi, nous pourrons implémenter plus facilement le contrôle du moteur par la suite.
Nous avons également travaillé sur la réalisation d'un support physique pour notre banc d'essai. Nous avons modélisé sous Fusion360 un premier modèle de support pour notre moteur. Ce support doit permettre de maintenir le moteur de manière efficace, de maintenir une roue codeuse en vis-à-vis du moteur, et de maintenir la poutre à actionner. Pour l'instant, il n'y a que le moteur et son support qui sont modélisés.
TODO : Image de la modélisation
Documents Rendus
Rapport de mi-projet : Fichier:RapportIntermédiaire 2018P04.pdf
Diapositive de mi-projet : Fichier:2018P04 Soutenance de mi-projet.pdf