Rapport final

publicité
Université du Québec à Chicoutimi
MODULE D’INGÉNIERIE
GÉNIE ÉLECTRIQUE
6GIN555 – PROJET DE SYNTHÈSE EN INGÉNIERIE
Rapport final
2011-256
Système de positionnement GPS pour panneaux solaires
Préparé par
DUBÉ DANIEL
CÔTÉ SHAWN-YANNICK
Pour
Hung Tien Bui, ing., Ph.D.
Université du Québec à Chicoutimi
20 avril 2012
CONSEILLER :
COORDONNATEUR :
Hung Tien Bui, ing., Ph.D.
Jacques Paradis, ing.
Approbation du rapport final pour diffusion
Nom du conseiller
Date
Signature
Remerciements
L’équipe aimerait tout d’abord remercier Monsieur Hung Tien Bui, professeur en génie électrique au
département des sciences appliquées de l’Université du Québec à Chicoutimi. Étant le conseiller de notre
projet, il a su nous guider et nous livrer des conseils pertinents tout au long de la réalisation de ce projet.
Il nous a accordé beaucoup de son temps et nous en sommes reconnaissants.
Nous souhaitons également remercier Messieurs Francis Deschênes et Richard Martin, techniciens au
département des sciences appliquées de l’Université du Québec à Chicoutimi. Ils nous ont aidés avec des
conseils éclairés ainsi que de bonnes idées.
Nous ne voulons surtout pas oublier les promoteurs de ce projet, Messieurs Jonathan Poirier et Alexandre
Brassard, pour nous avoir permis de travailler sur un beau défi qui a contribué à approfondir nos
connaissances.
Shawn-Yannick Côté
Daniel Dubé
Résumé des conclusions
Résumé du travail réalisé
Résumé de la problématique et
des objectifs
Résumé
Avec le rendement croissant des panneaux solaires photovoltaïques ainsi que leur prix
continuellement à la baisse, le promoteur du projet désirait utiliser cette source d’énergie
renouvelable pour alimenter en énergie électrique des endroits isolés, tels que des
campements forestiers. Cependant, afin d’augmenter la puissance délivrée et donc le
rendement global d’un tel système, la mise au point d’un prototype permettant le suivi
constant du Soleil est nécessaire.
Il s’agit donc d’utiliser un récepteur GPS pour acquérir les diverses informations de temps et
de lieux requises, puis de les traiter avec un microcontrôleur et des équations
trigonométriques. Ce prototype électronique doit permettre, à terme, de contrôler les deux
axes de positionnement du prototype mécanique prêté par le promoteur.
Tout d’abord, une familiarisation avec le sujet a été nécessaire, surtout au niveau des
équations de la position du Soleil et des récepteurs GPS. Puis, un survol des technologies
utilisables a été réalisé avant de commencer les étapes suivantes de conception :








Réalisation d’un simulateur de signal GPS avec Visual Basic;
Recherche des équations de position solaire et validation avec MATLAB;
Calculs des bilans de puissance, des filtres et échauffement des pièces;
Modélisation de la position du panneau en fonction de la rétroaction des vérins;
Programmation en langage C du microcontrôleur 8 bits avec MPLAB IDE;
Sélection des composantes du prototype (GPS, boîtier, alimentation, etc.);
Réalisation du circuit imprimé avec Altium;
Essais finaux de validation.
Un prototype complet adapté aux besoins du promoteur a été réalisé. En omettant les
limitations mécaniques du support physique, le système est capable de suivre le Soleil à la
trace, peu importe le moment de l’année, de la journée et du lieu sur la planète. Ceci a été
possible avec l’utilisation du système GPS, ainsi que de quelques équations mathématiques
implantées dans le microcontrôleur. Afin d’accompagner cette polyvalence de
fonctionnement, le prototype électronique a été conçu pour résister et fonctionner autant dans
les milieux nordiques que dans les endroits très chauds. Des tests variés, effectués à l’aide
d’un simulateur de signal GPS et du logiciel MATLAB, ont permis de détecter et de corriger
des lacunes et des opérations réalisées de façon incorrecte par le code imaginé par les
concepteurs. Avec ces diverses vérifications, il est possible d’affirmer avec une bonne
certitude que le produit livré est apte à remplir les exigences du promoteur.
Table des matières
I
II
Introduction.......................................................................................................................... 1
I.1
Contexte du projet ..................................................................................................... 1
I.2
Limites et logiques des enchaînements ..................................................................... 1
I.3
Finalité des travaux présentés.................................................................................... 1
Présentation du projet .......................................................................................................... 2
II.1
Description de l’équipe de travail ............................................................................. 2
II.2
Objectifs généraux et spécifiques du projet............................................................... 3
II.3
Problématique et état de l’art reliés au projet ............................................................ 6
III
Aspects techniques et éléments de conception relatifs au projet ......................................... 8
IV
Bilan des activités .............................................................................................................. 53
IV.1 Arrimage formation pratique/universitaire .............................................................. 53
IV.2 Travail d’équipe ...................................................................................................... 54
IV.4 Analyse et discussion .............................................................................................. 57
V
Conclusion et recommandations ........................................................................................ 59
Bibliographie ............................................................................................................................... 61
Glossaire ...................................................................................................................................... 62
Annexe 1 (Code de simulation MATLAB) .................................................................................... 63
Annexe 2 (Code du microcontrôleur).......................................................................................... 64
Annexe 3 (Code Visual Basic du simulateur GPS)........................................................................ 74
Annexe 4 (Éléments abandonnés) .............................................................................................. 75
Annexe 5 (Procédure de fonctionnement) ................................................................................. 80
Annexe 6 (Diagramme de décision) ............................................................................................ 81
i
Liste des figures
Figure 1 : Représentation simplifiée du système........................................................................................... 3
Figure 2 : Montage mécanique (position initiale) ......................................................................................... 4
Figure 3 : Montage mécanique (déploiement maximal en hauteur) .............................................................. 4
Figure 4 : Mécanismes de hauteur et d’azimut (1) ........................................................................................ 5
Figure 5 : Mécanismes de hauteur et d’azimut (2) ........................................................................................ 5
Figure 6 : Plaques de prototypage utilisées pour les essais ........................................................................... 7
Figure 7 : Système de tests ............................................................................................................................ 7
Figure 8 : Organigramme de calcul du numéro du jour de l’année [1] ......................................................... 8
Figure 9 : Organigramme simplifié du diagramme solaire pour une latitude donnée [1] ............................. 9
Figure 10 : Représentation de l’azimut (avec arc sinus) pour le 18 avril (43.6° de latitude) ...................... 12
Figure 11 : Azimut original (avec arc cosinus) pour le 18 avril (43.6° de latitude) .................................... 12
Figure 12 : Azimut modifié (avec arc cosinus) pour le 18 avril (43.6° de latitude) .................................... 13
Figure 13 : Hauteur en fonction de l’azimut pour le 18 avril (latitude=0°) ................................................ 15
Figure 14 : Hauteur en fonction de l’azimut pour le 18 avril (latitude=89.9°) ........................................... 16
Figure 15 : Représentation de l’angle du support selon la hauteur du Soleil .............................................. 17
Figure 16 : Décorticage d’une trame $GPRMC [3] .................................................................................... 18
Figure 17 : Microcontrôleur PIC18F4680 ................................................................................................... 19
Figure 18 : Utilisation finale de la mémoire du microcontrôleur ................................................................ 19
Figure 19 : Récepteur GPS [3] .................................................................................................................... 20
Figure 20 : Convertisseur DC/DC CC3-1205SF-E ..................................................................................... 21
Figure 21 : Régulateur abaisseur SPX1117M3-L-3-3 ................................................................................. 22
Figure 22 : Schéma thermique du Pont en H sans dissipateur thermique ................................................... 23
Figure 23 : Pont en H VNH3SP30TR-E ..................................................................................................... 24
Figure 24 : Connecteur USB avec bouchon protecteur ............................................................................... 24
Figure 25 : Pont USB vers UART CP2102-GM ......................................................................................... 24
Figure 26 : Tampon 74LVC07A ................................................................................................................. 25
Figure 27 : Tableau Tension-Fréquence du microcontrôleur [8] ................................................................ 26
Figure 28 : Cristal ECS-250-18-23A-EN-TR ............................................................................................. 26
Figure 29 : Diodes électroluminescentes .................................................................................................... 27
Figure 30 : Fusibles ..................................................................................................................................... 28
Figure 31 : Boîtier avec joint d’étanchéité .................................................................................................. 28
Figure 32 : Fiches et réceptacles ................................................................................................................. 29
Figure 33 : Représentation générale des interactions .................................................................................. 30
Figure 34 : Approximation par résistances parallèles ................................................................................. 33
Figure 35 : Communication entre le microcontrôleur et le magnétomètre I2C ........................................... 36
Figure 36 : Communication entre le PIC et le GPS .................................................................................... 36
Figure 37 : Informations en provenance du récepteur GPS ........................................................................ 38
Figure 38 : Asservissement en boucle fermée ............................................................................................. 41
Figure 39 : Valeur de CCPR1L en fonction de l’erreur absolue ................................................................. 42
Figure 40 : Détermination de la hauteur actuelle en fonction de la tension de rétroaction ......................... 44
Figure 41 : Angle de la hauteur en fonction de la tension de rétroaction .................................................... 45
Figure 42 : Détermination de l’azimut actuel en fonction de la tension de rétroaction .............................. 47
Figure 43 : Angle de l’azimut en fonction de la tension de rétroaction (solution non-retenue) .................. 48
Figure 44 : Angle de l’azimut en fonction de la tension de rétroaction (solution retenue) ......................... 49
Figure 45 : Circuit imprimé final ................................................................................................................ 50
Figure 46 : Schématique finale.................................................................................................................... 51
Figure 47 : Branchements internes du prototype......................................................................................... 52
Figure 48 : Système final ............................................................................................................................ 52
ii
Figure 49 : Coordonnées horizontales d’un astre (azimut a et hauteur h) [1] ............................................. 62
Figure 50 : Simulation du GPS avec Visual Basic ...................................................................................... 74
Figure 51 : Position et utilisation de l’accéléromètre sur 2 axes ................................................................. 75
Figure 52 : Accéléromètre ........................................................................................................................... 75
Figure 53 : Magnétomètre HMC5883L-TR ................................................................................................ 76
Figure 54 : Schéma électrique du PCB de test pour le magnétomètre numérique ...................................... 77
Figure 55 : Schéma électrique du PCB de test pour l’accéléromètre .......................................................... 77
Figure 56 : Plaquette de test du magnétomètre ........................................................................................... 78
Figure 57 : Plaquette de test de l’accéléromètre.......................................................................................... 78
Figure 58 : Plaquette du magnétomètre avant et après le soudage .............................................................. 79
Figure 59 : Plaquette de l’accéléromètre avant et après le soudage ............................................................ 79
Figure 60 : Diagramme de décision, partie 1 .............................................................................................. 81
Figure 61 : Diagramme de décision, partie 2 .............................................................................................. 82
Liste des tableaux
Tableau 1 : Comparaison des valeurs calculées pour le 18 avril à 10:00 (MATLAB vs Code C) .............. 10
Tableau 2 : Comparaison des valeurs calculées (MATLAB vs Université de Nebraska-Lincoln) ............. 11
Tableau 3 : Valeurs pour l’équateur (latitude=0°) le 18 avril ..................................................................... 14
Tableau 4 : Valeurs pour le pôle Nord (latitude=89.9°) le 18 avril............................................................. 16
Tableau 5 : Tensions de fonctionnement du microcontrôleur et du pont en H ........................................... 25
Tableau 6 : Récapitulatif des caractéristiques principales des pièces ......................................................... 30
Tableau 7 : Prix des pièces du prototype..................................................................................................... 31
Tableau 8 : Bilan de puissance préliminaire ............................................................................................... 33
Tableau 9 : Tensions d’entrées et de sorties selon la tension d’alimentation du microcontrôleur .............. 35
Tableau 10 : Tensions basses et hautes selon la tension d’alimentation du magnétomètre ........................ 35
Tableau 11 : Tensions d’entrées et de sorties du récepteur GPS ................................................................. 36
Tableau 12 : Justification à droite pour l’ADC ........................................................................................... 40
Tableau 13 : Justification à gauche pour l’ADC ......................................................................................... 40
Tableau 14 : Angles obtenus selon les tensions lues (hauteur) ................................................................... 46
Tableau 15 : Angles obtenus selon les tensions lues (azimut) .................................................................... 47
Tableau 16 : Échéancier final ...................................................................................................................... 56
iii
I
I.1
Introduction
Contexte du projet
Comme les camps forestiers ont besoin de générer de l’électricité dans des endroits éloignés et que cette
électricité est produite par des génératrices, on peut s’imaginer que le carburant utilisé provoque bien des
problèmes pour son transport. Heureusement, les cellules solaires photovoltaïques ont des rendements de
plus en plus élevés et comme ils sont maintenant plus abordables, il devient très intéressant de les utiliser.
Ainsi, pour fournir l’énergie électrique généralement produite par d’autres sources d’énergie, telles les
génératrices, l’utilisation de panneaux solaires est tout indiquée. En plus, c’est une méthode bien plus
verte pour l’environnement et elle peut s’inscrire dans un programme de développement durable.
C’est la raison pour laquelle le promoteur du projet a décidé de soumettre sa problématique. Celui-ci
désire alimenter un campement en énergie électrique, tout en se libérant de la nécessité de transporter de
grandes quantités de carburant dans des milieux éloignés. Les panneaux solaires photovoltaïques
devraient donc remplacer, à terme, les génératrices conventionnelles. Cependant, pour augmenter la
puissance délivrée et donc le rendement des panneaux solaires, il est avantageux de les positionner
perpendiculairement au rayonnement solaire. Pour augmenter ce rendement, il faut donc traquer le Soleil
tout au long de la journée et de l’année. Ainsi, il est nécessaire de tenir compte de la date, de la latitude,
ainsi que de l’heure de la journée pour optimiser la position de ces panneaux de façon automatisée.
I.2
Limites et logiques des enchaînements
Pour concrétiser ce projet, il s’agissait donc de commencer par se renseigner sur la science derrière le
déplacement apparent du Soleil et à partir de là, il devenait possible d’imaginer la logique qui permettrait
de réaliser le tout. Les technologies qui s’y prêtaient bien ont été sélectionnées, permettant alors de relier
le matériel et le logiciel ensemble. Afin de confirmer les choix de conception et pour fin d’optimisation,
des tests en milieux réels ont été réalisés.
I.3
Finalité des travaux présentés
Finalement, les objectifs du projet ont été atteints. Plusieurs difficultés de différents types ont évidemment
été rencontrées, que ce soit au niveau de la programmation ou au niveau du matériel électronique qui avait
des principes de fonctionnements inconnus des membres du projet. Des solutions à ces problèmes ont été
trouvées et le présent rapport expose les démarches et les solutions utilisées pour y arriver.
1
II
Présentation du projet
II.1
Description de l’équipe de travail
Les personnes concernées directement par le projet sont les suivantes :
Shawn-Yannick Côté,
Étudiant finissant au baccalauréat en génie électrique,
Université du Québec à Chicoutimi,
2008-2012.
Daniel Dubé,
Étudiant finissant au baccalauréat en génie électrique,
Université du Québec à Chicoutimi,
2008-2012.
2
II.2
Objectifs généraux et spécifiques du projet
Les objectifs initiaux du projet sont conservés, c’est-à-dire concevoir le prototype d’un système à
microprocesseur qui utilise des données d’espace (latitude) et de temps (date et heure) pour produire un
signal analogique correspondant. Ceci permettra au promoteur de positionner ses panneaux solaires à
90 degrés avec le Soleil tout au long de l’année. Ainsi, le système acquiert des données d’un GPS pour se
situer et pour permettre aux panneaux solaires de suivre le Soleil à la trace tout au long des journées.
Cependant, bien que les objectifs initiaux sont globalement les mêmes, des éléments ont été ajoutés. Au
début du projet, le support mécanique n’avait pas encore été fabriqué et le promoteur ne pouvait pas
spécifier exactement comment son système serait conçu. Suite à des discussions avec lui à propos de la
structure mécanique sur laquelle le prototype électronique agit, le promoteur a alors déclaré que les
deux axes du système de coordonnées horizontales (voir glossaire) seront exploités, plutôt qu’un seul,
dans le but d’optimiser le rendement du système. Un premier vérin électrique de 12 pouces de course
linéaire permet de contrôler le paramètre «hauteur» d’un angle de 0° (parallèle au sol) jusqu’à un angle de
63° (un angle de 90° serait perpendiculaire au sol). Un second vérin, identique au premier, actionne un
mécanisme à chaîne et engrenage pour contrôler le paramètre «azimut» avec un angle total de 268°. La
figure 1 donne une représentation générale du design mécanique, sans toutefois représenter la réalité des
mécanismes utilisés.
Figure 1 : Représentation simplifiée du système
La livraison du panneau solaire et les tests préliminaires de fonctionnement ont été exécutés en
octobre 2011, soit quelques semaines après le début du projet. Une vérification visuelle a alors été
effectuée lors de la livraison et aucune marque de bris n’a été détectée. Quelques photos du système tel
qu’il a été livré sont insérées dans les deux pages suivantes.
3
Figure 2 : Montage mécanique (position initiale)
Figure 3 : Montage mécanique (déploiement maximal en hauteur)
4
Figure 4 : Mécanismes de hauteur et d’azimut (1)
Figure 5 : Mécanismes de hauteur et d’azimut (2)
5
II.3
Problématique et état de l’art reliés au projet
Pour ce projet, le langage C a été retenu comme langage principal pour programmer le microcontrôleur.
Les raisons sont que c’est un langage qui possède plusieurs livres traitant le sujet et plusieurs références
sur Internet. Il est facile à maintenir et à étendre, en plus d’avoir accès à un compilateur performant pour
la famille de microcontrôleur PIC18. Aussi, il peut être reproduit sur d’autres microcontrôleurs avec peu
ou pas de modifications. S’il le faut, du code en assembleur peut aussi être joint au code C dans le logiciel
MPLAB IDE.
Puis, étant donné qu’un récepteur GPS ne fonctionne pas dans un environnement intérieur tel qu’une
université, il faut simuler son signal de sortie. Pour ce faire, un petit utilitaire est programmé avec le
logiciel Microsoft Visual Basic. Cet utilitaire permet de tester rapidement plusieurs valeurs de latitude, de
temps et de date, sans avoir besoin de déclarer des variables en constantes dans le programme du
microcontrôleur. Il est alors aussi possible de tester le code en profondeur, sans avoir besoin d’être à
proximité d’une fenêtre ou à l’extérieur.
Aussi, au début du projet il était question d’utiliser un magnétomètre pour déterminer l’orientation du
panneau ainsi qu’un accéléromètre pour trouver l’inclinaison. Il n’était malheureusement pas possible
d’acheter le magnétomètre numérique et l’accéléromètre dans un format «through-hole» qui aurait rendue
l’utilisation d’une plaquette de prototypage possible. Le seul format disponible est le «surface-mount».
Ainsi, la conception de plaquettes de tests sur mesure a été nécessaire pour pouvoir souder ces
deux pièces et pouvoir les tester convenablement avec le reste du circuit. Le logiciel Altium Designer
Release 10 est utilisé pour cela.
En ce qui a trait au travail effectué par les membres du groupe et à la répartition de la charge de travail, il
en est venu à une séparation naturelle du travail qui permet non seulement d’exploiter les forces de
chacun, mais aussi de paralléliser grandement le projet. Ceci permet de travailler bien plus vite, tout en
ayant quand même accès aux connaissances et opinions du coéquipier.
Comme il n’a pas été possible de travailler avec le circuit imprimé final pour faire des tests tout au long
du projet, les plaquettes de prototypage de l’UQAC ont été d’une grande aide. La figure 6 est une photo
de la presque totalité des composantes utiles au projet. Dans le système final, le bloc d’alimentation est
remplacé par le système de batteries qui sont chargées par les cellules photovoltaïques. Le résultat final
est évidemment bien plus petit et n’a pas l’apparence désordonnée causée par tous ces fils électriques.
6
Figure 6 : Plaques de prototypage utilisées pour les essais
La figure suivante est un aperçu du système de test qui a été implanté au cours de l’hiver 2012 dans le
laboratoire P2-1030. Il a permis d’accéder à plusieurs équipements, tels multimètres et oscilloscopes, tout
en étant dans un lieu relativement silencieux et peu fréquenté. Il était donc facile de se concentrer.
Figure 7 : Système de tests
7
III
Aspects techniques et éléments de conception relatifs au projet
Détermination de la position du Soleil :
La valeur de la déclinaison δ (voir glossaire) est totalement indépendante de la position sur Terre. Elle ne
dépend que du temps saisonnier, qui ne dépend à son tour que de la position de la Terre par rapport au
Soleil. Ainsi, en connaissant la date, il est possible de déduire la déclinaison. Cependant, l’équation de la
déclinaison requiert que la date soit convertie de telle sorte qu’elle ne représente en fait que le numéro du
jour dans l’année (jour julien). La figure 8 illustre la marche à suivre pour déterminer ce numéro (n) du
jour en connaissant le mois actuel (mm) ainsi que le jour du mois (jj). La fonction «int» signifie de ne
conserver que la partie entière de la valeur du terme entre parenthèse.
Figure 8 : Organigramme de calcul du numéro du jour de l’année [1]
Puis, avec quelques simplifications, la trajectoire elliptique de la Terre autour du Soleil peut être
considérée comme un cercle. La vitesse de la Terre autour de ce cercle est donc d’environ 1° par jour
pendant un an (360°/365 jours). De plus, la Terre tourne sur elle-même selon un angle qui varie de
-23°27’ (23,45°) à +23°27’ selon la date. Dans l’équation de la trajectoire, le nombre 81 représente le jour
81 de l’année, soit le 22 mars, qui est le début de l’année tropique. À ce moment, ainsi qu’au
22 septembre, la déclinaison est donc nulle.
Ensuite, comme le Soleil semble tourner de 360° en 24 heures autour de la Terre, cela représente une
rotation de 15° par heure. Cette position du Soleil peut être définie par le temps solaire vrai (TSV), qui est
en fait le temps donné par les cadrans solaires et qui permet de déterminer l’angle horaire. Ainsi, en
connaissant l’heure, l’angle horaire peut être calculé.
8
Une fois la déclinaison et l’angle horaire calculés, il ne manque que la latitude du lieu pour calculer la
hauteur du soleil selon le système de coordonnées horizontales.
Ensuite, toujours avec la déclinaison et l’angle horaire mais en ajoutant aussi la hauteur, il est possible de
calculer l’azimut, encore selon le système de coordonnées horizontales.
Afin de mieux visualiser ces étapes à suivre pour déterminer la position du Soleil, l’organigramme de la
figure 9 peut s’avérer utile.
Figure 9 : Organigramme simplifié du diagramme solaire pour une latitude donnée [1]
Pour le microcontrôleur, le code est développé dans le logiciel MPLAB IDE v8.56 avec son compilateur
C18 v3.00. Afin de vérifier ces équations, le logiciel de calculs numériques MATLAB R2009b a été
utilisé. Les résultats obtenus pour les deux types de codes ont par la suite été comparés (tableau 1). Pour
cette simulation, la date a été fixée au 18 avril à 10 heures, pour une latitude de 43,6 degrés. Il est
important de noter que MATLAB peut utiliser aussi bien les degrés que les radians pour ses calculs
trigonométriques, alors que le code C ne peut utiliser que les radians. Des fonctions de conversion ont
donc été codées en langage C afin de simplifier les comparaisons et les manipulations.
9
Aussi, il est important de savoir que lors de la programmation du simulateur dans MATLAB, les virgules
flottantes et l’espace mémoire n’ont pas besoin d’être pris en compte, étant donné que ce simulateur est
exécuté par un puissant processeur de 32 bits assisté par une grande quantité de mémoire vive. Cependant,
lors de l’écriture d’un code équivalent destiné à être exécuté par un microcontrôleur 8 bits, les choses se
compliquent un peu. En effet, non seulement les points flottants ne sont pas gérés nativement par de tels
microcontrôleurs, mais en plus ils consomment énormément de ressources. Heureusement, l’application
de ce projet ne nécessite pas des temps de calculs extrêmement rapides, ce qui permettra d’utiliser ce type
de microprocesseur plutôt qu’un plus puissant, mais plus coûteux, du style processeur de signal
numérique. Il est possible de voir dans le tableau 1 que, finalement, les résultats donnés par MATLAB et
ceux du simulateur du microprocesseur dans MPLAB IDE sont semblables. Le microcontrôleur PIC
pourra donc être utilisé sans problème.
Tableau 1 : Comparaison des valeurs calculées pour le 18 avril à 10:00 (MATLAB vs Code C)
Numéro du jour dans l’année :
Déclinaison (°) :
Angle horaire (°) :
Hauteur (°) :
Azimut (°) :
MATLAB
108
10,5110
-30
47,9389
-47,2085
Langage C
108
10,51097
-30,00000
47,93887
-47,20850
Une fois qu’il a été déterminé que les valeurs de MATLAB et celles du code du microcontrôleur sont
semblables, une vérification des valeurs pour une journée entière a été effectuée à l’aide d’un petit
programme informatique en ligne réalisé par l’Université de Nebraska-Lincoln [2]. Ce programme utilise
les mêmes variables que ce projet (latitude, date et heure) afin de déterminer la position du Soleil.
L’exercice a été utile à plusieurs égards. D’abord, il a permis de vérifier la validité du code pour une
journée entière, soit le 18 avril, de minuit à minuit le lendemain et pour la latitude de 43.6° N. Ensuite, il a
permis de voir que l’utilisation de l’équation de la hauteur peut être utilisée sans aucune modification.
Cependant, l’équation de l’azimut devra être complétée par un code qui permettra de la porter dans un
système de 0° à 360° plutôt que -90° à 90° comme elle est actuellement. Ceci est causé par l’utilisation de
la fonction trigonométrique inverse arc sinus, qui est limitée par ces bornes. L’exercice a aussi permis de
bien visualiser le résultat des équations. Par exemple, une valeur négative pour l’angle de la hauteur
signifie que le Soleil est sous l’horizon (cellule ombragée du tableau 2). Quant à l’azimut, il faut savoir
que par convention, le Nord est à 0° et le Sud à 180°. Ainsi, selon les résultats du tableau 2, le Soleil est
directement au Nord (mais environ 35° sous l’horizon) à minuit et en plein Sud à midi à une hauteur
d’environ 57° par rapport à l’horizon. Les résultats obtenus concordent donc bien avec la réalité.
10
Tableau 2 : Comparaison des valeurs calculées (MATLAB vs Université de Nebraska-Lincoln)
Heure
0:00
1:00
2:00
3:00
4:00
5:00
6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
0:00 (lendemain)
Hauteur (°)
MATLAB
-35,8890
-34,1912
-29,3948
-22,1895
-13,3093
-3,3526
7,2271
18,0645
28,8039
38,9968
47,9389
54,4454
56,9110
54,4454
47,9389
38,9968
28,8039
18,0645
7,2271
-3,3526
-13,3093
-22,1895
-29,3948
-34,1912
-35,5297
Hauteur (°)
U. N.-L.
-35,5
-33,7
-28,9
-21,7
-12,9
-2,9
7,7
18,5
29,3
39,5
48,5
55,0
57,4
54,9
48,3
39,3
29,1
18,3
7,5
-3,0
-12,9
-21,7
-28,8
-33,5
-35,1
Azimut (°)
MATLAB
0
-17,9175
-34,3504
-48,6640
-61,0493
-72,0537
-82,3475
-87,3844
-76,3414
-63,4531
-47,2085
-25,9532
0
25,9532
47,2085
63,4531
76,3416
87,3844
82,3475
72,0537
61,0443
48,6640
34,3504
17,9175
0
Azimut (°)
U. N.-L.
0,2
18,0
34,3
48,5
60,9
71,9
82,1
92,4
103,4
116,3
132,6
154,1
180,3
206,6
227,9
244,1
257,0
268,0
278,3
288,5
299,6
311,9
326,2
342,5
0,3
En regardant de plus près l’azimut pour une journée entière, tel que tracé à la figure 10, il peut être
remarqué qu’il y a trois zones intéressantes. La première se situe entre 0:00 et environ 6:40, la seconde
entre 6:40 et 17:20 alors que la troisième est environ entre 17:20 et 24:00 (minuit le lendemain). De prime
abord, il peut sembler simple de considérer ces zones et ensuite utiliser des boucles de comparaison afin
de convertir l’azimut en un système de 0 à 360°. Cependant, ces zones sont délimitées par des bornes (ici
6:40 et 17:20) qui varient en fonction de la date et de la latitude. Il aurait donc fallu faire calculer ces
bornes à chaque début de journée, ou encore les pré calculer et les conserver dans un tableau. Les deux
méthodes auraient alourdi inutilement le code et la mémoire du microcontrôleur, surtout que la première
méthode fait aussi appel à des fonctions trigonométriques inverses afin de déterminer quand l’azimut vaut
-90° et 90° dans la fonction par-rapport au temps solaire vrai (TSV).
11
Figure 10 : Représentation de l’azimut (avec arc sinus) pour le 18 avril (43.6° de latitude)
L’équation de l’azimut suggérée par le promoteur a donc été écartée et la recherche s’est poursuivie pour
trouver une équation de l’azimut utilisant une autre fonction que l’arc sinus. Le choix s’est arrêté sur
l’équation suivante [7] :
Afin de vérifier le résultat de cette équation, cette dernière a été simulée dans MATLAB. La figure
suivante représente ces résultats :
Figure 11 : Azimut original (avec arc cosinus) pour le 18 avril (43.6° de latitude)
12
Selon cette figure 11, il peut être constaté que le résultat est maintenant bien plus près de celui escompté,
car il ne comporte que deux zones, séparées par une valeur critique à midi solaire. En utilisant cette valeur
critique comme borne de condition dans le code du microcontrôleur, il sera tout à fait possible d’obtenir
un azimut qui varie de 0 à 360°. En effet, lorsque l’angle horaire est égal ou inférieur à 0° (avant-midi), la
valeur de l’azimut est inchangée. Lorsque l’angle horaire est supérieur à 0° (après-midi), la valeur de
l’azimut doit être 360° moins l’azimut original. La figure 12 démontre que le résultat est très satisfaisant.
Figure 12 : Azimut modifié (avec arc cosinus) pour le 18 avril (43.6° de latitude)
Afin de ne pas avoir de surprise, deux conditions extrêmes de fonctionnement ont par la suite été
simulées, soit l’équateur et le pôle Nord, respectivement de latitude 0° et 90°. Les valeurs du code
MATLAB ont encore une fois été comparées aux valeurs du programme informatique en ligne de
l’Université de Nebraska-Lincoln [2]. Les résultats de la première simulation, l’Équateur, sont exposés au
tableau 3.
13
Tableau 3 : Valeurs pour l’équateur (latitude=0°) le 18 avril
Heure
0:00
1:00
2:00
3:00
4:00
5:00
6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
0:00 (lendemain)
Hauteur (°)
MATLAB
-79,4890
-71,7534
-58,3745
-44,0465
-29,4465
-14,7425
0
14,7425
29,4465
44,0465
58,3745
71,7534
79,4890
71,7534
58,3745
44,0465
29,4465
14,7425
0
-14,7425
-29,4465
-44,0465
-58,3745
-71,7534
-79,1297
Hauteur (°)
U. N.-L.
-79,1
-71,4
-58,1
-43,8
-29,2
-14,6
0,2
14,9
29,6
44,1
58,4
71,6
78,9
71,3
58,0
43,8
29,2
14,5
-0,2
-14,9
-29,6
-44,1
-58,3
-71,5
-78,8
Erreur (%)
(Hauteur)
0,49
0,49
0,47
0,56
0,84
0,98
--1,06
0,52
0,12
0,04
0,21
0,75
0,64
0,65
0,56
0,84
1,67
--1,06
0,52
0,12
0,13
0,35
0,42
= 0,587
Azimut (°)
MATLAB
0
54,3647
69,6414
75,2976
77,9078
79,1269
79,4890
79,1269
77,9078
75,2976
69,6414
54,3647
360
305,6353
290,3586
284,7024
282,0922
280,8731
280,5110
280,8731
282,0922
284,7024
290,6586
305,6353
0
Azimut (°)
U. N.-L.
0,8
53,6
69,0
74,8
77,4
78,7
79,0
78,6
77,3
74,6
68,6
52,6
359,1
306,8
291,3
285,5
282,8
281,5
281,2
281,6
282,9
285,7
291,7
307,9
1,1
Erreur (%)
(Azimut)
--1,43
0,93
0,67
0,66
0,54
0,62
0,67
0,79
0,94
1,52
3,35
0,25
0,38
0,32
0,28
0,25
0,22
0,25
0,26
0,29
0,35
0,36
0,74
--= 0,697
Selon les pourcentages d’erreurs obtenus, respectivement de 0.587 % pour la hauteur (erreur maximale de
1.67 %) et de 0.697 % pour l’azimut (erreur maximale de 3.35 %), il peut être déclaré que les équations
utilisées seront totalement appropriées pour ce projet. En effet, ces faibles pourcentages d’erreurs n’auront
qu’une influence très minime sur le rendement global du système photovoltaïque, d’autant plus que la
partie mécanique ajoutera forcément une bien plus grande erreur.
14
Afin d’avoir une meilleure visualisation de ces valeurs angulaires, la figure 13 démontre la hauteur du
Soleil en fonction de l’azimut. Bien que l’allure de la courbe semble incorrecte, surtout si la comparaison
est effectuée avec celle du pôle Nord (figure 14), elle est tout à fait représentative de la réalité. En effet, il
faut rappeler que les azimuts de 0° et de 360° représentent en fait la même direction, soit le Nord. Ainsi,
le Soleil se lève (point A) à environ 80° d’azimut et donc près de l’Est et atteint une hauteur maximale
d’environ 80° (point B et C) tout en étant totalement au Nord (il est alors midi). Ensuite, en après-midi, il
commence à descendre pour finalement atteindre l’horizon (point D) à 18 heures et à environ
280° d’azimut, soit près de l’Ouest. Il continu sa course sous l’horizon pour atteindre sa hauteur minimale
(point E et F) et finalement recommencer à se rapprocher de l’autre côté du globe (point A) où il répétera
son cycle. La courbe a été tracée pour une journée entière de 24 heures, avec une précision de 100 points
pour chaque heure, portant ainsi la précision à 2400 points. Ceci permet de voir qu’il n’y a pas d’endroit
contenant une valeur qui aurait pu provoquer une discontinuité dans le fonctionnement du système.
Figure 13 : Hauteur en fonction de l’azimut pour le 18 avril (latitude=0°)
Voici maintenant, au tableau 4, le même exercice pour le pôle Nord.. Les mêmes conclusions que pour
l’Équateur peuvent être tirées au niveau de la précision des calculs. Par-contre, il est intéressant de noter
ici que le Soleil ne se couche jamais, celui-ci restant toujours à environ 10 degrés au dessus de l’horizon.
C’est bien ce qui était attendu pour ce lieu nordique à cette période de l’année.
15
Tableau 4 : Valeurs pour le pôle Nord (latitude=89.9°) le 18 avril
Heure
0:00
1:00
2:00
3:00
4:00
5:00
6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
0:00
Hauteur (°)
MATLAB
10,7703
10,7737
10,7836
10,7995
10,8202
10,8444
10,8702
10,8761
10,9202
10,9410
10,9569
10,9668
10,9703
10,9668
10,9569
10,9410
10,9202
10,8961
10,8702
10,8444
10,8202
10,7995
10,7836
10,7737
11,1263
Hauteur (°)
U. N.-L.
10,8
10,8
10,8
10,9
10,9
10,9
11,0
11,0
11,1
11,1
11,1
11,1
11,2
11,2
11,2
11,2
11,2
11,2
11,2
11,1
11,1
11,1
11,1
11,1
11,1
Erreur (%)
(Hauteur)
0,28
0,24
0,15
0,92
0,73
0,51
1,18
1,13
1,62
1,43
1,29
1,20
2,05
2,08
2,17
2,31
2,50
2,71
2,94
2,30
2,52
2,71
2,85
2,94
0,24
= 1,64
Azimut (°)
MATLAB
0
14,9951
29,9904
44,9865
59,9834
74,9815
89,9808
104,9814
119,9833
134,9864
149,9904
164,9950
180
195,0050
210,0096
225,0136
240,0167
255,0186
270,0192
285,0185
300,0166
315,0135
330,0096
345,0049
0
Azimut (°)
U. N.-L.
0,2
15,2
30,1
45,1
60,1
75,1
91,1
105,2
120,2
135,2
150,2
165,2
180,2
195,2
210,2
225,2
240,2
255,2
270,2
285,2
300,2
315,2
330,2
345,2
0,2
Erreur (%)
(Azimut)
--1,35
0,36
0,25
0,19
0,16
1,23
0,21
0,18
0,16
0,14
0,12
0,11
0,10
0,09
0,08
0,08
0,07
0,07
0,06
0,06
0,06
0,06
0,06
--= 0,23
La figure 14 représente la hauteur du Soleil en fonction de l’azimut. Aucune discontinuité n’est
remarquée, alors les équations et manipulations utilisées peuvent maintenant être déclarées assez fiables
pour poursuivre le projet. Les plus récentes versions des codes utilisés sont visibles en annexe.
Figure 14 : Hauteur en fonction de l’azimut pour le 18 avril (latitude=89.9°)
16
Fait important à noter, l’angle de la hauteur du Soleil en degrés n’est pas le même angle que doit avoir le
support mécanique. En effet, comme le panneau solaire doit être perpendiculaire à l’étoile, une petite
manipulation mathématique est nécessaire. Par exemple, si le Soleil est à 40° de hauteur, le panneau
solaire devra être à 50° du côté opposé (130°). La figure 15 facilitera la visualisation.
Figure 15 : Représentation de l’angle du support selon la hauteur du Soleil
L’équation mathématique qu’il est nécessaire d’implanter dans le microcontrôleur est donc :
Acquisition du signal du GPS :
En ce qui a trait au signal du GPS, il faut savoir qu’une norme existe pour les communications entre
équipements. C’est la norme NMEA 0183 et elle est établie par la National Marine Electronics
Association. Cette norme utilise une communication série pour transmettre ses informations, sous forme
de caractère ASCII. La norme comprend plusieurs types de trames différentes, mais une seule est utilisée
pour le projet. En effet, il est nécessaire d’avoir une trame qui donne au moins l’heure, la latitude, la
longitude, la date ainsi qu’un indicateur qui permet de déterminer si au moins trois satellites sont fixés. La
trame $GPRMC (Global Positioning Recommended Minimum sentence C) est toute indiquée pour cela.
Un exemple est visible à la figure 16.
17
Figure 16 : Décorticage d’une trame $GPRMC [3]
Bien que complète, la trame $GPRMC diffuse des données valides à l’échelle de la planète. Cela signifie
que le temps utilisé est l’UTC (temps universel coordonné), autrefois appelé GMT (temps moyen de
Greenwich). Pour avoir le temps local, il faut donc faire une lecture de la longitude à partir du GPS et
déterminer de combien de fuseaux horaires le système est décalé à partir du méridien de Greenwich.
Ainsi, en approximant la Terre par une sphère parfaite et en la divisant par 24 fuseaux horaires, il est
possible de déterminer l’heure locale. De plus, il est important de savoir qu’une longitude à l’Est du
méridien de Greenwich est une longitude positive, alors qu’elle est négative si elle est à l’Ouest de ce
méridien. Il aurait été possible d’implanter une table de correspondance qui aurait contenu les différents
fuseaux horaires en fonction de la longitude, mais cela aurait provoqué une erreur qui aurait atteint
jusqu’à 15 degrés. La raison est que les fuseaux horaires sont normalisés pour ne pas avoir besoin de
changer sans cesse l’heure des montres.
Simulation du signal GPS :
Les GPS reçoivent très peu d’ondes lorsque que ces derniers sont utilisés à l’intérieur. Pour cette raison,
un programme avec Microsoft Visual Basic a été écrit pour simuler la chaîne de caractères (la trame
$GPRMC) normalement envoyée par le GPS. Avec ce programme, il est possible de faire des tests de
communications sans avoir à se déplacer continuellement à l’extérieur. Le port série de l’ordinateur
permet de simuler la transmission de la trame vers le microcontrôleur. Une image de l’interface de test
ainsi que le code Visual Basic sont disponibles en annexe 3.
18
Inventaires des pièces utilisées :
Le choix des composantes à utiliser est une étape importante dans la réalisation d’un projet. Évidement,
l’aspect économique joue un rôle important dans la prise de décisions, mais cet aspect est parfois moins
important quand l’ampleur du projet est petit et moins coûteux. Voyons l’argumentation pour la sélection
de chacune des pièces, ainsi que les calculs et autres éléments importants.
Le microcontrôleur (PIC18F4680) : C’est le cœur de la gestion des mouvements du panneau solaire
utilisé. Le microcontrôleur de la compagnie Microchip est facilement intégrable et simple d’utilisation. La
programmation de ce dernier est enseignée dans le Baccalauréat en génie électrique et c’est pour cette
raison que l’utilisation de celui-ci est privilégiée dans ce projet. De plus, il est peu coûteux et consomme
aussi très peu d’énergie. Ensuite, pour l’envergure du projet, le PIC possède toutes les caractéristiques
désirées pour sa réalisation. Par exemple, il est autant possible de programmer celui-ci avec différents
langages que de communiquer avec la technologie I2C et SPI. Finalement, le logiciel de programmation
(MPLAB IDE) est gratuit. Un autre microcontrôleur qui a été envisagé est l’Arduino (Atmel AVR), mais
il a été écarté par simple préférence pour celui de Microchip.
Figure 17 : Microcontrôleur PIC18F4680
Un microcontrôleur moins puissant de la même famille que ce PIC18 peut être utilisé sans problème. Par
exemple, l’absence de SPI et de CAN peut faire baisser le prix de quelques dollars. Ce qui est important,
c’est que la mémoire soit suffisante pour contenir toute la programmation. De plus, il faut au moins
deux ports séries (un matériel et un logiciel dans le cas du PIC18F4680).
Figure 18 : Utilisation finale de la mémoire du microcontrôleur
19
Le récepteur GPS (RXM-GPS-SR) : Le récepteur GPS est la pièce la plus dispendieuse de la partie
électronique du projet, soit environ 50 $. Il a une antenne intégrée et est basé sur le jeu de puce
SIRFstar III. Il possède une grande sensibilité et il peut suivre jusqu’à 20 satellites simultanément. Sa
faible consommation de 46 mW et sa tension d’entrée (3.0 à 4.3 volts) font de lui un candidat idéal pour
ce projet. Cependant, afin de raccourcir le temps requis pour fixer les satellites ainsi que pour son
fonctionnement normal, il doit être absolument être relié à une pile externe.
Figure 19 : Récepteur GPS [3]
Calcul d’un filtre pour le GPS :
Le GPS utilisé est très sensible aux bruits et aux variations rapides de tension. La variation de tension
maximale tolérée par ce dernier est de 20 mV, sinon il risquerait très fortement de ne pas fonctionner
correctement ou encore de ne pas acquérir les satellites. Des tests ont été exécutés et effectivement, il est
vraiment sensible. Pour cette raison, il est important de filtrer la tension à son entrée. Il est à noter que les
pièces composant le filtre RC devront être montées très près du GPS pour être certain qu’aucun bruit ne
se glisse entre le filtre et la patte d’alimentation du GPS.
Valeurs importantes soutirées des fiches techniques du récepteur GPS et du régulateur :

Tension de sortie minimale à la sortie du régulateur 3.3 V (3.235 V en pratique)

Tension d’alimentation minimale requise par le GPS = 3 V

Courant maximum toléré par le GPS = 49 mA

Tension de déviation maximale tolérée par le GPS = 20 mV
Il faut calculer la résistance à utiliser et la chute de tension maximale engendrée par cette dernière afin de
ne pas descendre la tension en-dessous de la tension minimale tolérée pour l’alimentation du GPS.
20
La valeur qui sera utilisée est de 3.9 Ω, car c’est une valeur existante en pratique et elle est plus petite que
la valeur calculée. De cette manière, il est certain que la chute de tension ne sera pas trop grande. Il faut
ensuite calculer l’atténuation désirée en dB :
Avec Vin = déviation de la tension à l’entrée
Et Vout = déviation de tension désirée maximale
Ensuite avec la fréquence d’oscillation engendrée par le régulateur à découpage DC/DC (12 V→5 V), il
est possible de trouver la valeur minimale du condensateur à utiliser.
Avec R=3.9 Ω et f=250 KHz (cette valeur provient d’un courriel du manufacturier)
(2.5 µF en pratique)
Convertisseur DC/DC CC3-1205SF-E : Le convertisseur 12V/5V est l’un des plus abordables. Il
possède une bonne tolérance aux chocs, soit 100g. La robustesse aux chocs est un bon atout pour un
système portable. Les panneaux solaires peuvent parfois engendrer des variations de tension selon le
niveau d’ensoleillement. Pour cette raison, le convertisseur choisi peut prendre des entrées de tension
variant entre 9V et 18V. Le boîtier est très compact pour conserver une bonne ergonomie au niveau de
l’assemblage. En plus, il n’a pas besoin de composantes externes pour assurer un bon fonctionnement.
Pour l’utilisation présente du convertisseur, la puissance fournie n’est pas critique. Par contre, pour de
futures mises à niveaux, il est possible de faire fonctionner plus de composantes, car il offre une
puissance de sortie allant jusqu’à 3 watts. Selon les spécifications, l’efficacité de la pièce est de 79 %, ce
qui signifie malheureusement que 21 % de la puissance d’entrée sera perdue.
Figure 20 : Convertisseur DC/DC CC3-1205SF-E
21
Le régulateur abaisseur de tension SPX1117M3-L-3-3 : Le choix d’un régulateur linéaire a été retenu
vu les petits courants consommés par les appareils alimentés sur le 3.3V. Il a fallu faire attention
au «dropout voltage», car pour pouvoir obtenir une tension de 3.3V le «dropout voltage» ne doit pas
dépasser 1,7V (5V-3,3V = 1,7V), car il serait impossible d’obtenir la valeur voulue. Un régulateur de
tension abaisseur n’a pas un très bon rendement. Par contre, la puissance perdue est minime vu la petite
puissance demandée par la charge. La pièce est au prix de 0,20 $, minime comparativement à environ
13 $ pour un convertisseur DC/DC. Le choix s’impose donc de lui-même.
Figure 21 : Régulateur abaisseur SPX1117M3-L-3-3
Le pont en H VHN3SP30TR-E : Cette pièce devra être utilisée afin de pouvoir adapter la partie
mécanique à la partie électronique par l’entremise des deux vérins électriques de la partie mécanique. Ce
pont en H peut laisser passer 30 ampères DC continuellement et peut supporter des crêtes de courant
allant jusqu’à 45 ampères. La tension maximale tolérée est de 36V DC. De plus, ce pont à été choisi grâce
à son bas «drop out voltage maximum» qui se situe à 0,24V.
Ainsi, il sera possible d’avoir constamment 12V aux bornes des vérins en temps voulu. Ce dernier
possède aussi plusieurs caractéristiques intéressantes, comme une protection contre les courts-circuits,
une fonction de détection de mise à la terre, une protection contre la surchauffe et une protection contre
les surcharges. Le pont possède des diodes de roues libres intégrées, ce qui diminue la quantité de pièces
nécessaires sur le circuit imprimé. En effet, les seules pièces qui doivent être ajoutées sont des
condensateurs de couplage, des résistances de rappel (pull-up) et un tampon pour adapter les tensions
hautes et basses échangées entre les pièces principales. De plus, ce pont en H peut fonctionner à des
températures ambiantes descendant à -40°C. Pour ce qui est de la limite de température supérieure, en
regardant les calculs suivants, il est facile de constater qu’il n’est pas nécessaire de monter les ponts en H
d’un dissipateur de chaleur.
22
(Condition maximale de fonctionnement des vérins)
Les puissances hautes et basses indiquent les MOSFETs d’entrées et de sorties. Chacun des côtés possède
une résistance différente.
D’après la fiche technique, ce pont en H peut dissiper, avec minimum de configuration du PCB,
37°C/Watt, alors :
1,44W*37°C/Watt + 40°C = 93,28°C
La température de jonction maximale tolérée par la pièce est de 150°C, donc il n’est pas nécessaire
d’installer un dissipateur de chaleur sur les ponts en H.
Figure 22 : Schéma thermique du Pont en H sans dissipateur thermique
Voici la température ambiante que le pont pourrait supporter sans nécessiter un dissipateur de chaleur :
Il est important de noter que les calculs sont faits pour que la pièce soit à l’air libre et non montée dans un
boîtier, mais comme la marge de manœuvre est très grande, il ne risque pas d’y avoir de problèmes.
23
Figure 23 : Pont en H VNH3SP30TR-E
Connecteur USB : Celui-ci permet à l’utilisateur de changer la programmation sans avoir besoin d’un
programmeur coûteux comme l’ICD2 ou l’ICD3, en utilisant un chargeur d’amorçage (bootloader). Il est
connecté au pont USB vers UART (CP2102-GM).
Figure 24 : Connecteur USB avec bouchon protecteur
Pont USB vers UART CP2102-GM : Cette pièce permet de communiquer avec le microcontrôleur en
utilisant le connecteur USB précédent. Il est relié à l’entrée USART matérielle du microprocesseur.
Figure 25 : Pont USB vers UART CP2102-GM
Tampon 74LVC07A : Cette pièce est nécessaire pour permettre une bonne communication entre le
microcontrôleur et les ponts en H. Les niveaux hauts et bas des deux composantes ne concordent pas
ensemble et elles ne pourront donc pas s’échanger les informations. Il est à noter que les données
voyagent de façon unidirectionnelle, du microcontrôleur vers les ponts en H. Voici un tableau explicatif.
24
Tableau 5 : Tensions de fonctionnement du microcontrôleur et du pont en H
PIC18F4680
Tampon 74LVC07A
Tampon 74LVC07A
Pont en H VNH3SP30-E
VOL = 0,6V
VIL = 0,8V
VOL = 0,1V
VIL = 1,5V
VOH = VDD-0,7V = 2,6V
VIH = 2V
VOH = 4,9V
VIH = 3,25V
VOL = Tension de sortie basse
VIL = Tension d’entrée basse
VIH = Tension d’entrée haute
VOH = Tension de sortie haute
Voici une petite explication du principe de fonctionnement. La tension de sortie basse (VOL) du PIC et la
tension d’entrée basse (VIL) du tampon seront utilisées. La tension d’entrée basse (VIL) du tampon est
plus élevée que la tension de sortie basse (VOL) du PIC, alors le tampon détectera assurément un niveau
bas venant du PIC. Sinon, si la tension de sortie basse (VOL) du PIC est plus haute que la tension d’entrée
basse (VIL) du tampon, la tension obtenue se retrouve dans la zone morte, soit entre la tension d’entrée
basse (VIL) et la tension d’entrée haute (VIH) du tampon. L’inverse se produit pour les niveaux hauts. La
tension d’entrée haute (VIH) du tampon doit être plus basse que la tension de sortie haute (VOH) du PIC
pour assurément voir un niveau haut. Il est possible de voir que le problème se situait entre la tension de
sortie haute (VOH) du PIC et la tension d’entrée haute (VIH) du pont en H, car la tension d’entrée haute
(VIH) du pont en H est plus haute que la tension de sortie haute (VOH) du PIC. C’est pour cette raison
qu’un tampon a été utilisé.
Figure 26 : Tampon 74LVC07A
Cristal ECS-250-18-23A-EN-TR : L’utilisation d’un cristal externe est préférable à l’oscillateur interne.
Cela permet d’obtenir des communications séries plus précises à des vitesses supérieures. Aussi, bien que
la vitesse de calcul ne soit pas un problème dans ce projet, une fréquence de fonctionnement plus élevée
permet d’obtenir une plus grande puissance de calcul, au détriment de la consommation électrique. Le
cristal choisi est commandé spécialement avec une option lui permettant de fonctionner jusqu’à -40°C.
Celui-ci oscille à une fréquence de 25 MHz qui a été choisie parce que c’était la fréquence du cristal
utilisé sur la plaque de montage de l’UQAC et elle y avait alors prouvé son bon fonctionnement. Cette
fréquence a été vérifiée à l’aide de la figure suivante, tirée de la fiche technique du microcontrôleur.
25
Figure 27 : Tableau Tension-Fréquence du microcontrôleur [8]
Pour obtenir le 25 MHz voulu, il est essentiel que la tension d’alimentation du microprocesseur ne soit
pas plus basse que 3,284V.
Figure 28 : Cristal ECS-250-18-23A-EN-TR
Diodes électroluminescentes : Le courant typique pour faire fonctionner les diodes est de 30 mA, selon
le manufacturier. Avec un tel courant, la dissipation de puissance est énorme comparativement au reste
des pièces du circuit et c’est pour cette raison qu’il a été important de faire des tests pour diminuer cette
consommation. Les tests ont été exécutés avec des courants de 30mA, 20mA et 15mA respectivement et
la luminosité était pratiquement la même dans tous les cas. Il a été conclu qu’un fonctionnement à plus
basse intensité serait plus économe en énergie pour un résultat similaire. Voici alors les calculs pour
trouver la bonne résistance afin d’obtenir un courant de fonctionnement de 15mA dans chacun des cas.
26
Caractéristiques des diodes :
DEL rouge : 2,0V et 15mA (30mA)
DEL jaune : 2,1V et 15mA (30mA)
DEL verte : 2,2V et 15mA (25mA)
Calcul pour la DEL rouge :
Calcul pour la DEL Verte :
Calcul pour la DEL Jaune :
Figure 29 : Diodes électroluminescentes
Les interrupteurs : Trois interrupteurs sont nécessaires au bon fonctionnement du module. Le premier
interrupteur permet de couper l’alimentation principale. Le deuxième permet d’entrer dans un mode
«transport», qui est une demande du promoteur pour que le système soit plus facile à transporter. Ainsi,
lorsque l’interrupteur «transport» est activé, le vérin qui contrôle la hauteur abaisse totalement le panneau
solaire, alors que celui qui contrôle l’azimut oriente le panneau dans l’axe Nord-Sud. Le troisième
interrupteur était initialement prévu pour être utilisé avec le magnétomètre afin d’aligner le système lors
de son installation, mais il est finalement utilisé pour sélectionner un mode de déplacement continu ou
uniquement après un certain délai. Les interrupteurs sont conçus pour pourvoir fonctionner malgré les
intempéries. De plus, ils pourront être utilisés à des températures très basses.
27
Les fusibles : Deux fusibles sont utilisés. Le premier (1 ampère) permet de protéger le circuit de contrôle
qui comprend le microcontrôleur. Le second (10 ampères) protège le circuit global et comprend donc
l’alimentation 12 volts des vérins qui nécessitent un courant qui atteint les 4 ampères par vérin, en
alternance.
Figure 30 : Fusibles
Le boîtier : Ce boîtier a été choisit en raison de son couvercle transparent qui permet de voir les diodes
électroluminescentes sans avoir besoin de percer de trous supplémentaires, déjà qu’il y aura
deux connecteurs et trois interrupteurs. Le plastique est solide et résistant au rayonnement ultraviolet. De
plus, un joint d’étanchéité entre les deux sections du boîtier assure une certaine protection face aux
éventuelles intempéries.
Figure 31 : Boîtier avec joint d’étanchéité
28
Les connecteurs : Les fiches et réceptacles choisis sont solides et compacts afin de bien s’adapter au
profil plutôt mince du boîtier. Chacun possède six contacts qui permettent chacun de faire circuler un
courant de cinq ampères. Une longue recherche a été nécessaire pour ces connecteurs, car soit ils sont
très dispendieux, soit ils ne permettent pas un courant suffisamment élevé ou bien ils sont trop gros ou
semblent trop fragiles. Malheureusement, ceux-ci ne sont pas totalement étanches, mais ce sont ceux qui
offraient le plus d’avantages.
Figure 32 : Fiches et réceptacles
Synthèse des choix : Pour résumer le tout, les composantes choisies sont moins dispendieuses que
certaines pièces pré-montées qui auraient pu être utilisées, puisque certaines pièces requièrent des
composantes externes et ne sont pas montées sur PCB. Évidemment, la température est un des éléments
les plus importants. La plupart des pièces sélectionnées ont une température de fonctionnement qui
descend jusqu’à -40°C. Ce sont les vérins utilisés par le promoteur qui limitent le système global, ceux-ci
ne fonctionnant idéalement pas à des températures plus basses que -26°C. Pour ce qui est de la limite
supérieure de température, le promoteur souhaite que le système marche aussi bien en Afrique qu’au
Québec. Les pièces choisies supportent aisément ces chaudes températures.
29
Tableau 6 : Récapitulatif des caractéristiques principales des pièces
Microcontrôleur
PIC18F4680
Récepteur GPS
RXM-GPS-SR
Magnétomètre**
HMC5883L-TR
Convertisseur
DC/DC
CC3-1205SF-E
Régulateur
de tension
SPX1117M3-L-3-3
Pont en H
VNH3SP30-E
Tampon
74LVC07A
Cristal
ECS-250-18-23A
Pont USB vers UART
CP2102-GM
Tension
(V)
Température
(°C)
Communication
Type
2,0 à 5,5
-40 à +125
I2C, SPI, Série
3,0 à 4,3
-30 à +85
Série
2,16 à 3,6
-30 à +85
I2C
Surfacemount
Surfacemount
Surfacemount
9 à 18
-40 à +80
-
Throughhole
4,7 à 10
-40 à +120
-
Surfacemount
<40
-40 à +150
-
1,2 à 5,5
-40 à +85
-
-
-40 à +85
-
3,0 à 3,6
-40 à +85
Série
Surfacemount
Surfacemount
Surfacemount
Surfacemount
**Voir annexe 4
La figure qui suit représente les interactions entre le module qui contient le microprocesseur avec les
pièces principales et les vérins.
Figure 33 : Représentation générale des interactions
Un inventaire de toutes les pièces du projet ainsi que leur prix est disponible au tableau 7.
30
Tableau 7 : Prix des pièces du prototype
Pièce
#Digikey
Quantité Prix unitaire ($) Total ($)
Boitîer (172C,BK)
SR172-CB-ND
1
11,42
11,42
Bouchon pour port USB (CP-USB-B)
RP782-ND
1
0,33
0,33
Bouton-poussoir "Reset"
dispo. UQAC (SW405-ND)
1
0,40
0,40
Circuit imprimé
Sur mesure
1
16,50
16,50
Condensateur 0,1 uF
dispo. UQAC
6
0,10
0,60
Condensateur 0,22 uF
dispo. UQAC
1
0,10
0,10
Condensateur 10 uF (low ESR, ceramic) (Y5V)
dispo. UQAC
1
0,10
0,10
Condensateur 18 pF
709-1171-1-ND
10
0,047
0,47
Condensateur 220 uF
P5139-ND
2
0,26
0,52
Condensateur 4,7 uF (3216)
dispo. UQAC
2
0,10
0,20
Condensateur 470 pF
dispo. UQAC
2
0,10
0,20
Condensateur 470 uF
dispo. UQAC
2
0,10
0,20
Convertisseur (CC3-1205SF-E)
445-2470-N
1
14,24
14,24
Cristal (ECS-250-18-23A-EN-TR) (25 MHz, 18 pF)
XC1671CT-ND
1
1,81
1,81
DIP 2x14 connecteurs
dispo. UQAC
1
2,00
2,00
Fiche connecteur (RM12BPE-6PH(71))
HR1733-ND
2
12,01
24,02
Fusible 1 A (FUSE SLOW 250VAC 1A RADIAL)
507-1111-ND
1
0,48
0,48
Fusible 10 A (0312010.HXP)
dispo. UQAC (F2519-ND)
1
0,36
0,36
Interrupteur (Carling 2M1-SP1-T1-B1-M1QE) dispo. UQAC (432-1143-ND)
3
2,78
8,34
Joint d'étanchéité du boîtier (PS17)
SRPS-17-ND
1
5,61
5,61
LED jaune (SSL-LX5093LYD)
67-1111
1
0,43
0,43
LED rouge (SSL-LX5093ID)
67-1105
1
0,41
0,41
LED vert pour GPS (0805)
dispo. UQAC
1
0,10
0,10
LED verte (SSL-LX5093PGD)
67-1112
1
0,59
0,59
Magnétomètre (HMC5883L-TR)
342-1082-1-ND
1
4,06
4,06
Microcontrôleur (PIC18LF4680-I/PT)
PIC18LF4680-I/PT-ND
1
10,10
10,10
Pile (CR2032)
SY189-ND
1
0,44
0,44
Pont en H (VNH3SP30-E)
497-3565-1-ND
2
11,16
22,32
Pont USB vers UART (CP2102-GM)
336-1160-ND
1
3,40
3,40
Connecteur USB femelle (61729-1011BLF)
dispo. UQAC (609-3657-ND)
1
1,15
1,15
Porte-fusible (01000058Z)
dispo. UQAC (F4186-ND)
2
0,21
0,42
Porte-pile CR2032 (120591-1)
A99328-ND
1
2,22
2,22
Protecteur pour interrupteur (AT428M)
AT428M-ND
3
3,43
10,29
Réceptacle connecteur (RM12BRB-6S)
HR1038-ND
2
8,59
17,18
Récepteur GPS (RXM-GPS-SR)
RXM-GPS-SR-B-ND
1
49,59
49,59
Régulateur linéraire (SPX1117M3-L-3-3)
1016-1237-5-ND
1
0,18
0,18
Résistance 100Ω
dispo. UQAC
5
0,10
0,50
Résistance 10KΩ
dispo. UQAC
8
0,10
0,80
Résistance 1KΩ
dispo. UQAC
5
0,10
0,50
Résistance 2,21KΩ
dispo. UQAC
2
0,10
0,20
Résistance 20Ω
dispo. UQAC
1
0,10
0,10
Résistance 4,7KΩ
dispo. UQAC
1
0,10
0,10
SIP 5 connecteurs
dispo. UQAC
1
0,40
0,40
Tampon (74LVC07A)
568-2285-1-ND
1
0,57
0,57
TVS Diode (SP0503BAHTG)
F2715CT-ND
1
1,07
1,07
Total :
215,02
Les prix soulignés sont des prix approximatifs
31
Bilan de puissance théorique :
En début de projet, la consommation du microcontrôleur a été analysée avec des calculs, car c’est la
composante qui consomme vraisemblablement le plus vu son utilisation en continu, en excluant les
vérins. Il est ici analysé lorsqu’il est en communication avec le GPS parce que c’est avec celui-ci qu’il
communiquera la plupart du temps. Il est perceptible, par les calculs qui suivent, que la puissance
consommée lors de la communication entre le PIC et le GPS est négligeable par rapport à la puissance
utilisée par les vérins. La puissance dissipée par les pièces secondaires (résistances, condensateurs,
diodes, etc.) est évidemment négligeable elle aussi. Voici un exemple de puissance consommée par le PIC
et les vérins, ainsi que la puissance dissipée par les pièces secondaires.
Puissance consommée par la commutation
Bien que 0.5CV2 soit une équation d’énergie, le calcul se fait ici avec l’énergie consommée pour une
seconde, ce qui donne la puissance.
Avec :
(vitesse du GPS)
Puissance consommée par les vérins
Avec :
32
Exemple de puissance dissipée
Le calcul est fait avec une approximation de cinq montages identiques au suivant. Ceci représente environ
toutes les autres pièces secondaires du circuit qui servent à faire fonctionner les pièces primaires.
Figure 34 : Approximation par résistances parallèles
23,71mW
Avec :
Tableau 8 : Bilan de puissance préliminaire
52,272x10-6
Temps d’utilisation par
jour
(seconde)
86400
Énergie consommée par
jour
(Joule=Watt*seconde)
4,516
72
420
30240
23,71x10-3
86400
2048,54
Total :
32293,06
Puissance instantanée
(Watt)
Commutation (PIC) :
Vérins
(x2) :
Pièces secondaires
(x5) :
N,B : 86400 secondes = 1 jour
Ici, l’énergie consommée du PIC et des pièces secondaires sont pour un fonctionnement de 24h/24h. Il a
été estimé que les vérins seront utilisés sept minutes par jour. Aussi, une journée d’ensoleillement de 13 h
par jour, pour le mois d’avril, a été utilisée. Il serait donc possible de diminuer le temps de
fonctionnement du PIC et des pièces secondaires à 13h/jour au lieu de 24h/jour.
33
Avec un fonctionnement de 24 heures pour la partie électronique :
Avec un fonctionnement de 13 heures (46800 secondes) pour la partie électronique :
Il est possible de constater que même si le microcontrôleur fonctionne en permanence, il ne consomme
qu’une faible fraction de l’énergie nécessaire pour faire fonctionner le système entier, soit 6,36 %. Ainsi,
il n’apparaît pas primordial de le mettre en état de veille pour la nuit.
Bilan de puissance pratique :
Avec un ampèremètre, la consommation réelle de courant a été mesurée pour plusieurs situations :
Fonctionnement en continu avec uniquement le circuit de contrôle alimenté, signal GPS non fixé : 96 mA
Fonctionnement en continu avec uniquement le circuit de contrôle alimenté, signal GPS fixé : 96 A
Vérin hauteur en montée (prototype entier) : 4,40 A
Vérin hauteur en descente (prototype entier) : 0,63 A
Vérin azimut horaire (prototype entier) : 2,25 A
Vérin azimut antihoraire (prototype entier) : 1,10 A
Suite à ces mesures, il peut être affirmé que le prototype consomme 96 mA en permanence, avec une
tension de 12 volts soit 1,152 watts. Des recommandations visant à réduire la consommation sont listées à
la fin de ce rapport. Aussi, le courant le plus fort enregistré pendant les tests n’a jamais dépassé les
4,5 ampères, même lorsque le vérin hauteur faisait monter le panneau tout en ayant du poids
supplémentaires par-dessus.
34
Choix de l’alimentation du microcontrôleur :
Le choix d’une alimentation de 3,3V plutôt que 5V a été imposé par les composantes communiquant avec
le microcontrôleur. Elle a été choisie au début du projet alors qu’il était prévu d’utiliser des pièces avec le
protocole I2C, mais elle a par la suite été conservée.
Il faut d’abord vérifier à quelle tension la commutation 1/0 se fait, en prenant compte du type de tampon
(Schmitt Trigger ou TTL) de la patte d’entrée du microcontrôleur. Il faut donc vérifier à la fois dans la
section 10.0 (I/O Ports) et 27.0 (Electrical Characteristics) de la fiche technique du microcontrôleur [8]
pour acquérir les bonnes informations. Il faut aussi consulter les fiches techniques individuelles des
éléments à raccorder au microcontrôleur (GPS, magnétomètre, etc.). Le tableau 9 expose les tensions
critiques du projet.
Tableau 9 : Tensions d’entrées et de sorties selon la tension d’alimentation du microcontrôleur
Tension d’alimentation du PIC :
Tension d’entrée basse (VIL) :
(Schmitt Trigger buffer)
Tension d’entrée basse (VIL) :
(TTL buffer)
Tension basse (VL) :
(I2C)
Tension d’entrée haute (VIH) :
(Schmitt Trigger buffer)
Tension d’entrée haute (VIH) :
(TTL buffer)
Tension haute (VH) :
(I2C)
VDD = 3,3V
VDD = 5V
0,2 * VDD = 0,66V
0,2 * VDD = 1V
0,15 * VDD = 0,495V
0,15 * VDD = 0,75V
0,3 * VDD = 0,99V
0,3 * VDD = 1,5V
0,8 * VDD = 2,64V
0,8 * VDD = 4V
0,25 * VDD + 0,8 = 1,625V 0,25 * VDD + 0,8 = 2,05V
0,7 * VDD = 2,31V
0,7 * VDD = 3,5
Tension de sortie basse (VOL) :
0,6V
0,6V
Tension de sortie haute (VOH) :
VDD – 0,7V = 2,6V
VDD – 0,7V = 4,3V
Le tableau 10 représente les tensions du magnétomètre qui devait être utilisé pour le projet. Il n’y est qu’à
titre indicatif.
Tableau 10 : Tensions basses et hautes selon la tension d’alimentation du magnétomètre
Tension d’alimentation du magnétomètre :
VDD = 3,3V
Tension basse (VL) :
0,2 * VDD = 0,66V
Tension haute (VH) :
0,8 * VDD = 2,64V
35
Puis, le tableau 11 dresse la liste des différents niveaux de tensions du récepteur GPS.
Tableau 11 : Tensions d’entrées et de sorties du récepteur GPS
Tension d’alimentation du GPS :
VDD = 3,3V
Tension d’entrée basse (VIL) :
≤ 0,8V
Tension d’entrée haute (VIH) :
≥ 2,1V
Tension de sortie basse (VOL) :
≤ 0,73V
Tension de sortie haute (VOH) :
≥ 2,0V
La figure 35 démontre visuellement les données précédentes pour le magnétomètre I2C couplé au
microcontrôleur.
Figure 35 : Communication entre le microcontrôleur et le magnétomètre I2C
Le module UART du microcontrôleur supporte l’interface RS-232 qu’utilise le GPS. Le niveau de sortie
TTL du GPS est compatible avec le microcontrôleur sans passer par un intermédiaire du style MAX232
ou MAX233 qui permettent la conversion de niveaux de tensions des signaux. Voici donc sur la figure 36
le branchement entre le récepteur GPS et le microcontrôleur.
Figure 36 : Communication entre le PIC et le GPS
36
Communication série avec le récepteur GPS :
Le microcontrôleur PIC18F4680 utilisé permet d’avoir deux ports série. Le premier est matériel
(hardware USART) et est exposé dans la section suivant celle-ci. Le second est logiciel (software UART)
et c’est celui qui permet ici la communication avec le récepteur GPS. Il faut noter que le terme USART
signifie Universal Synchronous/Asynchronous Receiver/Transmitter.
Pour être utilisé, cet UART logiciel nécessite le calcul de trois délais différents. Comme la fréquence
d’oscillation utilisée est de 25 MHz et que le récepteur GPS doit communiquer à 9600 bps, voici ces
délais :
Les connecteurs utilisés sur le microcontrôleur sont le 4 (TX) et le 5 (RX) du PORTB. Ensuite, comme le
module GPS est configurable, il est très avantageux de le configurer afin que celui-ci ne communique que
la trame $GPRMC plutôt que toutes celles par défaut. Ceci permet de simplifier le code du
microcontrôleur en supprimant les tris qui auraient été nécessaires pour ignorer les trames superflues pour
ce projet. Il s’agit donc d’utiliser la communication série pour envoyer les commandes suivantes au
récepteur GPS :
$PSRF103,00,00,00,01*24\r\n
(Désactivation de la trame GGA)
$PSRF103,01,00,00,01*25\r\n
(Désactivation de la trame GLL)
$PSRF103,02,00,00,01*26\r\n
(Désactivation de la trame GSA)
$PSRF103,03,00,00,01*27\r\n
(Désactivation de la trame GSV)
$PSRF103,04,00,01,01*21\r\n
(Activation de la trame RMC)
$PSRF103,05,00,00,01*21\r\n
(Désactivation de la trame VTG)
37
Ces informations (NMEA input messages) proviennent indirectement de la fiche technique du récepteur
GPS [3]. Il s’agit de les adapter au résultat souhaité. Voici le résultat obtenu après la désactivation de
quelques trames (partie supérieure de la figure 37) et ensuite après n’avoir gardé que la trame
$GPRMC (partie inférieure de la figure 37) :
Figure 37 : Informations en provenance du récepteur GPS
38
Utilisation de l’USART :
Initialement, le port USART matériel devait être utilisé pour communiquer avec le GPS. Le code est
toujours présent dans le programme du microcontrôleur, sous forme de commentaires. Les démarches qui
avaient alors été utilisées sont les suivantes. Le TX (RC6) et le RX (RC7) sont sur le PORTC. Il est
important de configurer le registre appelé SPBRG afin d’obtenir la bonne vitesse (baud rate) de
communication entre le microcontrôleur et le GPS. Cette vitesse est dépendante de la fréquence de
l’horloge et est fixée par le GPS. Ainsi, comme le module GPS utilisé ici communique par défaut à
9600 bps, il s’agit d’utiliser la formule qui suit afin de configurer le registre SPBRG correctement [8].
Il est ensuite possible de déterminer le pourcentage d’erreur obtenu selon les formules suivantes :
D’autres éléments sont très importants à savoir afin d’avoir une communication série fructueuse. En
consultant plus en profondeur la fiche technique du module GPS, ces informations peuvent être repérées :
9600 bps, 8 bits de données, aucune parité et 1 bit d’arrêt. Ceci est la structure des données et doit être
prise en compte, ce qui est effectué dans l’instruction OpenUSART (voir code C en annexe 2).
39
Convertisseur analogique-numérique (ADC) :
Afin de connaître la position actuelle des deux vérins, chacun d’eux est équipé d’un potentiomètre de
rétroaction intégré. Ceux-ci permettent d’avoir une tension de sortie proportionnelle à la position du vérin
dans l’espace. Il a été décidé qu’en position totalement entrée, la tension serait de 0 volt, alors qu’en
position totalement sortie, la tension serait théoriquement de 3,3 volts. Comme ceci est une valeur
analogique et que le microcontrôleur est évidemment un appareil fonctionnant en numérique, la présence
d’un convertisseur est nécessaire. Jusqu’à 11 de ces convertisseurs peuvent être utilisés sur le
microcontrôleur de ce projet. D’une résolution de 10 bits, ils sont donc capables de discerner
1024 (210) niveaux de tension distincts, ce qui représente ici des étapes aussi petites que 3,22 millivolts.
Cependant, pour obtenir des conversions sensées, quelques réglages doivent être réalisés lors de
l’initialisation. En effet, comme les registres sont limités à 8 bits et que l’ADC fonctionne à 10 bits,
deux registres 8 bits sont utilisés. Ceci requiert ce qui est appelé une justification à droite. La justification
à gauche aurait pu être utilisée en utilisant que le registre ADRESH, au détriment de la précision. La
justification se règle dans le registre ADCON2.
Tableau 12 : Justification à droite pour l’ADC
0
0
0
0
0
0
X
X
X
X
X
ADRESH
X
X
X
X
X
0
0
ADRESL
Tableau 13 : Justification à gauche pour l’ADC
X
X
X
X
X
X
X
X
X
ADRESH
X
0
0
0
0
ADRESL
Ensuite, les registres ADRESH et ADRESL doivent être fusionnés. Plusieurs techniques peuvent être
utilisées, mais celle retenue pour le projet est la suivante :
Puis, comme le principe de conversion analogique à numérique nécessite un certain temps, certains petits
calculs doivent être réalisés. Premièrement, la période d’oscillation du cristal du microcontrôleur doit être
déterminée.
Puis, selon la section A/D Conversion Requirements de la fiche technique du microcontrôleur [3], la
période d’horloge A/D (TAD) doit être d’au moins 1,4 µs. Bien qu’il ne doive pas être plus petit que
1,4 µs, il doit quand même idéalement être le plus petit possible. Pour atteindre cette valeur, il faut
40
convertir la fréquence d’oscillation. Ceci est fait en utilisant le registre ADCON2 et en sélectionnant pour
ce cas le diviseur de fréquence par 64. La période d’horloge A/D (TAD) devient donc :
Cette période est plus grande que 1,4 µs tout en étant très petite. Ceci est le temps requis au module A/D
pour convertir 1 bit. Pour convertir les 10 bits il faut donc 10 TAD, en plus d’un certain temps de
stabilisation, pour un total de 12 TAD selon la fiche technique.
Asservissement en position :
Le contrôle des deux vérins se fait en boucle fermée et le signal de rétroaction provient du potentiomètre
de rétroaction intégré dans chacun des deux vérins (sortie mesurée). Les consignes proviennent des
équations du diagramme solaire présentées plus tôt dans ce rapport, soit une consigne en hauteur et une
seconde en azimut. Puis, l’erreur mesurée est obtenue en soustrayant de la consigne la sortie mesurée.
Figure 38 : Asservissement en boucle fermée
En hauteur :
Si l’erreur est inférieure à zéro, la consigne est plus petite que la sortie mesurée, donc le panneau doit
baisser.
Si l’erreur est supérieure à zéro, la consigne est plus grande que la sortie mesurée, donc le panneau doit
monter.
En azimut :
Si l’erreur est inférieure à zéro, la consigne est plus petite que la sortie mesurée, donc le panneau doit
tourner dans le sens anti horaire.
Si l’erreur est supérieure à zéro, la consigne est plus grande que la sortie mesurée, donc le panneau doit
tourner dans le sens horaire.
Ensuite, un calcul de la valeur absolue de l’erreur mesurée est effectué. Le vérin est activé tant que cette
valeur absolue est plus grande que 0,3 degré. Plusieurs expérimentations ont démontré que cette valeur
donne un système qui fonctionne très bien.
41
Modulation de largeur d’impulsion (PWM) :
Bien que les vérins aient très bien pu fonctionner à pleine tension lors de leur fonctionnement, il a été
décidé d’implémenter de la modulation de largeur d’impulsion afin de limiter la tension qui les alimente.
En effet, ceci permet de limiter les arrêts brusques en introduisant une petite pente descendante dans la
valeur moyenne des tensions de sortie des ponts en H. Ainsi, lorsque l’erreur entre la consigne et la
mesure de la position des vérins se rapproche de zéro, la vitesse devient plus faible, ce qui donne un
moins gros coup lors de l’arrêt. La mise en place de la modulation de largeur d’impulsion dans le
microcontrôleur est assez simple. Il est possible de la programmer d’une manière logicielle en utilisant
des temporisateurs, mais la manière matérielle se révèle bien plus simple, c’est pourquoi c’est elle qui a
été retenue.
L’initialisation se fait en sélectionnant le mode PWM dans le registre CCP1CON. Dans le registre
T2CON, il s’agit d’activer le temporisateur 2 avec aucun post diviseur (postscaler) et 1 pré diviseur
(prescaler). Puis, dans le registre PR2, une période de 255 a été choisie. Ensuite, la vitesse de sortie sera
déterminée par le registre CCPR1L. Par exemple, pour avoir un cycle de 50 %, le registre CCPR1L devra
égaler 127. Une valeur minimale de 170 (duty cycle de 66 %) a par-contre été fixée afin que la tension
aux bornes des vérins ne descende pas sous 8 volts, pour qu’ils puissent délivrer un couple suffisant en
tout temps et peu importe les conditions atmosphériques. Aussi, lorsque l’erreur absolue entre la consigne
d’un vérin et sa position réelle est plus grande que 30 degrés, la pleine tension (duty cycle de 100 %) est
appliquée aux bornes du vérin en question. La courbe obtenue est visible à la figure 39.
Valeur de CCPR1L
(sans unité)
300
250
200
150
100
50
0
0
10
20
30
40
50
60
70
80
90
100
Valeur absolue de l'erreur (degrés)
Figure 39 : Valeur de CCPR1L en fonction de l’erreur absolue
42
Ainsi, la logique est la suivante :
Si : erreur absolue ≥ 30° :
Si : 5 ° < Erreur absolue < 30° :
Si : Erreur absolue ≤ 30° :
En d’autres termes, les vérins sont asservis en position selon une logique tout ou rien, mais avec une
vitesse de déplacement modulée selon l’amplitude de l’erreur mesurée. La logique tout ou rien est
pleinement capable de faire le travail souhaité, mais le fait de varier légèrement la vitesse adoucit les
mouvements et préserve les mécanismes.
43
Détermination des équations d’angles :
En hauteur :
Afin de savoir quels sont les angles du support mécanique selon la tension donnée par chacun des
deux potentiomètres de rétroaction, des tests ont été nécessaires. L’axe de la hauteur a été le premier à
être testé. Pour cela, un rapporteur d’angle d’un diamètre d’environ 30 cm a été utilisé. Avec un plus gros
rapporteur d’angle (diamètre de 100 à 130 cm), la lecture d’angle aurait été plus précise, mais un tel
instrument n’était pas accessible. La méthode se révèle tout de même très efficace.
Figure 40 : Détermination de la hauteur actuelle en fonction de la tension de rétroaction
Pour minimiser l’erreur lors du mouvement du panneau solaire, il a fallu déterminer la courbe du
mouvement mécanique de la rampe de montée et descente du panneau. Pour obtenir la courbe pratique, il
a été nécessaire de prendre plusieurs mesures durant le mouvement complet. Pour prendre des mesures
plus ordonnées, donc moins aléatoires, un potentiomètre contrôlant le cycle d’un module PWM a été
utilisé. Ceci a permis d’obtenir des valeurs plus précises. Ce dernier module était disponible au magasin
des techniciens du département de génie électrique. Il est possible de voir les mesures d’angles obtenues
par rapport à la tension lue aux bornes du potentiomètre de retour du vérin dans le tableau 14. À l’aide du
logiciel Excel, il a été possible d’approximer les résultats obtenus en pratique par des courbes de degré 1 à
4. De plus, le logiciel Excel peut donner l’équation associée à la courbe, équation à être implantée dans le
code du microcontrôleur. Le degré 3 a été choisi en préférence au degré 4, car les erreurs sont moins
grandes. Il est en effet possible de constater, en regardant dans le tableau 14, que l’erreur est presque
toujours plus élevée pour le degré 4 comparativement à celle du degré 3. À partir de 12° jusqu’à 63°,
l’erreur relative est sous 1 %. Aussi, l’erreur en dessous de 12° est élevée, par contre, en dessous de cet
angle le Soleil est très haut (ne pas oublier que le Soleil est perpendiculaire au panneau solaire), donc il
serait possible de placer le panneau solaire à plat et le rendement serait presque le même. Par la suite,
44
l’équation du troisième degré obtenue a été programmée dans le microcontrôleur pour ainsi acquérir la
tension de retour du vérin, entrer cette valeur dans la formule programmée et finalement, obtenir l’angle
voulu en hauteur tout en tenant compte de la rampe mécanique du système. Il est aussi possible de
visualiser les courbes des degrés 1 à 4 sur la figure 41. La raison pour laquelle un angle a été trouvé en
fonction de la tension et non l’inverse, est que l’angle est déjà utilisé dans la programmation actuelle et il
est donc plus facile de comparer les mêmes unités sans refaire de conversions.
0.80
0.70
Angle de la hauteur (Degrés)
0.60
0.50
Courbe pratique
Linéaire (degré 1)
Courbe degré 2
Courbe degré 3
Courbe degré 4
0.40
0.30
0.20
y (degré 1) = 21,155x + 11,373
y (degré 2) = -8,5318x2 + 45,865x - 0,0496
0.10
y (degré 3) = 1,6349x3 - 15,597x2 + 53,799x - 1,6976
y (degré 4) = 0,1915x4 + 0,5241x3 - 13,547x2 + 52,524x - 1,5361
0.00
0.00
0.01
0.01
0.02
0.02
0.03
0.03
Tension de rétroaction (Volts)
Figure 41 : Angle de la hauteur en fonction de la tension de rétroaction
Finalement, l’équation de conversion qui sera utilisée pour la hauteur dans le code du microcontrôleur est
la suivante :
45
Tableau 14 : Angles obtenus selon les tensions lues (hauteur)
Tensions Angles
(V)
(°)
2,90
2,80
2,70
2,60
2,50
2,40
2,30
2,20
2,10
2,00
1,90
1,80
1,70
1,60
1,50
1,40
1,30
1,20
1,10
1,00
0,90
0,80
0,70
0,60
0,50
0,40
0,30
0,25
0,20
0,15
0,10
63,00
62,50
62,00
61,50
61,00
60,50
59,50
58,50
57,50
56,50
55,50
54,00
52,50
51,00
49,00
47,50
45,50
43,50
41,00
38,50
35,50
32,50
29,00
25,50
21,50
17,50
12,75
10,50
8,00
5,00
3,00
Tendance degré 1
Erreur
Erreur
Résultats
absolue
relative
(°)
(°)
(%)
73,31
10,31
14,06
71,13
8,63
12,13
68,95
6,95
10,08
66,77
5,27
7,90
64,60
3,60
5,57
62,42
1,92
3,08
60,24
0,74
1,23
58,07
0,43
0,75
55,89
1,61
2,88
53,71
2,79
5,19
51,54
3,96
7,69
49,36
4,64
9,40
47,18
5,32
11,27
45,01
5,99
13,32
42,83
6,17
14,41
40,65
6,85
16,85
38,47
7,03
18,26
36,30
7,20
19,84
34,12
6,88
20,16
31,94
6,56
20,52
29,77
5,73
19,26
27,59
4,91
17,80
25,41
3,59
14,11
23,24
2,26
9,74
21,06
0,44
2,09
18,88
1,38
7,32
16,71
3,96
23,68
15,62
5,12
32,77
14,53
6,53
44,94
13,44
8,44
62,80
12,35
9,35
75,71
Tendance degré 2
Erreur
Erreur
Résultats
absolue
relative
(°)
(°)
(%)
61,21
1,79
2,85
61,48
1,02
1,63
61,59
0,41
0,66
61,52
0,02
0,04
61,29
0,29
0,47
60,88
0,38
0,63
60,31
0,81
1,36
59,56
1,06
1,81
58,64
1,14
1,99
57,55
1,05
1,86
56,29
0,79
1,43
54,86
0,86
1,60
53,26
0,76
1,46
51,49
0,49
0,97
49,55
0,55
1,13
47,44
0,06
0,13
45,16
0,34
0,76
42,70
0,80
1,83
40,08
0,92
2,25
37,28
1,22
3,16
34,32
1,18
3,33
31,18
1,32
4,06
27,88
1,12
3,88
24,40
1,10
4,32
20,75
0,75
3,49
16,93
0,57
3,25
12,94
0,19
1,51
10,88
0,38
3,65
8,78
0,78
9,78
6,64
1,64
32,76
4,45
1,45
48,39
Tendance degré 3
Erreur
Erreur
Résultats
absolue
relative
(°)
(°)
(%)
63,02
0,02
0,04
62,55
0,05
0,08
62,04
0,04
0,06
61,48
0,02
0,03
60,86
0,14
0,22
60,18
0,32
0,53
59,42
0,08
0,13
58,58
0,08
0,14
57,64
0,14
0,24
56,59
0,09
0,16
55,43
0,07
0,13
54,14
0,14
0,26
52,72
0,22
0,41
51,15
0,15
0,29
49,43
0,43
0,87
47,54
0,04
0,08
45,47
0,03
0,06
43,23
0,27
0,63
40,78
0,22
0,52
38,14
0,36
0,94
35,28
0,22
0,62
32,20
0,30
0,93
28,88
0,12
0,41
25,32
0,18
0,71
21,51
0,01
0,03
17,43
0,07
0,39
13,08
0,33
2,61
10,80
0,30
2,88
8,45
0,45
5,64
6,03
1,03
20,54
3,53
0,53
17,60
Tendance degré 4
Erreur
Erreur
Résultats
absolue
relative
(°)
(°)
(%)
63,18
0,18
0,29
62,60
0,10
0,16
62,01
0,01
0,02
61,41
0,09
0,14
60,77
0,23
0,37
60,09
0,41
0,68
59,34
0,16
0,27
58,52
0,02
0,03
57,60
0,10
0,17
56,58
0,08
0,14
55,45
0,05
0,10
54,18
0,18
0,34
52,78
0,28
0,53
51,22
0,22
0,44
49,51
0,51
1,04
47,62
0,12
0,25
45,55
0,05
0,11
43,29
0,21
0,49
40,83
0,17
0,42
38,16
0,34
0,89
35,27
0,23
0,65
32,16
0,34
1,05
28,82
0,18
0,63
25,24
0,26
1,02
21,42
0,08
0,39
17,34
0,16
0,89
13,02
0,27
2,10
10,76
0,26
2,45
8,43
0,43
5,39
6,04
1,04
20,79
3,58
0,58
19,38
46
En azimut :
Par la suite, il a été aussi possible de trouver l’équation de rotation (azimut) du panneau solaire pour
s’assurer d’obtenir la plus petite erreur possible. Au départ, il était prédit que la courbe allait être linéaire
puisque la rotation s’effectue sur un engrenage circulaire de vélo. De plus, le vérin n’a aucun angle par
rapport à la chaîne qui entraîne le tout. Il a été nécessaire de confirmer l’hypothèse pour être certain de ne
faire aucune erreur d’interprétation. Puisque le système mécanique est débalancé et qu’un rapporteur
d’angle est difficilement positionnable sur l’axe de rotation, la méthode n’est pas très efficace. En effet, le
système ne réagit pas de la même manière selon l’angle de la hauteur, car l’équilibre du panneau change
en se balançant. En d’autres mots, il se balance. Un rapporteur d’angle placé le plus possible au-dessus de
l’axe de rotation a quand même été utilisé, ainsi qu’un rayon laser emprunté au technicien en bâtiment de
l’UQAC (voir figure 42).
Figure 42 : Détermination de l’azimut actuel en fonction de la tension de rétroaction
Les données obtenues sont visibles sur le tableau qui suit :
Tableau 15 : Angles obtenus selon les tensions lues (azimut)
Tensions (V)
2,982
2,8498
2,7445
2,6527
2,56
2,4529
2,3543
2,2467
2,1421
2,0473
1,9532
Angles (°)
297
294
285
283
275
267
259
250
242
232,5
225
Tensions (V)
1,8555
1,7492
1,6476
1,551
1,4426
1,3467
1,2363
1,135
1,0327
0,9258
Angles (°)
215,5
206,5
198,5
188,5
180
177,5
164,5
155,5
148
139,5
Tensions (V)
0,8362
0,7264
0,6314
0,5224
0,4362
0,3322
0,2911
0,2271
0,1412
0,09824
Angles (°)
131,5
123
114
104
95
85
76
67
56,5
41
47
Les résultats obtenus sont très concluants pour prouver que le système est linéaire et il est possible de le
constater sur la figure 43. Par contre, l’orientation exacte n’a pas été très bien déterminée étant donné que
le panneau se balance trop.
3.50
y (degré 1) = 86,124x + 54,45
Angle de l'azimut (Degrés)
3.00
2.50
2.00
Données pratique
1.50
Linéaire (degré 1)
1.00
0.50
0.00
0.00
0.01
0.01
0.02
0.02
Tension de rétroaction (Volts)
0.03
0.03
Figure 43 : Angle de l’azimut en fonction de la tension de rétroaction (solution non-retenue)
Une autre méthode a alors été utilisée, soit de placer le panneau à l’extrémité totalement horaire et de
marquer sa position au sol, puis de le placer à l’autre extrémité totalement antihoraire et encore une fois
de marquer sa position au sol. En sachant que le système est linéaire, il est alors possible, en mesurant les
angles de ces deux points par rapport à l’axe Nord-Sud (0° vers 180° en ligne droite), d’obtenir une
équation du premier degré.
Premier point : 0,10 volt = 56 degrés
Second point : 2,99 volts = 224 degrés
Les paramètres de l’équation de la droite se calculent donc ainsi :
48
Visuellement, l’équation peut être aperçue sur la figure qui suit.
Angle de l'azimut (Degrés)
3.50
y = 92,734x + 46,727
3.00
2.50
2.00
1.50
1.00
0.50
0.00
0.00
0.01
0.01
0.02
0.02
0.03
0.03
Tension de rétroaction (Volts)
Figure 44 : Angle de l’azimut en fonction de la tension de rétroaction (solution retenue)
L’équation de cette courbe est relativement près de celle donnée par Excel qui a calculé la tendance au
premier degré lors du premier test effectué (voir figure 43). Finalement, l’équation de conversion qui sera
utilisée pour l’azimut dans le code du microcontrôleur est la suivante :
49
Aperçu du prototype :
Dans le but d’accommoder la totalité des pièces nécessaires, un circuit imprimé était pratiquement
indispensable. Bien qu’il aurait été possible de le faire plus petit et même d’utiliser les deux côtés pour
déposer des pièces, il a été décidé de le faire assez gros pour bien séparer les divers types d’éléments,
comme par exemple, éloigner le récepteur GPS des ponts en H pour limiter d’éventuelles perturbations
électromagnétiques indésirables. La figure 45 illustre le travail réalisé.
Figure 45 : Circuit imprimé final
Ensuite, la schématique de la page suivante illustre tous les liens qui raccordent les pièces entre elles.
C’est un élément essentiel à consulter pour tenter de trouver d’éventuels problèmes ou pour bien
comprendre le fonctionnement en profondeur du système.
50
Figure 46 : Schématique finale
51
La figure qui suit est la représentation des fils conducteurs qui relient les interrupteurs, les connecteurs et
le circuit imprimé ensemble.
Figure 47 : Branchements internes du prototype
Ensuite, la figure 48 est une photo du prototype électrique dans sa forme finale, avec les connecteurs en
acier inoxydable qui font le pont entre le système électrique de contrôle et le système mécanique sur
lequel se situent les cellules photovoltaïques.
Figure 48 : Système final
52
IV
Bilan des activités
IV.1
Arrimage formation pratique/universitaire
Étant donné la nature de ce projet qui est un amalgame d’électronique, d’informatique et, à un certain
niveau, d’astronomie, il est certain que différents types de connaissances ont été nécessaires. Tout
d’abord, le cours Systèmes à micro-processeurs a été celui qui s’est avéré le plus utile, car le cœur du
prototype repose sur ce genre de système. Ensuite, le cours Introduction aux ordinateurs a permis de
s’initier aux bases de la programmation en langage C et C++. Il s’avère que le langage choisi pour
programmer le microcontrôleur PIC est le C. Ce cours a aussi montré comment utiliser et convertir les
différentes bases des systèmes de numération. Le cours Systèmes digitaux a contribué à faire comprendre
les bases des portes logiques, les bits de départs, bits d’arrivées et bits de parité. Les cours Électronique I
et Électronique II ont, quant à eux, permis de comprendre et d’utiliser les diodes, diodes
électroluminescentes, transistors et autres dispositifs électroniques. Le cours Signaux et systèmes a montré
la théorie sur les filtres passifs qui ont été utilisés à quelques reprises dans le projet, en plus d’être le
premier cours dans lequel le logiciel MATLAB a été employé. D’une façon plus générale, les nombreux
cours de mathématiques du programme universitaire ont permis de faciliter énormément l’utilisation du
calcul trigonométrique et logarithmique, pour ne nommer que ceux-ci. La compréhension des formules de
la position du Soleil aurait été bien plus ardue sans cet important bagage mathématique.
Cependant, suite à ce projet, il apparaît plusieurs lacunes à la formation en génie électrique. La première
concerne le logiciel Altium. Ce logiciel très important devrait absolument être intégré dans tous les cours
qui s’y prêtent. La seconde lacune est relative à la lecture des fiches techniques des différents types de
pièces retrouvées en électronique. Bien que chaque pièce et chaque fiche technique soit différente l’une
de l’autre, il apparaît souvent une certaine constance dans les termes qui s’y retrouvent.
Malheureusement, il y a plusieurs utilisations de ces fiches qui s’avèrent contre-intuitives et un petit cours
serait le bienvenu pour apprendre les bases.
53
IV.2
Travail d’équipe
En tant que futur ingénieur, il est évident que le travail d’équipe est primordial pour réussir à mener à
terme des projets de plus ou moins grande envergure. Pour le présent projet, le travail d’équipe n’a pas
fait exception; il a été la clef du succès pour son accomplissement. Bien certainement, comme dans tous
les projets, les membres de l’équipe ont dû faire des sacrifices à un moment ou à un autre durant la
conception du projet. Par exemple, puisque les deux coéquipiers n’ont pas la même situation familiale, il
leur était parfois difficile de se fixer des plages horaires fixes qui convenaient aux deux parties. Lorsque
le travail est exécuté en entreprise, plusieurs personnes appartiennent à la même famille et ont plusieurs
enfants, alors il arrive souvent que des parents doivent s’absenter pour une raison ou une autre afin de
subvenir aux besoins de leur famille. Pour ce genre de raisons, la communication a joué un rôle important
durant la durée du projet. Il suffisait d’en aviser son coéquipier lorsque la situation se présentait. Tous les
membres de l’équipe étaient et sont toujours des personnes sérieuses, travaillantes et intéressées, ce qui a
permis un avancement constant de la conception. Pour ce qui est de la charge de travail effectué par les
membres de l’équipe, la répartition s’est faite de façon naturelle. En d’autres mots, les forces de chacun
ont dirigé les membres à exploiter leurs forces pour faire le travail en parallèle. Cette façon de faire a
permis d’augmenter la vitesse de conception, tout en bénéficiant des conseils et des connaissances du
coéquipier respectif. Le travail ardu de chacun a permis de surmonter les obstacles. Finalement, nous
pouvons faire ressortir plusieurs points positifs de ce travail d’équipe. Par exemple, il a permis de mieux
connaître les collaborateurs. Aussi, ce projet a obligé les participants à faire des concessions les uns par
rapport aux autres et à prendre les moyens pour assister à des rencontres hebdomadaires.
La coopération du promoteur a été très bonne. Lorsque certains matériaux et équipements étaient
nécessaires pour l’avancement du projet, il était toujours à l’écoute pour subvenir aux besoins. De plus,
avec une bonne communication, il a été possible de modifier le projet afin qu’il réponde le mieux possible
aux besoins. En cours de route, il a été possible de constater que certaines pièces n’étaient pas nécessaires,
l’accéléromètre par exemple, car en regardant le bilan énergétique sommaire, ces composantes n’étaient
pas rentables ou tout simplement superflues. De l’autre côté, durant le temps de conception, le promoteur
a demandé l’ajout de certaines autres fonctionnalités. Tout au long du projet, la communication constante
avec le promoteur a permis à toutes les parties de connaître l’avancement et les modifications apportées
au projet.
Pour ce qui est des relations avec le conseiller, celui-ci était présent à tout moment pour discuter des
modifications et des nouvelles idées apportées au projet. Ainsi, les deux parties ont pu acquérir des
connaissances à travers ce projet de conception.
54
IV.3
Respect de l’échéancier
Le projet s’est majoritairement déroulé selon l’échéancier qui avait été présenté dans le plan de travail. En
effet, la sélection des diverses composantes nécessaires, les discussions concernant le principe de
fonctionnement et la programmation principale du microcontrôleur se sont bien déroulées et ont suivi
l’échéancier. Là où les choses se sont corsées, c’est pour le circuit imprimé. Sa conception s’est avérée
beaucoup plus longue que prévue, afin d’être certain d’éliminer le plus d’erreurs possibles. Aussi, il fallait
se coordonner avec les autres équipes de projet en génie électrique et informatique pour acheminer tous
les circuits imprimés en même temps.
55
Tableau 16 : Échéancier final
56
IV.4
Analyse et discussion
Une des premières étapes du projet a été de fixer un échéancier sur une durée de deux sessions. Ce dernier
a pratiquement été suivi à la lettre tout au long du projet, à l’exception de la fin, soit le circuit imprimé et
les tests finaux. Il fallait en effet être en mesure de synchroniser trois équipes pour l’envoi des circuits
imprimés à la fabrication. Il a toutefois été possible de rattraper une partie du temps perdu lors de cette
synchronisation pour parvenir aux résultats attendus. Comme la session d’automne était moins chargée, le
gros du travail a été réalisé durant cette période. De plus, la période des fêtes a permis de prendre une
certaine avance, en prévision d’une session d’hiver vraiment chargée. Au départ le projet semblait simple,
mais avec l’avancement plusieurs troubles sont survenus et il a fallu user d’ingéniosité pour les résoudre.
Ensuite, plusieurs idées ont été présentées par toutes les parties (promoteur, conseiller et concepteurs) afin
de rendre le projet plus performant et plus complet. Pour obtenir un meilleur rendement, il était clair au
départ que l’équipe voulait que le système fonctionne sur deux axes au lieu d’un seul. Ceci a complexifié
légèrement le projet. Ensuite, l’utilisation d’un accéléromètre a été envisagée. Par contre, l’erreur du
modèle acheté pour lequel une plaque d’essais a été fabriquée était trop importante. Pour ce qui est du
magnétomètre, des tests ont été effectués et ce dernier était trop sensible aux champs magnétiques
variables. Il pourrait être utilisé pour l’orientation initiale du panneau solaire, mais il devrait être situé
bien loin de toutes perturbations électromagnétiques trop puissantes. Afin de parvenir aux objectifs, la
force de chacun des coéquipiers a dû être employée pour réaliser des travaux distincts. Il y avait beaucoup
de manques de connaissances causées par certaines lacunes à l’intérieur du baccalauréat pour la
réalisation du projet. Ceci a eu comme conséquence de prendre beaucoup plus de temps que prévu pour la
réalisation de certaines parties. L’utilisation de plusieurs logiciels inconnus est un exemple de ce manque
de connaissances; Altium et Visual Basic, par exemple. Les étapes qui ont été suivies lors de la réalisation
du projet étaient les bonnes, car la compréhension de l’objectif et l’aspect technique étaient bien compris.
Un gros problème rencontré, c’est le fait de ne pas avoir une grande quantité de pièces différentes en
mains. Il est important d’expérimenter afin de valider des choix de conception comme c’est parfois le cas
lorsque les ingénieurs travaillent en entreprise.
57
Points forts :

L’échéancier a été suivi;

Le projet est fonctionnel;

Des ajouts sont inclus pour un meilleur fonctionnement;

La communication entre les parties a été très bonne;

La relation avec le promoteur était bonne;

Pratiquement aucune aide n’a été nécessaire de la part du conseiller;

Il y a eu une bonne compréhension du travail à exécuter;

Une bonne analyse technique a été portée sur le travail à réaliser;

Aucune erreur coûteuse en temps ou en matériel.
Points faibles

Un grand manque de connaissances dans certains domaines (demande plus de temps);

Session chargée (temps);

Optimisation du PCB à parfaire au niveau de la proximité des connecteurs (headers);

Optimisation possible du code.
Résultats obtenus
Le temps investi dans ce projet a permis d’obtenir un prototype fonctionnel et testé, dans les délais
prévus. Pour un montant de 215 $, soit moins que les 280 $ initialement prévus dans le plan de travail, il a
été possible de concevoir et d’assembler un système qui respecte les fonctionnalités demandées par le
promoteur. Il est contenu en totalité à l’intérieur d’une boîte compacte, résistante et de belle apparence.
De plus, il possède les caractéristiques nécessaires pour être utilisé dans la très grande majorité des
endroits de la planète. Les deux axes sont fonctionnels et sont capables de suivre le Soleil à la trace,
jusqu’aux limites du support mécanique. Le prototype a été en mesure de fonctionner en permanence,
sans erreur d’opération et sans surchauffe, comme il a été prévu. Au cours du projet, plusieurs
technologies testées ont été rejetées, retenues ou encore gardées en considération pour les
recommandations. Ainsi, le prototype réalisé pendant ce projet ainsi que le présent rapport devraient
satisfaire le promoteur.
58
V
Conclusion et recommandations
Suite à ce rapport, il est possible de constater que le projet s’est déroulé comme prévu, selon les
échéanciers élaborés lors du plan de travail. Quelques pièces ont été changées en cours de route. C’est le
cas du récepteur GPS. Le premier modèle sélectionné (EM-406A) avait été choisi étant donné la
disponibilité de deux exemplaires dans le bureau des techniciens de l’UQAC. Ces récepteurs se sont
avérés défectueux et ont donc été abandonnés au profit d’un récepteur de bien meilleure qualité (RXMGPS-SR). Les ponts en H ont aussi dû être changés. Il s’est avéré que le premier modèle choisi (TLE5206-2) n’était plus disponible à la vente. La conception avait malheureusement été commencée avec ce
modèle. Cependant, le modèle (VNH3SP30-E) par lequel ces pièces ont été remplacées est bien plus
puissant et possède des caractéristiques de loin supérieures.
Puis, lors du choix des pièces initiales, il a été impossible de trouver des composantes fonctionnant toutes
avec une tension de 3.3V, comme c’est le cas du GPS. Il aurait peut-être été possible de trouver des
composantes fonctionnant toutes avec 5V, mais ce n’est pas un facteur critique. Ceci explique en partie
pourquoi une tension de 5 volts est présente sur le prototype.
Ensuite, en faisant exception des vérins qui ont une plage de températures d’opération n’allant pas sous
les -26°C, les pièces choisies sont toutes certifiées pour fonctionner à des températures atteignant au
minimum -30°C. C’est le récepteur GPS qui limite le tout à -30°C, sinon le reste du projet peut atteindre
des températures de fonctionnement de -40°C selon les fiches techniques des divers fabricants.
Il sera possible pour le promoteur de programmer la communication I2C du magnétomètre s’il veut
l’utiliser, car la partie électronique de celui-ci est déjà implémentée sur le circuit imprimé. Il suffit
simplement de faire la programmation pour faire fonctionner la communication I2C. De plus, comme pour
une boussole standard, le magnétomètre ne doit pas être placé près de matériaux métalliques. Par contre,
si le champ magnétique indésirable est constant, il est possible de faire la calibration du magnétomètre
pour éliminer ce champ jusqu’à un certain point.
Afin de conserver les composantes électroniques, il est préférable de retirer le boîtier du module solaire
lors du transport. Idéalement le module ne devrait pas être laissé sans être attaché dans un gros contenant,
car la plupart des pièces sont montées en surface et sont donc relativement sensibles aux chocs. La plupart
des composantes utilisées peuvent supporter une grande accélération, mais certaines sont plus sensibles.
Par exemple, le module GPS est une pièce plutôt sensible et primordiale pour le bon fonctionnement du
système.
59
Pour le futur, si l’installation solaire demande l’utilisation de plus gros vérins ou moteurs demandant plus
de puissance, les ponts en H auront peut-être besoin d’un dissipateur de chaleur. La dissipation par le
cuivre du circuit imprimé peut supporter un courant continu de 6.85A maximum. Pour obtenir le courant
continu maximum, il faut utiliser les mêmes calculs que dans la section des ponts en H.
Suite à des tests réalisés avec le circuit imprimé présenté dans ce rapport, il est important de préciser que
des modifications mineures devront être opérées si le promoteur veut le reproduire. L’interrupteur
principal n’inclut présentement pas la partie puissance des deux ponts en H. Bien qu’ils soient tout de
même protégés par fusible, ils sont en permanence alimentés, ce qui veut dire que le circuit consomme
près de 13 mA s’il est connecté, mais que l’interrupteur principal n’est pas activé. Ensuite, le
convertisseur DC/DC CC3-1205SF-E doit avoir sa patte TRM (6) flottante (5 volts) plutôt que mise à la
terre (6 volts). Le porte-pile doit être corrigé afin qu’il ne connecte pas avec la terre des deux côtés mais
bien d’un seul. Finalement, le dessin des trois diodes (DL1, DL2 et DL3) sur le schéma est inversé.
Pour rendre le fonctionnement plus visuel et pour mieux savoir ce que le système fait réellement à chaque
instant, des diodes électroluminescentes ont été utilisées. Bien qu’elles soient très pratiques pour trouver
des problèmes, elles consomment beaucoup de puissance par rapport au système complet. Ainsi, pour
limiter la consommation d’énergie, il pourrait être judicieux de les éliminer.
Afin d’améliorer l’étanchéité du boîtier, si le projet était à reconstruire il serait bien de laisser le
connecteur USB à l’intérieur de ce boîtier et de le diriger vers le haut pour faciliter son utilisation
éventuelle. C’est en effet la plus grande source possible d’infiltration d’eau. De plus, les connecteurs
pourraient être remplacés par des modèles plus étanches, mais aussi beaucoup plus dispendieux.
Pour des campements plus permanents, un système qui utilise un clavier pour entrer les coordonnées
géographiques, couplé à une horloge temps réel, pourrait remplacer avantageusement un récepteur GPS
en éliminant la dépendance avec le signal GPS.
Finalement, une autre recommandation serait d’utiliser un mécanisme différent pour l’azimut. Le
prototype mécanique actuel est très instable et représente la plus grande source d’imprécision. Pour
couvrir un hémisphère complet et donc améliorer le rendement, le prototype mécanique devrait pourvoir
couvrir l’azimut sur les 360 degrés et la hauteur sur 90 degrés. Idéalement, un système mécanique qui
peut atteindre des angles plus grands serait mieux. Des mouvements pourraient alors être épargnés, ce qui
conserverait l’énergie et contribuerait donc à l’augmentation du rendement, but ultime de ce projet.
60
Bibliographie
1. Bernard, Jacques (2004). Énergie solaire : Calculs et optimisation. Paris : Ellipses Marketing,
252 p.
2. Astronomy Education at the University of Nebraska-Lincoln. Motions of the Sun Simulator.
[En
ligne].
[http://astro.unl.edu/naap/motion3/animations/sunmotions.html].
Consulté
le
12 octobre 2011.
3. Linx
Technologies.
SR
series
GPS
receiver
module
data
guide.
[http://www.linxtechnologies.com/resources/data-guides/rxm-gps-sr.pdf].
[En
ligne].
Consulté
le
6 février 2012.
4. Ali Mazidi, Muhammad; D.Mckinlay Rolin; Causey, Danny (2008). PIC Microcontroller and
Embedded systems : Using Assembly and C for PIC18. New Jersey : Pearson Prentice Hall, 816 p.
5. L.Jones, Bradley; Aitken, Peter (2005). Le langage C. Paris : CampusPress, 705 p.
6. Microchip (2005). MPLAB C18 C Compiler : Getting Started. Microchip Technology Inc.,
124 p.
7. Wikipedia.
The
Free
Encyclopedia.
Solar
azimuth
[En
angle.
ligne].
[http://en.wikipedia.org/wiki/Solar_azimuth_angle]. Consulté le 16 novembre 2011.
8. Microchip.
PIC18F2585/2680/4585/4680
Data
Sheet.
[En
ligne].
[http://ww1.microchip.com/downloads/en/DeviceDoc/39625c.pdf]. Consulté le 6 février 2012.
9. Microchip (2005). MPLAB C18 C Compiler : Libraries. Microchip Technology Inc., 180 p.
61
Glossaire
Figure 49 : Coordonnées horizontales d’un astre (azimut a et hauteur h) [1]
Azimut (a) : Angle que fait, en un lieu donné, la direction nord-sud avec la projection dans le plan
horizontal de la direction Terre-Soleil. [1]
Cellule photovoltaïque : Système transformant le rayonnement solaire en énergie électrique. [1]
Hauteur (h) : Angle que fait, en un lieu donné, le plan horizontal avec la droite tracée entre ce lieu et le
Soleil. [1]
Latitude (φ) : Une des deux coordonnées terrestres d’un point de notre planète (cf. Longitude). C’est
l’angle que fait le plan de l’équateur avec la direction reliant le centre de la Terre au point considéré. Sa
valeur est positive dans l’hémisphère nord, négative dans l’hémisphère sud. [1]
Longitude (L) : Une des deux coordonnées terrestres d’un point de notre planète (cf. Latitude). C’est
l’angle que fait le méridien local passant par le point considéré avec le méridien origine passant par la
ville de Greenwich. Sa valeur est positive à l’ouest et négative à l’est du méridien origine. [1]
Méridien : Demi grand cercle passant par l’axe des pôles terrestres et le point considéré sur notre planète
(méridien terrestre) ou bien passant par l’axe des pôles célestes et l’astre considéré (méridien céleste). [1]
Rendement d’un capteur (η) : Rapport de l’énergie utile récupérée sur l’énergie solaire totale tombant sur
le capteur. [1]
Temps solaire vrai (TSV) : Système de mesure de l’heure en un point donné, pour lequel il est midi quand
le Soleil se trouve dans le plan du méridien local. [1]
62
Annexe 1 (Code de simulation MATLAB)
%% Détermination de la position du Soleil
clc;clear all;close all
jour=21;
mois=06;
Latitude=45;
% jour=Numéro du jour du mois
% mois=Numéro du mois de l'année
% Latitude (degré)
% Détermination du numéro du jour dans l'année
n=jour+31*(mois-1);
if mois<3
n=n;
end
if mois>2
n=n-floor(0.4*mois+2.3);
end
% Équation déterminant la déclinaison (degré)
delta=23.45*sind((360/365)*(n-81));
hold
precision=0.01;
for i=1:24/precision
TSV=(i-1)*precision; % TSV=Temps solaire vrai (heure)
%TSV=0:precision:24 % TSV=Temps solaire vrai (heure)
% Équation déterminant l'angle horaire (degré)
w=(TSV-12)*15;
% Équation déterminant la hauteur du Soleil (degré)
hauteur(i)=asind(sind(Latitude)*sind(delta)+cosd(Latitude)*cosd(delta)*cosd(w)
);
% Équation déterminant l'azimut du Soleil (degré)
azimut(i)=acosd((sind(delta)sind(hauteur(i))*sind(Latitude))/(cosd(hauteur(i))*cosd(Latitude)));
% Conversion de l'azimut en système 0 à 360 degrés
if w<0
azimut(i)=azimut(i);
end
if w>=0
azimut(i)=360-azimut(i);
end
% Traçage de la hauteur du Soleil en fonction de l’azimut
end
figure (1)
plot(azimut,hauteur),grid minor
xlabel('Azimut (degré)'),ylabel('Hauteur (degré)')
title ('Hauteur du Soleil en fonction de l''azimut')
63
Annexe 2 (Code du microcontrôleur)
/*Ce programme permet le positionnement selon l'axe Hauteur et Azimutal d'un panneau solaire à l'aide d'un récepteur GPS.
Il a été réalisé par : Shawn-Yannick Côté ([email protected]) Canada (Québec) 2012
Date de la dernière modification : 15 avril 2012
----------------------------------------------------------------------------------------------------INITIALISATION
----------------------------------------------------------------------------------------------------*/
//Fichiers d'en-tête du programme
#include <p18cxxx.h>
#include <math.h>
#include <usart.h>
#include <sw_uart.h>
#include <stdlib.h>
#include <delays.h>
#include <i2c.h>
#pragma config OSC=HS
#pragma config WDT=OFF
#pragma config LVP=OFF
#pragma config MCLRE=ON
//Définition des sorties et des entrées
#define hauteur_verin_ENABLE PORTBbits.RB0
#define azimut_verin_ENABLE PORTBbits.RB1
#define verin_INa PORTBbits.RB2
#define verin_INb PORTBbits.RB3
#define DEL_inutilisee PORTDbits.RD4
#define DEL_transport PORTDbits.RD5
#define selecteur_transport PORTDbits.RD6
#define selecteur_periodique PORTDbits.RD7
//Fichier de définition des registres internes du PIC
//Bibliothèque de mathématiques (sin, asin, cos, acos, fabs)
//Bibliothèque de l'USART (hardware)
//Bibliothèque de l'UART (software)
//Bibliothèque de fonctions générales (atoi, atof)
//Bibliothèque de fonctions de temporisation
//Bibliothèque de fonctions I2C
//Utilisation du cristal externe (Fosc=25 MHz, Tosc=40 ns)
//Désactivation du WatchDog Timer
//Désactivation Low Voltage Programming
//Entrées ENa et ENb du pont en H (hauteur)
//Entrées ENa et ENb du pont en H (azimut)
//Entrées INa des ponts en H
//Entrées INb des ponts en H
//DEL inutilisée
//DEL d'indication du mode transport
//Interrupteur du mode Transport
//Interrupteur du mode Périodique
//Définition des variables du programme
char position_virgule,i,j;
char mode_nuit;
//mode_nuit=1 -> Soleil sous horizon mode_nuit=0 -> Soleil dessus horizon
char correctif_jour_GMT;
char temps_ecoule;
//Déplacement uniquement aux heures
char GGA_OFF[]="$PSRF103,00,00,00,01*24\r\n";
//Code de fermeture de la trame GGA \r=retour du chariot (Carriage Return)
char GLL_OFF[]="$PSRF103,01,00,00,01*25\r\n";
//Code de fermeture de la trame GLL
\n=nouvelle ligne (Line Feed)
char GSA_OFF[]="$PSRF103,02,00,00,01*26\r\n";
//Code de fermeture de la trame GSA
char GSV_OFF[]="$PSRF103,03,00,00,01*27\r\n";
//Code de fermeture de la trame GSV
char RMC_ON[]="$PSRF103,04,00,01,01*21\r\n";
//Code d'ouverture de la trame RMC
char VTG_OFF[]="$PSRF103,05,00,00,01*21\r\n";
//Code de fermeture de la trame VTG
float latitude_rad,delta_deg,delta_rad,angle_hor_deg,angle_hor_rad;
float hauteur_deg,hauteur_rad,azimut_deg,azimut_rad,azimut_deg_limitee;
float latitude_deg=0;
float latitude_min=0;
float longitude_deg=0;
float longitude_min=0;
float TSV=0;
float UTC=0;
float minute=0;
float consigne_hauteur,erreur_hauteur,erreur_hauteur_abs,position_hauteur,position_hauteur_volt;
float consigne_azimut,erreur_azimut,erreur_azimut_abs,position_azimut,position_azimut_volt;
int numero_jour;
int k;
int jour=0;
int mois=0;
int heure=0;
int annee=0;
int latitude_degre=0;
int longitude_degre=0;
int position_azimut_adc,position_hauteur_adc;
unsigned char gps[100];
//Tableau tampon pour la trame GPRMC
unsigned char heure_gps[3];
//Temps GMT (heure)
unsigned char minute_gps[3];
//Temps GMT (minute)
unsigned char valide_gps;
//valide_gps=A -> Signal valide valide_gps=V -> Signal invalide
unsigned char latitude_deg_gps[3];
//latitude (degré)
unsigned char latitude_min_gps[3];
//latitude (minute)
64
unsigned char longitude_deg_gps[4];
unsigned char longitude_min_gps[3];
unsigned char hemisphere_gps;
unsigned char meridien_gps;
unsigned char jour_gps[3];
unsigned char mois_gps[3];
unsigned char annee_gps[3];
unsigned char saut_gps;
//longitude (degré)
//longitude (minute)
//hemisphere_gps='N' -> Hemisphère Nord hemisphere_gps='S' -> Hemisphère Sud
//meridien_gps='E' -> Est de Greenwich meridien_gps='W' -> Ouest de Greenwich
//Date (jour)
//Date (mois)
//Date (an)
//Utilisé pour le triage de la trame $GPRMC
//Déclaration des fonctions du programme
float deg_to_rad(float);
float rad_to_deg(float);
float lecture_pot_azimut(void);
float lecture_pot_hauteur(void);
int numero_du_jour(int,int);
void PWM(float);
void DelayTXBitUART(void);
void DelayRXHalfBitUART(void);
void DelayRXBitUART(void);
void Delay(int);
//Conversion des degrés en radian
//Conversion des radians en degrés
//Lecture du potentiomètre azimut et conversion en degrés
//Lecture du potentiomètre hauteur et conversion en degrés
//Détermination du numéro du jour dans l'année
//Détermination du duty cycle à utiliser pour le PWM
//Fonction de délais nécessaire au TX (UART logiciel)
//Fonction de délais nécessaire au RX (UART logiciel)
//Fonction de délais nécessaire au RX (UART logiciel)
//Fonction de délais longs
/*---------------------------------------------------------------------------------------------------PARTIE PRINCIPALE
----------------------------------------------------------------------------------------------------*/
void main (void)
{
//Délai permettant au système de s'initialiser correctement (GPS surtout) avant de débuter
//
Delay(15);
//Configuration initiale du port B
TRISB=0b00110000;
hauteur_verin_ENABLE=0;
azimut_verin_ENABLE=0;
verin_INa=0;
verin_INb=0;
//Configuration initiale du port D
TRISD=0b11001111;
DEL_transport=0;
DEL_inutilisee=0;
//Le port B est un port de sortie
//Désactivation du pont en H hauteur
//Désactivation du pont en H azimut
//Désactivation de la sortie INa des ponts en H
//Désactivation de la sortie INb des ponts en H
//Port D : 0=sortie (output) 1=entrée (input)
//Extinction de la DEL du mode transport
//Configuration initiale de l'ADC (potentiomètres de rétroaction)
TRISAbits.TRISA0=0;
//RA0=INPUT pour entrée analogique
ADCON1=0b00001100;
//AN0 et AN1 et AN2=analogique, Vref du PIC
ADCON2=0b10101110;
//Fosc/64, 12 TAD, Right justified
//Configuration initiale du PWM (modulation de largeur d'impulsion)
TRISCbits.TRISC2=0;
//La pin PWM est une sortie
CCP1CON=0b00001100;
//PWM mode
T2CON=0b00001100;
//Timer2 ON, aucun postscaler, 1 prescale
PR2=255;
//Détermine la période
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//Utilisation de l'USART hardware pour initialiser le GPS
TRISC = 0x00;
//Ouverture du Port C
OpenUSART(USART_TX_INT_OFF
//Transmit interrupts=off
&USART_RX_INT_OFF
//Receive interrupts=off
&USART_ASYNCH_MODE
//Asynchronous mode=on
&USART_EIGHT_BIT
//8 bits
&USART_CONT_RX
//Continuous receive=on
&USART_BRGH_LOW,40);
//Pour 9600 kbps et 25 MHz, SPBRG=40 (erreur=0.76%)
putrsUSART("$PSRF103,00,00,00,01*24\r\n");
//Écriture dans l'USART : GGA OFF
putrsUSART("$PSRF103,01,00,00,01*25\r\n");
//Écriture dans l'USART : GLL OFF
putrsUSART("$PSRF103,02,00,00,01*26\r\n");
//Écriture dans l'USART : GSA OFF
putrsUSART("$PSRF103,03,00,00,01*27\r\n");
//Écriture dans l'USART : GSV OFF
putrsUSART("$PSRF103,04,00,01,01*21\r\n");
//Écriture dans l'USART : RMC ON
putrsUSART("$PSRF103,05,00,00,01*21\r\n");
//Écriture dans l'USART : VTG OFF
CloseUSART();
//Fermeture du USART
65
//Utilisation de l'UART software pour initialiser le GPS
OpenUART();
//Ouverture du UART software
putsUART(GGA_OFF);
//Écriture dans l'UART : GGA OFF
putsUART(GLL_OFF);
//Écriture dans l'UART : GLL OFF
putsUART(GSA_OFF);
//Écriture dans l'UART : GSA OFF
putsUART(GSV_OFF);
//Écriture dans l'UART : GSV OFF
putsUART(RMC_ON);
//Écriture dans l'UART : RMC ON
putsUART(VTG_OFF);
//Écriture dans l'UART : VTG OFF
//Fonctionnement continu (boucle infinie)
while (1)
{
if (selecteur_transport==1)
{
DEL_transport=1;
//Sélecteur activé ? -> mode transport
//Allumage de la DEL du mode transport
//Abaissement complet du panneau dans l'axe hauteur (mise à 0 degré)
hauteur_verin_ENABLE=1;
//Activation du pont en H hauteur
azimut_verin_ENABLE=0;
//Désactivation du pont en H azimut
position_hauteur=lecture_pot_hauteur();
while (position_hauteur>0.3)
//Boucle de correction de la position (hauteur)
{
CCPR1L=255;
//Valeur du PWM = 255 (12 volts au vérin)
position_hauteur=lecture_pot_hauteur();
verin_INa=1;
//Activation de la sortie INa des ponts en H
verin_INb=0;
//Désactivation de la sortie INb des ponts en H
}
//Rotation du panneau plein Sud (mise à 180 degrés)
consigne_azimut=180;
//Orientation dans l'axe Nord-Sud (180 degrés)
hauteur_verin_ENABLE=0;
//Désactivation du pont en H hauteur
azimut_verin_ENABLE=1;
//Activation du pont en H azimut
position_azimut=lecture_pot_azimut();
erreur_azimut=consigne_azimut-position_azimut;
//Calcul de l'erreur
erreur_azimut_abs=fabs(erreur_azimut);
//Valeur absolue de l'erreur
while (erreur_azimut_abs>0.3)
//Boucle de correction de la position (azimut)
{
position_azimut=lecture_pot_azimut();
erreur_azimut=consigne_azimut-position_azimut;
//Calcul de l'erreur
if (erreur_azimut<0)
//Consigne < mesure -> Panneau doit tourner antihoraire
{
erreur_azimut_abs=-erreur_azimut;
verin_INa=1;
verin_INb=0;
}
if (erreur_azimut>=0)
//Consigne > mesure -> Panneau doit tourner horaire
{
erreur_azimut_abs=erreur_azimut;
verin_INa=0;
verin_INb=1;
}
PWM(erreur_azimut_abs);
//Appel de la fonction PWM pour déterminer le duty cycle
}
hauteur_verin_ENABLE=0;
//Désactivation du pont en H hauteur
azimut_verin_ENABLE=0;
//Désactivation du pont en H azimut
verin_INa=0;
//Désactivation de la sortie INa des ponts en H
verin_INb=0;
//Désactivation de la sortie INb des ponts en H
DEL_transport=0;
//Extinction de la DEL du mode transport
while (selecteur_transport==1);
//Demeure ici tant que le sélecteur est activé
}
else
{
//
//
//
//
//
//
//
//
//
//Utilisation de l'USART hardware pour la réception des données GPS
OpenUSART(USART_TX_INT_OFF //Transmit interrupts=off
&USART_RX_INT_OFF //Receive interrupts=off
&USART_ASYNCH_MODE //Asynchronous mode=on
&USART_EIGHT_BIT //8 bits
&USART_CONT_RX
//Continuous receive=on
&USART_BRGH_LOW,40); //Pour 9600 kbps et 25 MHz, SPBRG=40 (erreur=0.76%)
getsUSART(gps,69);
//Copie de la trame entrante dans un tableau tampon de 69 cases
CloseUSART();
//Fermeture du USART
66
//Utilisation de l'UART software pour la réception des données GPS
//OpenUART();
//Ouverture du UART software
getsUART(gps,69);
//Copie de la trame entrante dans un tableau tampon de 69 cases
//Parsing (triage) des données GPS qui permet un bon tri même si des champs sont libres
if (gps[0]=='$'&&gps[1]=='G'&&gps[2]=='P'&&gps[3]=='R'&&gps[4]=='M'&&gps[5]=='C'&&gps[6]==',')
//Début trame GPRMC ?
{
position_virgule=1;
saut_gps=0;
for(i=7;i<69;i++)
{
if (gps[i]==',')
//Si le caractère est une virgule, on incrémente la position
{
position_virgule++;
}
if (position_virgule==1 && gps[i]!=',')
//Champ1 : heure dans la journée
{
heure_gps[0]=gps[i];
heure_gps[1]=gps[i+1];
minute_gps[0]=gps[i+2];
minute_gps[1]=gps[i+3];
saut_gps=1;
}
if (position_virgule==2 && gps[i]!=',')
//Champ2 : validité (A) ou non (V) du signal
{
valide_gps=gps[i];
saut_gps=2;
}
if (position_virgule==3 && gps[i]!=',')
//Champ3 : latitude
{
latitude_deg_gps[0]=gps[i];
latitude_deg_gps[1]=gps[i+1];
latitude_min_gps[0]=gps[i+2];
latitude_min_gps[1]=gps[i+3];
saut_gps=3;
}
if (position_virgule==4 && gps[i]!=',')
//Champ4 : position par rapport à l'équateur
{
hemisphere_gps=gps[i];
saut_gps=4;
}
if (position_virgule==5 && gps[i]!=',')
//Champ5 : longitude
{
longitude_deg_gps[0]=gps[i];
longitude_deg_gps[1]=gps[i+1];
longitude_deg_gps[2]=gps[i+2];
longitude_min_gps[0]=gps[i+3];
longitude_min_gps[1]=gps[i+4];
saut_gps=5;
}
if (position_virgule==6 && gps[i]!=',')
//Champ6 : position par rapport à Greenwich
{
meridien_gps=gps[i];
saut_gps=6;
}
if (position_virgule==7 && gps[i]!=',')
//Champ7 : (Speed over ground) inutilisé
{
saut_gps=7;
}
if (position_virgule==8 && gps[i]!=',')
//Champ8 : (Course over ground) inutilisé
{
saut_gps=8;
}
if (position_virgule==9 && gps[i]!=',')
//Champ9 : date
{
jour_gps[0]=gps[i];
jour_gps[1]=gps[i+1];
mois_gps[0]=gps[i+2];
mois_gps[1]=gps[i+3];
annee_gps[0]=gps[i+4];
67
annee_gps[1]=gps[i+5];
saut_gps=9;
}
if (position_virgule==10)
{
break;//Sortie de la boucle For si on a atteint la dernière virgule importante
}
if (gps[i]!=',')
//Si le caractère n'est pas une virgule, on incrémente la position
{
position_virgule++;
}
if (saut_gps==1 && gps[i]!=',')
{
i=i+10;
//Déplacement 10 positions (longueur du champs Heure)
}
if (saut_gps==2 && gps[i]!=',')
{
i=i+1;
//Déplacement 1 positions (longueur du champs Validité)
}
if (saut_gps==3 && gps[i]!=',')
{
i=i+9;
//Déplacement 9 positions (longueur du champs Latitude)
}
if (saut_gps==4 && gps[i]!=',')
{
i=i+1;
//Déplacement 1 position (longueur du champs Hémisphère)
}
if (saut_gps==5 && gps[i]!=',')
{
i=i+10;
//Déplacement 10 positions (longueur du champs Longitude)
}
if (saut_gps==6 && gps[i]!=',')
{
i=i+1;
//Déplacement 1 position (longueur du champs Méridien)
}
if (saut_gps==7 && gps[i]!=',')
{
i=i+4;
//Déplacement 4 positions (longueur du champs SOG)
}
if (saut_gps==8 && gps[i]!=',')
{
i=i+5;
//Déplacement 5 positions (longueur du champs COG)
}
if (saut_gps==9 && gps[i]!=',')
{
i=i+6;
//Déplacement 5 positions (longueur du champs Date)
}
}
}
//Si le signal s'avère valide, démarrer le calcul de la position du Soleil
if (valide_gps=='A') //Est-ce que le signal du GPS est valide (A) ?
{
//Conversions des tableaux (arrays) en nombres (flottants ou entiers)
heure_gps[2]=',';
//L'ajout d'un caractère non-numérique...
minute_gps[2]=',';
//...à la fin des tableaux permet de...
latitude_deg_gps[2]=',';
//...régler un problème avec les...
latitude_min_gps[2]=',';
//...fonctions atoi et atof.
longitude_deg_gps[3]=',';
longitude_min_gps[2]=',';
jour_gps[2]=',';
mois_gps[2]=',';
annee_gps[2]=',';
heure=atoi(heure_gps);
//array "heure_gps" -> entier "heure"
minute=atof(minute_gps);
//array "minute_gps" -> flottant "minute"
latitude_degre=atoi(latitude_deg_gps);
//array "latitude_deg_gps" -> entier "latitude_deg"
latitude_min=atof(latitude_min_gps);
//array "latitude_min_gps" -> flottant "latitude_min"
longitude_degre=atoi(longitude_deg_gps); //array "longitude_deg_gps" -> entier "longitude_deg"
longitude_min=atof(longitude_min_gps); //array "longitude_min_gps"-> flottant "longitude_min"
jour=atoi(jour_gps);
//array "jour_gps" -> entier "jour"
mois=atoi(mois_gps);
//array "mois_gps" -> entier "mois"
annee=atoi(annee_gps);
//array "annee_gps" -> entier "annee"
68
//Augmentation de la précision des heures et degrés en ajoutant les minutes en décimales
UTC=(heure+(minute/60));
//Fusion des heures et des minutes (temps)
latitude_deg=(latitude_degre+(latitude_min/60));
//Fusion des degrés et des minutes (latitude)
longitude_deg=(longitude_degre+(longitude_min/60)); //Fusion des degrés et des minutes (longi.)
//Prise en compte de la position par rapport au méridien de Greenwich pour le signe de la longitude
if (meridien_gps=='E')
//Est du méridien de Greenwich
{
longitude_deg=longitude_deg;
//Est de Greenwich -> Longitude positive
}
if (meridien_gps=='W')
//Ouest du méridien de Greenwich
{
longitude_deg=-longitude_deg;
//Ouest de Greenwich -> Longitude négative
}
//Conversion et correction du temps UTC (GMT) en TSV
TSV=UTC+(longitude_deg/15);
if (TSV>=0 && TSV<=24)
{
correctif_jour_GMT=0;
//Nous sommes le même jour qu'à Greenwich
}
if (TSV<0)
//Si l'heure est plus petite que 0
{
TSV=TSV+24;
//Correction de l'heure locale
correctif_jour_GMT=-1;
//Nous sommes 1 jour avant Greenwich
}
if (TSV>24)
//Si l'heure est plus grande que 24, nous sommes 1 après avant Greenwich
{
TSV=TSV-24;
//Correction de l'heure locale
correctif_jour_GMT=1;
//Nous sommes 1 jour après Greenwich
}
//Altérations mineures aux endroits critiques pouvant produire des bugs (NaN, division par zéro, etc)
if (TSV==0)
//Minuit exactement
{
TSV=0.0167; //S'il est minuit (00h00), mettre le temps à minuit et 1 minute (00h01)
}
if (TSV==12)
//Midi exactement
{
TSV=12.0167;
//S'il est midi (12h00), mettre le temps à midi et 1 minute (12h01)
}
if (latitude_deg==0)
//Équateur exactement
{
latitude_deg=0.0167; //Si Équateur (00d00'), mettre la latitude à (00d01')
}
if (latitude_deg==90)
//Pôle exactement
{
latitude_deg=89.983; //Si Pôle (90d00'), mettre la latitude à (89d59')
}
//Prise en compte de l'hémisphère pour le signe de la latitude
if (hemisphere_gps=='N')
//Hémisphère Nord
{
latitude_deg=latitude_deg;
//Hémisphère Nord -> Latitude positive
}
if (hemisphere_gps=='S')
//Hémisphère Sud
{
latitude_deg=-latitude_deg;
//Hémisphère Sud -> Latitude négative
}
//Conversion de l'angle : Degré->Radian
latitude_rad=deg_to_rad(latitude_deg);
//Appel de la fonction de conversion
//Détermination du numéro du jour dans l'année
numero_jour=numero_du_jour(jour,mois); //Appel de la fonction du numéro du jour
numero_jour=numero_jour+correctif_jour_GMT; //Application du correctif pour l'heure GMT
if (numero_jour==0)
//Le jour précédent le 1 janvier est le 31 décembre
{
numero_jour=365; //Jour 365 = 31 décembre
}
if (numero_jour==366)
//Le jour après le 31 décembre est le 1 janvier
{
69
numero_jour=1;
//Jour 1 = 1 janvier
}
//Détermination de la déclinaison (delta) (Le résultat est en degré et doit donc être converti)
delta_deg=23.45*sin(2*3.14159/365*(numero_jour-81));
delta_rad=deg_to_rad(delta_deg);
//Détermination de l'angle horaire
angle_hor_deg=(TSV-12)*15;
angle_hor_rad=deg_to_rad(angle_hor_deg); //Appel de la fonction de conversion
//Détermination de la hauteur du Soleil
hauteur_rad=asin(sin(latitude_rad)*sin(delta_rad)+cos(latitude_rad)*cos(delta_rad)*cos(angle_hor_rad));
hauteur_deg=rad_to_deg(hauteur_rad);
//Appel de la fonction de conversion
//Détermination du jour ou de la nuit
if (hauteur_deg<0)
//Soleil sous l'horizon
{
mode_nuit=1;
//Si le Soleil est sous l'horizon, c'est la nuit
}
else
//Soleil au dessus de l'horizon
{
mode_nuit=0;
//Si le Soleil est au dessus de l'horizon, c'est le jour
}
//Détermination de l'angle que doit avoir le panneau en hauteur (perpendiculaire au Soleil)
consigne_hauteur=90-hauteur_deg;
//Élimination des zones impossibles à atteindre en hauteur (limite du support mécanique)
if (consigne_hauteur<=0)
{
consigne_hauteur=0;
}
if (consigne_hauteur>=63)
{
consigne_hauteur=63;
}
//Détermination de l'azimut du Soleil
azimut_rad=acos((sin(delta_rad)-sin(hauteur_rad)*sin(latitude_rad))/(cos(hauteur_rad)*cos(latitude_rad)));
azimut_deg=rad_to_deg(azimut_rad);//Appel de la fonction de conversion
if (angle_hor_deg<=0)
{
azimut_deg=azimut_deg;
}
if (angle_hor_deg>0)
{
azimut_deg=360-azimut_deg;
}
//Élimination des zones impossibles à atteindre en azimut (limite du support mécanique)
consigne_azimut=azimut_deg;
if (consigne_azimut<=58)
{
consigne_azimut=58;
}
if (consigne_azimut>=322)
{
consigne_azimut=322;
}
//Contrôle du vérin hauteur (asservissement en position)
hauteur_verin_ENABLE=1;
//Activation du pont en H hauteur
azimut_verin_ENABLE=0;
//Désactivation du pont en H azimut
position_hauteur=lecture_pot_hauteur();
erreur_hauteur=consigne_hauteur-position_hauteur;
//Calcul de l'erreur
erreur_hauteur_abs=fabs(erreur_hauteur);
//Valeur absolue de l'erreur
while (erreur_hauteur_abs>0.3)
//Boucle de correction de la position (hauteur)
{
PWM(erreur_hauteur_abs);
//Appel de la fonction PWM pour fixer le duty cycle
position_hauteur=lecture_pot_hauteur();
erreur_hauteur=consigne_hauteur-position_hauteur;
//Calcul de l'erreur
70
if (erreur_hauteur<0)
//Consigne < mesure -> Panneau doit baisser
{
erreur_hauteur_abs=-erreur_hauteur;
verin_INa=1;
verin_INb=0;
}
if (erreur_hauteur>=0)
//Consigne > mesure -> Panneau doit monter
{
erreur_hauteur_abs=erreur_hauteur;
verin_INa=0;
verin_INb=1;
}
}
hauteur_verin_ENABLE=0;
azimut_verin_ENABLE=0;
verin_INa=0;
verin_INb=0;
//Désactivation du pont en H hauteur
//Désactivation du pont en H azimut
//Désactivation de la sortie INa des ponts en H
//Désactivation de la sortie INb des ponts en H
//Contrôle du vérin azimut (asservissement en position)
consigne_azimut=consigne_azimut;
hauteur_verin_ENABLE=0;
//Désactivation du pont en H hauteur
azimut_verin_ENABLE=1;
//Activation du pont en H azimut
position_azimut=lecture_pot_azimut();
erreur_azimut=consigne_azimut-position_azimut;
//Calcul de l'erreur
erreur_azimut_abs=fabs(erreur_azimut);
//Valeur absolue de l'erreur
while (erreur_azimut_abs>0.3)
//Boucle de correction de la position (hauteur)
{
PWM(erreur_azimut_abs);//Appel de la fonction PWM pour déterminer le duty cycle
position_azimut=lecture_pot_azimut();
erreur_azimut=consigne_azimut-position_azimut;
//Calcul de l'erreur
if (erreur_azimut<0) //Consigne < mesure -> Panneau doit tourner antihoraire
{
erreur_azimut_abs=-erreur_azimut;
verin_INa=1;
verin_INb=0;
}
if (erreur_azimut>=0)
//Consigne > mesure -> Panneau doit tourner horaire
{
erreur_azimut_abs=erreur_azimut;
verin_INa=0;
verin_INb=1;
}
}
hauteur_verin_ENABLE=0;
//Désactivation du pont en H hauteur
azimut_verin_ENABLE=0;
//Désactivation du pont en H azimut
verin_INa=0;
//Désactivation de la sortie INa des ponts en H
verin_INb=0;
//Désactivation de la sortie INb des ponts en H
//Gestion du mode Périodique
if (selecteur_periodique==1)
//Si on est en mode Périodique plutôt que Continu
{
DEL_inutilisee=1;
temps_ecoule=0;
//Mise à zéro de l'indicateur de temps écoulé
while (temps_ecoule==0 && selecteur_periodique==1) //Temps pas écoulé -> boucle
{
for(k=0;k<147;k++)
{
if (selecteur_periodique==0)
{
DEL_inutilisee=0;
break;
//Switch en Continu, on quitte la boucle
}
Delay10KTCYx (255);//iteration x 255 x 10 000 cycles
}
temps_ecoule=1;
//Le temps est écoulé, on quitte
DEL_inutilisee=0;
}
}
}
}
}
}
71
/*---------------------------------------------------------------------------------------------------DÉFINITION DES FONCTIONS
----------------------------------------------------------------------------------------------------*/
//Définition de la fonction de conversion des radians en degrés
float rad_to_deg(float radian)
{
float degre;
degre=radian*57.29577;
return degre;
}
//Définition de la fonction de conversion des degrés en radian
float deg_to_rad(float degre)
{
float radian;
radian=degre/57.29577;
return radian;
}
//Définition de la fonction de détermination du numéro du jour dans l'année
int
numero_du_jour(int jour,int mois)
{
int numero;
numero=jour+31*(mois-1);
if (mois<3)
numero=numero;
else
numero=numero-(4*mois+23)/10;
return numero;
}
//Définition de la fonction de la vitesse (duty cycle) du PWM
void PWM (float erreur_absolue)
{
if (erreur_absolue>=30)
{
CCPR1L=255;
}
if (erreur_absolue<30 && erreur_absolue>5)
{
CCPR1L=3.4*erreur_absolue+153;
}
if (erreur_absolue<=5)
{
CCPR1L=170;
}
TMR2=0;
PIR1bits.TMR2IF=0;
T2CONbits.TMR2ON=1;
while(PIR1bits.TMR2IF==0);
}
//Valeur du PWM = 255 (12 volts au vérin)
//Valeur du PWM = pente (12 à 8 volts au vérin)
//Valeur du PWM = 170 (8 volts au vérin)
//Reset le timer2
//Reset le flag du timer2
//Start le timer2
//Attente de la fin de la période
//Définition de la fonction de lecture du potentiomètre hauteur
float lecture_pot_hauteur ()
{
float position_h,volt_h;
ADCON0=0b00000101;
//Sélection de AN1, start du module A/D
ADCON0bits.GO=1;
//Début de la conversion analogique->numérique
while(ADCON0bits.DONE==1);
//Attente de la fin de la conversion
position_hauteur_adc=(ADRESH*256+ADRESL);
//Fusion des 2 registres 8 bits en une donnée 10 bits
volt_h=position_hauteur_adc*3.28/1023;
//Conversion de l'ADC en tension équivalente
position_h=((1.6349)*volt_h*volt_h*volt_h)-((15.597)*volt_h*volt_h)+
((53.799)*volt_h)-1.6976;
//Conversion de la tension en degrés
return position_h;
//Retour d'une position en degrés
}
//Définition de la fonction de lecture du potentiomètre azimut
float lecture_pot_azimut ()
{
float position_a,volt_a;
72
ADCON0=0b00001001;
ADCON0bits.GO=1;
while(ADCON0bits.DONE==1);
position_azimut_adc=(ADRESH*256+ADRESL);
volt_a=position_azimut_adc*3.28/1023;
position_a=92.73*volt_a+46.73;
return position_a;
//Sélection de AN2, start du module A/D
//Début de la conversion analogique->numérique
//Attente de la fin de la conversion
//Fusion des 2 registres 8 bits en une donnée 10 bits
//Conversion de l'ADC en tension équivalente
//Conversion de la tension en degrés
//Retour d'une position en degrés
}
//Définition de la fonction de délais nécessaire au TX (UART logiciel)
void DelayTXBitUART(void)
{
char delay_time=63;
//delay_time=((((2*CLK)/(4*BAUD))+1)/2)-12;
Delay10TCYx (delay_time);
//Pour 9600 kbps et 25 MHz : 639.54 cycles
return;
}
//Définition de la fonction de délais nécessaire au RX (UART logiciel)
void DelayRXHalfBitUART(void)
{
char delay_time=30;
//delay_time=((((2*CLK)/(8*BAUD))+1)/2)-9;
Delay10TCYx (delay_time);
//Pour 9600 kbps et 25 MHz : 317.02 cycles
return;
}
//Définition de la fonction de délais nécessaire au RX (UART logiciel)
void DelayRXBitUART(void)
{
char delay_time=61;
//delay_time=((((2*CLK)/(4*BAUD))+1)/2)-14;
Delay10TCYx (delay_time);
//Pour 9600 kbps et 25 MHz : 637.54 cycles
return;
}
//Définition de la fonction de délais longs
void Delay(int iteration)
{
char j;
for(j=0;j<iteration;j++)
{
Delay10KTCYx (255);
}
return;
}
//iteration x 250 x 10 000 cycles = iteration x 0.408 seconde (@25 MHz)
73
Annexe 3 (Code Visual Basic du simulateur GPS)
Interface de la simulation du GPS :
Figure 50 : Simulation du GPS avec Visual Basic
Code de la simulation du GPS :
Initialisation de Visual Basic :
Private Sub cmdSend_Click()
MSComm.Output = txtString.Text
MSComm.Output = ","
MSComm.Output = txtTime.Text
MSComm.Output = ","
MSComm.Output = txtStatus.Text
MSComm.Output = ","
MSComm.Output = txtLat.Text
MSComm.Output = ","
MSComm.Output = txtNSInd.Text
MSComm.Output = ","
MSComm.Output = txtLong.Text
MSComm.Output = ","
MSComm.Output = txtEWInd.Text
MSComm.Output = ","
MSComm.Output = txtSOG.Text
MSComm.Output = ","
MSComm.Output = txtCOG.Text
MSComm.Output = ","
MSComm.Output = txtDate.Text
MSComm.Output = ","
MSComm.Output = txtMVar.Text
MSComm.Output = ","
MSComm.Output = txtCheckS.Text
End Sub
Ce programme nécessite une petite manipulation
afin de fonctionner sur un logiciel Visual Basic
nouvellement installé :
Private Sub Form_Load()
If MSComm.PortOpen = False Then
MSComm.PortOpen = True
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm.PortOpen = True Then
MSComm.PortOpen = False
End If
End Sub
-
Dans le menu Project, sélectionner
Components… (CTRL-T).
Cocher Microsoft Comm Control 6.0
La réouverture du logiciel peut être
requise afin de simplifier l’utilisation.
Par la suite, le bon port COM doit être
sélectionné.
Autres informations :
Il ne faut pas oublier que le temps donné par un
récepteur GPS est le temps UTC. De plus, pour
avoir un véritable simulateur, il faudrait que ce
programme envoie automatiquement la trame
$GPRMC à chaque seconde. Cependant, pour ce
projet, l’envoi de commande manuelle est ce qui
convient le plus.
74
Annexe 4 (Éléments abandonnés)
Cette section contient les éléments qui ont été abandonnés au cours du projet.
L’accéléromètre MMA7660FCT : Il y a plusieurs raisons qui ont mené au choix de l’accéléromètre.
Dans un premier temps, l’accéléromètre utilise la technologie I2C pour la communication. Il a une
consommation de courant très basse et il opère avec de basses tensions. Le système entier devra être
facilement transportable sur des chemins forestiers, alors la robustesse des pièces est un atout important.
L’accéléromètre choisi résiste à 10000g de choc. Pour ce qui est du prix, il est d’environ 4 $. La pièce est
conçue pour fonctionner sur trois axes, mais seuls deux axes auraient été utilisés dans ce projet vu
l’absence de la partie mécanique sur le troisième axe. En effet, comme cet accéléromètre n’aurait été
utilisé que pour le paramètre hauteur du système de coordonnées horizontales, seuls deux des trois axes
sont nécessaires afin de déterminer l’inclinaison du panneau (figure 51). L’accéléromètre a été abandonné
en cours de projet, car la rétroaction par potentiomètre du vérin de la hauteur lui a été préférée étant donné
sa simplicité et sa robustesse, en plus de la nécessité d’avoir une certaine longueur de câble que la
technologie I2C n’aurait peut-être pas été capable d’apporter.
Figure 51 : Position et utilisation de l’accéléromètre sur 2 axes
Il est possible de constater la très petite taille de la pièce sur la figure qui suit.
Figure 52 : Accéléromètre
75
Le magnétomètre HMC5883L-TR : Comme pour l’accéléromètre, le magnétomètre numérique
trois axes communique avec l’interface numérique I2C pour ainsi uniformiser la façon de communiquer.
Celui-ci fonctionne aussi avec de basses tensions et consomme très peu de courant. Malheureusement,
tout comme les boussoles magnétiques manuelles utilisées pour le plein-air sont affectées par les champs
magnétiques extérieurs ainsi que par les métaux porteurs de flux magnétiques, le magnétomètre y est
sensible. Il peut, par contre, être utilisé dans des champs magnétiques assez importants en gardant une
précision de 1 à 2 degrés. Comme la monture mécanique et l’endroit où le système risque d’être installé
seront en grande majorité composés essentiellement de métaux, cette dernière caractéristique est très
importante. Le prix de la pièce est d’environ 4 $. Bien qu’il ait été implanté matériellement sur le circuit
imprimé, le magnétomètre n’a pas été ajouté au code du microcontrôleur. Si le promoteur veut ajouter
cette section, il devra donc déplacer la boîte assez loin d’une grosse structure de métal, tout en s’assurant
qu’elle a la même direction que le support mécanique.
Figure 53 : Magnétomètre HMC5883L-TR
Schématiques pour les plaquettes de test
Pour être capable de tester la communication (I2C et réglages de la puce) du magnétomètre avec le
microcontrôleur, il faut faire un montage préliminaire de tests. Quelques composantes sont ajoutées pour
le bon fonctionnement de la puce. Les condensateurs de découplage sont insérés pour enlever les
oscillations engendrées par la commutation. Les valeurs des condensateurs sont calculées par le
manufacturier pour filtrer les pointes causées par la commutation. La plaquette de test est conçue pour
être adaptée aux plaquettes de prototypage rapide fabriquées à l’UQAC. Les bornes J1, J2 et J3
concordent donc avec celles présentes sur les plaquettes de prototypage.
76
Figure 54 : Schéma électrique du PCB de test pour le magnétomètre numérique
Pour l’accéléromètre, le principe est le même que pour le magnétomètre.
Figure 55 : Schéma électrique du PCB de test pour l’accéléromètre
77
Plaquettes de test (PCB) :
Une fois les schémas électriques réalisés, il faut utiliser le logiciel Altium Designer Release 10 afin de
pouvoir créer un fichier qui permettra d’obtenir une version physique du circuit imprimé. Ces derniers
sont tels que les deux figures suivantes, soit un pour le magnétomètre et un pour l’accéléromètre.
Figure 56 : Plaquette de test du magnétomètre
Figure 57 : Plaquette de test de l’accéléromètre
78
Les circuits imprimés ont été reçus et les composantes soudées. Voici des images des circuits réalisés
pour faire les tests de communications.
Figure 58 : Plaquette du magnétomètre avant et après le soudage
Figure 59 : Plaquette de l’accéléromètre avant et après le soudage
79
Annexe 5 (Procédure de fonctionnement)
Afin d’utiliser correctement le prototype réalisé dans ce projet, voici les éléments à considérer :
Le prototype électrique doit être alimenté par une tension continue de 12 volts.
Il est important de remettre les deux connecteurs circulaires au bon endroit après qu’ils aient dû être
déconnectés.
L’interrupteur #1 (SW1, On/Off) permet de mettre le circuit sous tension en appliquant la tension 12 volts
à l’ensemble du système. Une diode électroluminescente verte (DL1) doit alors allumer pour indiquer que
le système est sous tension.
L’interrupteur #2 (SW2, Transport) permet d’activer le mode «Transport». Lorsque ce mode est activé
(1), le panneau se positionne afin qu’il soit le plus compact possible. En effet, l’axe de la hauteur devient
complètement à plat (0°), alors que l’axe de l’azimut s’oriente plein Sud (180°). Une diode
électroluminescente rouge (DL3) doit alors allumer. Lorsque la position est atteinte, l’alimentation du
système peut être coupée. Pour retourner en mode régulier, il s’agit uniquement de remettre l’interrupteur
en position normale (0).
L’interrupteur #3 (SW3, Mode) permet d’activer le mode «Périodique». Lorsque cet interrupteur est
activé (1), un délai est inséré entre chaque déplacement. Ceci permet de déplacer le système seulement
après une certaine période de temps, plutôt que continuellement. Il faut noter que la fermeture de
l’interrupteur (0) permettra à tout instant de retourner en déplacement continu. Une diode
électroluminescente jaune (DL2) allume lorsque le système est en attente.
Une diode électroluminescente verte (DL4), située près du récepteur GPS, clignote lorsque ce dernier
dispose d’un signal valide. L’absence d’un clignotement signifie que le récepteur n’a pas encore acquis
suffisamment de données pour fixer une position ou que le signal des satellites GPS ne parvient pas au
récepteur. Jusqu’à 15 minutes peuvent être nécessaires si le prototype n’a pas été utilisé dans les derniers
180 jours ou si la pile a été enlevée temporairement. Finalement, la présence de cette pile est absolument
nécessaire au bon fonctionnement du récepteur GPS.
80
Annexe 6 (Diagramme de décision)
Figure 60 : Diagramme de décision, partie 1
81
Figure 61 : Diagramme de décision, partie 2
82
Téléchargement