3. 3
Présentation Génerale
Ce rapport a pour but de présenter le travail effectué par notre équipe qui était encadré par Mme
Kussener. Nous avions comme objectif de réaliser un Segway entièrement fait maison. Le principe de
fonctionnement du Segway est le suivant : c’est une planche avec des roues et un guidon comme le montre la
photo sur la page de garde. Si l’on se penche en avant, on va avancer, si l’on se redresse, on s’arrête où on
recule. Si l’on penche le guidon vers la droite on va tourner à droite et inversement pour la gauche.
Notre objectif était de réaliser un Segway avec lequel on puisse avancer et reculer mais également tenir en
équilibre dessus.
Pour cela trois grandes parties sont ressorties : la mécanique avec la réalisation d’une maquette, la partie
électronique avec la réalisation d’une carte pouvant communiquer avec les moteurs puis la partie informatique
pour l’asservissement.
Au début nous n’avions pas conscience de la difficulté réelle de ce projet. L’électronique de puissance ne
ressemble en rien à l’électronique que nous avions l’habitude d’étudier en TP. Ce rapport permet de
comprendre le travail que nous avons effectué afin de pouvoir le récupérer et de repartir de là où nous nous
sommes arrêtés, ne pas répéter nos erreurs et atteindre de futurs steps.
4. 4
Architecture Interne
Voici le schéma de notre architecture interne qui explique les liaisons entre chacune des parties. Ces parties
seront bien entendues détaillées par la suite.
Nous avons donc des batteries 24V et 30A qui alimentent tout le Segway. En effet la datasheet des moteurs
indique une alimentation nécessaire de 24V pour le bon fonctionnement des moteurs. Au fil de ce dossier vous
découvrirez les différentes parties que l’on peut voir dissocier sur ce Segway. En effet, une partie informatique
faisant la liaison entre les actionneurs (le bras et la capteur attaché dessus) et la partie électronique, celle qui
commande les moteurs. Les moteurs faisant partis eux, de la partie mécanique avec les pignons et engrenages.
FIGURE 1 : Architecture interne
5. 5
Partie Mécanique
A. Ce Qui A Eté Fait
a.Choix des composants
b.Justification de ce choix
c.Assemblage de la maquette
B. Pistes D’amélioration
a.Sur la maquette actuelle
b.Sur une possible « future maquette »
6. 6
A. Ce Qui A Eté Fait
a. Choix Des Composants
Au tout début du projet, ne sachant pas du tout comment était constitué un Segway, nous avons
visionné de nombreuses vidéos afin d’en comprendre son fonctionnement, déterminer ses dimensions
… ce qui nous a conduit à dessiner un schéma mécanique (disponible dans l’arborescence ou format
papier). Ce schéma mécanique nous a permis d’acheter les bonnes pièces telles que :
- Les batteries 12V 30Ah, nous permettant d’avoir une grosse autonomie. Commandées sur
internet car moins chères qu’en magasin.
- Les roues : des roues de brouette avec un axe. Commandées sur internet mais également
disponibles dans des magasins de bricolage tel que Leroy merlin ou Castorama
- Une planche en bois de 40x50cm (Leroy merlin)
- Des plaques métalliques en alu ainsi que des cornières en acier permettant l’assemblage
(Leroy merlin)
- Un guidon (Leroy merlin)
- Des chaînes permettant l’entraînement des roues ainsi que les pignons allant avec ces chaînes.
- Des vis, écrous, cosses, des câbles, tiges filetées, tube en acier, ressort, équerres … c’est-à-
dire toute sorte de composants nécessaires à l’assemblage de la maquette, bien évidemment
que l’achat de ces composants dépend de nos besoins.
b. Justification Du Choix De Nos Composants
1) Après avoir visionné des vidéos de Segway faites maison nous avons remarqué que la plupart
disposaient de batteries de 12V 8Ah. En effet, avec ce type de batterie le Segway peut tout à
fait fonctionner, mais pour combien de temps ? Après un calcul théorique effectué en
considérant le nombre d’ampères consommés par les moteurs à leur régime nominal, nous
avons pu constater que ces batterie ne tiendraient que très peu de temps, c’est-à-dire seulement
15/20 min. Nous avons donc fait le choix de partir sur des batteries beaucoup plus puissantes.
Nous avons donc choisi de prendre des batteries HANKOOK U1RMF-X 12V 30Ah ce qui
nous permet donc de multiplier son autonomie par plus de 3.
Avantage :
o Plus d’autonomie
Inconvénients :
o Plus lourdes
o Plus encombrantes
FIGURE 2 : Les batteries
7. 7
Lien des batteries :
http://www.ebay.fr/itm/like/272021957824?lpid=97&chn=ps
2) Nous avons choisi de prendre des roues de brouette car nous voulions avoir un Segway
capable de franchir de nombreux obstacles tels que : trottoirs, marches, pierres. Au début, on
nous avait proposé des roues de brouette toutes simples mais elles ne nous convenaient pas
car il nous manquait l’axe autour duquel elles étaient censées tourner. Nous avons ainsi fait le
choix de prendre des roues déjà équipées de cet axe.
Avantage :
o Gain de temps dans la recherche de l’axe intérieur (diamètre)
Inconvénient :
o On a ainsi dû se baser sur cet axe pour la construction du reste de l’ensemble de la
maquette du fait que l’on ne pouvait pas l’enlever
Lien des roues :
http://www.cdiscount.com/maison/bricolage-outillage/roue-gonflable-brouette-remorque-380-
mm-avec-axe-j/f-1170434-auc2009924749710.html#pres
3) Le choix de notre planche s’est tout simplement fait selon les dimensions (40x50cm) des
Segway déjà existant et pour ce qui est du choix du bois, nous avons bien évidement pris celui
qui nous paraissait être le plus résistant
FIGURE 3 : Les roues fixées sur le Segway
8. 8
4) Pour ce qui est du bâti nous avons choisi de partir sur une base faite en bois autour de laquelle
nous avons disposé des plaques d’aluminium. Le bâti fait en bois nous a servi pour venir fixer
l’ensemble roues, moteurs, batteries. Les plaques d’aluminium fixées sur le bâti en bois
apportent une certaine rigidité au Segway permettant de supporter un poids allant jusqu’à
environ 100 kg et elles ont également un rôle d’esthétique.
FIGURE 4 : L’intérieur du coffre du Segway
FIGURE 5 : Le bâti
9. 9
Le fait d’allier bois et métal nous apporte de nombreux avantages tels que :
o Pour le bois la facilité du placement des différentes pièces sur celui-ci
o Pour le métal le côté « solide » et surtout esthétique de la maquette
Inconvénients :
o A force de percer, repercer, le bois se dégrade et on voit ainsi apparaître des
microfissures voire des fissures, ce qui met en danger la solidité toute entière du
Segway
o Le métal étant conducteur, il faut faire extrêmement attention quant à l’isolation des
cartes électroniques et des câbles
5) Pour ce qui est du guidon, à l’origine n’ayant pas de matériel à portée de main, nous avons
utilisé un manche à balai. Ensuite nous avons acheté un guidon à Leroy Merlin. Nous avons
fixé ce guidon en faisant un trou dans le bâti et en y accrochant deux ressorts, un de chaque
côté afin de tenter de lui faire garder son équilibre. Le fait que le guidon soit bien équilibré
est très important du fait que l’on va venir y fixer notre gyroscope.
FIGURE 6 : La fixation du guidon
10. 10
Avantage :
o Le guidon est très stable du fait qu’il soit encastré dans le bâti et tenu par les deux
ressorts
Inconvénient :
o Il y a des frottements assez conséquents entre le bâti et le guidon, ce qui empêche les
ressorts de jouer leur rôle
6) En ce qui concerne la rotation des roues, nous avions deux solutions :
o Soit une chaîne de vélo, moto
o Soit une courroie dentée
Etant donné que nous disposions déjà des moteurs et que, sur ces moteurs étaient déjà présents
des pignons, nous avons opté pour les chaînes. Connaissant l’adresse du site internet où les
moteurs avaient été commandés l’année précédente, nous avons pu commander les chaînes
allant avec les pignons moteurs. Nous avons également dû commander deux autres pignons
allant sur les axes des roues pour pouvoir les faire tourner. Pour ce qui est du choix de ces
pignons, nous les avons choisis en fonction de leurs nombres de dents ainsi que de leur « pas ».
Attention : pour déterminer le nombre de dents il faut au préalable déterminer le rapport de
réduction voulu. Et en ce qui concerne le pas il doit être identique à celui du pignon moteur et
celui de la chaîne.
FIGURE 7 : Le guidon avec
le bouton interrupteur
12. 12
Avantage :
o Facilité d’adaptation en fonction du matériel dont on disposait déjà
Inconvénients :
o Risque de dérailler (peut être dangereux)
o Fait plus de bruit qu’une courroie
Lien des moteurs :
http://pocketquadelectrique.csmoto.fr/informations/datasheet.php
Lien des chaînes et pignons :
http://pocketquadelectrique.csmoto.fr/achat/pignon.php
13. 13
c. Assemblage De La Maquette
Pour rendre le bâti plus solide nous avons choisi de rendre l’axe des roues solidaires l’un de l’autre
grâce à un tube métallique fixé directement sur la planche en bois à l’aide de grosses équerres. Ce
tube métallique traverse donc le Segway en travers et à chaque extrémité de celui-ci vient de fixer
l’axe de chaque roue.
Pour équilibrer au mieux le Segway sans même qu’il ne soit en « marche », nous avons choisi de
placer les moteurs et les batteries de manière stratégique, c’est-à-dire latéralement opposés. Nous
utilisons des batteries au plomb et ceci nous rajoute une contrainte, celle de ne pas les pencher, au
risque de perdre du liquide (électrolyte) et de les endommager, il faut ainsi les fixer telles qu’elles
puissent rester droite (ou presque).
FIGURE 10 : Tube métallique
14. 14
B. Pistes D’améliorations
a. Sur La Maquette Actuelle
o Réduire les frottements au niveau des deux roues et surtout de la droite. Ces
frottements font augmenter la consommation de courant des moteurs.
o Améliorer les frottements qu’il y a entre le guidon et le bâti, car ils annulent l’effet des
deux ressorts qui seraient censés maintenir le guidon en position d’équilibre.
o Mettre une protection de chaque côté du Segway afin d’éviter toute blessure en cas de
déraillement des chaînes.
o Améliorer l’isolement de chaque composant par rapport à la plaque métallique de la
caisse.
o Améliorer le système de ventilation pour éviter que la température ne monte trop haut
à l’intérieur de la caisse.
o Relier les batteries aux cartes avec un autre moyen que par des pinces car celles-ci
peuvent à la suite d’un choc un peu trop important se détacher des cosses des batteries.
b. Sur Une Prochaine Maquette
o Remplacer les chaînes par des courroies crantées. Il faudra donc changer le système
de pignons présent sur le moteur et l’axe de la roue afin de l’adapter pour qu’il puisse
faire tourner les courroies sans les abîmer.
o Effectuer les pièces et le bâti (actuellement en bois/alu) en plastique à l’imprimante
3D à l’aide du logiciel SolidWorks. Pour ceci, il faudrait s’y prendre au plus tôt et voir
avec Mr. Dutilleul pour un « partenariat » avec Rouvières (machines permettant
d’usiner des pièces de grandes tailles).
15. 15
Partie Informatique
A. Le protocole de communication I2C
B. Le composant utilisé : MPU-6050
C. 1ere approche : utilisation de
l’accéléromètre seul
D. 2nd approche : utilisation du
gyromètre seul
E. 3eme approche : combinaison de
l’accéléromètre et du gyroscope
F. 4eme approche : retour a
l’accéléromètre seul
G. Asservissement des moteurs en
fonction de l’angle
H. Tests a effectuer pour vérifier
l’intégrité du composant
I. Axes d’améliorations
Annexes
16. 16
A. Le Protocole De Communication
I2C
L’I2C (Inter-Integrated Circuit) est un bus de données séries synchrones bidirectionnel half-duplex.
Il est composé de deux fils : SCL (clock) et SDA (data).
Les composants ont un rôle de maître/esclave. La communication peut être multi-maître/multi-
esclave, nous sommes dans le cas d’un maître (STM32) et d’un esclave (MPU-6050).
Le maître initie la communication.
Celle-ci a lieu selon l’ordre suivant, dans le cas d’une lecture d’un registre esclave par le maître, ce
qui est tout le temps notre cas, sauf à l’initialisation du capteur (ce point sera traité plus loin).
Légende :
- A6 … A0 : bits de l’adresse de l’esclave auquel on s’adresse
- 1 ... 9 : coups d’horloge
- D7 … D0 : bits de la donnée sur 8 bits renvoyée par l’esclave
R/W : Read/Write (Read = 1, Write = 0)
FIGURE 11 : Protocole de communication I2C
17. 17
Aussi, il est important de ne pas oublier les résistances de pull-up, servant à maintenir les
lignes SCL et SDA à l’état haut au repos (observer le début du chronogramme précédent,
SCL et SDA sont à l’état 1 afin de permettre au maître d’initier la communication, ce qui se
traduit au niveau hardware par le passage de SDA à l’état bas alors que SCL est à l’état haut).
Également, les résistances de pull-up servent à assurer un temps de montée du signal (cf.
figure ci-dessus) respectant la norme.
Dans notre cas, c’est-à-dire dans le cas d’une communication en Fast Mode, le temps de
montée maximal est de 300 ns (et d’au moins 20 ns).
La datasheet de la STM32 indique que le périphérique I2C a un bus ayant une capacitance
inférieure ou égale à 400 pF.
Ainsi, ayant choisi d’avoir un temps de montée à 150 ns, la valeur de résistance à choisir se
calcule selon les formules précédentes :
TR = 150 ns = 0.847298*R*(400 pF)
→ R = 442 Ohm
Cette valeur n’existant pas réellement, il a été choisi une résistance de 470 Ohm.
FIGURE 12 : Datasheet I2C
18. 18
PS : il faut mettre une résistance pour SCL et une résistance pour SDA, et non pas une seule
résistance partagée par les deux lignes.
Le schéma de branchement est le suivant :
Avec Rp = 470Ω
N.B : sur le capteur, il existe déjà des résistances de pull-up. Néanmoins, elles sont de 4.7
kOhm, ce qui est beaucoup trop.
En effet, le temps max de montée de 300 ns correspond à des résistances de 1kOhm.
Il a donc été décidé de rajouter des Rp de 470 Ohm en parallèle (brancher tel que dans la
figure précédente), afin de ramené le temps de montée dans les normes.
Pour finir, voici deux exemples :
a. Effet D’une Valeur Trop Elevé De Rp
→ On constate bien l’effet capacitif trop présent, altérant le signal carré
STM32
SCL
SDA
MPU – 6050
SCL
SDA
3V3
Rp Rp
FIGURE 13 : Schéma de branchement
FIGURE 14 : Relevé oscilloscope
19. 19
b. Une Trame I2C (Write), Ou L’on Ne Réussit Pas A
Communiquer Avec Le Capteur
FIGURE 15 : Relevé oscilloscope illustrant le problème
20. 20
B. Le Composant Utilisé : MPU-6050
Le composant MPU-6050 Breakout (couleur rouge) a été choisi par l’équipe de l’an dernier,
d’où sa réutilisation cette année afin de ne pas le gaspiller.
Néanmoins, il ne constitue pas le meilleur choix, notamment en termes financier, car le MPU-
6050 Breakout de chez Drotek est identique à celui actuel de Sparkfun, pour un prix 4 fois
moins chère (MPU-6050 (Drotek)= 7 € et MPU-6050 (Sparkfun) = 40 €).
http://www.drotek.com/shop/en/home/42-mpu6050-gyro-accelerometer.html
Il permet de mesurer la vitesse angulaire ainsi que l’accélération linéaire sur les 3 axes.
Les différentes valeurs (vitesses et accélérations) sont écrites dans des registres internes au
composant, que l’on va ensuite pouvoir lire à travers l’interface de communication I2C.
21. 21
C. Première Approche : Utilisation De
L’accéléromètre Seul
L’idée est simple : on exploite la gravité g.
Afin d’avoir la valeur de l’angle et son signe (très important pour connaître le sens
d’inclinaison), il est plus opportun d’exploiter Gx.
Ainsi, angle = arcsin(Gx)/g.
Aussi, le Segway ne s’inclinant pas au-delà de ± 30° en utilisation nominale, l’approximation
mathématique arcsin(x) ≈ x a été employé afin d’optimiser le temps de calcul du processeur.
Problème : les mesures sont trop bruitées pour être exploitées
FIGURE 16 : Explications
FIGURE 17 : Allure du bruit sur les signaux
22. 22
Comme vous pouvez le constater sur l’image précédente, il y a 2 phases : moteur éteint et
moteur en rotation.
Lorsque le moteur est éteint, les relevés sont à peine exploitables pour espérer avoir une
valeur d’angle précise.
La phase 2 est beaucoup plus bruitée, inexploitable.
Le bruit provient des chaînes d’entrainements, du moteur, et est donc non compensable ou
corrigible à la source.
23. 23
D. 2nd
Approche : Utilisation Du
Gyromètre Seul
Le gyromètre permet de relever la vitesse angulaire autour d’un axe.
Nous avons donc intégré cette vitesse au cours du temps pour obtenir la valeur de l’angle.
Afin d’avoir une bonne précision, nous avons choisi dt = 5 ms.
Malheureusement, le gyroscope dérive trop.
La dérive désigne le fait que la référence servant de « zéro » varie au cours du temps (taper
« drift gyroscope » sur Google vous découvrirez les mésaventures que cela représente).
En effet, si vous effectuer une rotation et que vous revenez à la position de départ, l’angle ne
sera pas celui du départ. Ce problème est intrinsèque à tous les gyroscopes, et nos efforts
pour compenser la dérive n’ont eu que peu d’effets (offset etc…).
FIGURE 18 : Orientation des axes
24. 24
E. 3eme
Approche : Combinaisons Du
Gyroscope Et De L’accéléromètre
Pour combler l’imprécision de l’accéléromètre, et la dérive du gyroscope, on entreprend d’exploiter
les deux en même temps.
Solution : le filtre complémentaire
Le filtre complémentaire permet d’obtenir une mesure correcte à partir de deux mesures
bruitées.
Il se présente sous la forme :
Angle = a*Angle_Gyro + (1-a)*Angle_Accel
a = 0.98, 0.92, etc… cf. le fichier PDF « filter.pdf »
L’idée est d’appliquer un filtre passe-bas numérique sur l’angle obtenu via l’accéléromètre
afin de neutraliser le bruit, et d’appliquer un filtre passe-haut numérique sur l’angle obtenu
via le gyroscope afin de neutraliser la dérive de celui-ci.
Problème : le résultat n’est pas optimal, la dérive existe toujours.
Solution : Exploiter l’accéléromètre seul en filtrant le bruit et les accélérations provenant du
déplacement du Segway
25. 25
F. 4eme
Approche : Retour A
L’accéléromètre Seul
Nous ne filtrerons que le bruit dans cette partie, il reste à trouver un moyen d’obtenir les
accélérations du Segway et de pouvoir les soustraire aux relevés du MPU-6050.
Ainsi, tous les tests qui vont suivre ont été effectués à l’arrêt.
Observons le graphique cité quelques paragraphes auparavant :
Malgré la présence de bruit, on notera que la valeur moyenne du signal est constante, et elle
correspond à la valeur d’angle réelle.
Ainsi, il faut pouvoir filtrer ce bruit : utilisation d’un filtre moyenneur.
Sur LabVIEW, il a été réalisé ce qui suit :
On reçoit via port série (émulé sur port USB) les relevés d’accélérations, et on effectue les
calculs sur LabVIEW qu’on affiche dans un graphe déroulant.
FIGURE 19 : Signal bruité
26. 26
Voici les relevés observés sur LabVIEW :
Premier essai : échantillonnage à 333Hz, moyenne sur 10 valeurs d’angle
Les relevés restent trop bruités, un angle de 5° réelle oscille entre 4.5 et 6.5 degrés.
Deuxième essai : échantillonnage à 333Hz, moyenne sur 30 valeurs d’angle
FIGURE 20 : Relevé du 1er
essai
FIGURE 21 : Relevé du 2eme
essai
27. 27
Le résultat est en amélioration, néanmoins il reste insuffisant pour une exploitation correcte
car le bruit demeure trop présent
Troisième essai : échantillonnage à 333Hz, moyenne sur 50 valeurs d’angle
On constate que le résultat est acceptable, il peut être exploité.
N.B : le pic final correspond à une montée en vitesse des roues, afin de tester les limites du
filtre. Ce n’est qu’à titre de tests, de telles conditions de vitesse et de vibrations ne pourront
jamais survenir dans la réalité (l’excitation a été réalisée à vide, les roues n’étant pas en
contact avec le sol).
Cette solution a été adoptée, et permet actuellement de piloter le Segway.
FIGURE 22 : Relevé du 3eme
essai
28. 28
G. Asservissement Des Moteurs
L’usage d’un régulateur PID a été mis en œuvre afin d’asservir la commande des moteurs en
fonction de l’angle d’inclinaison du Segway.
Un excellent site pour en comprendre le principe :
http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sansfaire-de-calculs/
Nous avons travaillé sur une version réduite du Segway, une boîte embarquant la carte
ISEN32 afin d’en exploiter le driver du moteur (L293DD) et les résistances de pull-up.
Important : les résistances de pull-up soudé par défaut sont de 4.7 kOhm, pensez à les
changer.
La taille de la structure semble impacter beaucoup l’équilibre, dans la mesure où l’on ne
parvient pas à la faire tenir en équilibre.
Après de multiples essais, nous n’avons pas pu déterminer de valeurs permettant d’assurer
l’équilibre.
Il est à noter également le manque de réactivité des moteurs et/ou du driver L293DD, pour
le moteur nous suspectons les capacités servant à filtrer le bruit d’augmenter
significativement le temps de réaction des moteurs.
29. 29
H. Tests A Effectuer Pour Vérifier
L’intégrité Du Composant
Test N°1 : Vérification de la bonne fonctionnalité du
composant
o Vérifier que les pins SCL et SDA sont au potentiel 3.3V lorsque l’on connecte VCC et GND
sans connecter SCL et SDA au microcontrôleur, et que le composant ne consomme pas plus
de 0.01 A
Si échec : le composant n’est plus fonctionnel
o Vérifier que lorsque l’on lit dans le composant son adresse (dans le registre WHO_AM_I),
celui-ci nous renvoie 0x68.
Si échec :
i) Changer la STM32 et réessayer
j) Si le test i) échoue, le composant n’est plus fonctionnel
Test N°2 : Lecture de valeurs d’accélérations linéaires
o Vérifier que, pour un angle d’inclinaison connue sur un axe, le capteur renvoie une valeur
d’accélération correspondant à la valeur attendue Si échec :
o Vérifier que le composant est correctement positionné (à plat, parallèle au sol)
o Si le test i) échoue, vérifier que le mode sleep est désactivé
o Si le mode sleep est désactivé, le composant n’est plus fonctionnel
N.B : lorsque le mode sleep est activé, le capteur renvoie 0x00 lors de la lecture
d’un registre d’accéléromètre ou du gyroscope
30. 30
I. Axe D’amélioration
Par rapport à la solution actuelle :
1) Revoir l’algorithme de calcul du gyroscope, essayer de retarder la dérive autant que possible voire
de l’annihiler.
2) Améliorer la gestion de l’équilibre, notamment en réalisant une étude physique de celui-ci (relation
permettant de déterminer l’effort et donc le couple à fournir aux roues en fonction de l’angle
d’inclinaison), et adapter l’algorithme d’asservissement en fonction de cette étude.
Aussi, il faut savoir que le capteur contient un processeur interne qui peut effectuer les calculs
d’angles lui-même en fusionnant, comme le filtre complémentaire, les données de l’accéléromètre et
du gyroscope.
Se renseigner, comprendre la librairie associée au DMP (Data Motion Processing) du capteur :
https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/examples/MPU6050_DMP6
/MPU6050_DMP6.ino
https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/MPU6050_6Axis_MotionA
pps20.h
Il s’agit d’un code pour Arduino, qui peut être traduit en langage C pour être utilisé sur la STM32
Une documentation officielle a également été faite par Invensense, mais qui reste néanmoins difficile
d’accès (cf. dossier Motion Driver 6.12).
3) Trouver un moyen de filtrer l’accélération du Segway des relevés de l’accéléromètre
4) A FAIRE : réaliser un petit PCB contenant la STM32, les résistances de pull-up, un driver
moteur (celui de la carte rouge semble convenir, vérifier néanmoins que par rapport aux
roues dont on dispose il est capable de débiter suffisamment de courant), et un pont de diode
pour protéger le driver des retours de courant émanant des moteurs (inexistant sur la carte
ISEN32).
Très important : trouver un moyen d’empêcher des retours violents depuis la stm32 vers le capteur,
on a grillé 3 capteurs cette année à cause de ça …
Vous pouvez vous inspirer du schéma du driver présent sur la carte ISEN32.
Montage du pont de diode :
M
FIGURE 23 : Schéma
du montage avec
diode
31. 31
5) Éliminer le bruit sur les signaux, généré par les moteurs.
En clair, si vous brancher une sonde à la sortie moteur et que vous observez à
l’oscilloscope, sans avoir connecté les moteurs, vous constaterez que d’une part, la
STM32 ne « freeze » pas car la communication I2C n’est pas interrompue, et que
d’autre part vous avez un PWM à l’écran.
Ensuite, connecter les moteurs et vous observerez la STM32 qui « freeze »,
de manière plus ou moins rapide selon les cas.
C’est le problème majeur qui existe à la fois sur le vrai Segway et sur la version réduite.
Le freeze désigne la perturbation de la communication I2C par des signaux parasites tels que
le bruit sur le signal causé par les moteurs ou encore les OEM.
Si vous observez les valeurs lues dans le capteur au niveau du Live Watch, celles-ci
s’actualisent tout le temps (valeur écrite en rouge dans le Live Watch).
Si celles-ci n’évoluent plus, alors le freeze est survenu.
Et si vous vous demandez « comment on sait que c’est l’I2C et pas autre chose ? », il suffit
de faire un break lorsque le freeze est survenu et vous constaterez que le code est coincé dans
un while d’une fonction de lecture ou d’écriture I2C.
Si vous ne faîtes que générer un PWM en dur par exemple, la STM32 ne cesse jamais de
fonctionner donc le problème vient clairement d’une perturbation des signaux SCL et/ou
SDA voire de l’alimentation du capteur (même si on en doute, car on a déjà essayé d’isoler
l’alimentation et cela n’a rien changé au problème néanmoins le signal parasite arrive peut-
être par la masse qui est commune avec les autres masses).
Nous avons essayé de mettre des capacités (220 nF) au niveau des pins moteurs tel que
présenté ici : https://www.pololu.com/docs/0J15/9
Néanmoins cela n’a fait que retarder le freeze, qui survient quand même. Également, cela
détruit la réactivité des moteurs qui ne peuvent pas toujours suivre les inversions de sens de
rotation, particulièrement lorsque l’on oscille autour de la position d’équilibre.
Si on change de solution : codeur incrémental etc…
Comme ce fut expliqué au début, le choix du composant par l’équipe de l’an dernier a imposé
l’utilisation du MPU-6050 afin d’évité un gaspillage de celui-ci, notamment financier.
Néanmoins, on peut envisager l’utilisation d’un codeur incrémental afin de connaître l’angle
d’inclinaison directement, sans calculs.
32. 32
Annexes
Des Vis sous LabVIEW ont été réalisées, durant les phases de tests/validation d’une solution.
Ceux-ci permettent :
- D’observer la rotation du capteur à l’écran
- D’observer les valeurs d’angles correspondant aux accélérations relevées. Ils sont disponibles
dans le fichier compressé zip « Banc de tests LabVIEW ».
Fonctionnement du fichier main.c (valable pour les 4 approches citées) :
1) Appel fonction d’initialisation du périphérique I2C de la STM32
2) Appel fonction d’initialisation du composant MPU-6050
3) Appel fonction d’initialisation des variables
4) Appel fonction d’initialisation de l’USART
5) Appel fonction d’initialisation du timer générant les signaux PWM
6) Appel fonction d’initialisation du timer permettant d’échantillonnées
Aussi, lorsque vous adapterez le code pour la carte électronique, il faut savoir que :
- Celle-ci nécessite 2 PWM par moteur au lieu d’un, soit 4 en tout
- Pour la marche avant, il s’agit de PWM2 et PWM4 (ce sont les noms des PWM situées dans le
schématiques de la carte fournit dans le/les rapport(s) de la partie électronique)
- Pour la marche arrière, il s’agit de PWM1 et PWM3
Egalement, sachez qu’il est absolument interdit de se retrouver dans la configuration suivante : DIR
= 1, PWM = 0 (les DIR sont les signaux permettant de gérer le sens de rotation, cf. rapport de la partie
électronique).
N.B : Si vous ne vous servez pas du port COM, il est inutile de configurer l’USART. Ainsi, vous
trouverez parfois Configure_USART en commentaires.
33. 33
Partie Electronique
Ici, deux solutions sont proposées. Mêmes si elles sont deux solutions différentes, certaines phases
de tests sont les mêmes, ainsi que le moteur et son fonctionnement ou encore les solutions et pistes
d’améliorations données.
A. Solution 1
a. Choix du circuit
b. Assemblage
c. Les problèmes rencontrés
B. Solution 2
a. Choix du circuit
b. Assemblage
c. Les tests
C. Pistes D’amélioration
34. 34
Solution 1
a. Choix du circuit
Nous avons créé deux cartes différentes : une carte logique et une carte puissance. Comme leurs noms
l’indiquent la carte logique est la carte petit ampérage, on va y plugger la STM32, ainsi que les fils
pour le capteur gyroscopique (expliqué partie informatique) mais aussi toute la partie logique pour la
commande des moteurs. La carte puissance est la carte grand ampérage (13 Ampères) qui va être
reliée aux moteurs. Plus les deux parties sont séparées, plus on assure la diminution d’interférences
et la sécurité des composants.
La carte puissance
Il y a une carte par moteur. Chacune d’elles est directement reliées à un moteur et donc par lesquelles
passent les 13 ampères. Pourquoi deux cartes distinctes ? Encore et toujours pour diminuer
l’électromagnétisme.
Nous contrôlons les moteurs avec un système « pont en H » aussi appelé hacheur 4 quadrants. C’est-
à-dire que les MOS fonctionnent par paires. On les actionne deux à deux et les deux autres sont des
interrupteurs ouverts. Comme le montre le schéma ci-dessous.
Comme vous l’aurez compris, suivant les interrupteurs que l’on actionne, le moteur tourne dans un
sens ou dans l’autre. Ce qui permet la marche avant ou la marche arrière. Pour finir, nous contrôlons
nos MOS grâce à des signaux créneaux. Plus le rapport cyclique de ces signaux créneaux est élevé
plus la vitesse de rotation des moteurs sera élevée.
M
24V
M
24V
On ferme un P1 et N1, le courant passe
au travers du moteur et celui-ci tourne
dans un sens.
On ferme un P2 et N2, le courant passe
au travers du moteur et celui-ci tourne
dans l’autre sens.
FIGURE 24 : Schéma explication du pont en H
35. 35
Cependant, il ne faut pas les actionner autrement que de cette manière-là et surtout ne pas en actionner
plus que 2 à la fois. Par risque de faire griller des MOS ou bien le moteur.
Voici un aperçu du schéma fait sous Eagle (en version original dans les dossiers fournis)
FIGURE 25 : Schématique partie puissance
36. 36
La partie logique
La carte logique sert à plusieurs choses :
- Alimenter la carte STM32 qui assure toute la partie asservissement informatique
- Alimenter le capteur gyroscopique
- Assurer les connexions de la STM32 avec les cartes contrôles moteurs, le capteur et son
alimentation.
Dans la mesure où nous avions des batteries de 24V il a été créé un circuit pour avoir une
alimentation de 9V. Tension maximum supportée par la STM32.
Nous avons également mis une série de plots « ALIM » afin de pouvoir remplacer la batterie par des
alimentations externes. Ce qui nous permet d’effectuer des tests et de pouvoir avancer par étapes (ne
pas se brancher directement à la batterie car on ne peut rien contrôler dans ce cas-là. Comme par
exemple l’ampérage qui peut circuler dans la plaquette)
Pour finir le plot MPU6050 qui est la connectique pour le gyroscope.
Régulateur
de tension
FIGURE 26 : Capture écran de la 1ere partie de la partie
logique. Disponible dans la partie électronique
Connectique
alim
Connectique
MPU6050
STM32
37. 37
La seconde partie de la carte logique est la commande des ponts en H. C’est elle qui, suivant ce qu’elle
reçoit de la STM32, va envoyer les signaux correspondant aux MOSFET des pont H pour les
actionner correctement.
Il faut savoir que dans cette solution nous travaillons avec des NMOS et PMOS. Les NMOS et PMOS
fonctionnent en inversés : l’un est bloqué à 24V et l’autre à 0V. De plus, la carte STM32 ressort des
signaux de maximum 3V3. Or il nous faut du 24V pour contrôler nos moteurs.
C’est pour cela que nous avons besoin de ce montage. Afin de retrouver des créneaux avec une plus
grande amplitude pour pouvoir contrôler nos moteurs mais aussi parce qu’il faut s’assurer de bloquer
les MOS qui doivent être « interrupteurs ouverts » c’est-à-dire en mode bloqué.
FIGURE 27 : Seconde partie de la partie logique
38. 38
Si l’on regarde de plus près, nous avons un TIL193 : c’est un optocoupleur. Il permet la protection
contre les retours d’ampérage provenant de la puissance vers la logique et permet donc d’isoler les
deux parties.
En sortie de cet optocoupleur : un buffer inverseur. Son rôle est de rendre le signal en sortie du TIL
qui a tendance à être trop arrondi (effet capacitif) en un signal créneau avec un rapport cyclique net
et un signal carré clair.
Les entrées :
- Dir : Signal 0 ou 3V3 qui sert d’enable
- PWM : signal creneau 0/3V3 ou éteint =0V
Ces entrées sont générées par la carte STM32.
FIGURE 28 : Zoom sur une partie du contrôle des MOS
39. 39
Table logique pour la partie du haut (contrôle d’un PMOS)
DIR PWM 4081(AND) TIL(Patte13) P3
0 0 0V 5V 24V
0 CRENEAU_0/3V3 0V 5V 24V
3V3 0 0 5V 24V
3V3 CRENEAU_0/3V3 CRENEAU_0/3V3 CRENEAU_ 0/5V
CRENEAU_
0/24V
Table logique pour la partie du bas (contrôle d’un NMOS)
DIR PWM 4069(Inverseuse) 4071(OR) TIL(Patte13) N4
0 0 3V3 3V3 0V 0V
0 CRENEAU_0/3V3 3V3 3V3 0V 0V
3V3 0 0 0 5V 24V
3V3 CRENEAU_0/3V3 0 CRENEAU_0/3V3
CRENEAU_
0/5V
CRENEAU_
0/24V
Comme on peut le voir grâce à ces deux tables logiques, on remarque bien que les PMOS et les
NMOS soient contrôlés de façon complémentaire.
Chose très importante : d’après les tables logiques, on peut voir que les PWM peuvent rester allumer
tout le temps et que ce sont les DIR qui actionnent la rotation. Cependant il est interdit de mettre un
DIR à 3V3 si les PWM ne sont pas actionnés ! (La ligne 3 du 2eme tableau nous montre que si l’on
est dans cette conception-là, le NMOS ne sera pas dans la bonne configuration).
FIGURE 29 : Table vérité contrôle d’un PMOS
FIGURE 30 : Table vérité contrôle d’un NMOS
40. 40
b. Simulation
Nous avons simulé notre circuit de puissance sous Nimultisim afin de vérifier le bon
fonctionnement de notre réflexion. Comme le montrent les photos ci-dessous qui sont des captures
écran des simulations. Le schéma expliqué précédemment est le circuit final effectué. Cependant, ces
simulations ne sont pas tout à fait les mêmes. En effet, au final nous avons dû envoyer des signaux
créneaux d’amplitudes 24V à nos MOSFET. Sur cette simulation, ce sont des signaux créneaux de
12V. Nous avons dû changer car nous avons rencontré des problèmes expliqués un peu plus bas.
Malheureusement, lors de la simulation, ces problèmes ne sont pas apparus.
Schéma simulé :
En entrée : Signal créneau de 12V pour Q1 et Q4 et les deux autres en états bloqués.
FIGURE 31 : Capture écran du schéma simulé sous NiMultisim
42. 42
c. Assemblage
Après avoir câblé notre montage sur plaquette blanche et donc avec moins d’ampérages (les
plaquettes blanches supportant au maximum 2,5 ampères) nous avons usiné les plaquettes.
Pour diminuer au minimum l’électromagnétisme, les possibilités d’avoir des transferts entre les pistes
par le silicium, nous avons pris le plus de mesure possible :
- Plan de masse sur la face Bottom
- Piste les plus larges possibles pour faire passer le 13 Ampères
- 3 cartes différentes : 1 pour la partie logique, 1 pour chaque moteur
- Des fils utilisés pour des alimentations de 230V. Des fils plus épais et avec une gaine plus
épaisse pour se relier aux moteurs et aux batteries
Voici un aperçu du PCB. Les plaquettes sont disponibles
Pour l’usinage de la plaquette, un excel avec toutes les étapes a été fait afin que tout le monde puisse
avancer la plaquette le plus rapidement possible. Cet excel est disponible dans la bibliographie.
FIGURE 32 : PCB d’une carte pont en H
43. 43
Les problèmes rencontrés :
- Le bruit. Les pistes étant très grandes pour permettre aux 13 ampères de passer. Si l’on
travaille avec moins d’ampérages et des alimentations plus petites pour les tests, le bruit prend le
dessus sur les signaux et ils deviennent inutilisables.
- D’autre part, si l’on commence à actionner les moteurs et à les laisser tourner, on se rend
compte de deux choses : les MOS qui doivent être à l’état bloqué se retrouvent passant par
intermittences et on a donc un court-circuit car il est strictement interdit de se retrouver avec des
autres combinaisons de MOS actionnés que celles présentées plus haut. La deuxième dont on se
rend compte : le bruit que génère les moteurs remonte par les alimentations et par la masse.
Les solutions que nous avons trouvées :
- Des signaux créneaux de 12V pour actionner les MOS ainsi qu’un continu de 12V pour
bloquer le PMOS ne suffisent pas, il faut du 24V afin que les MOS ne se retrouvent pas passant par
intermittence. Cependant la datasheet des MOS spécifie qu’il supporte 20V maximum sur les gâtes.
Mais même à 20V les MOS deviennent passant. Notons que ce problème n’apparaissait pas lors des
simulations.
- Pour que ça passe le moins possible par l’alimentation, on a câblé une alimentation en étoile :
Un câble d’alimentation par carte, aucune carte n’est reliée entre elle par l’alimentation. Même si la
batterie est la même, c’est le seul point commun concernant l’alimentation.
- On a placé des transistors en parallèle entre les pates moteurs et la masse. Ceci a permis de
largement diminuer les pics qui pouvaient aller jusqu’à 40V.
- On a également mis des diodes de découplages entre les masses et alimentations, assez grosses
pour bloquer tous les bruits.
Voici un exemple de bruit que nous avons eu
Grâce à toutes ces solutions nous avons réussi à faire marcher la plaquette, cependant au bout d’un
certain temps, le bruit qui persiste fini par prendre le dessus et un MOS fini par griller à chaque fois.
FIGURE 33 : Photo du bruit présent sur nos signaux.
44. 44
A. Solution 2
a. Choix du circuit
En effectuant nos recherches sur internet, nous avons trouvé deux solutions différentes
de concevoir un pont en H, ce qui permet de contrôler les moteurs dans un sens ou dans l’autre
en fonction des signaux d’entrées.
Ici nous allons vous parler d’une des deux méthodes qui consiste à réaliser un hacheur quatre
quadrants avec 4 transistors Mosfet de canal N. Contrairement, à l’autre solution étudiée en
parallèle, c’est un composant appelé driver de Mosfet qui va jouer le rôle de contrôleur pour
indiquer si on doit laisser passer un signal créneau sur tel transistor ou si on doit le laisser en
« mode bloqué ».
MOTEUR
FIGURE 34 : Schématique de la solution 2
45. 45
Voici donc un aperçu un peu plus visuel du montage de puissance qui nous intéresse. Bien sûr
dans notre cas, il y a deux moteurs à contrôler donc on double cela.
Nos moteurs s’alimentant en 24V, on a choisi une tension de 24V pour les Mosfet car en réalité,
quand le transistor sera activé, il va se fermer et donc devenir un interrupteur fermé. Attention à
bien faire vérifier à la tension de déclenchement des transistors.
Ensuite, la partie électronique faisant office de liaison entre la partie informatique et la partie
mécanique, il faut faire un circuit électronique qui est capable à partir de nos signaux envoyés par
la STM32 d’envoyer les tensions continues ou les PWM qu’il faut pour permettre au driver de
Mosfet d’activer les deux bons transistors si on veut aller en avant et les deux autres si on veut
reculer. Pour cela rien de mieux qu’un circuit logique composé de portes AND et de portes
INVERSEUSES.
FIGURE 35 : Schématique partie logique
46. 46
Dans tous les cas, la STM32 envoie deux signaux PWM en permanence qui sont en fait les signaux
correspondant au relevé du capteur et c’est eux qui vont permettre d’avancer plus au moins vite
en fonction de leur rapport cyclique. Le signal de Dir qui est en fait une tension continue soit de
3,3V ou de 0 permet de définir si on va en marche avant ou en marche arrière. Dans notre cas,
DIR=0 on va en avant et DIR=1 en arrière.
Ensuite dernière partie de cette carte électronique, nous avons choisi d’utiliser un optocoupleur
pour éviter les interactions entre la partie puissance composée des Mosfet et la partie logique. Le
principe est simple, dans ce composant, une LED s’active si il y a une différence de potentiel
entre les deux pattes de sorties et permet au courant de passer par photo couplage. Ainsi on isole
la partie à très faible ampérage et la partie où nos 13A demandés par les moteurs vont passer.
Il y a une résistance pull-down dans ce petit montage pour permettre d’avoir une tension continue
en sortie lorsque le signal d’entré est nul.
FIGURE 36 : Schématique optocoupleur
47. 47
b. Assemblage
Au niveau de la constitution du PCB (la carte électronique), nous sommes parti sur une carte avec
des composants CMS (non traversants). Le plus dur dans cette partie a été de contrôler la largeur
des pistes qui nécessite de forts ampérages. En effet, il est évidant que dans notre cas, il faut des
pistes élargies qui permettent de faire passer nos 13A de courant.
Voici notre carte lors d’une simultion après soudage. Malheureusement nous n’avions pas le matériel
nécessaire(haute précision) pour la souder et une petite erreur en soudant la micro-stm a fait qu’il y eu des
cours circuits sur la plaquette et nous avons décidé de revenir avec le même schéma mais sur plaquette à
trou avec des composants traversants où nous sommes certain qu’il n’y a pas de problème de soudure
possible avec nos fers mis à disposition par l’école. C’est là qu’arrive notre carte en pieuvre :
FIGURE 37 : Simulation de la plaquette
FIGURE 38 : Plaquette de test supportant le grand ampérage
48. 48
c. Les tests
Au niveau des tests, nous sommes parties sur une stratégie de validations en plusieurs étapes :
Les tests de continuités
La partie logique
La partie avec les optocoupleurs
La partie avec les drivers
On a ajouté les transistors sans les moteurs
Tests avec des moteurs ne consommant pas beaucoup (ventilateur d’ordinateur)
Tests avec des petits moteurs de voiture
Tests avec le Segway uniquement en marche avant et sur une chaise et sans la batterie
Test avec la batterie
Tests avant et arrière sur la chaise
Tests sur le sol unidirectionnel
Test de marche avant et arrière enchaînés sur le sol
Nous n’avons jamais pu tester avec le capteur d’angle donc nous avons simulé avec des codes en dur
dans la STM qui permettaient de changer de sens toutes les quatre secondes par exemple.
Le plus gros problème que nous avons eu c’est d’éviter les pics de bruits qui viennent du fait qu’on
branche les moteurs et que cela consomme du courant. Voici des photos qui expliquent cela :
FIGURE 39 : Relevé oscilloscope
49. 49
B. Pistes D’amélioration
Les pistes d’améliorations qui peuvent être réaliser sur notre carte électronique est d’arriver à isoler
la masse des batteries et la masse des composants de la carte car les pics de bruits viennent d’ici.
On pourrait également changer les diodes qui protègent nos drivers de Mosfet qui ne sont pas assez
grandes.
Fixer les dissipateurs qui permettent de réduire la chaleur dans les transistors. Ils sont déjà achetés.
Il faut régler le problème du LM317. En effet, même s’il nous sert pour réguler la tension 24V en 9V
pour alimenter la STM, ce dernier chauffe rapidement et n’est donc pas adapté.
Créer une masse virtuelle sur le Segway qui permettrait de faire cage de Faraday et éviter les
problèmes d’électromagnétismes.
L’une des pistes est d’utiliser la carcasse du Segway qui est en aluminium comme plan de masse extérieur
autre que la masse de la batterie.
Trouver des MOS plus résistants.
Utiliser un pont en H tout fait. En effet, il existe des H-bridges commercialisés déjà prêt, il suffit juste
d’envoyer les signaux créneaux d’entrés. Cependant ce n’était pas notre objectif premier.
Il pourrait être également intéressant de regarder des PCB déjà prêts qui sont proposés par ST microelectronics.
FIGURE 40 : Les dissipateurs