N° d’ordre 98 ISAL 0106 1998 THESE présentée DEVANT L’INSTITUT NATIONAL DES SCIENCES APPLIQUEES DE LYON pour obtenir LE GRADE DE DOCTEUR FORMATION DOCTORALE : génie électrique ECOLE DOCTORALE : Electronique, Electrotechnique, Automatique PAR Philippe FOUSSIER Ingénieur INSA Contribution à l’intégration des systèmes de commande des machines électriques à courant alternatif Soutenu le 10 décembre devant la Commission d’Examen Jury MM. Nacer ABOUCHI Jordi CARRABINA Jean-Pierre CHANTE Richard GRISEL Xavier JORDÁ Bruno MAURICE Javier UCEDA Michel ROBERT examinateur codirecteur codirecteur rapporteur examinateur examinateur examinateur rapporteur Cette Thèse a été préparée au Laboratoire CEGELY de l’INSA de LYON et au Département d’Informatique de l’Université Autonome de Barcelone rien 2 liste prof 1 3 liste prof 2 4 liste ecole doctorale 5 rien 6 liste formations 7 rien 8 Avant-propos Le travail présenté ici a été réalisé au sein de trois laboratoires différents: le Centre de Génie Electrique de l’Institut de Sciences Appliquées de Lyon (CEGELY - INSA), le Centre National de Microelectronique de Barcelone (CNM) et le département d’informatique de l’Université Autonome de Barcelone (UAB). La diversité des approches scientifiques et les différences culturelles et linguistiques ont été une expérience enrichissante et passionante. Ma première pensée s’adresse à tous ceux qui ont soutenu et contribué activement à cet échange. Je tiens à leur exprimer ma profonde gratitude. Monsieur Jean-Pierre Chante, Professeur à l’INSA de Lyon, a été à l’origine de ce projet. Son aide et son soutien m’ont été précieux. Je tiens à le remercier pour m’avoir encadré et permis de passer en Espagne des moments inoubliables. Mes plus vifs remerciements s’adressent aussi à Monsieur Jordi Carrabina, Maître de Conférence à la UAB, pour avoir assuré la codirection de la thèse pendant mes nombreux séjours en Catalogne. Je garde de très bons souvenirs de nos nombreuses discussions aux sujets si variés... Je suis honoré que Monsieur Richard Grisel¸ Professeur à l’Université d’Amiens et Monsieur Michel Robert, Professeur à l’Université Montpellier II, aient accepté d’être rapporteur de cette thèse. Je les remercie en particulier pour leurs remarques judicieuses. A Monsieur Nacer Abouchi, Maître de Conférence à l’Ecole de Physique Chimie et Electronique de Lyon (CPE), je désire exprimer toute ma reconnaissance pour avoir révisé ce manuscrit et pour son aide lors de la rédaction. Pour leur participation au Jury, je remercie Monsieur Bruno Maurice¸ Ingénieur d’application chez STM, et Monsieur Javier Uceda, Professeur à l’Université Polytechnique de Madrid. 9 Merci aussi à Monsieur Xavier Jordá, chercheur au CNM¸ pour son aide¸ sa disponibilité et ses conseils précieux, en particulier concernant la commande des machines asynchrones; sans lui, cette thèse ne serait pas ce qu’elle est. Finalement, je tiens aussi à citer tous les chercheurs, personnels et étudiants que j’ai rencontrés dans les différents laboratoires. Pour certains, le souvenir de la découverte de l’Espagne leur est attaché, pour d’autres, leurs conseils et les intéressantes discussions techniques m’ont permis de surmonter les difficultées rencontrées. A tous, ma reconnaissance est assurée. Aux administrateurs réseaux, Denise, Josep et Ramon, j’adresse un merci à part car leur aide m’a grandement facilité la tâche. Un grand merci aussi à Pascal Bevilacqua pour sa collaboration au développement des cartes de prototypage. Merci enfin à tous ceux qui, de près ou de loin, ont contribué au succès de cette thèse. 10 « Où sont les billes? répéta Saphir. - J’ai une bougie qui ne donne pas, remarqua Wolf. - Qui a gagné Waterloo ? » interjecta, sans prévenir, le sénateur Dupont, coupant la parole à Lil. Ce qui créa un second silence car ce n’était pas prévu au programme. En manière de parade, les voix conjuguées de Lil et de Folavril s’élevèrent. « Honni soit qui mal y pense... affirmèrent-elles avec un grand calme. - Et les vaches seront ourlées au mètre, deux fois », répondirent en canon perfectionné, Saphir et Wolf. Pourtant, ils pensaient visiblement à autre chose, car leurs paires d’yeux avaient cessé d’être assorties. Boris Vian, « L’herbe rouge » An meine Eltern A mes parents 11 12 Table des matières Table des matières 13 Table des figures 17 Introduction générale 21 1 Chaîne d’entraînement et fonctions génériques de la commande 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 La chaîne d’entraînement . . . . . . . . . . . . . . . . . . . . 1.2.1 Les dispositifs . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Les modèles pour la commande . . . . . . . . . . . . 1.3 La commande . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Les fonctions génériques de commande . . . . . . . . 1.3.2 Considérations théoriques . . . . . . . . . . . . . . . . 1.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 26 30 31 31 35 38 2 Méthodologies d’implantation d’une fonctionnalité:état de l’art 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Méthode courante pour la conception système . . . . . . . . 2.3 Implantation de la commande de machines électriques AC . 2.3.1 l’intégration applicative . . . . . . . . . . . . . . . . . 2.3.2 L’étude de l’intégration système . . . . . . . . . . . . 2.4 La conception mixte matériel/logiciel . . . . . . . . . . . . . 2.4.1 Détail de la méthode . . . . . . . . . . . . . . . . . . . 2.4.2 Les outils de conception mixte . . . . . . . . . . . . . 2.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 40 43 43 44 46 48 59 63 3 Élaboration d’une méthodologie d’implantation des commandes de moteurs AC 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Localisation et formulation des problèmes spécifiques à la commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Les spécifications floues . . . . . . . . . . . . . . . . . . . 3.2.2 Partitionnement et séquencement . . . . . . . . . . . . . 3.2.3 Le test fonctionnel . . . . . . . . . . . . . . . . . . . . . . 13 65 65 67 67 68 70 3.3 3.4 3.5 3.6 3.2.4 Résumons . . . . . . . . . . . . . . . . . . . . . . . . . . Les spécifications restrictives . . . . . . . . . . . . . . . . . . . 3.3.1 L’arithmétique . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Les ressources et l’architecture système . . . . . . . . . Traitement théorique des problèmes évoqués . . . . . . . . . . 3.4.1 Modélisation de la commande . . . . . . . . . . . . . . 3.4.2 Spécification des temps de la commande . . . . . . . . 3.4.3 Spécification de la précision de calcul de la commande 3.4.4 Le test fonctionnel . . . . . . . . . . . . . . . . . . . . . Méthodologie d’intégration de la commande . . . . . . . . . . 3.5.1 les langages de modélisation . . . . . . . . . . . . . . . 3.5.2 Le flux de conception . . . . . . . . . . . . . . . . . . . . Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Implantation de la méthodologie: Solution à base de Grafcet 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Le Grafcet comme modèle en vue de l’intégration . . . . 4.2.1 Rappel des principales caractéristiques du Grafcet 4.2.2 Interprétation du Grafcet . . . . . . . . . . . . . . 4.2.3 Restrictions à la modélisation par Grafcet . . . . . 4.2.4 Survol d’autres langages synchrones . . . . . . . . 4.3 Analyse des modèles Grafcet . . . . . . . . . . . . . . . . 4.3.1 Partitionnement matériel/logiciel . . . . . . . . . 4.3.2 Analyse architecturale . . . . . . . . . . . . . . . . 4.3.3 Estimation de performances . . . . . . . . . . . . . 4.4 Synthèse de code . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Synthèse du script MATLAB . . . . . . . . . . . . 4.4.2 Affinement des spécifications . . . . . . . . . . . . 4.4.3 Synthèse du code VHDL . . . . . . . . . . . . . . . 4.4.4 Synthèse de code logiciel . . . . . . . . . . . . . . 4.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Implantation du contrôle vectoriel d’un moteur asynchrone 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Les enjeux de la conception des systèmes de commande . 5.3 Intégration de la commande vectorielle . . . . . . . . . . 5.3.1 Spécification du système de commande . . . . . . 5.3.2 Vérification fonctionnelle . . . . . . . . . . . . . . 5.3.3 Partitionnement et estimation . . . . . . . . . . . . 5.3.4 Synthèse mixte . . . . . . . . . . . . . . . . . . . . 5.4 Résultats des test expérimentaux . . . . . . . . . . . . . . 5.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusion générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 71 72 72 73 73 74 74 75 80 81 83 86 . . . . . . . . . . . . . . . . 91 91 92 93 94 98 99 100 100 100 107 108 109 109 109 110 110 . . . . . . . . . 111 111 113 113 113 121 125 129 133 136 139 14 Bibliographie 146 Annexes 146 A Définitions 147 B Exemple de commande vectorielle B.1 Le contrôle vectoriel . . . . . . . . . . . . . . . . B.1.1 Le modèle de la machine asynchrone . . B.1.2 La commande par flux rotorique orienté . B.2 La MLI vectorielle . . . . . . . . . . . . . . . . . . B.2.1 Description de l’algorithme . . . . . . . . B.2.2 Calcul des instants de commutation . . . B.2.3 Limites de validité de la MLI vectorielle . B.2.4 Méthode de limitation . . . . . . . . . . . B.2.5 Modification de la commande . . . . . . . B.3 Schéma bloc de l’algorithme de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C Paramètres du moteur 4 kW 151 151 152 159 164 164 169 169 170 170 171 175 D L’algorithme CORDIC D.1 L’algorithme CORDIC classique . . . . . . . . . . . . . . . . . . D.2 Le CORDIC binaire . . . . . . . . . . . . . . . . . . . . . . . . . D.3 L’algorithme CORDIC généralisé . . . . . . . . . . . . . . . . . D.4 La normalisation des résultats . . . . . . . . . . . . . . . . . . . D.5 Extension des limites de convergence . . . . . . . . . . . . . . D.5.1 Extension des limites de convergence de la rotation . . D.5.2 Extension des limites de convergence du mode linéaire D.5.3 Précision du CORDIC étendu . . . . . . . . . . . . . . . . . . . . . . . E Simulation sous Ptolemy 177 177 179 181 183 185 185 186 190 195 F Traitement des mesures et consignes F.1 Acquisition des échantillons analogiques F.1.1 Valeur des courants statoriques . . F.1.2 Valeur de la consigne de couple . . F.1.3 Calcul de la mesure de tension . . F.2 Mesure de la vitesse . . . . . . . . . . . . . 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 199 200 200 200 201 16 Table des figures 1 chaîne d’entraînement électrique à moteur AC . . . . . . . . . . 22 1.1 1.2 26 1.3 1.4 1.5 1.6 1.7 1.8 1.9 onduleur à trois bras . . . . . . . . . . . . . . . . . . . . . . . . . tension MLI entre deux phases du moteur avec fondamental de tension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . interrupteur de puissance avec IGBT et diode . . . . . . . . . . exemple de période de commutation avec temps mort . . . . . moteur AC asynchrone à cage d’écureuil . . . . . . . . . . . . . exemple de hiérarchie de commande . . . . . . . . . . . . . . . structure de la commande . . . . . . . . . . . . . . . . . . . . . . exemple de contrôle constant . . . . . . . . . . . . . . . . . . schéma de principe d’un contrôle vectoriel . . . . . . . . . . . . 27 27 28 29 32 34 36 37 2.1 2.2 2.3 2.4 2.5 2.6 ALU de 32 bits . . . . . . . . . . . . . . . . . . . . . . Méthode de conception mixte générique . . . . . . . Spécification fonctionnelle . . . . . . . . . . . . . . . Exploration de l’espace des solutions de réalisation Synthèse mixte . . . . . . . . . . . . . . . . . . . . . . outils de conception testés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 47 48 51 56 60 3.1 3.2 3.3 3.4 Méthode générique de conception mixte selon Gajski-Vahid Architecture du système de commande . . . . . . . . . . . . cosimulation sous MATLAB . . . . . . . . . . . . . . . . . . . Flux de conception d’un système de commande . . . . . . . . . . . . . . . 66 73 84 87 4.1 Modélisation d’un branchement OU par réseau de Pétri et par Grafcet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de modélisation par Grafcet . . . . . . . . . . . . . . . Modèle Grafcet avec branchement ET . . . . . . . . . . . . . . . Formalisme de condition sur une action en Grafcet . . . . . . . . Implantation d’actions concurrentes . . . . . . . . . . . . . . . . Inférence de registres . . . . . . . . . . . . . . . . . . . . . . . . . Génération de logique combinatoire . . . . . . . . . . . . . . . . Implantation d’actions concurrentes . . . . . . . . . . . . . . . . Implantation d’un «indice matériel» . . . . . . . . . . . . . . . . 93 97 98 99 103 104 104 105 105 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 17 . . . . . . . . . . . . . . . . . . . . . . . . 4.10 Duplication d’une fonction . . . . . . . . . . . . . . . . . . . . . 4.11 Fusion de deux bus . . . . . . . . . . . . . . . . . . . . . . . . . . 106 106 5.1 5.2 5.3 5.4 5.5 112 114 116 118 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 Méthodologie de conception mixte . . . . . . . . . . . . . . . . . Banc de test de la commande du moteur asynchrone . . . . . . . Topographie du système de commande . . . . . . . . . . . . . . Schéma bloc de l’algorithme de commande . . . . . . . . . . . . Simulation de l’évolution des grandeurs caractéristiques du moteur en fonction du temps (en s) lors d’un démarrage . . . . . . Défluxage du moteur (fonction du temps en s) . . . . . . . . . . Grandeurs caractéristiques du moteur en fonction du temps (s) pour deux périodes d’échantillonnage différentes . . . . . . . . Modèle de spécification de la commande . . . . . . . . . . . . . Modèle de spécification du bloc MLI . . . . . . . . . . . . . . . . Évolution des grandeurs caractéristiques du moteur en fonction du temps (s) pendant un démarrage:simulation du modèle de compréhension (gauche) et de spécification (droite) . . . . . . . Évolution du couple et de la consigne de flux en fonction du temps (s):simulation du modèle de compréhension (gauche) et de spécification (droite) . . . . . . . . . . . . . . . . . . . . . . . . Simulation de la MLI et génération des impulsions . . . . . . . . Architecture de l’ASIC de commande . . . . . . . . . . . . . . . Diagramme des signaux du TLC0831 . . . . . . . . . . . . . . . . Synoptique de la carte de prototypage . . . . . . . . . . . . . . . Signaux de commande d’un bras de l’onduleur . . . . . . . . . . Temps mort en fonction de la période d’horloge . . . . . . . . . Courant à la sortie de l’onduleur, filtré à 50Hz . . . . . . . . . . B.1 commande de la machine asynchrone dans le repère . . . . . B.2 Transformée en Z d’un processus du premier ordre régulé par un PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.3 Estimation de la constante de temps rotorique . . . . . . . . . . B.4 Onduleur idéal a trois bras . . . . . . . . . . . . . . . . . . . . . . B.5 Vecteurs de tension statorique dans le plan . . . . . . . . . . B.6 Principe de construction du vecteur de tension statorique . . . . B.7 Algorithme pour déterminer le secteur angulaire . . . . . . . . . B.8 Séquences MLI en fonction du secteur angulaire (repéré par ) . B.9 Méthode anti-dérive Franklin-Powell . . . . . . . . . . . . . . . B.10 Schéma bloc de l’algorithme de commande . . . . . . . . . . . . D.1 Résultats partiels d’une rotation CORDIC simulée sur MATLAB D.2 Fonctions calculées par l’algorithme CORDIC généralisé . . . . D.3 Simulation du CORDIC (trait plein) en mode rotation par rapport à une rotation réelle (trait hachuré) . . . . . . . . . . . . . . D.4 Précision des rotations CORDIC . . . . . . . . . . . . . . . . . . 18 119 120 122 123 124 126 127 128 130 132 134 135 135 136 161 161 164 166 167 167 168 170 171 173 180 182 186 187 D.5 Pourcentage d’erreur commis par le CORDIC étendu sur la multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.6 Simulation de la division avec le CORDIC étendu . . . . . . . . D.7 Erreur sur la division incluant l’erreur de quantification . . . . . D.8 Erreur sur la division sans l’erreur de quantification . . . . . . . 192 193 193 193 E.1 E.2 E.3 E.4 E.5 E.6 196 196 197 197 198 198 Schéma bloc de l’asservissement du processus . Schémas blocs sous Ptolemy du système asservi Schémas blocs sous Ptolemy du système asservi Schémas blocs sous Ptolemy du système asservi Perturbation . . . . . . . . . . . . . . . . . . . . Réponse temporelle du système asservi . . . . . 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Introduction générale Ce travail de thèse s’inscrit dans le cadre d’une collaboration entre le Département d’Informatique de l’Université Autonome de Barcelone (UAB) et le Centre de Génie Électrique de Lyon sur le site de l’Institut National de Sciences Appliquées (CEGELY - site INSA). L’objectif de cette collaboration est de mettre en commun des compétences complémentaires afin d’étudier l’implantation des algorithmes de commande des machines électriques AC 1 . Le projet de Recherche issu de cette collaboration a été cofinancé par le ministère des Affaires Étrangères dans le cadre des projets Hispano-Français «Picasso». Avant de poursuivre, nous incitons le lecteur à se reporter aux définitions que nous donnons de certains termes utilisés dans ce document (annexe A) afin d’éviter toute confusion. Introduction à la mise en oeuvre des algorithmes de commande Avant même de parler de la mise en oeuvre des algorithmes de commande, introduisons d’abord le domaine de la variation de vitesse par chaîne d’entraînement électrique. On estime dans nos pays industrialisés qu’environ 60 à 70% de l’énergie électrique produite est consommée par les moteurs électriques et que de ceuxci, environ 20% fonctionnent en vitesse variable. Pendant de nombreuses années, le moteur à courant continu a été privilégié pour les applications à vitesse variable en raison de la simplicité de sa commande et donc de sa mise en oeuvre. Mais ce moteur pose un certain nombre de problèmes. En dehors d’un coût important dû à sa structure complexe, ce moteur a des limitations technologiques (limitation en puissance et vitesse, création d’étincelles, usure des balais ...etc.) qui le rendent inadapté à certaines applications (train à grande vitesse, milieu avec risque d’explosion, ...etc.). Les moteurs à courant alternatif (synchrones, asynchrones, à reluctance variable, ...etc.) ne présentent pas de telles limitations. D’un coût moindre, ils 1. Alternative Current 21 sont robustes et fiables et peuvent supporter de très fortes puissances et de très hautes vitesses. Par contre, il faut les alimenter avec un convertisseur statique à tension et fréquence variables pour pouvoir envisager leur emploi en vitesse variable (cf. Fig. 1 ). F IG . 1 – chaîne d’entraînement électrique à moteur AC Ces vingt dernières années, les progrès simultanés dans le domaine des semi-conducteurs de puissance, de la microélectronique et des outils de modélisation mathématique du comportement dynamique des machines alternatives, ont ouvert la voie à l’utilisation des machines AC. Promus par l’enjeu économique que représente l’utilisation de telles machines ainsi que par les avantages techniques, des efforts de Recherche importants ont été consacrés à la chaîne d’entraînement électrique AC. Cependant, cet effort s’est porté essentiellement sur l’architecture des moteurs, l’algorithmie de commande, la physique du semi-conducteur et les architectures de convertisseur. Quant à la mise en oeuvre de la commande, elle a surtout bénéficié des progrès de la microélectronique et de l’architecture des processeurs avec l’apparition des microcontroleurs puis des DSP. Toutefois, après des années de segmentation de la Recherche dans les trois domaines qui constituent la variation de vitesse (motorisation, conversion statique et commande), deux nouvelles orientations semblent s’imposer aujourd’hui: 1. l’étude et la conception de la chaîne d’entraînement dans son ensemble en prenant en compte les interactions des différentes parties constitutives, 22 2. l’attention accrue portée à la mise en oeuvre de la commande. Ce phénomène est dû en premier lieu au fait qu’on peut aujourd’hui estimer mathématiquement, avec une bonne précision, des paramètres qu’il fallait autrefois mesurer (lorsque c’était possible). Ainsi, on peut remplacer du matériel coûteux (capteurs) par de l’électronique bon marché ou même améliorer la qualité de la commande par la modélisation mathématique. Dans la suite de cette thèse, nous montrerons que notre travail s’inscrit dans ces orientations. Objectifs L’objectif de cette thèse est double. Nous voulons d’une part, offrir au concepteur une méthodologie et des outils lui assurant une aide lors de l’intégration de la commande, et d’autre part, appliquer cette méthodologie en intégrant un algorithme de contrôle vectoriel pour un moteur asynchrone. Dans cette optique, il s’agit de: – prendre en compte les contraintes de la mise en oeuvre dès la phase de conception algorithmique. – repousser les choix technologiques à un stade avancé de la conception afin de rester relativement indépendant de la technologie et de gagner en flexibilité au niveau du choix de la solution d’intégration. – d’éliminer certaines erreurs et d’écourter le cycle de conception grâce à une automatisation partielle des tâches. Pour atteindre cet objectif, nous avons procédé de la manière suivante: – Nous avons analysé les techniques employées pour la mise en oeuvre d’algorithmes de commande afin d’en tirer les spécificités technologiques et définir les aspects à améliorer. – Nous avons étudié l’état des techniques et outils employés en microélectronique pour la conception des systèmes complexes. – A partir des résultats précédents, nous avons proposé une méthode adaptée à la mise en oeuvre des algorithmes de commande . – Finalement, nous avons adapté certains modèles et outils classiques de l’automatisme (Grafcet, MATLAB / SIMULINK) aux contraintes spécifiques à la conception de systèmes intégrés pour permettre une implantation de la méthodologie ainsi obtenue. Le présent document s’articule principalement autour de cinq chapitres. Dans le premier, nous présentons l’application sur laquelle nous travaillons, c’est à dire la commande des machines électriques AC. On y décrit la structure d’une chaîne d’entraînement et on précise la nature de chaque élément, ses 23 caractéristiques physiques et les spécificités des modèles associés. Nous précisons également les limites de notre étude en définissant la fonctionnalité de la «commande» et ce que nous intégrerons. Dans le deuxième chapitre, nous exposons une analyse des méthodes actuelles pour l’intégration d’algorithmes. Y sont étudiées à la fois les méthodes classiques dont on expose les problèmes vis à vis des besoins actuels, mais aussi les méthodes plus avancées qui font l’objet de nombreux travaux et qui visent à apporter des solutions aux insuffisances des approches classiques. Un paragraphe à part est consacré aux travaux ayant étudié la mise en oeuvre des algorithmes de contrôle. Ce paragraphe nous permet de préciser les spécificités technologiques qu’il importait de garder à l’esprit pendant le développement de ce travail. Le troisième chapitre développe une méthodologie spécifique aux algorithmes de contrôle des machines électriques, basée sur les méthodologies dites de conception mixte matériel/logiciel. Après avoir identifié les problèmes spécifiques à l’intégration de la commande, nous proposons des solutions théoriques originales. Puis, nous décrivons les solutions pratiques mises en oeuvre et en particulier, les modèles et outils utilisés, leur emploi étant justifié par des considérations techniques. Le quatrième chapitre est consacré au Grafcet. Ce modèle classique de l’automatisme y est analysé pour servir de modèle de conception système. Nous y exposons en particulier l’interprétation que nous utilisons pour permettre une modélisation fonctionnelle des systèmes de commande. A partir de cette interprétation et de règles que nous exposons, le modèle est analysé systématiquement pour en déduire les implications sur l’intégration (analyse architecturale pour l’intégration matériel et estimation de paramètres physiques). Ces analyses permettent ensuite au concepteur de baser ses décisions sur des données tangibles. Les modèles et méthodes ayant été analysés, nous abordons finalement dans un cinquième chapitre la mise en oeuvre d’un algorithme de commande particulier. Après avoir suivi la méthodologie proposée précédemment, nous exposons les résultats des mesures effectuées sur le banc d’essai. 24 Chapitre 1 Chaîne d’entraînement et fonctions génériques de la commande 1.1 Introduction Le thème de cette thèse est principalement l’intégration optimale de la commande des machines AC. Mais, sous le terme de «commande», il est possible de regrouper bien des fonctionnalités. Aussi commençons-nous dans cette thèse par circonscrire le champ des investigations et clarifier les fonctionnalités envisagées lors de l’intégration de la «commande». Pour ce faire, nous allons décrire la chaîne d’entraînement et la commande du point de vue du concepteur de systèmes intégrés, c’est à dire que nous extrairons les propriétés physiques importantes pour l’intégration de la commande. Nous aborderons les modèles des dispositifs de la chaîne d’entraînement, utilisés par les concepteurs de la commande, en indiquant notamment les limites de ces modèles du point de vue physique. Nous décrirons également les fonctions génériques que nous considérons faire partie de la «commande» et parlerons de quelques algorithmes particulièrement répandus. Ceci nous permettra de présenter quelques éléments de la théorie du contrôle afin de mieux comprendre les blocs à intégrer. Toutefois, cette thèse n’ayant pas pour but de développer une commande particulière, nous n’entrerons pas dans les détails. Le chapitre s’articule autour de deux parties. La première décrit la chaîne de traction et les modèles associés, et la deuxième présente les fonctions génériques de la commande. 25 1.2 La chaîne d’entraînement 1.2.1 Les dispositifs Dans cette thèse, nous nous sommes limités à la commande des moteurs AC qui, comme nous l’indiquons dans l’introduction générale, nécessitent des convertisseurs statiques (onduleur et éventuellement redresseur) pour leur alimentation (cf. Fig. 1, p. 22). L’ensemble convertisseur(s)/moteur/capteurs, auquel on peut ou non ajouter l’électronique de commande, forme la chaîne d’entraînement. Le redresseur, lorsqu’il est présent, n’est pas significatif pour la commande, son rôle étant limité à transformer en permanence une tension AC monophasée de fréquence et d’amplitude constantes (ou du moins avec des fluctuations très faibles), en une tension DC constante. Les autres éléments de la chaîne d’entraînement sont indispensables à la commande, nous allons donc les présenter en détail. 1.2.1.1 L’onduleur F IG . 1.1 – onduleur à trois bras Largement décrit dans la litérature [35][40], l’onduleur a pour tâche de transformer une tension DC constante en une tension AC polyphasée de fréquence et d’amplitude variables. L’architecture de ce convertisseur se compose de plusieurs bras, connectés chacun à une phase du moteur et comportant deux interrupteurs de puissance. Ces interrupteurs découpent la tension DC d’entrée en impulsions de largeur variable; le fondamental de la décomposition en série de Fourier de ce train d’impulsions est la tension d’alimentation sur une phase du moteur (cf. Fig. 1.2). En faisant varier la largeur des impulsions (leur amplitude étant fixée par la tension d’alimentation DC), on peut modifier l’amplitude et la fréquence 26 du fondamental, donc de la tension d’alimentation du moteur. Le cas le plus fréquent est l’onduleur triphasé à trois ou quatre bras (cf. Fig. 1.1). F IG . 1.2 – tension MLI entre deux phases du moteur avec fondamental de tension Éléments de base de l’onduleur, les interrupteurs de puissance se composent, selon la puissance commutée, de GTO (Gate Turn Off), de MOS de puissance ou d’IGBT (Insulated Gate Bipolar Transistor), en parallèle avec une diode (cf. Fig. 1.3). La diode permet d’assurer la continuité du courant lors du changement de sens de celui-ci. F IG . 1.3 – interrupteur de puissance avec IGBT et diode Les caractéristiques de l’onduleur sont principalement définies par ces composants de puissance. Ceux-ci déterminent la puissance, la tension et le courant maximum commutés, la fréquence maximale de commutation et le temps mort. Ces deux dernières caractéristiques sont particulièrement importantes pour nous car elles vont beaucoup influencer la conception. La fréquence maximale de commutation est déterminée par les temps de commutation (ouverture et fermeture du composant) des interrupteurs et par le temps mort. Sur une période de commutation, un interrupteur commute au maximum deux fois: à l’ouverture et à la fermeture (cf. Fig. 1.4). Ces commutations provoquent un bruit acoustique désagréable d’où la tendance actuelle de travailler à des fréquences de commutation dans la gamme de l’inaudible (16 KHz), et donc d’utiliser des composants rapides. Le temps mort sert à prévenir les risques de court-circuit sur un bras (cf. Fig. 1.4). Ce temps, introduit entre l’ouverture d’un interrupteur et la fermeture de son complémentaire, dépend des temps de commutation. Plus ceux-ci sont 27 F IG . 1.4 – exemple de période de commutation avec temps mort faibles, et plus le temps mort pourra être réduit. Le temps mort a une influence importante sur l’entraînement car il provoque des non-linéarités de l’onduleur et donc des imprécisions sur la tension AC générée. D’autres non-linéarités de l’onduleur génèrent également des imprécisions sur la tension de sortie comme la variation des paramètres des interrupteurs avec la température de fonctionnement (temps de commutation, caractéristiques électriques), phénomène difficilement modélisable et pas du tout contrôlable. De cet onduleur, on retiendra donc deux paramètres essentiels pour la conception: la période de commutation et le temps mort. 1.2.1.2 Le moteur Le moteur AC est l’actionneur par excellence. Il sert à la régulation de couple, de vitesse ou de position selon l’emploi qu’on en fait. D’une façon générale, le moteur AC est constitué d’un rotor et d’un stator, le rotor étant la partie rotative qui entraîne l’axe et le stator la partie fixe qui supporte les bobines d’induction. Il existe une multitude d’architectures de moteurs AC selon le principe de fonctionnement retenu. On citera pour mémoire les moteurs synchrones et asynchrones, les moteurs à aimants permanents et les moteurs à reluctance, la liste n’étant pas exhaustive. Les moteurs synchrones et asynchrones restent toutefois les plus répandus. Le moteur synchrone possède un rotor alimenté par une tension continue ce qui lui permet de tourner exactement à la fréquence de synchronisme (fréquence des courants d’alimentation fois le nombre de paires de pôles) et de ne rejeter aucune puissance réactive sur le réseau. Par contre, en cas de variation brusque du couple résistant sur l’axe du moteur, comme ce moteur ne supporte que de faibles variations de sa fréquence de rotation autour de la fréquence de synchronisme, il existe un risque de «décrochage», c’est à dire que la fréquence de rotation diminue et le moteur finit par s’arrêter. Contrairement au moteur synchrone, le moteur asynchrone dispose d’un rotor en court-circuit, non alimenté. Dans les spires des induits du rotor circulent des courants induits par le champ magnétique tournant du moteur. 28 Grâce à ces courants induits, un couple s’établit sur l’axe du moteur. La vitesse de rotation est déterminée par le couple résistant et le couple moteur. En régime permanent sinusoïdal, la vitesse de synchronisme n’est jamais atteinte (d’où le terme d’asynchrone) et le moteur rejette de la puissance réactive sur le réseau. Parmi les moteurs asynchrones, le moteur à cage d’écureuil est particulièrement répandu en raison de sa structure très simple, donc robuste et facile d’entretien (cf. Fig. 1.5). F IG . 1.5 – moteur AC asynchrone à cage d’écureuil Les moteurs présentent eux aussi de nombreuses non-linéarités dues au variations paramétriques avec la température de fonctionnement et la saturation magnétique, et ce notamment en régime dynamique. Comme pour l’onduleur, ces non-linéarité entraînent des erreurs sur les grandeurs commandées (couple, vitesse ou position). Ces erreurs de commande proviennent du fait que les algorithmes de contrôle utilisent les paramètres de la machine. 1.2.1.3 Les capteurs Les capteurs font partie intégrante de la chaîne d’entraînement car sans eux, le contrôle serait impossible. Depuis les capteurs de courant jusqu’aux capteurs de vitesse ou de flux, ils permettent de mesurer les variables physiques que nécessite la commande. Comme les autres dispositifs, les capteurs présentent des limites de fonctionnement et des non-linéarités dont les concepteurs de la commande et du système intégré devront tenir compte. En particulier, il est un phénomène qui n’a rien de physique mais qu’il est tout aussi important de signaler: la quantification binaire. Par ce terme, on désigne le fait qu’une grandeur physique par essence continue et qui peut prendre un nombre infini de valeurs, doit être représentée par une variable binaire qui ne peut prendre qu’un nombre fini de valeurs. A chaque bit, on associera donc un quanta qui dépend de la dynamique de la grandeur physique et du nombre de bits de la variable binaire. Prenons un exemple: 29 Supposons qu’on veuille mesurer un courant variant entre et , soit une dynamique de . La mesure est effectuée sur 8 bits, soit valeurs possibles. Dans cette conversion, le vecteur binaire et “11111111” à . La quantifica“00000000” sera affecté à tion binaire sera donc de 1.2.2 Les modèles pour la commande Pour contrôler un dispositif, il est nécessaire d’en comprendre le fonctionnement et savoir le modéliser. Il existe deux types de modèles. D’une part les modèles de connaissance, appelés aussi intrinsèques, propres au physicien. Ce sont souvent des modèles complexes et pas du tout appropriés pour l’établissement de lois de commande. D’autre part, il existe les modèles dits extrinsèques qui reproduisent le comportement du système modélisé à partir de ses entrées/sorties. Ces modèles beaucoup plus simples permettent d’établir des lois de commande. Toutefois, le contrôle étant réalisé sur un modèle idéal des dispositifs, il faudra qu’il soit capable de corriger les erreurs par rapport au comportement réel. 1.2.2.1 Le modèle du moteur Dans le cas des machines synchrones et asynchrones qui nous sont les plus familières, le modèle le plus communément employé est le modèle dit «vectoriel» ou «de Park» [4]. Ce modèle est constitué de quatre équations différentielles électriques du premier ordre, non linéaires avec la vitesse, d’une équation différentielle mécanique de rotation et de l’équation du couple électromagnétique (cf. Annexe B). Ce modèle implique un certain nombre de simplifications (entrefer constant, saturation, hystérésis et courants de Foucault négligeables, ...etc.) qui en font un modèle de la machine idéale. 1.2.2.2 Le modèle de l’onduleur La plupart des algorithmes de contrôle reposent sur le modèle de l’onduleur idéal de tension, c’est à dire sans pertes, avec des temps de commutation nuls et sans temps mort. En fait, l’onduleur est modélisé la plupart du temps par un simple gain. Toutefois, certains algorithmes permettent de compenser l’effet des temps morts sur la tension de sortie de l’onduleur [34]. 1.2.2.3 Le modèle des capteurs A notre connaissance, les capteurs ne sont que rarement pris en compte lors de l’établissement de l’algorithme de contrôle. L’erreur qu’ils introduisent dans 30 la boucle de contrôle est compensée par les stratégies globales de correction d’erreur. 1.3 La commande Dans son acceptation électrotechnique, la commande se réduit souvent à l’algorithmie de contrôle de la chaîne d’entraînement avec éventuellement l’acquisition des mesures et des consignes. Or cette acceptation restreinte du concept de commande ne nous paraît pas adaptée à la réalité. Il est très rare de trouver une application se restreignant à une chaîne d’entraînement et l’électronique de commande intégrant seulement l’algorithme de contrôle. Dans la plupart des cas, l’entraînement n’est qu’un élément d’une application bien plus complexe. Dans ce cas, la commande doit intégrer également des blocs d’interfaçage, de mesure, de surveillance ...etc. Définir la fonctionnalité de la commande comme le seul algorithme de contrôle et se limiter à l’étude de l’intégration de ce bloc est inadapté par rapport à la réalité. Nous préférons donc définir la fonctionnalité de la commande de la chaîne d’entraînement comme l’ensemble des fonctions génériques indispensables au contrôle de l’entraînement et à son intégration dans un système plus complexe. La figure 1.6 représente notre vision de la répartition hiérarchique des tâches de commande dans une application complexe et de la place de la commande de la chaîne d’entraînement. Ceci dit, nous posons cette limitation dans le cadre de cette thèse afin de montrer que la méthodologie d’intégration que nous proposons permet de traiter des cas réels. Nous ne prétendons pas que la commande se réduit nécessairement aux seules fonctions génériques que nous décrivons maintenant. Dans la suite de ce document, lorsque nous utiliserons le terme de «commande», nous nous référerons toujours à la définition que nous en avons donné ici. 1.3.1 Les fonctions génériques de commande 1.3.1.1 Les fonctions logiques de génération des impulsions de commande de l’onduleur A partir de la valeur des instants de commutation de l’onduleur, du temps mort et de la période de commutation, ces fonctions génèrent les impulsions binaires qui commandent les interrupteurs de puissance de l’onduleur. Les fonctions sont purement logiques et n’intègrent à priori aucune fonction algorithmique. 31 F IG . 1.6 – exemple de hiérarchie de commande 32 1.3.1.2 Les fonctions algorithmiques pour le calcul des instants de commutation A ce niveau, il nous faut faire la différence entre deux blocs algorithmiques (cf. Fig. 1.7): 1. le bloc MLI 1 . Ce bloc est chargé de calculer les instants de commutation des composants de puissance de l’onduleur à partir d’une consigne de tension 2. le bloc de contrôle proprement dit qui assure les fonctions de régulation et asservissement des grandeurs physiques contrôlées. Toutefois, si nous nous trouvons dans un schéma de contrôle en boucle ouverte, aucune régulation ou asservissement n’ayant lieu, ce bloc se contente de calculer les consignes de tension pour la MLI à partir des consignes externes. 1.3.1.3 Les fonctions d’acquisition des mesures Ce bloc se charge de la communication avec les dispositifs de mesure (CAN 2 , capteur de vitesse, ...etc.) ainsi que du traitement des données binaires reçues pour les mettre au format binaire du système. Par exemple, si des mots de 8 bits sont reçus d’un CAN, il faudra ajuster ) la quantification (un bit vaut 1 en codage binaire normal et non puis passer les mots au format interne des données (p.e. 12 bits entiers sur une longueur de 16 bits). 1.3.1.4 Les fonctions logiques de surveillance En général, sur tout dispositif physique il est nécessaire d’assurer la surveillance de conditions de fonctionnement, surveillance qui n’a rien à voir avec le contrôle du dispositif. Par exemple, sur une chaîne d’entraînement, on peut vouloir surveiller que la tension d’alimentation DC de l’onduleur ne dépasse pas certains seuils ou qu’aucun court-circuit ou sur-intensité se produit dans les bras de l’onduleur. Cette surveillance relève de fonctions logiques qui doivent réagir instantanément aux signaux extérieurs et avoir une priorité absolue sur tous les autres blocs. 1.3.1.5 Le bloc logique d’interfaçage L’objet de ce bloc est généralement de recevoir des consignes externes qui commanderont l’entraînement, et de renvoyer des mesures ou des conditions logiques de fonctionnement. Dans les cas les plus simples, l’interfaçage est inexistant ou se réduit à quelques signaux pour communiquer directement avec un autre dispositif électronique. Mais l’interfaçage peut être beaucoup plus complexe et revêtir la 1. Modulation de Largeur d’Impulsions 2. Convertisseur Analogique Numérique 33 forme d’un protocole complet de communication à travers un bus partagé par une multitude de dispositifs électroniques. F IG . 1.7 – structure de la commande 1.3.1.6 Récapitulatif En résumé, la «commande» se compose de sa fonctionnalité principale (le contrôle de la chaîne d’entraînement), et de fonctions annexes. Pour les besoins de l’intégration, nous regroupons dans la suite de ce document les fonctions de 34 commande en trois groupes: 1. les fonctions algorithmiques 2. les fonctions logiques 3. les protocoles de communication Cette classification des fonctions nous sera utile lors de la spécification du système. 1.3.2 Considérations théoriques La commande des machines AC est complexe car contrairement à la machine DC, les variables d’état du système ne sont pas découplées. Autrement dit, il n’est pas possible de contrôler une grandeur de sortie de la machine (couple, vitesse ou position) en faisant varier une seule grandeur d’entrée (intensité ou tension donnée). Pour résoudre ce problème, on applique une transformation mathématique aux variables d’état de la machine AC de manière à rendre celle-ci équivalente à une machine DC, facile à contrôler. La transformation en question est la transformation dite de «Concordia» [4]: Cette transformation permet de calculer les variables d’état dans un repère dans lequel il sera facile de les découpler. Une fois découplées, on appliquera à ces variables les techniques traditionnelles de la théorie des systèmes échantillonnés afin de les réguler et de les asservir aux consignes d’entrée. Ainsi que nous l’avons déjà fait remarquer en 1.3.1.2, page 33, la commande algorithmique se compose en fait de deux blocs bien distincts: le bloc de contrôle proprement dit et le bloc MLI. Pour chacun de ces blocs, il existe plusieurs stratégies possibles, c’est à dire en fait plusieurs algorithmes, la stratégie de chacun des blocs étant choisie indépendamment. En ce qui concerne le bloc MLI, nous citerons pour référence la MLI intersective, la précalculée et la MLI vectorielle, stratégies les plus communément employées [23]. Chacun de ces algorithmes permet d’obtenir des caractéristiques différentes des tensions de sortie de l’onduleur (spectre et amplitude maximale de la tension). En ce qui concerne le bloc de contrôle, on peut distinguer deux familles d’algorithmes: les méthodes scalaires et les méthodes vectorielles [35]. Dans les paragraphes suivants, nous présentons succinctement deux algorithmes très répandus: l’algorithme scalaire en boucle ouverte dit constant et un algorithme vectoriel en boucle fermée, le FOC 3 . 3. Field Oriented Control 35 F IG . 1.8 – exemple de contrôle constant L’algorithme constant Cet algorithme fait partie de la famille des méthodes de contrôle scalaire. Le principe de ces méthodes est d’agir sur la fréquence et l’amplitude des courants ou tensions d’entrée afin de faire varier l’amplitude et la vitesse de rotation des vecteurs spaciaux (flux, tension ...etc.), et donc faire varier le couple et la vitesse de rotation du moteur. Avec l’algorithme , on s’arrange pour faire évoluer l’amplitude et la fréquence de la tension d’alimentation du moteur tel que leur rapport reste constant, ce qui permet de faire varier le couple du moteur et donc sa vitesse pour un couple résistant constant. Pour mettre en oeuvre un tel contrôle, le plus simple est de fournir la fréquence comme consigne du bloc de contrôle. Celui-ci calcule alors la tension qui sert de consigne à son tour au bloc MLI (cf. Fig. 1.8). Ce contrôle en boucle ouverte a le mérite d’être très simple à mettre en oeuvre et ne nécessite que très peu de moyens de calcul. Pour cette raison il est encore aujourd’hui très répandu. Mais la dynamique obtenue est très faible et il n’y a pas de régulation de la grandeur de sortie (couple, vitesse ou position) si bien que cet algorithme est inadapté pour beaucoup d’applications. L’algorithme vectoriel FOC Contrairement aux méthodes scalaires, les algorithmes de contrôle vectoriel permettent de faire varier non seulement l’amplitude et la vitesse de rotation des vecteurs spaciaux, mais aussi leur phase. Grâce à cela, il est possible dans certaines conditions d’agir séparément sur le flux de la machine et sur le courant responsable du couple de la même façon que pour une machine à excitation séparée. Sur la figure 1.9 nous montrons le schéma bloc d’un algorithme vectoriel FOC. Ces algorithmes permettent, pour une meilleur robustesse, de tenir compte des variations paramétriques de la commande en estimant en temps réel ces 36 F IG . 1.9 – schéma de principe d’un contrôle vectoriel 37 paramètres. Les performances atteintes par ce type de commande sont bien meilleures que pour un contrôle en boucle ouverte. Par contre, la complexité mathématique des calculs à effectuer a longtemps été un frein à leur mise en oeuvre. En Annexe B, nous présentons en détail l’algorithme de contrôle vectoriel qui nous a servi d’exemple pour cette thèse. Nous y expliquons également le principe mathématique des commandes vectorielles. 1.4 Conclusion Dans ce chapitre, nous avons décrit la chaîne d’entraînement et les caractéristiques physiques importantes pour le concepteur de l’intégration de la commande. Nous avons notamment insisté sur les non-linéarités des dispositifs en vue d’établir plus tard le degré de précision des calculs qu’il faudra atteindre. Nous avons également clairement établi les limites de notre étude en précisant ce que nous comprenions par le concept de «commande» des machines AC. En particulier, nous avons extrait différents blocs fonctionnels en précisant la tâche de chacun d’eux. Ayant donné une vision globale de l’application, nous allons pouvoir maintenant nous intéresser de plus près à l’intégration système de la commande. 38 Chapitre 2 Méthodologies d’implantation d’une fonctionnalité: état de l’art 2.1 Introduction Selon son contenu sémantique, «l’implantation de fonctionnalité» signifie fixer ou introduire une fonctionnalité dans un support physique. Par fonctionnalité, nous désignons un fonctionnement défini par un ensemble de fonctions logiques et algorithmiques (algorithme, automate, protocole de communication, ...etc.). Comme l’indique son contenu sémantique, implanter une fonctionnalité consiste bien à faire calculer les opérations et réaliser les fonctions logiques par un système physique qui se limitera ici à un système microélectronique. Depuis quelques années, la complexité croissante des fonctions à intégrer alliée à des contraintes techniques, budgétaires et temporelles toujours plus fortes (densité d’intégration, fréquence de fonctionnement, CEM 1 , consommation, coût de production, temps de conception, ...etc.), ont confronté le concepteur à des problèmes qu’il n’est plus en mesure de résoudre avec les outils classiques. Face à cette réalité, particulièrement prononcée dans le domaine des applications télécom et audio/vidéo, des projets de recherche ont été amorcés dans le but de rationaliser, systématiser et automatiser l’implantation de fonctionnalités. Dans ce chapitre, nous nous proposons de faire le tour des techniques employées pour la conception des systèmes intégrés et de présenter les nouveaux enjeux de ce domaine. Dans un premier temps, nous verrons les problèmes posés par les méthodes 1. Compatibilité Electro-Magnétique 39 classiques de la conception vis à vis de l’intégration de fonctions complexes et les enjeux des nouvelles méthodes. Puis nous analyserons les travaux effectués sur la mise en oeuvre de commandes de machines électriques et les spécificités que nous avons décelées dans ces approches. Finalement, nous présenterons une méthodologie de conception mixte logiciel/matériel générique ainsi que les travaux qui s’y rapportent. Nous montrerons comment une telle approche permet d’apporter des réponses aux besoins actuels. 2.2 Méthode courante pour la conception système Une grande quantité d’ouvrages traitent de la conception des circuits intégrés VLSI 2 [19][45][54][41]. La plupart du temps, la méthodologie en ellemême n’est guère abordée, le sujet le plus communément traité étant la conception à un niveau très bas (architecture des circuits, schémas logiques, modèles HDL 3 et synthèse logique, technologie ...etc.). Bien qu’il soit présomptueux de parler de la méthode de conception actuelle des systèmes intégrés, il est toutefois possible de trouver des points communs dans les approches de conception. Ce sont ces points que nous allons aborder dans cette section en détaillant un peu leur contenu. Nous parlerons aussi des difficultés qu’entrainent les nouvelles contraintes de conception ce qui nous permettra d’introduire des notions propres aux méthodes avancées de conception que nous expliquons plus loin dans ce chapitre. Développement algorithmique: il est d’abord intéressant de noter que le processus de développement algorithmique, c’est à dire dans le cas qui nous intéresse, de l’algorithme de commande, est dissocié de l’implantation de celui-ci sur silicium. De ce fait, la conception de l’algorithme ne tient pas compte des problèmes que pose son intégration. Une fois l’algorithme conçu, il est figé. Il n’y a pas lieu de le modifier en fonction de l’implantation. Spécification du système: avant de débuter la conception du système, un cahier des charges est établi qui fixe les caractéristiques du circuit à réaliser. En dehors des performances physiques (vitesse de calcul, surface, consommation ...etc.), on définit également les caractéristiques architecturales (nombre d’entrées/sorties, communication avec l’environnement ...etc.) et des caractéristiques d’ordre commercial (production minimale, prix unitaire, délai de conception, éventuellement fondeurs ...etc.). Cette spécification du système intervient sans savoir s’il sera réellement possible de remplir les conditions fixées ni si les conditions de l’étude de marché se maintiendront, si bien qu’il n’est pas rare que ces spécifications soient modifiées au cours du développement du fait des concepteurs qui 2. Very Large Scale Integration 3. Hardware Description Language 40 ne peuvent atteindre les objectifs fixés ou du fait du donneur d’ordre qui voit se modifier les conditions de son marché lors de la phase de développement du système. Technologie: aux concepteurs du système intégré, il revient la tâche de choisir une cible technologique. Ce choix se fait en général à priori sur des critères plus ou moins intuitifs: intégration logiciel (processeur) pour les systèmes lents, matériel (ASIC) pour les systèmes rapides. Parfois, des cibles mixtes matériel/logiciel sont prévues dès le début, en particulier si le système est complexe. Partitionnement: dès lors que le système s’avère trop complexe pour une intégration sur une cible unique, le concepteur doit faire face à toute une série de problèmes liés au partitionnement du système: définition de l’architecture (nombre de processeurs, nombre d’ASIC, capacité mémoire, nombre d’E/S,...etc.), d’un protocole de communication, du contrôle d’accès aux ressources partagées, ...etc. Afin d’éviter la complexité de ces problèmes, une stratégie communément employée est la migration d’une cible vers l’autre: soit la migration vers le matériel de tout ce qui n’a pas pu être réalisé avec le logiciel (comme par exemple la logique d’interfaçage), soit la migration vers le logiciel des tâches de surveillance (fortement séquentielles et lentes) pour dédier le matériel au calcul parallèle à haute ou très haute fréquence. Le premier cas correspondrait typiquement aux algorithmes de contrôle (électrotechnique et automatique) et le second au traitement du signal. Vérification fonctionnelle: l’intégration système pose à tout moment le problème de la vérification fonctionnelle. Il faut d’abord vérifier que ce qu’on développe correspond bien aux besoins (étape de conception algorithmique), puis que ce qu’on a intégré correspond bien à ce qu’on voulait intégrer. La solution communément employée aujourd’hui est la simulation. Toutefois, plus le système devient complexe, et plus cette approche montre ses limites avec une explosion des temps de simulation. Un exemple simple nous permet d’en mesurer l’ampleur: Supposons qu’on veuille tester une ALU commerciale de 32 bits (cf. Fig. 2.1). Avec 77 bits d’entrée, on aurait environ vecteurs d’entrée possibles. A raison de par vecteur, il faudrait simuler durant soit années!! Outils et modèles: en matière d’outils, les langages HDL avec leurs simulateurs/synthétiseurs associés et le langage C avec ses compilateurs, sont aujourd’hui largement répandus, offrant une certaine «indépendance technologique» au concepteur, c’est à dire la possibilité de synthétiser le même modèle pour différentes technologies (fondeurs et processeurs). Ces outils, associés aux outils de placement/routage, permettent aussi une automatisation des tâches qui supprime une partie des erreurs pouvant survenir à ces bas niveaux de conception et autorise le développement de systèmes dont la complexité serait impossible à traiter à la main. 41 F IG . 2.1 – ALU de 32 bits Si les points évoqués permettent de mettre en oeuvre des systèmes de complexité moyenne avec des performances et des coûts satisfaisants, il n’en est plus de même pour des fonctionnalités très complexes. Face à la complexité croissante des systèmes et aux exigences techniques, budgétaires et temporelles toujours plus contraignantes, de nouveaux enjeux apparaissent: Traiter les spécifications floues: un des nouveaux enjeux qui ne peut pas être traité par une approche classique est l’utilisation de ce que nous appellerons les «spécifications floues 4 ». Par ce terme, nous désignons toutes les spécifications qui ne sont pas parfaitement définies au début du cycle de conception et dont la définition va dépendre des résultats intermédiaires de l’intégration. Ce cas se présente souvent, et en particulier pour les spécifications non techniques: coût global du système, disponibilité des composants, dépendance vis à vis d’un fondeur ou d’un fabricant, durée de vie et évolution du produit, délai de conception, ...etc. Aussi, ayant à traiter à la fois des contraintes mal définies ou ayant changé (spécifications floues) et un éventail de solutions techniques très vaste en constante évolution, le concepteur peut être amené à vouloir tester plusieurs stratégies d’intégration après avoir défini un modèle fonctionnel unique du système. Sans outils appropriés, une telle technique n’est pas envisageable. 4. Le lecteur notera que nous employons ce terme au sens propre et non par référence à la logique du même nom 42 Automatiser le cycle de conception: l’automatisation de la conception permettrait d’une part de réduire les délais de conception, mais aussi de traiter des complexités que l’approche manuelle interdit et de diminuer un taux d’erreur dû au facteur humain. Validation des systèmes: valider le bon fonctionnement d’un circuit est impératif durant tout le processus de conception, surtout avant l’envoie en production. Pour s’en convaincre, il suffit de se rappeler le disfonctionnement du «pentium». Mais, la simulation n’étant pas en mesure de traiter les fortes complexités, il faut trouver des techniques permettant soit d’apporter la preuve mathématique du bon fonctionnement du circuit, soit d’en émuler le fonctionnement. Comme on peut le constater, la complexité des enjeux est à la mesure des fonctionnalités à intégrer. 2.3 Implantation de la commande de machines électriques AC Avec les progrès rapides de la microélectronique et de la technologie des semi-conducteurs de puissance, de nouveaux résultats ont pu être obtenus en matière de mise en oeuvre de la commande de machines électriques. Mais, toujours aussi peu de travaux s’intéressent au problème de l’intégration de la commande. Nous avons classé ces travaux en deux catégories distinctes que nous étudions dans les paragraphes suivants. Nous ne nous intéresserons toutefois qu’aux travaux ayant trait à la mise en oeuvre de commandes de machines électriques AC. Nous ne nous préoccuperons pas des machines DC pour les raisons que nous avons évoquées dans l’introduction générale. 2.3.1 l’intégration applicative Nous regroupons sous cette catégorie les travaux ayant intégrés une commande dans le but de la tester. L’objectif affiché ici n’est pas d’intégrer la commande, mais de vérifier des propriétés particulières, étudiées avant par simulation. Ces travaux ne s’intéressent pas à l’influence de l’intégration sur l’application. Généralement d’ailleurs, la commande est implantée sur un DSP à arithmétique binaire virgule flottante [21][26]. Ces travaux sont typiquement ceux ayant profité des énormes progrès techniques de la microélectronique. Dans cette catégorie, nous plaçons également les travaux ayant intégré un sous-ensemble de la commande (MLI généralement) sous forme de circuit intégré spécifique (ASIC) [29][57]. Dans ces travaux, les auteurs traitent l’architecture du circuit et justifient l’emploi des ASIC par des considérations sur les temps de calcul et sur la flexibilité de conception. En général, la position adoptée est de considérer que l’intégration de la commande nécessitera à l’avenir de 43 partitionner le système entre une partie logiciel (DSP, microcontroleur) qui calculera les fonctions lentes (surveillance, régulation ...etc.), et une partie matériel intégrant les fonctions rapides (calcul des impulsions MLI, fonctions logiques d’interfaçage ...etc.). Pour l’ensemble des travaux cités ici, aucun ne présente de justification basée sur des données tangibles et chiffrées pour la méthode d’intégration choisie. Les justifications sont d’ordre intuitif. Par ailleurs, aucune étude n’est effectuée sur la possible dégradation des performances de l’application due à la mise en oeuvre de la commande, notamment dans le cas d’une intégration en arithmétique binaire virgule fixe. Les avantages apportés par une diminution du temps de calcul ne sont pas étudiés non plus. Dans les justifications d’emploi des ASIC, l’avantage apporté semble être une donnée implicite et évidente alors que nous verrons qu’il n’en est rien. Tous ces travaux souffrent du manque de méthode systématique pour l’intégration de la commande. 2.3.2 L’étude de l’intégration système Les premiers travaux en la matière étudiaient d’abord l’architecture système à utiliser. Si l’intégration des algorithmes vers une cible logiciel et plus particulièrement vers les processeurs spécialisés DSP ou microcontroleurs [36] a eu la faveur de la plupart des concepteurs de systèmes de commande, l’implantation mixte a été envisagée assez rapidement [2]. Dans ce travail, la partie matériel intégrait les fonctions logiques d’interfaçage entre l’algorithme et le convertisseur de puissance (génération des signaux de commande des composants de puissance). Dans la plupart des travaux plus récents [10][30], un réel partitionnement du système est désormais proposé. La cible matériel (FPGA ou ASIC précaractérisé) intègre alors toute une partie de l’algorithmie de commande en sus des fonctions d’interfaçage, c’est à dire de la génération des signaux de commande de l’onduleur. Mais, dans l’ensemble, tout ces travaux envisagent un seul partitionnement: les fonctions de surveillance et de contrôle de position, vitesse et accélération vers la cible logiciel, le calcul de la MLI vers le matériel. Dans [37], Monmasson propose un travail très complet d’étude de l’intégration d’une commande de machine synchrone. Il étudie d’une part l’architecture du système mais également l’influence de l’intégration sur la chaîne d’entraînement. Un point intéressant est la justification du partitionnement adopté. L’approche se base sur deux analyses: – une analyse fonctionnelle du système dans laquelle il différencie la «commande rapprochée», c’est à dire les fonctions logiques comme la génération des impulsions de commande des interrupteurs de puissance, de la «commande algorithmique», c’est à dire les fonctions de régulation. – une analyse temporelle lui faisant distinguer différentes constantes de temps mises en jeu dans la commande des machines électriques. 44 A partir de ces analyses, Monmasson explique que «commande rapprochée» et «commande algorithmique» étant de natures différentes, elles doivent être implantées différemment. Contrairement au études précédentes, il étend le concept de «commande rapprochée» aux fonctions de régulation des grandeurs électriques rapides, définissant ainsi un bloc rapide, intégré sur une cible matériel, la «commande rapprochée», contrôlé par un bloc lent, intégré sur une cible logiciel, «la commande algorithmique». Si l’étude fonctionnelle et physique du système est intéressante en vue de l’intégration, le raisonnement menant au partitionnement nous semble erroné. La distinction entre les différents paramètres (vitesse, technologie, nature des fonctions) n’est pas claire et leur influence sur le choix de l’architecture du système non plus. La solution proposée en est une parmis d’autres, mais rien ne prouve qu’elle soit optimale. Un autre point intéressant du travail précédent est l’étude des avantages et inconvénients de la réduction du temps de calcul et de la période d’échantillonage. Nous résumons ici les conclusions car il en sera tenu compte dans la suite de ce document: 1. la diminution du temps de calcul (ici implicitement égal à la fréquence de commutation) améliore la régulation des courants (grandeurs rapides). La régulation est plus rapide et le découplage des axes et meilleur (voir annexe B). 2. diminuer le temps de calcul permet aussi de diminuer la période d’échantillonage . Cette baisse de autorise une augmentation de la vitesse maximale de fonctionnement des machines tout en améliorant la qualité du contrôle par une plus faible distortion harmonique des tensions notamment. 3. la diminution du temps de calcul (et de ) est limitée par deux inconvénients. D’une part, par l’augmentation des grandeurs de commande de la régulation lors des transitoires (augmentation qui peut amener à un débordement des variables binaires entre autre), et d’autre part, par les temps morts qui réduisent la plage de linéarité de l’onduleur. Il conseille dans la pratique de limiter la fréquence d’échantillonage par un temps mort égal à 5% de . Cette étude est particulièrement intéressante puisqu’elle montre que diminuer le plus possible la fréquence de calcul (et d’échantillonage) n’est pas nécessairement souhaitable et que de toute façon, il est indispensable de définir ces constantes en fonction de l’application. Un autre point intéressant abordé par certains travaux est l’étude de l’influence de l’arithmétique binaire sur les performances de la chaîne d’entraînement. Montmasson signale qu’une telle étude a été effectuée mais n’en précise pas la technique exacte. Dans [14], Aubépart étudie ce problème par une simulation mixte analogique/numérique de la chaîne d’entraînement avec sa commande numérique. Cette simulation est effectuée sur des modèles VHDL 5 5. Very high speed integrated circuit Hardware Description Language 45 fonctionnel de l’ASIC et VHDL-A 6 du moteur. S’il est intéressant de constater l’influence de la précision et de la quantification binaire, notons que les travaux cités ne débattent pas de l’influence du séquencement et de la réalisation binaire des opérations. N’est pas abordé non plus le problème de la vérification fonctionnelle de l’implantation. Pour finir, nous avons relevé dans certaines études, des propositions pour modifier l’algorithme afin de tenir compte de l’influence de l’intégration sur l’application. Ainsi dans [36], Leonhard propose de calculer le PID 7 sous forme continue et non plus discrète pour les fréquences de calcul élevées. Une proposition similaire à celle qu’on trouve dans [38] où Montmasson propose des algorithmes pour calculer les constantes des PID en fonction des temps de calcul. Dans [31], Jordà ajoute dans sa commande un bloc de compensation du temps de calcul sur l’estimation de l’angle des vecteurs de flux pour tenir compte de la rotation de ces vecteurs entre l’instant d’échantillonage et la fin du calcul de la commande dans son microcontroleur. Ce qui est intéressant de constater ici, c’est que l’algorithme de commande n’est plus figé avant son intégration, mais qu’il peut subir des modifications en fonction de l’intégration choisie. 2.4 La conception mixte matériel/logiciel Ce concept a séduit beaucoup de chercheurs ces dernières années et de nombreux projets ont vu le jour [11][52][33][15] ce qui a donné lieu à différentes approches méthodologiques. Nous nous baserons toutefois sur les travaux de Gajski et Vahid [6][5] qui synthétisent ces méthodologies d’une façon conceptuelle. La conception mixte (aussi appelée conception concurrente ou «codesign» en anglais) prétend développer conjointement la partie matériel et la partie logiciel dans un système donné et ce à partir d’un modèle fonctionnel commun de haut niveau qui permet de s’affranchir d’une spécification exacte des caractéristiques finales du circuit intégré. Nous préférons d’ailleurs le terme de conception mixte à celui de conception concurrente car il ne s’agit pas seulement de développer le matériel et le logiciel en même temps, il s’agit surtout de les développer ensemble et donc de faire interagir la conception de l’un et de l’autre. Lorsque nous parlons de matériel ou de logiciel, nous nous référons respectivement aux ASIC et aux processeurs de tous types (microcontroleur, processeurs standarts, DSP), le «logiciel» de ces derniers étant le programme assembleur exécuté par ces processeurs. La conception mixte est basée sur quatre concepts principaux: – la spécification fonctionnelle – l’exploration de l’espace des solutions de réalisation 6. VHDL-Analogic 7. Proportionnel Intégral Dérivé 46 – le test fonctionnel des modèles – la synthèse mixte Chacun de ces concepts correspond à une étape générique de la conception à laquelle sont associées des tâches à réaliser pour mettre en oeuvre le concept. La communication entre les tâches est assurée par des modèles et les contraintes associées. La figure 2.2 présente cette méthodologie générique sous forme de graphiques qu’on pourrait appeler «flux de modèles» (modelflow) par analogie aux graphes «flux de données» (dataflow). Comme on peut le voir, cette méthodologie est itérative en raison des rebouclages des résultats de tâches sur des tâches précédentes. F IG . 2.2 – Méthode de conception mixte générique Dans le paragraphe suivant, nous détaillons le contenu de chaque étape et la signification de chaque tâche. 47 2.4.1 Détail de la méthode 2.4.1.1 La spécification fonctionnelle Le but de cette étape est de spécifier le mieux possible le système à réaliser, c’est à dire de définir d’une part quelles doivent être les sorties du système pour des entrées données, d’autre part, comment le système doit calculer ses sorties, comment il doit être fait, et finalement de définir les caractéristiques du circuit à réaliser. Cette étape est particulièrement importante car de sa bonne réalisation dépend en grande partie le succès de la méthodologie et le bon fonctionnement des outils associés car si la méthodologie de conception mixte prétend pouvoir traiter des spécifications de caractéristiques plus ou moins floues, la fonctionnalité du système doit elle être définie très précisément. Plus une erreur de spécification est détectée tard dans la conception, plus elle coûte cher. Malheureusement, l’expérience montre que c’est une étape souvent très mal traitée dans les projets de conception. La spécification fonctionnelle est un processus itératif qui comprend l’analyse du système, la modélisation et la définition des objectifs de conception. Elle interagit avec l’étape de test fonctionnel pour assurer que les modèles présentent le comportement attendu (cf. Fig. 2.3). Les paragraphes suivants décrivent en détail les tâches requises pour la spécification fonctionnelle du système. F IG . 2.3 – Spécification fonctionnelle Analyse fonctionnelle du système Cette tâche consiste à définir les différents types de fonctions qui constituent le système (p.e. les protocoles de communication, les fonctions algorithmiques, les machines d’état) et les relations temporelles et physiques qui existent entre elles. On va donc définir un ordre d’exécution et les données transmises entre elles. Pour avoir un exemple d’une telle analyse, le lecteur peut se reporter au paragraphe 5.3.1. 48 Modèle de compréhension Un modèle de compréhension, comme l’indique son nom, permet de comprendre comment fonctionne un système. Il peut par exemple définir les sorties du système sans préciser comment celles-ci sont calculées ni indiquer des temps de fonctionnement. Pour formaliser cette étape, de nombreux travaux ont été réalisés sur les langages de spécification formelle. Il n’existe pas de langage «parfait» permettant de modéliser n’importe quel type de fonction. En fait, les langages qui se sont développés au cours du temps permettent chacun de spécifier une certaine classe de fonction. Ainsi, les «graphes de flux de données» (dataflow graph) sont les mieux adaptés pour les fonctions qui opèrent la même transformation à travers le temps sur un flux de données. Les machines d’état s’imposent par contre pour des systèmes fortement séquentiels. Il existe encore de nombreux autres modèles pour lesquels nous renvoyons le lecteur vers les articles pertinents [16]. L’analyse qui a eu lieu avant permet maintenant de choisir le langage de modélisation le plus approprié pour chaque classe de fonction définie. L’utilisation de plusieurs modèles ne doit pas être un obstacle, elle permet au contraire de faciliter la modélisation et la clarifier. Modèle de spécification Le modèle de spécification se distingue du modèle de compréhension par le fait qu’on définit maintenant comment sont générées les sorties, c’est à dire, comment est réalisé fonctionnellement le système. Pour comprendre la différence entre modèle de compréhension et modèle de spécification, prenons l’exemple d’une commande vectorielle classique de machine asynchrone. Dans un modèle de compréhension, on définirait par exemple la commande comme une fonction permettant de calculer les courants statoriques dans un repère tournant , à partir des courants de ligne , et ; puis le calcul d’une régulation sur ; puis le calcul des impulsions de commande des transistors de l’onduleur (cf. Annexe A). Dans un modèle de spécification, on va définir exactement quelle fonction est utilisée pour la transformation de , et vers et , et quels calculs sont effectués exactement, puis on définira le type de régulation à utiliser (p.e. PID ou RST) et les calculs à réaliser, puis comment calculer les impulsions de commande des interrupteurs de puissance. Les langages à utiliser sont les mêmes que pour le modèle de compréhension. Il est d’ailleurs possible, si la fonctionnalité du système est suffisamment claire, de se passer du modèle de compréhension. La spécification des objectifs de conception Lors de la spécification du système, on est aussi amené à définir les caractéristiques du circuit intégré à concevoir. Ces caractéristiques se partagent en trois catégories: 1. les caractéristiques physiques: ce sont là les performances du système (vitesse de calcul, consommation, temps de latence ...etc.), des indications architecturales (nombre maximal de plots imposé par le type de 49 boîtier, type de connection avec l’environnement ...etc.), et les caractéristiques analogiques (fan-in/fan-out, CEM, protection vis à vis des décharges électrostatiques, technologies résistantes au radiations ...etc.). 2. la testabilité du circuit: testabilité en fabrication (taux de couverture de fautes) et testabilité fonctionnelle, c’est à dire la stratégie de test employée («scan-path», auto-test intégré ...etc.). 3. les contraintes commerciales: ce sont différentes contraintes afférentes au coût unitaire par rapport à une production minimale prévue, à la technologie employée, au délai de conception, à l’évolution du produit ...etc. S’il est possible de définir assez précisément les caractéristiques physiques et de test du circuit, il est par contre plus difficile de préciser exactement les contraintes commerciales. Mais, un des objectifs de la méthodologie de conception mixte étant précisément de rendre la conception moins dépendante des caractéristiques spécifiées du système, il est possible de se contenter de «spécifications floues» qui seront reprécisées lors du cycle de conception. Par contre, rappelons que la fonctionnalité du système doit, elle, être défini très exactement. 2.4.1.2 L’exploration de l’espace des solutions de réalisation L’exploration est une notion clé de la conception mixte. Le but recherché est de trouver la réalisation assurant le meilleur compromis entre les différentes contraintes de conception. C’est un travail évidemment très complexe et pour lequel l’automatisation est à même d’apporter une aide appréciable au concepteur. Mais, il est impossible d’aborder de front l’automatisation des tâches qui composent l’exploration en raison de la complexité du problème. Actuellement, l’approche retenue est donc d’aborder le problème sous l’angle d’une application particulière: applications audio ou vidéo, télécom, automates, ...etc. De cette manière, il est possible de restreindre les recherches à un espace de solutions présentant déjà des propriétés-clés, requises pour l’intégration de l’application envisagée. Un exemple est de prédéfinir l’architecture à employer (nombre de processeurs, d’ASIC, de mémoires, de bus ...etc.). Les tâches présentées dans les paragraphes suivants s’exécutent selon un ordre qui n’est pas nécessairement celui exposé. L’exploration étant un processus itératif, on peut être amené à exécuter plusieurs fois ces tâches. L’allocation L’allocation est la tâche de définir une architecture système et de définir les ressources à employer pour réaliser la fonctionnalité voulue. Cette tâche est une des plus complexes à automatiser de la méthodologie envisagée. En effet, le nombre de composants disponibles sur le marché est très important. Du processeur classique aux fonctions spécifiques (contrôleur 50 F IG . 2.4 – Exploration de l’espace des solutions de réalisation DMA 8 , FFT 9 , convertisseurs AD/DA 10 , ...etc.) en passant par les PLA 11 , FPGA et ASIC, le choix est immense et en constante évolution. Pour cette raison, deux stratégies sont aujourd’hui proposées: – La première consiste à figer l’architecture et les ressources système en se basant sur des considérations liées à l’application visée [33][15]. – la seconde limite le choix des ressources système à une bibliothèque de composants et offre au concepteur une aide à la décision par des algorithmes d’allocation automatique et d’estimation de performances [6]. Le partitionnement Avant de parler du partitionnement lui-même, il est nécessaire d’introduire la notion de granularité de partitionnement. La granularité est le plus petit objet indivisible considéré lors du partitionnement. Par exemple, si on considère un algorithme, le plus petit objet peut être une fonction, ou un ensemble de fonctions. Il importe seulement que par rapport au modèle de spécification considéré, on soit capable de définir pour chaque objet son niveau de granularité. Si on utilise un modèle VHDL par exemple, on pourrait définir arbitrairement la granularité suivante: par ordre croissant: opération arithmétique, instruction, bloc d’instructions, boucle, fonction, processus et entité. L’opération de partitionnement peut se définir alors comme le fait d’allouer (mapping) à chaque ressource système un ou plusieurs objets du plus bas niveau de granularité (appelé aussi un noeud) et de déterminer l’ordre d’exécution (scheduling) des noeuds. 8. 9. 10. 11. Direct Memory Access Fast Fourier Transform Analogique Digitale/Digitale Analogique Programmable Logic Array 51 Il est évident que plus le niveau de granularité choisi est fin, plus l’opération de partitionnement est complexe et longue. Le partitionnement s’effectue sur trois types d’objets: les variables qui sont assignées à la mémoire, les traitements, c’est à dire des objets qui modifient leurs variables d’entrée (boucles, instructions conditionnelles ...etc), qui sont assignés à des ressources standards ou sur mesure, et les transferts d’information qui sont affectés à des bus. Pour effectuer le partitionnement, les informations suivantes sont nécessaires: – la granularité du partitionnement. – les contraintes d’optimisation du système, c’est à dire les grandeurs telles que puissance, fréquence, surface silicium ...etc. qu’il faudra optimiser. – un modèle d’estimation de chaque grandeur d’optimisation. – des fonctions de coût combinant les estimations pondérées des grandeurs d’optimisation. Grâce à ces fonctions de coût, il est possible d’orienter la recherche de solution par l’importance accordée à chaque grandeur d’optimisation. A partir de ces informations, des algorithmes sont capables d’examiner les solutions possibles au problème du partitionnement. Différentes techniques existent dont l’affectation aléatoire, le groupement hiérarchique, la migration de groupe, les algorithmes génétiques ou le recuit simulé. Nous renvoyons là encore le lecteur intéressé vers des publications pertinentes [7][53]. La détermination de l’ordre d’exécution des opérations est un point important de la partition. Cette information servira par la suite durant l’étape de synthèse mixte. Cet ordre d’exécution dépend de la partition choisie. Par exemple, des opérations concurrentes dans le modèle de spécification mais implantées sur une même ressource logiciel devront être exécutées séquentiellement. Idem pour une cible matériel lorsque l’opération accède à une ressource partagée (p.e. ALU 12 ). Il existe deux types de stratégies pour déterminer l’ordre d’exécution des opérations dans un système temps réel: 1. soit le séquencement est statique, c’est à dire que l’ordre d’exécution est figé à la conception. 2. soit le séquencement est dynamique. Dans ce cas, l’ordre de séquencement est généralement basé sur une stratégie d’allocation de priorité, le problème étant de minimiser les temps d’attente et d’éviter le blocage d’une tâche qui ne pourrait pas accéder à une ressource partagée. Différents algorithmes existent pour réaliser cette tâche [17]. 12. Arithmetic and Logic Unit 52 La transformation Dans le paragraphe consacré au partitionnement, nous avons supposé que le partitionnement s’effectuait directement sur le modèle de spécification. Or, si cela est vrai lors de la première itération d’exploration, il n’en est rien lors des itérations suivantes. En raison d’une conception souvent hiérarchique et pour clarifier le modèle, le concepteur a souvent recours à des fonctions dans le modèle de spécification. Mais par la suite, il n’est pas évident que pour atteindre des objectifs de fréquence de traitement, un appel à fonction soit efficace. Et si l’intégration de la fonction est effectuée par un module matériel spécifique, il est possible que la contrainte budgétaire ne soit pas respectée. La transformation consiste à examiner ce genre de problème en modifiant le modèle de départ. Elle peut être de différentes natures, c’est à dire porter sur le contenu de la spécification ou sur la structure de celle-ci. Lorsqu’elle porte sur le contenu, elle peut s’exercer à différents niveaux de la spécification [33]: – Au niveau algorithmique, il est souvent possible d’implanter la même fonction de différentes manières. Si on prend l’exemple d’un filtre FIR 13 , il peut se construire sous forme de produit ou sous forme de FFT. Cette transformation n’est pas triviale et ne peut être traitée actuellement qu’à la main. 13. Finite Impulse Response 53 – Au niveau fonction élémentaires, il est possible d’utiliser des implantations différentes. Par exemple, il est possible de remplacer une multiplication de constante par une série de décalages et d’additions. – Au niveau conception logique, il est possible de réaliser la même fonction de diverses manières. Ainsi, pour un multiplieur par exemple, il existe de nombreuses implantations qu’il est possible de choisir automatiquement en fonction des contraintes de temps et de surface imposées au multiplieur. Lorsque la transformation porte sur la structure de la spécification, les techniques utilisées consiste à réintégrer une fonction dans le code séquentiel (to «in-line»), fusionner des processus, aplanir une hiérarchie ou grouper des instructions en procédure. La plupart de ces techniques sont issues du génie informatique où elles sont couramment utilisées par les compilateurs pour optimiser les codes objets. Aujourd’hui, ces techniques sont utilisées dans de nombreux outils de CAO 14 [5]. L’estimation L’estimation des performances et des grandeurs d’optimisation d’un système n’est pas simple dans la mesure où il faut trouver un compromis entre précision et vitesse d’estimation. S’il faut estimer ces variables pour plusieurs milliers de solutions, on ne peut pas se permettre des temps de calcul de l’estimation trop importants. Or la synthèse physique d’un modèle de spécification n’est pas linéaire: par exemple, la surface totale de la partie matériel ne sera pas égale à la somme des surfaces de tous les noeuds. Ces non-linéarités sont dues en partie aux optimisations auxquelles se livrent les outils de synthèse logique et les compilateurs. Elles sont dues également à des structures architecturales spécifiques comme le pipeline, la mémoire cache ... etc. Du fait de cette non-linéarité, l’estimation est plus complexe. Si on désire obtenir une estimation très fiable, il faut recourir à la synthèse et la compilation des codes, donc se rapprocher beaucoup de l’implantation physique. Cela coûte cher en terme de temps de calcul si bien que cette solution n’est pas réalisable dans l’optique d’une exploration itérative d’un grand nombre de solutions. La stratégie actuelle est donc d’estimer les grandeurs d’optimisation pour avoir un ordre de grandeur. Ces estimations sont beaucoup plus rapides et permettent une exploration itérative. Différentes techniques existent, permettant de tenir compte dans une certaine mesure des non-linéarités. La plus répandue est l’utilisation d’une librairie de composants et fonctions pour lesquels les grandeurs d’optimisation sont connus précisément [47]. Lors du partitionnement, les noeuds utilisés correspondent à cette librairie. L’estimateur effectue alors la somme pondérée des grandeurs d’estimation élémentaires. 14. Conception Assistée par Ordinateur 54 D’autres techniques, basées sur le même principe peuvent être trouvées dans [18]. 2.4.1.3 La synthèse mixte Sous ce concept général, nous regroupons trois types de tâches: – l’affinement du modèle de spécification fonctionnelle qui se traduit par la génération de code qui complète le modèle. – la synthèse conjointe de code de haut niveau, c’est à dire aussi bien des langages de programmation traditionnels type C et des langages de description matériel type VHDL. – la synthèse logique du langage de description matériel et la compilation du langage de programmation. Les tâches de placement/routage et l’assemblage du code objet ne sont envisagées que dans la mesure où les performances du système doivent être connues avec plus de précision. Mais on considère que la réalisation physique des circuits à partir d’une netlist et d’un code objet est bien maîtrisée de nos jours dans la mesure où on ne se trouve pas à la limite technologique (p.e. technologies submicroniques actuellement). Il n’en n’est pas tout à fait de même pour les trois tâches évoquées avant. Et même si l’automatisation des tâches de synthèse est systématique de nos jours, elle n’est pas sans poser quelques problèmes. L’affinement du modèle de spécification Lors de la génération du modèle de spécification, on ne s’est pas préoccupé de la gestion des mémoires, de l’allocation de l’espace adressable, de l’interfaçage entre composants ni de l’arbitrage de l’accès aux ressources partagées. Ceci est normal puisque ce n’est qu’à l’étape de conception suivante, l’exploration, qu’on déterminera les ressources du système et son architecture. Le partitionnement étant effectué, il faut donc traiter maintenant cette spécification supplémentaire du système. Si la spécification des structures logiques pour la mémoire ne pose pas trop de problèmes et que des techniques existent pour gérer l’arbitrage de l’accès aux ressources partagées, il n’en est pas de même pour l’interfaçage des composants. Remarquons au passage que dans le cas de l’arbitrage, nous nous restreignons au cas simple où plusieurs processus (ou dispositifs) veulent accéder en même temps à une ressource unique. Classiquement, on résout ce problème en allouant des niveaux de priorité aux processus. Cette allocation peut être statique ou dynamique. Nous ne nous étendrons pas plus sur ce sujet. Le choix de l’interface entre composants est complexe. Il existe plusieurs types de communication entre composants (matériel-matériel, matériel-logiciel, logiciel-logiciel) et une multitude de protocoles envisageables (protocoles asynchrones, par adressage mémoire, ...etc.). Le choix de l’interface dépend d’une part du composant à interfacer (composant standart ou sur mesure) et du type 55 F IG . 2.5 – Synthèse mixte 56 de données à transmettre (mot unique, trame, flux continu, ...etc.). Il peut même se présenter le cas de l’interfaçage de deux composants dont les interfaces sont figées et différentes. Dans ce cas, il faut générer la description d’un transducteur. L’automatisation du choix de l’interface n’est donc pas évidente. Synthèse de code haut niveau Le partitionnement terminé, chaque noeud du modèle de spécification est attribué à une ressource du système et le séquencement statique ou dynamique est défini. A partir de ces informations, il est relativement aisé de générer le code correspondant à chaque noeud, les noeuds matériels générant du code de description matériel (HDL) et les noeuds logiciels du code de programmation classique. A partir de l’ordre d’exécution des noeuds, on construit le séquenceur global. Ici, peu de problèmes se posent vu que les difficultés majeures proviennent du bon séquencement des opérations, défini lors du partitionnement. On notera tout de même que le code HDL généré doit être à la fois simulable et synthétisable. Or l’expérience montre qu’un code produisant de bon résultats de synthèse est lent à la simulation et vice-et-versa. La génération de code doit donc tenir compte de son utilisation attendue. Deux techniques sont employées aujourd’hui pour la génération du code: – la traduction/compilation du modèle de spécification [15] – l’utilisation de librairies d’opérateurs avec leurs descriptions associées [12][27]. Cette technique suppose l’utilisation dans le modèle de spécification des opérateurs de la librairie. Synthèse logique et compilation Si les techniques de synthèse logique et de compilation sont bien maîtrisées, il est quand même intéressant de noter que la synthèse comme la compilation donne de meilleurs résultats lorsque le code traité respecte les consignes de l’outil utilisé. Au niveau de la synthèse logique, on obtient toujours encore de bien meilleurs résultats pour un circuit décrit par transfert de registres (RTL-level) qu’au niveau comportemental (behavioural description). 2.4.1.4 Test fonctionnel des modèles Nous regroupons sous test fonctionnel trois concepts qui s’appuient sur des techniques fondamentalement différentes, mais dont le but est le même, c’est à dire vérifier ou prouver qu’un circuit ou un système donné présente le comportement défini par les spécifications. Ces trois concepts sont: – la simulation, c’est à dire le calcul des sorties d’un système pour des entrées données à partir d’un modèle de celui-ci. 57 – la preuve formelle, c’est à dire la vérification à partir d’un modèle qu’une propriété du système correspondant est vraie. Un exemple de propriété pour une machine d’état serait «si l’entrée A vaut 1, alors l’état X ne sera jamais atteint». – l’émulation, c’est à dire le fonctionnement du circuit sur un système de prototypage. Le test fonctionnel intervient à plusieurs reprises dans la méthodologie. Selon les cas, que nous détaillerons maintenant, on utilise soit la simulation, soit la preuve formelle, soit l’émulation. Simulation La simulation est traditionnellement la méthode utilisée pour vérifier fonctionnellement un système. Mais, avec la complexité croissante des fonctionnalités à intégrer, deux problèmes se sont posés à la simulation: 1. les temps de simulation qui, lorsqu’on veut simuler l’ensemble des combinaisons des vecteurs d’entrée, deviennent inabordables. On peut facilement atteindre des temps de simulation CPU de plusieurs centaines d’années [25]. 2. la simulation de systèmes définis par plus d’un modèle de comportement (p.e. une partie flux de données et une partie protocole de communication). On parle alors de système «hétérogène» [1]. Ce type de systèmes requiert l’utilisation de simulateurs capables de «cosimuler» l’ensemble des modèles de comportement présents. La cosimulation est aujourd’hui une réalité ce qui permet de simuler l’ensemble des systèmes et non plus des bouts séparément. Par contre, les temps de simulation restent un problème et pour cette raison, d’autres techniques ont vu le jour. Preuve formelle La preuve formelle permet actuellement de réaliser les tâches suivantes: – prouver l’équivalence de circuits issus d’une même conception. Ceci peut être nécessaire lorsque des modifications ont été apportées à un circuit (insertion de logique de test par exemple) ou que certaines transformations ont été effectuées manuellement (réalisation manuelle du schéma logique d’un opérateur). La vérification d’équivalence a lieu en général par rapport à un modèle de référence supposé exact. – prouver des propriétés mathématiques d’un circuit donné. Prouver des propriétés permet de vérifier qu’une fonctionnalité souhaitée du circuit est bien assurée. On notera toutefois que la preuve formelle de propriétés mathématiques est restreinte à certaines propriétés. Ces restrictions font qu’on ne peut pas actuellement valider exhaustivement un circuit par la preuve formelle. 58 L’intérêt principal de ces méthodes réside dans le fait que la preuve formelle, lorsqu’elle est applicable, consomme très peu de puissance CPU comparé à une simulation. Le principe de ces techniques est d’extraire un graphe booléen (BDD 15 ) d’un modèle de circuit (netlist, modèle HDL, ...etc.), puis de réduire ce graphe. Pour vérifier l’équivalence de deux circuits, on vérifie que leurs graphes sont isomorphes pour un même ordonnancement des vecteurs d’entrée. Pour prouver une propriété mathématique, on réduit le graphe de départ en fonction de l’hypothèse donnée (p.e. «si A vaut 1») et on examine si avec l’ensemble des solutions possibles, la propriété est vérifiée (p.e. «l’état X n’est jamais atteint»). Actuellement, la preuve formelle reste encore une affaire de spécialiste car selon le modèle de départ employé et la formulation des propriétés, il sera ou non possible d’obtenir les résultats attendus. L’émulation L’émulation repose sur le principe du prototypage des circuits sur des systèmes standarts. L’intérêt de prototyper un circuit intégré (en programmant par exemple des réseaux de FPGA interconnectés) est de profiter de la vitesse de calcul d’un circuit spécifique tout en disposant de la possibilité de modifier le circuit et de le reprototyper si les résultats de l’émulation ne sont pas satisfaisants. En fait, l’émulation repose sur le même principe que la simulation (on examine le résultat du traitement de vecteurs d’entrée) mais avec des vitesses d’exécution bien supérieures. L’inconvénient principal de cette technique est le prix des émulateurs (de l’ordre du demi million de dollars pour les plus puissants). On peut bien sûr utiliser aussi des cartes spécialisées pour l’émulation, mais leur puissance et leur champ d’utilisation sont limités. 2.4.2 Les outils de conception mixte Les travaux de recherche dans ce domaine ont donné naissance à de nombreux outils de conception mixte, ou se définissant comme tels. La plupart de ces outils sont en libre distribution à travers le réseau. Nous ne prétendons pas ici faire une liste exhaustive de ces outils, mais proposer un rapide survol des capacités de certains d’entre eux par rapport à la méthodologie de conception mixte que nous avons présentée. Ce faisant, nous distinguerons les outils que nous avons testés sur le site du CEGELY, de ceux pour lesquels nous n’avons que des renseignements issus de publications ou d’informations présentées sur le réseau. Un paragraphe sera consacré également aux outils qui ne se définissent pas par rapport à la méthodologie de conception mixte, mais qui permettent néanmoins de réaliser certaines des tâches que nous avons évoquées. 15. Boolean Data Diagram 59 F IG . 2.6 – outils de conception testés 60 2.4.2.1 Outils testés Comme il apparaît figure 2.6, aucun outil à ce jour peut prétendre gérer l’ensemble du cycle de conception mixte. Cette constatation nous amène à un enjeu supplémentaire non évoqué jusqu’à présent et qui fait l’objet de la thèse de A. Kalavade [33]: l’exploration de l’espace de conception. Par cette expression, A. Kalavade exprime la nécessité pour le concepteur de choisir non seulement une solution technologique (à travers notamment l’exploration de l’espace des solutions) pour implanter la fonctionnalité, mais également les modèles et outils à utiliser pour la conception. Le choix qui s’offre est très étoffé et plusieurs auteurs [51] proposent de gérer automatiquement l’utilisation des outils, c’est à dire de gérer les structures de données, le format de transfert des données entre outils et l’exécution des tâches de conception. Voyons maintenant un à un les outils testés. Ptolemy Distribué sur le réseau (binaires et sources) par le «Department of Electrical Engineering and Computer Sciences» de l’université de Berkeley, Californie, Ptolemy est défini par ses concepteurs comme un outil de cosimulation de systèmes hétérogènes et de synthèse mixte [12]. Le concept de base de Ptolemy est la notion de modèle de simulation. Par cette notion, les auteurs définissent les méthodes algébriques à utiliser pour simuler un type de fonctionnalité donné. A chaque modèle de simulation est associé un «domaine» donné. La cosimulation consiste à simuler ensemble différents domaines au sein d’un même projet. La synthèse mixte revient au même car les auteurs ont défini au sein de Ptolemy, des domaines de génération de code. Un même projet pouvant comporter plusieurs domaines de simulation et de synthèse de code (notion d’hétérogénéité), on peut modéliser des systèmes complexes allant du système intégré mixte (matériel et logiciel) jusqu’au réseau de poste de travail communicant par des protocoles donnés. Par ailleurs, Ptolemy permettant de changer le domaine d’appartenance d’un morceau de projet par modification de paramètre, il est relativement aisé d’effectuer un partitionnement manuel d’un modèle à prototyper. Pour définir le système, l’utilisateur dispose d’une interface graphique lui permettant de créer un schéma bloc à partir d’une librairie de fonctions, propre à chaque domaine. Ptolemy étant fourni avec les sources, les différentes librairies peuvent être modifiées et personnalisées, ce qui est particulièrement intéressant pour les domaines de génération de code. L’utilisateur peut même créer de nouveaux domaines avec leur librairie associée. En annexe E, nous proposons un exemple de modélisation et simulation d’un système très simple de commande. Dans sa distribution actuelle, Ptolemy est fortement orienté vers la modélisation et le prototypage d’applications télécom, audio/vidéo et réseau. 61 Polis Distribué sur le réseau (binaires et sources) par l’université de Berkeley, Californie, ses auteurs le définissent comme un environnement de conception mixte de contrôleurs intégrés temps réel de systèmes réactifs, c’est à dire des systèmes réagissant immédiatement à des évènements sur leurs entrées. Des exemples typiques de telles applications sont les autocommutateurs téléphoniques, les robots, les automates, les contrôleurs de chaîne de production ...etc. La modélisation des systèmes est effectuée par machine d’état (principalement par le langage réactif Esterel [3]). La plupart des étapes de conception mixte sont effectivement supportées par Polis (cf. Fig. 2.6). Par contre, pour la cosimulation, Polis a recourt à Ptolemy, et pour la preuve formelle, à VIS. Alta Outil commercial distribué par Alta Group, une société du groupe Cadence, Alta repose sur les résultats de recherche obtenus avec Ptolemy et POLIS. Dans sa version actuelle, seul le modèle de simulation de flot de donnée synchrones (SDF: Synchronous Data Flow) est proposé, associé avec des domaines de synthèse de code vers des cibles DSP et VHDL/Verilog. Comme Ptolemy, Alta propose une interface graphique permettant de définir un système sous forme de schéma bloc à partir d’une bibliothèque de composants. 2.4.2.2 Outils spécifiques testés Les outils que nous présentons maintenant ont une fonction très spécifique et peuvent servir pour exécuter une des tâches de la conception mixte. Nous ne parlons que d’outils, pas de modèles. MATLAB / SIMULINK Outil de calcul mathématique basé sur le calcul matriciel, MATLAB propose des bibliothèques de fonctions spécifiques pour le développement d’algorithmes de contrôle sous un environnement graphique (SIMULINK), ainsi que des algorithmes standarts pour la résolution des équations différentielles. Cet outil propose également un utilitaire (DSPACE) pour la génération automatique de code C à partir des schémas blocs SIMULINK, code C compilable sur des familles de DSP données. Les schémas blocs peuvent être simulés en tenant compte d’une précision binaire limitée (simulation par entiers). On ne peut évidemment pas parler d’outil de conception mixte, mais MATLAB / SIMULINK peut être utile pour la construction d’un modèle de compréhension et pour étudier quelques propriétés binaires de l’algorithme envisagé. SYNOPSYS Ensemble d’outils pour la simulation et la synthèse de code HDL (VHDL ou Verilog). La synthèse peut être effectuée vers des technologies précaractérisées ou vers des FPGA. Synopsys permet d’estimer les performances et caractéristiques d’un circuit après synthèse. L’utilisation de scripts pour automatiser les tâches de synthèse en fait un outil très performant. 62 2.4.2.3 Outils de conception mixte non testés Comme nous l’avons déjà dit, l’intérêt provoqué par ce thème de recherche est à l’origine de nombreux travaux dont les résultats se concrétisent la plupart du temps par des outils expérimentaux. Beaucoup de ces outils sont librement distribués sur le réseau, d’autres ne sont connus qu’à travers des publications. Pour autant que nous ayons pu en juger par les publications, les outils dont nous parlons suivent tous la même méthodologie générique que nous avons décrite, avec quelques variantes selon l’application visée ou le problème étudié. Parmi les outils apparaissant dans la littérature, citons COSMOS, outil développé à l’INPG de Grenoble, COSYMA, développé à l’Université de Braunschweig (Allemagne) et VULCAN, développé à Stanford (USA). COSMOS est un outil optimisé pour l’intégration de protocoles de communication. Basé sur le langage SDL, il intègre le système sur un réseau de processeurs ou sur une architecture mixe processeur/ASIC. COSYMA est basé sur le langage , une extension du C. Son domaine d’application n’est pas défini clairement dans la littérature. La stratégie d’intégration repose sur la migration du logiciel vers le matériel. VULCAN est prévu pour l’intégration de systèmes temps réel. Sa stratégie d’intégration repose sur la migration du matériel vers le logiciel en s’appuyant sur le langage de modélisation HardwareC, autre extension du C. D’autres projets existent sur lesquels nous ne disposons pas d’informations précises: LYCOS de l’Université Technique de Lyngby (Danemark), CODES de Siemens (Allemagne), TOSCA de Italtel (Italie), SynDex de l’INRIA (France), SAW de l’Université de Carnegie Mellon (USA) et COWARE de IMEC (Belgique). 2.5 Conclusion Avec une complexité croissante des systèmes à intégrer et des contraintes technologiques, temporelles et budgétaires toujours plus fortes, les approches classiques d’intégration ne suffisent plus. Des enjeux nouveaux comme une flexibilité accrue de la conception permettant une modification à posteriori de la stratégie d’intégration, une exploration systématique et automatique des solutions techniques et une vérification formelle du système, ne sont pas traités. Même si certains travaux portant sur l’intégration des algorithmes de commande des machines électriques ont présenti la nécessité d’aborder la conception autrement, leur approche ne permet pas de résoudre les problèmes évoqués. Ces travaux nous permettent néanmoins de mettre en évidence des spécificités de l’intégration de la commande dont il faudra tenir compte lors de l’application d’une méthodologie d’implantation. On gardera ainsi à l’esprit l’importance du choix de la fréquence de calcul du système, le problème de l’arithmétique binaire à employer et du séquencement des opérations vis à vis de la précision binaire, et finalement, l’intérêt qu’il peut y avoir à modifier l’algorithme de départ pour tenir compte de la réalisation physique. 63 Le concept de conception mixte par contre, aborde l’intégration d’une fonctionnalité (protocoles, algorithmes, fonctions logiques, ...etc.) de façon systématique. L’utilisation de modèles fonctionnels, associée aux algorithmes pour l’exploration des solutions de réalisation, permet une conception plus flexible, moins liée aux spécifications technologiques et budgétaires, et donc une conception plus réactive également. Les spécifications floues ne posent plus de problème puisqu’il devient possible d’affiner ces spécifications en fonction des estimations sur les performances d’intégration. En ce qui concerne les outils supportant la méthodologie de conception mixte, nous avons vu qu’un choix important s’offre au concepteur, lui permettant de réaliser une grande partie des tâches automatiquement. Compte tenu de ces avantages, il nous a paru intéressant d’adapter la méthodologie générique de conception mixte au cas de l’intégration des algorithmes de commande des machines électriques AC. 64 Chapitre 3 Élaboration d’une méthodologie d’implantation des commandes de moteurs AC 3.1 Introduction Dans le premier chapitre, nous avons vu que les méthodes classiques d’implantation de fonctionnalité, caractérisées par des spécifications figées et une faible automatisation de la conception haut niveau, ne permettent pas de résoudre un certain nombre de problèmes de conception (p.e. modification des spécifications en cours de conception). Ces problèmes se posent aussi pour l’intégration des commandes de machines électriques (cf. 2.3). Aussi, nous avons décidé d’employer une méthodologie de conception mixte matériel/logiciel. La méthode que nous avons déjà présentée (Gajski-Vahid, cf. Fig. 3.1, p. 66) est une approche générique de conception. Le travail que nous présentons tout au long de ce chapitre consiste en l’adaptation de cette méthode générique au cas spécifique de l’intégration de la commande des machines AC. Cette adaptation repose essentiellement sur l’analyse de travaux antérieurs [43][31][10][37][30]. Remarquons tout de même que nous ne modifions pas la méthode générique, nous spécifions simplement certaines tâches pour l’intégration des systèmes de commande. Notre approche est la suivante: 1. Nous présentons d’abord les problèmes spécifiques de la commande et nous localisons dans la séquence des tâches à effectuer, où appliquer la solution théorique. 65 F IG . 3.1 – Méthode générique de conception mixte selon Gajski-Vahid 66 2. Nous nous attachons dans une deuxième partie à décrire les solutions théoriques possibles en ayant auparavant défini quelques spécifications restrictives propres aux machines AC afin de limiter la complexité des problèmes. 3. Une fois les solutions proposées, nous décrivons finalement les moyens pratiques mis en oeuvre (langages et outils), et synthétisons la méthodologie spécifique à la commande. Par soucis de clarté, nous avons placé au début de chaque paragraphe principal, le schéma de la méthodologie générique de conception mixte sur laquelle la tâche traitée par le paragraphe apparaît en grisé. 3.2 Localisation et formulation des problèmes spécifiques à la commande Le but de ce paragraphe est de localiser et formuler les problèmes spécifiques à la conception de systèmes intégrés de commande afin de savoir plus tard sur quel modèle nous aurons travailler pour traiter le problème. 3.2.1 Les spécifications floues 1 Le problème des spécifications floues n’est pas particulier à la commande des machines électriques, mais nous aborderons ce sujet pour discuter de deux spécifications, propres à la commande: 1. les temps de la commande: temps de calcul, fréquence de commutation, fréquence d’échantillonage et fréquence d’horloge 2. la précision de calcul de l’algorithme de contrôle 3.2.1.1 Les temps de la commande Ces temps dépendent en fait tous les uns des autres: – où est le temps de calcul du système, est le nombre de cycles d’horloge nécessaires au calcul de toutes les opérations, et est la période d’horloge. – où est la période d’échantillonnage, est la période de commutation et un entier compris généralement entre et . – 1. Rappelons que le terme floue est à prendre au sens littéral et qu’il n’a rien à voir avec la logique du même nom. 67 Comme on peut le constater, certains de ces temps dépendent de l’implantation. Or, on se trouve typiquement dans le cas où on va spécifier les valeurs qu’on devrait idéalement atteindre (en fonction de l’application), puis on définira ce qu’on peut réellement faire en fonction d’estimations sur les modèles de spécification. 3.2.1.2 Précision de calcul Comme nous l’avons vu en 1.2.2, la commande telle qu’elle est développée s’applique à des modèles théoriques de la chaîne d’entraînement qui ne collent qu’imparfaitement à la réalité. Bien des non-linéarités ne sont pas prises en compte si bien que même en appliquant une commande à précision infinie au système réel, un certain nombre d’erreurs demeure sur les grandeurs contrôlées (couple, vitesse, position) par rapport à la consigne. Idéalement, on voudrait appliquer une commande à précision très grande (p.e. 32 bits flottant), mais dans la pratique, une telle implantation a souvent un coût non justifié, dû à une arithmétique binaire virgule flottante, beaucoup plus complexe à intégrer et plus coûteuse en silicium. Il nous reste alors deux autres solutions: 1. nous utilisons une arithmétique virgule fixe et donc la commande est à précision finie. Notre problème est alors de définir une précision de calcul telle que celle-ci soit supérieure à la précision physique maximale atteinte par la chaîne d’entraînement. Autrement dit, l’implantation de la commande ne doit pas introduire d’erreur sur les grandeurs commandées. 2. nous utilisons une arithmétique virgule fixe, mais nous ne nous préoccupons pas de la précision de l’implantation. Dans ce cas, il faut adapter l’algorithme de commande pour compenser les erreurs sur les grandeurs commandées, introduites par l’implantation. La deuxième solution entraîne un accroissement de la complexité algorithmique qui signifie nécessairement un surcoût de l’implantation (soit en temps de calcul, soit en surface silicium). La première solution nous paraît la plus appropriée. 3.2.2 Partitionnement et séquencement Dans le cas de la commande, le problème du partitionnement et du séquencement des opérations se révèle délicat en raison de la précision binaire qu’il faut assurer. Au début de la conception, dans l’étape de spécification, on ne sait pas encore le type d’arithmétique qu’il faudra employer. Ce n’est qu’après avoir étudié les solutions d’intégration possibles pour atteindre la précision requise qu’on saura quelle arithmétique choisir. 68 Dans le cas où on utilise une arithmétique virgule fixe, l’étude de la précision définira la largeur des mots binaires. Par conséquent, elle affectera aussi le partitionnement qui se base sur les estimations de surface de silicium et de taille de code de programmation. Le séquencement des opérations de calcul dans l’algorithme de commande est également affecté par la contrainte de précision. Pour illustrer le propos, prenons un exemple simple: Supposons un format binaire où est le nombre de bits entiers et la longueur du mot binaire. L’erreur de codage sur un nombre est limitée par peut donc s’écrire où est la valeur binaire de . Supposons maintenant l’opération en arithmétique virgule fixe. La division de par un nombre ne diminue pas nécessairement l’erreur de codage (on suppose le diviseur sans erreur de codage), par contre, la multiplication par une constante supérieure à 1 augmente à coup sûr cette erreur. Exemple: Supposons que nous voulions calculer . Cette opération peut être réalisée de deux manières. Soit nous calculons d’abord: £ !! ! soit nous multiplions directement par 2: !! ! Lors de la constitution de la méthodologie, il nous faudra prendre en compte le problème de l’influence de la précision sur le partitionnement et vérifier par exemple qu’après l’étape de partitionnement (qui inclut le séquencement des opérations), la précision requise est assurée. 69 3.2.3 Le test fonctionnel Lors de l’intégration de la commande, plusieurs questions se posent au concepteur que nous formulons ici: 1. Le système intégré fonctionne-t-il comme spécifié par le cahier des charges? 2. Le système fonctionnera-t-il correctement quelque soit le vecteur d’entrée (problèmes de blocage logique du circuit, «deadlock» en anglais, dépassement de capacité binaire, «overflow», ...etc.)? 3. La précision binaire est-elle toujours assurée? Pour un système simple, répondre à ces questions n’est pas difficile, mais pour un système aussi complexe que la commande d’une machine électrique, ces questions deviennent de vrai casse-têtes. Examinons chacune de ces questions séparément. 3.2.3.1 Adéquation à la spécification initiale La question ici est de savoir si le système qui a été modélisé correspond à la spécification initiale du système. Par exemple, on veut savoir si le système génère systématiquement un signal pour une condition donnée, ou si la fonction arithmétique calculée est bien celle spécifiée dans le cahier des charges. Cette question se pose tout au long de la conception, mais comme nous l’avons déjà fait remarquer précédemment, plus une erreur est découverte tard dans le cycle de conception, plus elle coûte cher. Il est donc important de répondre à cette question dès que le modèle fonctionnel du système est disponible. Dans la méthodologie générique, nous travaillons essentiellement avec quatre modèles fonctionnels: – – – – le modèle de compréhension le modèle de spécification le modèle de spécification partitionné le modèle de spécification affiné La validation du dernier modèle (spécification affinée) est particulièrement importante car c’est à partir de ce modèle qu’on génère le code pour le prototypage du système. 3.2.3.2 Le système fonctionnera-t-il quelque soit le vecteur d’entrée? Cette question revient à rechercher la preuve que le système, tel qu’il a été modélisé, fonctionne. Autrement dit, on va rechercher les vecteurs pour lesquels le système pourrait être mis en défaut. 70 Comme précédemment, cette question doit être réglée au plus tôt. Mais, si on étudie de près la question, on s’aperçoit que cette validité du système dépend du séquencement des opérations. Prenons un exemple: , avec Nous voulons vérifier que l’opération " ne risque pas de provoquer de débordement binaire (overflow). Il apparaît clairement que vérifie la propriété, alors que ne la vérifiera que pour des conditions très restrictives sur et sur le nombre de bits de . Pour effectuer la validation du système, il faudra donc utiliser le modèle de spécification partitionné qui définit le séquencement des opérations. 3.2.3.3 La précision binaire des résultats est-elle assurée? Ce problème ne relève déjà plus vraiment de la validation fonctionnelle. On cherche ici plutôt la preuve d’une propriété mathématique de l’algorithme binaire. Cette propriété n’étant pas liée à un fonctionnement temporel, mais seulement aux opérations binaires et à leur séquencement, on peut effectuer les opérations de vérification sur un modèle mathématique de l’algorithme comme le modèle de compréhension. Mais, avec le modèle de compréhension, seul le séquencement des opérations en arithmétique réelle est connu. Il faut donc effectuer la vérification de la précision sur le modèle qui indique le séquencement des opérations binaires, c’est à dire le modèle de spécification partitionné. 3.2.4 Résumons Finalement, trois problèmes spécifiques se posent au concepteur de l’intégration de la commande: – au niveau de la spécification du système, il faut préter attention à la définition des temps de la commande et à la précision requise sur les résultats. – au niveau de l’exploration des solutions, on doit se pencher sur les interactions entre précision binaire, allocation de ressources et séquencement. – finalement, les modèles de spécification doivent subir différentes validations fonctionnelles et vérifications de propriétés mathématiques. 3.3 Les spécifications restrictives Comme nous le précisons en 2.4.1.2, l’application de la méthode de conception mixte générique est trop complexe pour être applicable directement. Les stratégies actuelles consistent donc à appliquer des restrictions qui spécialisent la méthode pour un type d’application donnée. Pour l’intégration de la commande, nous allons également appliquer des restrictions. 71 3.3.1 L’arithmétique La première restriction concerne l’arithmétique. Afin de limiter la complexité que suppose d’étudier l’ensemble des possibilités de réalisation d’un algorithme de commande machine en mélangeant des opérateurs binaires d’arithmétiques différentes, nous limiterons l’intégration à une seule arithmétique. Nous pourrions choisir l’arithmétique virgule flottante ce qui éliminerait le problème de la précision binaire, mais il apparaît par expérience que, l’arithmétique virgule fixe, moins coûteuse en surface silicium et moins chère au niveau processeur, est souvent suffisante pour une intégration réussie. Nous avons donc décidé de nous en tenir à cette dernière arithmétique, sachant que la méthodologie proposée sera également valable pour l’arithmétique virgule flottante en supprimant les étapes liées à l’étude de la précision binaire. 3.3.2 Les ressources et l’architecture système L’allocation des ressources est une tâche trop complexe à traiter si l’architecture du système n’est pas déterminée à priori. Nous fixons donc cette architecture en nous basant sur des exemples d’intégration discutés dans la litérature [57][37][30]. Il apparaît que la majorité des algorithmes de commande machine ne nécessitent pas plus d’un DSP et/ou d’un ASIC. Seules des applications bien concrètes et complexes comme la commande des moteurs du TGV par exemple nécessitent des moyens de calcul très supérieurs. Dans des cas comme ceux-là, il suffit de choisir une architecture adaptée, la méthodologie n’en est pas affectée. Dans notre cas, nous avons donc décidé d’utiliser une architecture comprenant (cf. Fig. 3.2, p. 73): – – – – – un DSP un FPGA une mémoire vive deux bus (un bus de données et un bus d’adresse) une horloge globale L’architecture choisie est localement synchrone à communication asynchrone c’est à dire signifie que les dispositifs (ASIC, DSP, mémoire) ont un fonctionnement interne strictement synchrone, mais que la communication entre eux est asynchrone. Ceci implique d’une part que la partie matériel devra être pensée de façon synchrone, et que le protocole à utiliser sera asynchrone. La raison d’un asynchronisme global se trouve dans le fait que nous ne maîtrisons pas bien les décalages d’horloge (clock skew en anglais) qui peuvent se produire sur une carte imprimée en raison de la longueur des pistes. Il est donc préférable de renoncer à une communication synchrone, bien que plus rapide, 72 F IG . 3.2 – Architecture du système de commande et utiliser des communications asynchrones, plus lentes mais plus robustes face à la désynchronisation de l’horloge. Remarquons que nous ne fixons ici que l’architecture et pas les composants qui viendraient s’ajouter pour mettre en oeuvre cette architecture (mémoires de configuration et de programme, matériel de test ...etc.) ou pour la spécialiser (convertisseurs AD, circuits de mesure ...etc.). Les modèles des composants principaux (DSP, FPGA, mémoire) sont choisis durant l’étape d’allocation. 3.4 Traitement théorique des problèmes évoqués Dans la présente section, nous nous attachons à proposer des solutions théoriques aux problèmes spécifiques à l’intégration des systèmes de commande. Nous aborderons la modélisation des systèmes, la spécification de certaines données comme les temps caractéristiques ou la précision de calcul et finalement, nous discuterons du difficile problème de la vérification et de la validation de la conception, concepts que nous avons réuni sous l’expression «test des modèles». 3.4.1 Modélisation de la commande La commande telle que nous l’avons définie en 1.3, comporte plusieurs blocs fonctionnels. En vue de la modélisation du système, il faut déterminer sa nature (flux statique ou dynamique de données [12], systèmes réactifs déterministes [3] ...etc.) afin de choisir le langage le mieux adapté. Dans le cas de la commande, nous identifions deux types de blocs: 1. les flux statiques et dynamiques de données (algorithme de contrôle, MLI, traitement des mesures) 2. les blocs réactifs (surveillance, interface) 73 3.4.2 Spécification des temps de la commande En 3.2.1.1, p. 67, nous avons cité les temps spécifiques de la commande, voyons maintenant comment fixer leur valeur. La période de commutation Cette période est donnée par le concepteur de l’algorithme de contrôle. Physiquement, la période de commutation est limitée par la fréquence de commutation maximale des interrupteurs de puissance de l’onduleur et par le temps mort. Définir est assez empirique. En se basant sur les résultats de Montmasson [37], on définira par rapport au temps mort : # Le temps de calcul On peut poser dans un premier temps que doit être inférieur ou égal à . Si on est pas en mesure de respecter cette contrainte, il faudra revoir soit la valeur de , soit celle de . La période d’échantillonnage Elle dépend du temps de calcul du système intégré. Si ce temps est inférieur à , on peut choisir . Sinon, il faut que $ où est un entier. La fréquence d’horloge La spécification de la fréquence d’horloge n’est pas vraiment importante. Il suffit de connaître le temps de calcul du système pour déterminer en cours de développement la période d’horloge. Elle se calcule avec le temps de calcul divisé par le nombre de périodes d’horloge nécessaires au système pour effectuer un cycle de calcul. Pour la partie logiciel, cette fréquence est d’ailleurs limitée par le modèle de processeur utilisé. Comme on peut le voir, les temps de la commande dépendent tous plus ou moins de . Pour une première spécification du système, il suffit donc de définir pour déduire les autres temps. 3.4.3 Spécification de la précision de calcul de la commande Pour spécifier la précision de la commande, il faut d’abord spécifier la tolérance admise sur les grandeurs commandées. Si nous prenons le cas du contrôle du couple, il faut préciser quelle erreur par rapport à la consigne on est prêt à admettre. Or cette spécification va dépendre de l’application. Pour la traction d’un train ou d’une voiture, on sera peut-être plus tolérant que pour un robot. Une fois cette tolérance spécifiée, on veut définir la précision de calcul théorique nécessaire pour rester en dessous du seuil de tolérance. En fait, dans une chaîne d’entraînement comme celle définie au chapitre 1, ce qui nous importe, c’est de définir la précision qu’il faut atteindre sur le calcul des instants de commutation de l’onduleur, car c’est d’eux que dépend l’alimentation du moteur 74 et donc la valeur de la grandeur commandée (couple, vitesse ou position). Or, définir la précision théorique sur ces instants de commutation est extrêmement difficile pour deux raisons: 1. La première raison est mathématique. Nous ne sommes tout simplement pas capables aujourd’hui d’établir une relation mathématique simple entre les instants de commutation et les grandeurs commandées. Tout au plus pouvons-nous simuler un modèle dégradé de la commande (en limitant la précision des variables de calcul) avec un modèle de la chaîne d’entraînement pour vérifier que dans quelques cas particuliers, la précision choisie est suffisante. 2. La deuxième raison est d’ordre physique. Comme nous l’avons déjà dit, l’onduleur tout comme le moteur d’ailleurs, présente de nombreuses nonlinéarités qui limitent la précision de la commande et que nous ne sommes pas capable de modéliser simplement. Donc, même si nous assurions une précision infinie sur la définition des instants de commutation, la grandeur contrôlée n’atteindrait pas la valeur théorique prévue. Ceci constaté, on s’aperçoit qu’à une précision théorique, on préférera une précision pratique qu’il faudra atteindre. Nous tirons cette précision pratique de considérations sur les non-linéarités des éléments de la chaîne d’entraînement. Pour l’onduleur, on examine la fréquence maximale de commutation, les temps de commutation des composants et le temps mort. Pour le moteur, il faut se souvenir de la dérive des paramètres. Si on prend le cas d’un onduleur de puissance moyenne (5 à 20KW) avec une fréquence de commutation d’environ 20KHz, on peut estimer que la définition des instants de commutation doit être assurée environ à % près. 3.4.4 Le test fonctionnel Comme nous l’avons déjà vu, il faut répondre à trois questions: 1. Le système exécutera-t-il la fonctionnalité voulue? 2. Existe-t-il un vecteur d’entrée qui puisse mettre le système en défaut? 3. La précision voulue est-elle assurée pour n’importe quel vecteur? Pour répondre aux deux premières questions, nous avons recours à la vérification et à la validation fonctionnelle. Contrairement aux apparences, ces deux techniques ne sont pas antinomiques, mais bien, complémentaires. Alors que la simulation (vérification) permet de s’assurer qu’un comportement souhaité est atteint pour certains vecteurs de test (p.e. simulation d’un démarrage), la preuve formelle (validation) permet de montrer que certaines conditions critiques de comportement sont toujours vraies quelques soient les vecteurs d’entrée. En ce qui concerne la précision, nous proposons en 3.4.4.2, p. 79, une technique permettant de valider cette propriété. 75 3.4.4.1 La vérification fonctionnelle et temporelle Si la multiplication des modèles dans la méthodologie de conception mixte permet d’aborder progressivement la conception, elle implique aussi que le concepteur dispose de moyens de vérification. Selon la nature du modèle envisagé, la vérification recherchée n’est pas la même. Elle peut être fonctionnelle pour les premiers modèles de spécification, temporelle pour les modèles physiques. Au total, on peut recenser jusqu’à huit modèles différents: 1. 2. 3. 4. 5. 6. 7. le modèle de compréhension le modèle de spécification le modèle de spécification partitionné le modèle de spécification affiné le modèle de la partie matériel le modèle de la partie logiciel éventuellement les modèles post-synthèse et post-placement/routage Voyons pour chacun de ces modèles les techniques de vérification à notre disposition. Le modèle de compréhension Comme nous l’avons déjà dit dans la formulation de la problématique, le modèle de compréhension est nécessairement simulé avec le moteur afin de vérifier que les fonctions de régulation et asservissement sont assurées. Il n’y a pas ici de problème particulier puisque le modèle de compréhension peut être un modèle mathématique sous forme d’équations qui se couplera sans problème avec le modèle du moteur. Les modèles de spécification Avec ces modèles, la tâche est plus complexe. Pour la vérification, deux solutions s’offrent à nous: – soit nous simulons les modèles avec le modèle du moteur. – soit nous comparons nos modèles avec un modèle de référence en effectuant quelques simulations sur des vecteurs de test arbitraires. Examinons ces deux stratégies. Simulation avec le modèle du moteur Le modèle du moteur est un modèle analogique, basé sur la résolution d’équations différentielles (cf. annexe B) alors que les modèles de spécification sont des modèles binaires. Les problèmes de couplage de simulateurs analogiques avec ceux à évènements discrets sont nombreux, mais dans le cas de la commande, le problème principal est d’ordre physique. En effet, un moteur a des constantes de temps de l’ordre de la miliseconde alors que le système intégré, dans le meilleur des cas, est modélisé sur 76 la base de la période d’échantillonnage de l’ordre de la centaine de microsecondes. Dans le pire des cas, le système est modélisé sur la base de la période d’horloge, de l’ordre la dizaine de nanosecondes. Cette différence énorme des ordres de grandeur des temps mis en jeu entraîne des simulations extrêmement longues et coûteuses en CPU (de l’ordre de plusieurs dizaines d’heures pour quelques secondes simulées). Il n’est donc pas envisageable d’utiliser ce type de vérification de façon systématique. La comparaison de modèles Cette technique consiste à comparer différents modèles à un modèle de référence sur la base de simulations de vecteurs de test arbitraires. Le modèles de référence ayant été validé auparavant, il permet de calculer les résultats qui devront être obtenus avec le modèle à vérifier. Cette méthode présente deux avantages: 1. le choix des vecteurs de test est arbitraire. Dans le cas de la simulation avec un modèle du moteur, il fallait nous placer dans un cas réel pour pouvoir vérifier la cohérence de l’évolution des grandeurs contrôlées, et par implication la cohérence des calculs du modèle. Dans le cas de la comparaison, il n’est plus nécessaire de vérifier la cohérence des calculs, mais seulement de vérifier qu’un calcul est juste ou non. La réalité du cas calculé n’importe pas. Un quelconque vecteur de test fait l’affaire. 2. la réduction du temps de vérification est énorme. La simulation mixte analogique/numérique n’étant plus nécessaire, les simulations numériques seules sont beaucoup plus rapides. De plus, on ne calcule que quelques vecteurs. N’oublions pas qu’il ne s’agit que d’une vérification, pas d’une validation. Toutefois, cette technique n’est pas sans problème dans le cas de la commande. En effet, quel modèle faut-il choisir comme modèle de référence? A priori, on serait tenté d’utiliser le modèle de compréhension puisque c’est le premier développé, mais celui-ci crée une difficulté majeure. En principe, la compréhension s’effectue sur un modèle mathématique simulé en virgule flottante, éventuellement en virgule fixe. Mais de toute façon, le modèle de compréhension décrit uniquement les fonctions mathématiques à calculer, certainement pas les opérations binaires qui vont effectivement avoir lieu pour calculer ces fonctions. Du coup, les résultats des calculs peuvent être très différents de ceux que calculera le circuit numérique en raison de la précision binaire. Comparer le modèle de compréhension avec les modèles de spécification n’a pas de sens, les résultats seront nécessairement différents. Pour pouvoir comparer des modèles, il faut qu’ils soient équivalents en terme de précision binaire. Or cette équivalence n’est assurée qu’à partir du moment où le séquencement et la nature des opération arithmétiques binaires ne sont plus modifiées, ce qui n’est vrai qu’après le partitionnement et le séquencement du système. 77 On ne pourra donc utiliser cette technique qu’à partir du moment où le modèle de spécification partitionné aura été validé pour servir de modèle de référence. Les modèles physiques haut niveau Théoriquement, la génération des modèles physiques, matériel et logiciel est automatique si bien qu’il ne devrait pas apparaître de différence fonctionnelle avec les modèles précédents. Cependant, il n’est pas rare qu’un concepteur retouche les codes générés pour optimiser la synthèse ou la compilation. On peut également vouloir s’assurer que la synthèse de code s’est effectuée correctement. Dans ce cas, la stratégie de vérification qui nous apparaît la plus appropriée est la comparaison de modèles avec le modèle de spécification partitionné. Jusqu’ici, nous n’avons parlé que de vérification fonctionnelle ce qui excluait toute vérification temporelle du modèle. On a pu vérifier que le séquencement était correct, mais le temps n’intervenait que dans la mesure où on affirme arbitrairement que la fréquence d’échantillonnage est respectée pour les besoins de la simulation avec la chaîne d’entraînement. Que le modèle soit vérifié fonctionnellement ne signifie donc pas qu’il le soit temporellement. On peut par exemple vouloir vérifier que l’acquisition des mesures s’effectue au bon moment, que le temps de calcul n’excède pas la période d’échantillonnage ...etc. Une vérification temporelle est nécessairement liée à la notion de modèle physique du circuit et donc aussi à la période d’horloge. Au moment de la génération des modèles physiques, on ne connaît pas exactement la période d’horloge; on n’en a que des estimations qu’on doit affiner par une estimation post-synthèse. La vérification temporelle ne nécessite pas la simulation mixte avec la chaîne d’entraînement, mais seulement la simulation de quelques vecteurs critiques pour s’assurer que les contraintes temporelles fixées par l’environnement du système sont respectées. Les modèles physiques post-placement/routage Nous estimons que l’équivalence fonctionnelle est maintenue lors des tâches de synthèse et de placement/routage. Les vérifications effectuées sur les modèles post-placement/routage sont plutôt d’ordre analogique (p.e. respect des contraintes de fan-in et fanout). Nous exceptons toutefois la vérification temporelle. Le routage introduit des retards supplémentaires qui peuvent fausser jusqu’à 100% les estimations post-synthèse logique (pre-layout). Il est donc souhaitable d’estimer la fréquence d’horloge après le placement/routage pour reinjecter cette valeur dans les simulations temporelles sur les modèles physiques. 3.4.4.2 La validation fonctionnelle La validation fonctionnelle doit nous permettre d’apporter la preuve que le circuit respecte un certain nombre de propriétés critiques. Ces propriétés 78 peuvent être spécifiques à l’application (p.e. «si la tension d’alimentation devient inférieure à , alors la commande arrête le moteur»), ou au contraire d’ordre général (p.e. vérifier qu’il n’y a pas de blocage logique possible). Remarquons que les techniques de preuve formelle permettent uniquement de dire si une propriété est vraie ou non pour un circuit donné. La difficulté réside dans le fait de définir des propriétés cohérentes. Nous ne voulons pas ici examiner l’ensemble des techniques de preuve formelle qui existent, mais seulement nous pencher sur les problèmes spécifiques à la commande. Comme nous l’avons déjà expliqué, la commande peut se composer de plusieurs blocs fonctionnels. Ces blocs reposent sur des modèles de comportement différents pour lesquels les techniques de preuve formelle diffèrent. Les techniques automatisées de preuve formelle concernent les machines d’état. Le principe est de rechercher les séquences défaillantes pour une propriété donnée. Par contre, nous ne connaissons pas à l’heure actuelle d’outils ou de méthode pour la preuve formelle de propriétés mathématiques du système. Or au niveau de la commande, nous voulons valider deux types de propriétés: 1. les propriétés logiques sur le fonctionnement des machines d’état (protocoles, fonctions logiques de surveillance, séquencement d’opérations ...etc.). 2. des propriétés arithmétiques sur l’exécution des opérations (dépassement de capacité, précision binaire). Pour valider la commande, nous allons devoir extraire d’une part les machines d’état de la commande, et d’autre part, le séquencement des opérations avec le chemin de données associé. Le deuxième point important de cette technique de validation est l’emploi d’une stratégie «diviser pour mieux conquérir». Cette stratégie consiste à valider hiérarchiquement le système au lieu de tout mettre à plat. L’avantage évident est la limitation de la complexité du problème, et donc une limitation des ressources CPU nécessaires. Examinons maintenant pour chaque type de propriété les techniques employées. Les propriétés logiques Pour la validation de ces propriétés, on a recourt aux techniques de preuve formelle «classiques»: à partir des propriétés à vérifier et d’un modèle formel de la machine d’état, l’outil de preuve formelle détermine si la description satisfait les propriétés données. Si ce n’est pas le cas, l’outil génère la séquence d’état et les entrées associées qui provoquent l’erreur. Les propriétés arithmétiques Classiquement, la vérification de propriétés arithmétiques du modèle n’est pas couverte par les techniques de preuve formelle. Nous proposons ici une technique qui doit nous permettre de vérifier deux propriétés importantes du système de commande: le dépassement de capacité binaire et la précision de calcul. 79 Malheureusement, on remarque que ces propriétés dépendent à la fois de données statiques intrinsèques à la commande (constantes, format binaire, nature des opérations) et des données dynamiques (opérandes, éventuellement séquencement dynamique), ce qui complique énormément la validation. Prenons le cas d’un filtre du premier ordre numérique. Son équation discrète est donnée par: & ' & ' & ' avec et deux constantes du filtre. Une telle équation récursive est problématique pour les validations mathématiques que nous nous proposons de faire puisque la précision varie selon le nombre d’itérations. Pour surmonter la difficulté, nous employons là encore la stratégie de «diviser pour mieux conquérir». La commande algorithmique se compose généralement d’un assemblage de fonctions facilement identifiables telles que des filtres numériques, des régulateurs, des multiplications matricielles, des rotations ...etc. Pour chacune de ces fonctions prises séparément, on cherche à définir des intervalles de variation des variables binaires d’entrée et la précision atteinte pour un format binaire donné. Pour obtenir l’intervalle de variation des variables d’entrée de la commande, il suffit de chaîner les fonctions selon la (ou les) séquence(s) définie(s) par la machine d’état (extraite du modèle flot de données de la commande algorithmique) et rechercher la fonction critique qui limite les variables d’entrées. En ce qui concerne la précision de calcul, on effectue de même, mais cette fois-ci en ajoutant l’imprécision générée par chaque fonction de la séquence. En répétant l’opération pour chaque séquence, on détermine le cas le plus défavorable. Cette méthode, applicable pour des cas simples, n’est actuellement pas gérable dans des cas complexes. Une des causes est l’augmentation du nombre de séquences, problème qui pourrait se résoudre par l’automatisation de la méthode. Mais la difficulté principale réside dans le fait que plus la fonction étudiée est complexe, et plus le nombre de variables et d’opérations intervenant dans la précision du résultat final croît. La relation entre les opérandes et la précision (lorsqu’elle existe) devient rapidement trop complexe pour être déterminée (cf. pour exemple l’étude de la précision du CORDIC, p. 190). Reste alors le recourt à la simulation qui n’apporte pas de preuve formelle. 3.5 Méthodologie d’intégration de la commande En premier lieu, nous commençons par présenter les langages de modélisation utilisés, puis les outils de conception associés. Nous finissons par le flux de conception qui représente le canevas sur lequel nous avons calqué l’exemple d’application (cf. chapitre 5). 80 3.5.1 les langages de modélisation Dans la méthode de conception mixte, nous avons répertorié six modèles successifs de conception. Pour associer à chaque modèle un langage de conception correspondant, nous nous basons sur la nature de la fonction modélisée et non sur la nature du modèle. En effet, un même langage peut servir à modéliser un système à différents niveaux d’abstraction. Un cas typique est VHDL (ou Verilog). On peut modéliser un système fonctionnellement (en arithmétique réelle ou binaire), on peut affiner de tels modèles et finalement, on peut modéliser le système structurellement et même temporellement toujours avec le même langage. On voit qu’un même langage (VHDL en l’occurence) peut servir pour les huit modèles de la méthodologie de conception mixte. Nous considérons néanmoins qu’une telle approche n’est pas optimale. En effet, chaque langage de conception a été conçu dans un but précis et son utilisation à d’autres fins se révèle souvent complexe et peu efficace. VHDL est bien adapté à la description matérielle de systèmes électroniques digitaux. Son utilisation pour la modélisation fonctionnelle de systèmes en arithmétique réelle ou pour la description de logiciel s’avère ardue et peu efficace. Nous opinons que pour la modélisation de systèmes hétérogènes complexes, l’utilisation de plusieurs langages spécialisés, adaptés à la nature de la fonction modélisée, est préférable à la modélisation globale par un seul et même langage tout au long de la conception. Ceci implique bien sûr qu’un effort particulier doit être consacré aux interfaces entre langages et que par conséquent, une normalisation des protocoles d’échange de données serait fortement souhaitable. Examinons maintenant pour chaque niveau d’abstraction, le (ou les) langage de modélisation employé. 3.5.1.1 Le modèle de compréhension A ce niveau de la conception, nous nous trouvons à une étape charnière du processus global de développement du système, entre la conception de l’algorithmie de commande et des fonctions logiques, et l’intégration sous forme de système. Il est peu probable qu’une seule et même personne s’occupe de l’ensemble de la conception. Plus vraisemblable est le cas où le développement est distribué entre des spécialistes de la commande et de l’électrotechnique, et des concepteurs de systèmes intégrés. Il faut donc trouver une forme de représentation simple permettant de transmettre les informations d’un domaine vers l’autre. Pour décrire complètement la commande, nous devons représenter trois types de fonctions: – L’algorithme de contrôle se représente clairement sous forme de schéma bloc (cf. Fig. B.10, p. 173). Cette représentation présente l’intérêt d’être couramment utilisée en électrotechnique par les simulateurs analogiques, ce qui facilite la cosimulation avec le modèle du moteur. – Les protocoles se représentent le mieux par un diagramme des signaux associé à un graphe type réseau de Pétri ou Grafcet. 81 – Pour les fonctions logiques, nous avons choisi d’utiliser le Grafcet en raison de sa simplicité d’emploi et de son adéquation à la modélisation de systèmes digitaux. Nous reviendrons au chapitre 4 sur ce langage graphique et sur l’intérêt qu’il présente dans le cadre d’une conception mixte. 3.5.1.2 Les modèles de spécification Pour l’ensemble des trois modèles de spécification (fonctionnel, partitionné et spécification affinée), ainsi que pour les deux types de fonctions à représenter (flux de données et blocs réactifs), nous avons décidé d’utiliser le Grafcet. Plusieurs raisons ont orienté ce choix: – Le Grafcet est bien adapté à la modélisation des flux dynamiques de données, et donc, aux algorithmes de commande dont la structure fortement séquentielle et dynamique exige aussi d’importantes ressources de calcul – lorsque les fonctions réactives de la commande sont réduites, ce qui est souvent le cas des systèmes de commande, le Grafcet peut être utilisé en tant que modèle de machine d’état. Si la complexité de ces fonctions augmente, il est préférable d’utiliser des langages appropriés comme Esterel. – Finalement, le Grafcet permet une conception hiérarchique ce qui est très appréciable pour des systèmes de commande souvent très complexes et ce qui facilite le processus d’affinement des modèles. Malheureusement, il n’existe pas actuellement d’outil permettant de simuler un modèle Grafcet tel que nous l’interprétons (cf. 4.2.2). Nous avons donc dû traduire le modèle Grafcet des fonctions algorithmiques vers un langage simulable, en l’occurence le script de MATLAB. Rappelons que les modèles de spécification sont des modèles fonctionnels qui ne décrivent pas l’architecture du système, information qui relève du modèle physique. Par conséquent, le modèle MATLAB décrit des opérations binaires qu’effectuera le système ainsi que leur séquencement. 3.5.1.3 Les modèles physiques Les modèles physiques représentent la dernière étape avant la réalisation physique du système (layout et code objet). Ils décrivent le système au niveau de son exécution temporelle. Les langages à utiliser doivent pouvoir modéliser facilement le type de dispositif employé. Nous avons donc choisi VHDL pour la modélisation du matériel et l’assembleur (ou le code C lorsque le compilateur est disponible) pour le logiciel. Nous avons préféré VHDL à Verilog (HDL développé par Cadence) car VHDL étant une norme (standart ANSI/IEEE 1076-1993), les modèles sont portables en simulation. C’est à dire qu’ils sont simulables sur tout simulateur respectant la norme, ce qui est le cas pour la plupart d’entre eux. 82 3.5.1.4 Les outils de conception Comme nous l’avons vu au paragraphe précédent, le choix des langages de conception s’est basé en partie sur les caractéristiques intrinsèques des langages, mais aussi sur la disponibilité et les caractéristiques des outils de conception associés. C’est notamment le cas de MATLAB qui occupe une place à part dans les choix qui ont été faits. En effet, MATLAB n’est pas un outil de développement microélectronique même s’il comprend l’utilitaire DSPACE permettant de générer du code C, compilable sur des DSP commerciaux, à partir d’un schéma bloc. Le choix de cet outil est lié à l’étape de compréhension de l’algorithme et à la vérification fonctionnelle du système. Nous détaillerons ces points en 3.5.2, p. 83, mais ajoutons que l’intérêt principal de MATLAB réside dans le fait qu’il nous permet de simuler conjointement un modèle binaire du système (modèle de spécification) avec un modèle analogique du moteur (sous forme de schéma bloc). De ce fait, nous pouvons simuler le système dans son environnement analogique et vérifier ainsi que le fonctionnement est correct. Le modèle MATLAB du système se présente sous forme de fonctions écrites en langage interprété de MATLAB, un langage similaire au C. La simulation mixte analogique/numérique s’effectue sous l’environnement SIMULINK de MATLAB qui permet de modéliser les fonctions de transfert des systèmes analogiques par des schémas blocs. En ce qui concerne la simulation des modèles VHDL et leur synthèse, nous avons utilisé SYNOPSYS. Cet outil s’est imposé dans la plupart des entreprises développant des ASIC et est reconnu pour la qualité de sa synthèse. Les simulateurs de SYNOPSYS supportent l’ensemble de la norme VHDL-93 et offrent un environnement de déboggage puissant. Le choix de la technologie de prototypage s’étant porté sur Altera, nous avons utilisé également l’outil de compilation et placement/routage Maxplus2. Précédemment, des tests de prototypage avec des technologies semi-custom nous ont amené à utiliser également les outils de CADENCE pour le placement/routage. Mais les technologies FPGA présentant plus d’intérêt pour le prototypage et assurant des fréquences de calcul suffisantes, nous n’avons pas poursuivi les travaux avec CADENCE. 3.5.2 Le flux de conception Le flux de conception a été représenté figure 3.4, p. 87. Comme on peut le constater, cette méthodologie ne diffère pas fondamentalement de celle présentée au chapitre 2. On retrouve les étapes génériques d’une conception mixte, mais avec en sus des opérations spécifiques à la commande. La spécification système: Le système est d’abord spécifié fonctionnellement avec le Grafcet, puis le modèle est traduit en script MATLAB pour permettre une simulation fonctionnelle du système. La simulation du script se base de fait sur l’hypothèse de synchronisme fort. 83 La simulation fonctionnelle: La cosimulation du modèle binaire du système et du modèle analogique de la chaîne d’entraînement est effectuée avec l’utilitaire SIMULINK. Afin de coupler la simulation du modèle analogique, nécessairement dépendant du temps, avec le script MATLAB, nous invoquons le script à chaque période d’échantillonnage, puis nous appliquons le résultat à la période suivante. Une fonction fait office d’interface en générant des signaux MLI dépendant de la fréquence d’horloge. L’évaluation du modèle de la chaîne d’entraînement est quant à elle gérée par la méthode de résolution numérique (méthode de Gear) qui utilise un pas variable. Malheureusement, en raison de la définition des signaux MLI avec une résolution égale à la période d’horloge, le pas utilisé pour évaluer le modèle analogique est ramené au maximum à la période d’horloge. De ce fait, le rapport entre la constante de temps du moteur et le pas de calcul de la simulation est le plus défavorable (de l’ordre de ). Pour améliorer ce rapport, il faudrait évaluer la fonction d’interface avec un pas variable. La figure 3.3, p. 84, représente le banc de simulation sous MATLAB. F IG . 3.3 – cosimulation sous MATLAB Partionnement/estimation: Le partitionnement et l’estimation de performances sont effectués manuellement en utilisant les techniques proposée en 4.3.1. L’estimation de performances étant très peu précise, nous utilisons les estimations obtenues après synthèse ou assemblage pour affiner le partitionnement. Affinement des modèles: La technique retenue ici est l’emploi d’IP 2 réutilisables. Ces blocs, en partie configurables grâce à l’emploi de paramètres génériques, réalisent des fonctions standarts utilisables dans différents projets de conception (ALU, protocoles, gestion des mémoires, gestion 84 des CAN ...etc.). Durant ce projet, nous avons développé plusieurs IP réalisant des fonctions standarts utilisables pour intégrer des systèmes de commande (ALU spécifique, processeur mathématique adapté, gestion de CAN ...etc.). A travers le modèle Grafcet, nous pouvons faire appel à ces IP et affiner ainsi la spécification du système. 2. Intelectual Property 85 Synthèse de code matériel et logiciel: A partir du modèle Grafcet, nous générons les codes de description haut niveau manuellement en nous basant sur des règles que nous évoquons en 4.3.2. Grâce à l’utilisation d’IP et au séquencement statique des opérations, la génération de code peut se réduire essentiellement à une machine d’état. Test des propriétés mathématiques: Le test des propriétés citées en 3.4.4.2, p. 79, s’effectue actuellement d’abord à la main puis par simulation fonctionnelle. Pour la simulation, nous utilisons le banc en simulation sous MATLAB. Le modèle MATLAB du système étant paramétré, on peut faire varier la longueur des mots binaires utilisés et vérifier ainsi les propriétés de précision et d’overflow. Test logique: Pour le test formel, nous nous contentons actuellement de vérifier quelques propriétés critiques par des simulations des modèles VHDL avec des vecteurs d’entrée appropriés. Nous n’effectuons pas de validation formelle en raison de la complexité de la tâche et du manque d’outils appropriés. Synthèse des modèles physiques: A partir de la description VHDL, on génère le modèle physique de la partie matériel par synthèse avec Synopsys. Le modèle généré est un schéma de portes logiques décrit par une netlist en VHDL, EDIF ou Verilog. Le code C, lorsqu’il est généré au lieu de l’assembleur, est compilé par un compilateur spécifique au DSP. Émulation: L’émulation des systèmes de commande est effectuée sur des cartes de prototypage spécifiques. L’une des cartes comprend un FPGA avec les circuits d’acquisition de mesures. L’autre reprend l’architecture décrite en 3.3.2, p. 72, c’est à dire un DSP, un FPGA, des mémoires vives, des bus, les circuits d’acquisition des mesures et la logique de programmation des dispositifs. Cette dernière carte est encore en phase de test. Le tableau 3.1, p. 88, synthétise les outils et langages associés à chaque étape de la conception. La méthodologie apparaît actuellement essentiellement manuelle, mais, vue l’aspect systématique des tâches à réaliser, une automatisation presque totale est envisageable. 3.6 Conclusion La méthodologie de conception mixte étant trop complexe à appliquer dans le cas général, nous avons proposé une méthode spécifique à l’intégration des systèmes de commande. Après avoir formalisé les problèmes spécifiques à l’intégration de la commande, et situé leur traitement dans la méthodologie, nous avons proposé des solutions théoriques pour les résoudre. Nous avons également défini des restrictions au champ d’application de la méthode afin de limiter la complexité des problèmes traités. Nous définissons en particulier l’architecture des systèmes de commande que nous utilisons. 86 F IG . 3.4 – Flux de conception d’un système de commande 87 TAB . 3.1 – Synthèse des outils et langages associés à la méthodologie 88 Test des propriétés mathématiques Test logique Émulation Placement / routage Assemblage Simulation fonctionnelle Tâches Spécification modèle de compréhension modèle de spécification Partitionnement / Estimation Affinement du modèle Synthèse de code matériel/logiciel Synthèse des modèles physiques MATLAB Grafcet, diagramme de signaux Grafcet Grafcet VHDL/assembleur synthèse de VHDL vers EDIF, VHDL ou Verilog EDIF/Verilog assembleur MATLAB, schéma bloc SIMULINK MATLAB VHDL/Grafcet Modèles manuel, simulation MATLAB manuel, simulation SYNOPSYS carte spécifique Altera, Cadence spécifique au processeur SIMULINK manuel manuel manuel SYNOPSYS Outils Les solutions théoriques étant définies, nous avons décrit les solutions pratiques mises en oeuvre ainsi que les outils et langages utilisés. La méthodologie spécifique à l’intégration des systèmes de commande a été finalement proposée de même que des perspectives pour l’automatisation de la méthode. 89 90 Chapitre 4 Implantation de la méthodologie: Solution à base de Grafcet 4.1 Introduction Le chapitre suivant est consacré à l’utilisation du Grafcet pour la conception de systèmes intégrés. Le Grafcet n’est pas prévu pour cet usage, mais il présente des caractéristiques intéressantes qui nous ont amené à le choisir. Afin de l’utiliser, nous proposons donc une nouvelle interprétation du Grafcet et faisons quelques ajouts à la sémantique en vigueur. Nous présentons ce travail de réflexion sur le Grafcet en trois parties. En premier lieu, nous abordons la modélisation par Grafcet, c’est à dire la sémantique (graphique et textuelle) à utiliser pour la modélisation des systèmes de commande et les règles et hypothèses de fonctionnement des modèles. Puis nous proposons des techniques et des règles pour l’analyse des modèles en vue de l’intégration. Nous montrons en particulier comment analyser les implications matérielles d’un graphe donné (architecture, performances) et comment estimer les performances à partir du modèle. Finalement, nous abordons la synthèse de code de description du système à partir du Grafcet et notamment la synthèse de VHDL. 91 4.2 Le Grafcet comme modèle en vue de l’intégration En 1966, Pétri et Holt proposent un nouvel outil, appelé «réseaux de PETRI», s’avérant particulièrement puissant pour la modélisation de systèmes. D’abord utilisé par les informaticiens, il a été rapidement repris par les automaticiens. Depuis, cet outil est également utilisé en microélectronique où il sert entre-autre à la modélisation de circuits asynchrones [24] et à la preuve formelle. En 1977, le groupe de travail «systèmes logiques» de l’AFCET 1 met au point le Grafcet 2 , outil dérivé des réseaux de Pétri. Moins puissant, surtout en ce qui concerne l’analysabilité, il est par contre extrêmement simple, ce qui lui a valu son succès. Depuis, ce modèle a été normalisé au plan français (norme NF CO3 190) et international (norme CEI 848). Par la suite, nous faisons appel à des notions sur les réseaux de Pétri pour définir le Grafcet. Pour plus de renseignements, le lecteur pourra se reporter aux ouvrages spécialisés [28][9][48]. En dehors des aspects purement mathématiques de la modélisation des systèmes physiques, l’utilisation, pour la description du modèle, de langages textuels ou graphiques relève souvent du goût personnel et des habitudes. Il est toutefois indéniable que les langages textuels génèrent souvent des descriptions plus simples lorsque le système décrit est essentiellement dédié au traitement numérique de données (data-intensive en anglais). Par contre, une description visuelle est généralement plus efficace et plus facile à comprendre lorsque le système modélisé est dédié au contrôle d’opérations (control-intensive en anglais). Avec le Grafcet, nous avons voulu concilier un langage graphique avec une description textuelle afin de modéliser des systèmes de commande qui sont à la fois dédiés au traitement numérique et au contrôle des données d’entrée. Pour cela, nous avons repris le formalisme graphique du Grafcet tel qu’il est précisé dans la norme, et nous nous sommes inspirés du VHDL pour décrire textuellement les actions associées au graphe. De cette manière, nous obtenons des modèles simples à concevoir, faciles à comprendre en vue de la documentation de la conception, et suffisamment puissants pour modéliser des systèmes digitaux au niveau fonctionnel. Toutefois, afin que le Grafcet soit réellement utile et ne se limite pas à un formalisme graphique pour la spécification des systèmes, il faut définir des règles mathématiques de fonctionnement du modèle. Pour cela, nous commençons par décrire les caractéristiques principales du Grafcet tel qu’il est défini par la norme, tout en indiquant les différences avec les réseaux de Pétri et les conséquences que cela entraîne sur la modélisation. Mais, ainsi défini, on verra que le Grafcet pose des problèmes d’interprétation pour la description de systèmes microélectroniques, problèmes que nous traitons au paragraphe 4.2.2, p. 94. 1. Association Française pour la Cybernétique Economique et Technique 2. Graphe Fonctionnel de Commande Etape Transition 92 Finalement, pour assurer une modélisation sans ambiguïté et éviter des erreurs de conception, nous proposons quelques restrictions à la norme. 4.2.1 Rappel des principales caractéristiques du Grafcet Bien que proche des réseaux de Pétri, le Grafcet en diffère sur un certain nombre de points: – Le Grafcet est un graphe constitué d’Étapes, représentées par des rectangles, et de Transitions. – A chaque Étape sont associées une ou plusieurs actions. – A chaque Transition est associée une condition d’évolution appelée Réceptivité. – Un Grafcet évolue par Activation des Étapes. Contrairement aux réseaux de Pétri, la notion de marqueur n’existe pas et donc «l’indivisibilité et l’infusionabilité» des marqueurs non plus, ni d’ailleurs la notion de conflit. Si la modélisation s’en trouve simplifiée, des imprécisions apparaissent sur la représentation du «ET» et du «OU exclusif» qui peuvent être identiques. Considérons par exemple le cas des figures 4.1 (a) et 4.1 (b), p. 93, où nous modélisons le même système par un réseau de Pétri et par un Grafcet. (a) réseau de Pétri (b) Grafcet F IG . 4.1 – Modélisation d’un branchement OU par réseau de Pétri et par Grafcet Sur ces figures, et sont des transitions auxquelles sont associées respectivement les conditions (ou réceptivités) et . Supposons que les deux conditions soient réalisées en même temps. Un conflit apparaît alors pour le réseau de Pétri. Par contre, ce conflit est inexistant au niveau du Grafcet. Les transitions sont franchies simultanément, activant les étapes 2 et 3 et désactivant l’étape 1. Dans cette situation, ce Grafcet modélise le comportement logique d’un «ET». Par contre, si une seule condition se réalise, une seule transition est franchie, activant l’étape suivant. Dans cette situation, le Grafcet modélise 93 un «OU». On voit donc qu’il peut y avoir un problème de représentation avec le Grafcet. En tout état de cause, on peut dire que la fonction modélisée ici est un «OU inclusif». – Avec la disparition de la notion de marquage disparait également la notion de bornage: si on réactive une étape déjà active, elle restera active. – Contrairement aux réseaux de Pétri, le Grafcet permet de définir une réceptivité associée à une transition en faisant appel explicitement à l’état d’activation (ou non) d’une étape d’un Grafcet. Cette propriété permet souvent de simplifier les machines d’état, notamment pour la modélisation des communications entre elles. – Le Grafcet envisage la hiérarchisation de la conception grâce aux notions de sous-programme et de macro-étape. Ces deux notions permettent de représenter l’appel à des sous-graphes par des étapes spécifiques. Dans le cas des macro-étapes, l’appel au sous-graphe s’effectue une seule fois lors de l’activation de la macro-étape. Dans le cas du sous-programme, le sous-graphe est exécuté chaque fois que le sous-programme est activé. 4.2.2 Interprétation du Grafcet Le but de notre utilisation du Grafcet est de modéliser des systèmes digitaux réalisés sous forme matériel, logiciel ou mixte. Toutefois, nous ne considérerons ici que la modélisation de systèmes strictement synchrones. La conception de systèmes asynchrones posant trop de problèmes non résolus (métastabilité, test fonctionnel des modèles, test physique ...etc.), nous ne l’envisageons pas actuellement. Pour l’interprétation du Grafcet, nous considérons deux points qui sont restés relativement imprécis jusqu’à présent: 1. la nature des actions associées à une étape 2. les règles de fonctionnement Pour chacun de ces points, nous examinons maintenant ce que précise la norme et comment l’adapter au cas de la modélisation de systèmes digitaux synchrones. 4.2.2.1 La nature des actions associées à une étape Le Grafcet étant défini à l’origine pour les automatismes industriels, la norme définit la structure du système modélisé comme étant composée d’une partie opérative (le processus) commandée par une partie commande (l’automatisme). Des ordres sont émis par l’automatisme vers le processus et celui-ci renvoie des compte-rendus. Selon la norme, les actions associées aux étapes sont les ordres émis par l’automatisme, c’est à dire en fait des signaux booléens. Notre objectif est de modéliser par le Grafcet des systèmes digitaux au niveau fonctionnel. En d’autres termes, nous voulons représenter: 1. les opérations (arithmétiques ou logiques) effectuées par le système 94 2. le séquencement de ces opérations Ceci étant posé, on définit les actions associées à une étape comme les opérations logiques ou arithmétiques effectuées par le système. On remarquera qu’une opération logique peut se réduire à une affectation de signal logique. Notre définition des actions associées à une étape est une généralisation du concept d’action, mais qui permet encore de modéliser directement un automate intégré sur silicium ou une machine d’état commandant un chemin de données. En définissant le type d’actions exécutées à l’activation d’une étape, nous devons également définir les objets sur lesquel opèrent ces actions. A ce niveau, nous sommes obligés de faire une digression momentanée pour parler des notions de concurrence, de signal, et de variable tels qu’elles sont définies par VHDL. Afin de modéliser l’évolution temporelle des circuits intégrés, VHDL définit des objets qui sont créés au début de la simulation et qui ne sont détruits qu’à la fin. Les signaux sont un exemple de ces objets. Un signal peut prendre des valeurs de type arbitraire, mais à chaque instant de la simulation, il prend une valeur donnée. Cette notion de permanence des objets est liée à la notion de concurrence des évènements, c’est à dire des évènements qui se produisent en même temps. L’affectation de signaux est un exemple d’opération concurrente (lorsqu’elle n’est pas effectuée dans un bloc d’instructions séquentielles), c’est à dire que des signaux différents peuvent changer de valeur au même instant. A cette notion de concurrence répond la notion de séquentialité, c’est à dire l’exécution d’instructions selon un séquencement défini. Ces instructions séquentielles sont regroupées dans des «block» ou des «process» qui sont eux des objets concurrents. A l’intérieur des processus, il est possible de définir des variables qui sont des objets purement séquentiels et dont la valeur n’est pas liée à la notion de temps. Pour plus de détails, le lecteur pourra se reporter à l’ouvrage de Aireau et al [46] sur la modélisation avec VHDL. Pour en revenir à notre problème, nous avons décidé de reprendre les concepts proposés par VHDL pour définir les objets avec lesquels nous travaillons en Grafcet: – un graphe est un objet concurrent – nous appliquons les actions sur des signaux et variables – les réceptivités peuvent utiliser des variables et des signaux – les signaux sont visibles de plusieurs graphes concurrents – l’affectation d’un signal est effectuée par un seul graphe – les variables ne sont visibles que dans leur propre graphe et elles prennent leur valeur immédiatement 95 4.2.2.2 Les règles de fonctionnement Pour définir le séquencement des opérations fonctionnelles, il faut fixer les règles d’évolution du Grafcet. La norme précise cinq règles de base: Situation initiale: Au début du fonctionnement du graphe, un certain nombre d’étapes doivent être actives. Cette ou ces étapes initiales sont représentées par un double carré. Franchissement d’une étape: Une transition entre étapes est dite «validée» si toutes ses étapes d’entrée sont actives. Elle sera franchie si elle est validée et si la réceptivité qui lui est associée est vraie. Le franchissement est alors immédiat et obligatoire. Évolution des étapes actives: Le franchissement d’une transition entraîne l’activation de toutes les étapes immédiatement suivantes et la désactivation de toutes les étapes immédiatement précédentes. Évolutions simultanées: Plusieurs transitions simultanément franchissables sont simultanément franchies. Activation et désactivation simultanées: Si au cours du fonctionnement, une même étape doit être à la fois activée et désactivée, elle reste active. A partir de ces règles, il est possible de faire évoluer un modèle Grafcet, mais il faut examiner également s’il est possible de modéliser sans ambiguïté le fonctionnement d’un système synchrone. Le formalisme du Grafcet permet de définir une réceptivité en incluant la scrutation d’un changement d’état d’un signal, ce qui autorise la synchronisation de l’exécution du graphe avec un signal d’horloge. En figure 4.2, p. 97, nous proposons un exemple de système digital, le modèle Grafcet correspondant et le diagramme des signaux. Cet exemple montre qu’il est possible de modéliser un système synchrone en se basant uniquement sur les règles d’évolution du Grafcet édictées par la norme. Mais en fait, ce formalisme est très lourd à porter et surtout très complexe à interpréter. En faisant intervenir le temps, la lecture du Grafcet devient imprécise. Dans notre exemple, comment doit-on interpréter le chargement du registre: se charge-t-il lors de l’activation de l’étape 2, lors du franchissement de la transition ou à l’activation de l’étape 3? Si on se réfère au diagramme 4.2-c, les trois hypothèses peuvent se justifier. Ce genre de problèmes d’interprétation peut être évité si on adopte l’hypothèse de synchronisme fort proposée avec les langages synchrones type Esterel [3]. Cette hypothèse suppose que les opérations du modèle s’effectuent instantanément à moins que leur durée ne soit précisée explicitement. En adoptant cette hypothèse, on est amené à considérer le temps comme une séquence d’évènements discrets entre lesquels rien d’intéressant ne peut arriver. Pour en revenir au Grafcet, cela signifie que les actions d’une étape valide sont exécutées au moment où on évalue la réceptivité de la transition de sortie. Quant aux réceptivités associées aux transitions de sortie d’étapes valides, elles sont évaluées chaque fois qu’un signal du graphe est activé, c’est à dire qu’une transition se produit sur ce signal. On remarquera qu’une transition n’a pas 96 (a) Système à modéliser (b) Modèle Grafcet (c) Diagramme des signaux F IG . 4.2 – Exemple de modélisation par Grafcet 97 besoin d’être franchie pour que des actions soient exécutées. L’exemple de la figure 4.3 illustre ce propos. Les étapes 2 et 3 sont validées lorsque la transition est franchie. L’action associée à l’étape 2 est alors exécutée deux fois: une fois à l’évaluation de et , puis une fois à l’évaluation de et . L’hypothèse de synchronisme assure aussi la notion de concurrence puisque deux évènements peuvent soit se produire strictement en même temps (ils sont concurrents), soit à des instant différents. Pour pouvoir utiliser l’hypothèse simplificatrice de synchronisme fort, il faut bien sûr que la période d’horloge du système modélisée soit supéF IG . 4.3 – Modèle Grafcet avec branche- rieure au chemin critique du circuit. Un autre point problématique qui ment ET apparaît à la lecture des graphes est la définition des signaux sur l’ensemble du temps de simulation. Rappelons qu’un signal est un objet concurrent, ce qui signifie que sa valeur doit être définie sur l’ensemble du temps de simulation. Or, nous avons dit qu’une action est exécutée lorsqu’une étape est valide. Par conséquent, à moins d’affecter leur valeur à tous les signaux à chaque étape, les signaux d’un graphe resteront en partie indéfinis. Il faut donc introduire un formalisme permettant de définir les valeurs par défaut des signaux traités. 4.2.3 Restrictions à la modélisation par Grafcet La simplicité du Grafcet est un avantage important, mais elle peut s’avérer également problématique lorsque l’analyse du modèle est équivoque ou que certaines structures risquent de provoquer des erreurs de conception. Pour cette raison, nous avons posé trois restrictions importantes à la modélisation par le Grafcet: 1. Le Grafcet permet de conditionner l’exécution d’une action associée à une étape valide (cf. Fig. 4.4, p. 99). Cette structure peut être à l’origine de problèmes de conception. En effet, pour être certain que le modèle et le système aient des fonctionnements identiques, il faut que la condition soit synchrone avec l’horloge globale, ou que la condition puisse être évaluée dans un temps nettement inférieur à la période d’horloge. Or ce genre de condition peut être difficile à vérifier. Il est donc préférable de s’abstenir d’utiliser cette structure. 98 2. Comme nous l’avons déjà indiqué en 4.2.1, p. 93, les branchements en OU des transitions de sortie pose un problème d’analyse du modèle. Pour éviter tout risque d’erreur de fonctionnement, nous restreignons donc l’usage de cette structure au OU exclusif ce qui veut dire que les réceptivités associées à chaque transition du OU devront être exclusives. 3. Du fait de la limitation du Grafcet à la modélisation de systèmes synchrones, la modélisation de fonctions purement combinatoires devra utiliser un autre type de modèle (p.e. tableau de Karnaugh) F IG . 4.4 – Formalisme de condition sur une action en Grafcet 4.2.4 Survol d’autres langages synchrones Le travail sur les langages synchrones pour la conception de systèmes digitaux , principalement mené en France, a abouti au développement de langages qu’on pourrait classifier en deux catégories: 1. Les langages optimisés pour la modélisation de systèmes de traitement des données. 2. Les langages optimisés pour la modélisation d’automates. Les langages Lustre [39], Argos et Signal [44] font parti de la première catégorie. D’un formalisme relativement complexe, ces langages restent utilisés essentiellement au niveau universitaire. Les langages Esterel et Statecharts [22], par contre, ont été conçus pour la modélisation et vérification de systèmes réactifs, c’est à dire des systèmes qui réagissent à des stimuli externes et renvoient des signaux de sortie appropriés. On trouve typiquement ce genre de systèmes dans le contrôle de procédés industriels, le contrôle de voitures, d’avions et de trains, les protocoles audio et vidéo ...etc. L’intérêt majeur de Esterel est la simplicité de la description de systèmes réactifs: en quelques lignes, il est possible de décrire un fonctionnement qu’il ne serait possible de modéliser qu’avec un graphe de plusieurs centaines d’états. Et cet avantage se renforce lorsque le nombre d’entrées à scruter croît. Ce langage a d’ailleurs trouvé un écho très favorable au niveau industriel. 99 Statecharts quant à lui se présente sous la forme d’un langage graphique. Plusieurs versions de ce langage existent. Dans sa version commerciale [8], il présente deux interprétations. Soit le concepteur choisit de baser la simulation sur l’hypothèse de synchronisme fort, soit il fait évoluer le modèle sur la base d’un signal d’horloge, l’hypothèse de synchronisme n’étant plus respectée. Ces deux langages présentent malheureusement une lacune importante: leur support pour une conception hiérarchique est très réduit, ce qui peut s’avérer problématique pour des systèmes très complexes. 4.3 Analyse des modèles Grafcet La modélisation d’un système par le Grafcet n’a pas beaucoup d’utilité si on ne sait pas analyser le modèle en vue de son intégration. Dans l’optique d’une méthodologie d’intégration mixte, nous nous intéressons au partitionnement matériel/logiciel du modèle, à l’analyse architecturale de la partie matérielle, et à l’estimation de performances. 4.3.1 Partitionnement matériel/logiciel Comme nous l’avons déjà indiqué en 2.4.1.2, le partitionnement d’un modèle requiert de définir d’abord la granularité de la partition. Cette notion implique une hiérarchie du système facilement identifiable (p.e. des fonctions, procédures ou blocs d’instructions). Le Grafcet, grâce à la structure hiérarchique de ses macro-étapes et de ses fonctions, se prête fort bien à cette définition de la granularité. A partir de ce point, le partitionnement peut être effectué en attribuant par exemple une propriété à chaque noeud/étape. Dans l’état actuel de nos connaissances, nous sommes partisans actuellement d’un partitionnement manuel soutenu par une estimation automatique des performances. Notre opinion est basée sur le fait qu’un partitionnement automatique, lorsqu’il est possible, nécessite énormément de ressources CPU là où le concepteur pourra avantageusement appliquer son expérience et sa connaissance intuitive du système. Une fois le système partitionné, il faut déterminer l’ordre d’exécution des noeuds. Ce problème n’ayant pas fait l’objet d’une étude particulière, nous nous en tiendrons à ce qui a été dit en 2.4.1.2. Lors de la mise en pratique, nous avons opté pour un séquencement statique des opérations. 4.3.2 Analyse architecturale Si l’architecture du système et celle du processeur sont figées, il n’en est pas de même de la partie matériel, ce qui laisse au concepteur une marge de manoeuvre pour atteindre les performances souhaitées. 100 A partir du modèle Grafcet fonctionnel du système, il est possible d’explorer différentes solutions architecturales. Là aussi, on se basera sur les estimations de performance. Classiquement, le concepteur a le choix entre deux stratégies de développement architectural: 1. Soit il choisit d’optimiser la surface au détriment de la fréquence de calcul. L’architecture la mieux adaptée est alors du type microprocesseur avec une machine d’état et un chemin de données dans lequel on réutilise les mêmes ressources matérielles pour calculer différentes fonctions (p.e. cas d’une ALU). Appelons cette classe d’architecture des «architectures séries». 2. Soit il recherche une fréquence de calcul élevée ce qui implique de calculer le plus de fonctions possibles en parallèle et de minimiser le chemin critique par la technique du «pipeline». Appelons ce type d’architecture des «architectures parallèles». Entre ces deux extrêmes se trouve une infinité de compromis architecturaux qui permettent au concepteur de trouver la solution la mieux adaptée à ses contraintes techniques. L’analyse architecturale du Grafcet a deux objectifs: 1. Analyser les implications architecturales du modèle. En effet, selon le graphe utilisé pour modéliser une fonctionnalité, l’implantation sera différente. Aussi, pour intégrer le système avec une certaine architecture, il pourra être nécessaire de modifier le graphe. 2. Estimer les performances des solutions architecturales possibles à partir d’un modèle Grafcet donné. Grâce à ces estimations, il est possible de choisir l’architecture voulue. En fait, ce que nous décrivons là n’est guère différent de ce qu’effectuent certains synthétiseurs architecturaux de VHDL. Celui de Synopsys par exemple utilise un modèle VHDL fonctionnel et synthétise une architecture en essayant de remplir les contraintes imposées. Cependant, cette approche a selon nous un défaut. L’outil n’effectue pas d’analyse architecturale à proprement parler. Il synthétise un circuit choisi parmis plusieurs solutions. Du coup cette approche est lente, bien que plus précise dans ses estimations. Si le circuit ne vérifie pas les contraintes imposées, le concepteur doit: – soit changer de stratégie de synthèse – soit modifier le modèle Il modifie donc éventuellement le modèle après la synthèse. A notre avis, il est plus judicieux d’analyser le modèle avant la synthèse en déterminant les implications architecturales pour, s’il le faut, modifier la description. 101 Notre analyse architecturale se base sur quelques règles dont nous énumérons les principales ici en les illustrant par des exemples graphiques. Nous avons classé ces règles selon leur mise en oeuvre. 1. Règles pour inférer les ressources séquentielles et combinatoires: (a) Toutes les actions concurrentes exécutées dans la même étape ou dans des étapes activées en même temps (cas du branchement ET), doivent être implantées en parallèle (cf. Fig. 4.5, p. 103 et Fig. 4.8, p. 105). (b) L’affectation d’un signal dans une étape correspond au stockage d’une valeur dans un registre ou dans un emplacement mémoire (cf. Fig. 4.6, p. 104). (c) Les actions séquentielles exécutées dans une même étape s’intègrent sous forme de logique combinatoire (cf. Fig. 4.7, p. 104). 2. Règles pour dupliquer ou réutiliser des ressources: (a) Si une variable (déclarée comme telle) n’est affectée qu’à elle-même ou à une autre variable qui n’est pas affectée à un signal, alors cette variable n’a pas d’implantation matérielle directe mais est analysée comme une variable architecturale (p.e. cas d’une condition booléene sur une transition). (b) Une variable déclarée comme telle sur laquelle ne s’effectue que des opérations d’incrément et de décrément est analysée comme un «indice architectural» et n’a pas d’implantation matérielle directe. (c) Un signal sur lequel ne s’effectue que des opérations d’incrément et de décrément est analysé comme un «indice matériel» et s’implémente sous forme de compteur (cf. Fig. 4.9, p. 105). (d) Si une fonction utilise un indice architectural, chaque valeur différente prise par l’indice créera une instanciation différente de la fonction (technique du pipeline). Voir Fig. 4.10, p. 106. (e) Si une fonction utilise un indice matériel, on ne créera qu’une seule instance de la fonction avec rétroalimentation, contrôlée par une machine d’état. 3. Règles pour la génération des BUS: (a) Chaque registre est connecté à deux bus différents: un bus d’entrée et un de sortie. (b) Plusieurs bus peuvent fusionner si plusieurs signaux sont affectés à un seul signal à des étapes non concurrentes (cf. Fig. 4.11, p. 106). 4. Traitement des macroétapes. Ici, deux choix sont possibles: (a) Soit on décide que chaque macro-étape a sa propre implantation et on ne partage pas les ressources matérielles. On effectue alors une 102 analyse architecturale pour chaque macro-étape affectée à une intégration matériel. (b) Soit on fusionne l’implantation des macro-étapes et on partage les ressources matérielles. Dans ce cas, on effectue une seule analyse architecturale pour les macro-étapes affectées à une intégration matériel en optimisant l’emploi des ressources. F IG . 4.5 – Implantation d’actions concurrentes A travers cette analyse architecturale, on s’aperçoit que pour chaque graphe fonctionnel, l’application des règles que nous avons citées implique une seule implantation architecturale possible et par conséquent, certaines performances. Cette approche présente l’avantage que le concepteur maîtrise l’architecture de la partie matériel à travers le modèle fonctionnel du système. Par voie de conséquence, il a un accès rapide à l’établissement des performances. Pour atteindre des objectifs de performance (chemin critique, fréquence de calcul, latence, surface ...etc.), le concepteur devra simplement modifier son modèle avant d’entamer le processus de synthèse. La synthèse permettra alors d’affiner les contraintes de performance en laissant à l’outil le choix de l’implantation des opérateurs arithmétiques et logiques et fonction des contraintes de synthèse (p.e. valeur du chemin critique). Cette approche présente évidemment l’inconvénient d’obliger le concepteur à «travailler» son modèle au lieu de laisser à un outil l’initiative du choix l’architecture. Mais, vu qu’actuellement les outils de synthèse d’architecture définissent des restrictions sur les modèles fonctionnels afin d’atteindre des 103 F IG . 4.6 – Inférence de registres F IG . 4.7 – Génération de logique combinatoire 104 F IG . 4.8 – Implantation d’actions concurrentes F IG . 4.9 – Implantation d’un «indice matériel» 105 F IG . 4.10 – Duplication d’une fonction F IG . 4.11 – Fusion de deux bus 106 résultats acceptables, le concepteur n’est pas libéré de toute contrainte de modélisation. Il nous semble donc préférable qu’il maîtrise les implications de son modèle. 4.3.3 Estimation de performances Estimer les performances d’un système est complexe car la synthèse, la compilation et le placement/routage introduisent des non-linéarités qu’il est très difficile de modéliser. Malheureusement, le recourt à la synthèse pour estimer à posteriori les performances est un processus trop lent pour être efficace. Nous avons donc décidé de recourir pour l’instant à des fonctions d’estimation linéaires, sachant que les résultats obtenus ne fourniront que des ordres de grandeur. Cet ordre de grandeur est néanmoins suffisant pour définir des stratégies d’intégration et choisir une architecture pour la partie matériel. La technique employée pour les trois grandeurs actuellement prises en compte (surface de silicium, chemin critique et fréquence de calcul) s’inspire de la méthode proposée par Kumar et al dans [53]. 4.3.3.1 Estimation de la surface de silicium A partir de l’analyse architecturale, nous pouvons déterminer différentes architectures possibles avec la consommation de ressources matérielles qu’elles impliquent (additionneurs, registres ...etc.). En effectuant des présynthèses des éléments en question, on dispose de la surface (ou nombre de portes) occupée. En ajoutant ces surfaces élémentaires, on peut se faire une idée de la surface occupée. Cette technique marche assez bien avec les FPGA car l’influence du routage sur la surface occupée est faible. Par contre, les résultats obtenus avec des technologies précaractérisées sont loin de la réalité en raison de la présence des lignes de métal du routage. L’intérêt des résultats est qu’ils permettent d’une part de fixer une limite inférieure de surface que le circuit occupera et d’autre part, ces estimations facilitent le choix entre différentes options architecturales en comparant proportionnellement les surfaces occupées. 4.3.3.2 Estimation du chemin critique Pour cette estimation, nous reprenons le principe utilisé pour l’estimation de surface. On détermine d’abord pour les ressources matérielles employées le chemin critique pour la technologie envisagée, puis on additionne les différents chemins critiques entre deux registres en recherchant le chemin le plus long. Là aussi, les résultats atteints sont toujours très inférieurs à ce que vaudra le chemin critique dans le système réel, mais il permettent de fixer la limite de fréquence maximale que peut atteindre théoriquement le circuit. 107 4.3.3.3 Estimation de la fréquence de calcul Avec cette estimation, on cherche à déterminer le nombre d’échantillons par seconde que le circuit sera capable de traiter. Il faut donc estimer le nombre de périodes d’horloge nécessaire à un calcul complet. Ce calcul est différent si on se place dans le cas du matériel ou du logiciel. Dans le cas du matériel, une opération ne dure souvent qu’une seule période d’horloge alors que pour le logiciel, un opération dure la plupart du temps plusieurs cycles d’horloge. Dans le cas du matériel, la durée d’une étape est déterminée par la réceptivité de la ou des transitions de sortie. En général, cette réceptivité est définie à partir de signaux internes à la partie matériel dont on peut calculer l’évolution temporelle. Déterminer la durée d’une étape est possible avec une assez bonne précision. Dans le cas du logiciel, le calcul est plus difficile car la durée des opérations dépend du processeur choisi. Il faut donc définir pour toutes les fonctions utilisées, le temps de calcul en cycles d’horloge pour avoir une estimation de la durée d’une étape. La durée de chaque étape étant définie, on peut rechercher le chemin le plus long dans le Grafcet du système. En ajoutant les durées de chaque étape, on obtient une estimation du temps de calcul du système. 4.3.3.4 Mise en oeuvre Les techniques présentées n’ont pas été programmées actuellement si bien que leur mise en oeuvre n’a pu être que manuelle. Bien que très simples, ces techniques restent très difficiles à mettre en oeuvre manuellement lorsque le système envisagé est trop complexe. Les essais que nous avons fait se sont limités à quelques cas simples comme l’algorithme CORDIC classique. Pour cette raison, nous ne sommes pas en mesure de préciser la précision des estimations obtenues par cette technique. 4.4 Synthèse de code Le Grafcet n’étant actuellement ni simulable ni synthétisable par faute d’outil, nous avons du traduire les graphes vers des langages simulables et synthétisables ou compilables: le script MATLAB, VHDL et le code C (ou l’assembleur). Dans ce paragraphe, nous traitons aussi l’affinement des modèles Grafcet pour introduire des spécifications supplémentaires comme la gestion des mémoires ou l’arbitrage de l’accès aux ressources partagées. Ce n’est qu’à partir des graphes affinés qu’on génère les modèles haut niveau de description du système (matériel et logiciel). 108 4.4.1 Synthèse du script MATLAB La traduction du Grafcet vers MATLAB est nécessaire pour simuler la modélisation fonctionnelle du système. On simulera le modèle MATLAB notamment avec le modèle analogique du moteur. La traduction du modèle fonctionnel Grafcet vers MATLAB est simple. Chaque graphe est traduit vers une fonction différente. Le séquencement des opérations du Grafcet est repris tel quel dans le code MATLAB. Les réceptivités et les branchements des graphes sont traduits par des instructions «if ... then ... else». Les opérations binaires font appel à des fonctions MATLAB qui réalisent les calculs. Une fois le code MATLAB généré, il est interprété directement par un appel en ligne de la fonction de plus haut niveau. 4.4.2 Affinement des spécifications L’affinement des spécifications consiste à donner des informations structurelles sur la mise en oeuvre de certaines opérations. Par exemple, on pourra définir si une variable est stockée en RAM ou dans un banc de registre. Au niveau du Grafcet, il faudra donc remplacer certaines étapes strictement fonctionnelles par une série d’étapes structurelles. Pour d’autres types de spécifications structurelles, on pourra insérer des étapes dans les graphes. Ces nouvelles étapes peuvent faire appel à des sous graphes pour, par exemple, gérer des accès à des ressources partagées. Cependant, ces solutions étant peu efficaces et peu élégantes, nous prévoyons d’étudier des solutions qui permettraient d’inférer par exemple les affinements structurels à partir d’indications textuelles (par exemple indiquer textuellement quelle variable stocker en RAM). 4.4.3 Synthèse du code VHDL En reprenant quelques concepts du VHDL, nous avons facilité également la traduction des modèles vers ce langage. Nous avons néanmoins le choix entre deux approches différentes: soit on génère une description de la partie matériel en se basant sur l’analyse architecturale, soit on effectue une traduction directe du graphe. La synthèse du code VHDL en imposant l’architecture revient à écrire le code au niveau transfert de registre (RTL 3 ). Cette description est la plus efficace en terme de synthèse actuellement. Bien que les synthétiseurs logiques sont capables de traiter les descriptions fonctionnelles (behavioural description), les résultats de synthèse restent plus performant lorsque l’architecture est précisée. Cette différence provient essentiellement du fait que ce type de description permet d’optimiser chaque partie de l’architecture séparément. Lorsqu’on effectue un traduction directe du graphe, l’outil de synthèse est obligé d’effectuer l’exploration des recherches architecturales et les tests que 3. Register Transfert Level 109 nous avons effectués montrent que la qualité des résultats est fortement dépendante de la manière dont est écrite le modèle. Deux modèles fonctionnels ayant un même comportement en simulation ne déboucheront pas sur le même résultat de synthèse. Cette incertitude sur les résultats de synthèse nous fait préférer actuellement la description RTL avec laquelle le résultat est assuré. 4.4.4 Synthèse de code logiciel Grâce aux compilateurs C pour les processeurs utilisés (DSP notamment), la génération de code a été simplifiée, le langage C étant beaucoup plus simple à manier que l’assembleur. La génération du C s’effectue de la même manière que la génération de code MATLAB, c’est à dire que nous traduisons la séquence des opérations par la séquence des instructions C. Nous ne pouvons malheureusement pas développer ce sujet, les tests sur la génération du code logiciel ayant été très réduits. 4.5 Conclusion Afin de disposer d’un outil de modélisation puissant et simple, nous nous sommes intéressés au Grafcet. Nous avons montré que ce langage graphique pouvait remplir nos attentes en apportant de légères modifications à l’interprétation du fonctionnement des modèles et au formalisme textuel associé à ce langage. En introduisant des restrictions de modélisation, nous limitons également les erreurs de conception qui pouvaient être introduites par des ambiguïtés du Grafcet. Par la présentation d’autres langages de modélisation synchrones, nous avons également vu que ceux-ci n’étaient pas adaptés à la modélisation des systèmes de commande, ce qui justifie l’adaptation du Grafcet pour ce type d’applications. Nous avons effectué une analyse plus poussée des implications architecturales des modèles Grafcet lors de l’intégration sous forme matériel ce qui a permis de montrer qu’on pouvait réaliser cette analyse architecturale et les estimations associées avant la synthèse et donc améliorer la vitesse de décision quant au choix de l’architecture. Au niveau des autres tâches caractéristiques de la conception mixte comme le partitionnement et l’estimation de performance, nous avons proposé des solutions possibles et montré ainsi que le Grafcet se prête à ce type de méthodologie. Finalement, nous évoquons la synthèse de code haut niveau à partir des modèles Grafcet, tant pour la simulation fonctionnelle (MATLAB) que pour la description haut niveau du matériel (VHDL) et du logiciel (C ou assembleur). 110 Chapitre 5 Implantation du contrôle vectoriel d’un moteur asynchrone 5.1 Introduction Jusqu’à présent, nous avons traité les aspects théoriques de la conception des systèmes de commande. Sur la base de ces résultats, nous décrivons dans ce chapitre l’intégration d’un algorithme de contrôle vectoriel de moteur asynchrone. Mais avant d’aborder le sujet, il nous faut donner quelques détails sur le développement historique du projet. A l’origine, le projet avait pour but d’étudier l’intérêt des ASIC pour la mise en oeuvre des algorithmes de commande. Un des objectifs était donc de développer un ASIC de contrôle vectoriel en se basant sur un algorithme déjà intégré sur microcontrôleur afin d’effectuer des comparaisons. C’est au cours de ce travail que s’est imposé la nécessité de formaliser une méthodologie pour aborder la conception des systèmes de commande. Du projet initial, il est resté le développement de l’ASIC de commande, mais en se basant cette fois sur la méthodologie conception mixte proposée (cf. Fig. 5.1). Ceci explique pourquoi dans la suite de ce chapitre, nous n’envisageons pas une intégration mixte du système de commande. Le présent chapitre s’articule autour de trois parties: 1. En premier lieu, nous rappelons les enjeux de la conception des systèmes de commande tels qu’ils ont été analysés tout au long de cette thèse. 2. Ensuite, nous présentons l’intégration de la commande du moteur asynchrone en se basant sur la méthodologie de conception mixte. 3. Finalement, nous montrons quelques résultats expérimentaux de tests effectués sur un prototype partiel de l’ASIC de commande. 111 F IG . 5.1 – Méthodologie de conception mixte 112 Les développements théoriques relatifs aux algorithmes utilisés (algorithme de contrôle, MLI, CORDIC) sont présentés en annexe afin d’améliorer la lisibilité des résultats. 5.2 Les enjeux de la conception des systèmes de commande Nous rappelons rapidement ici les enjeux de la conception des systèmes de commande, c’est à dire les problèmes spécifiques et les objectifs généraux, afin de montrer par la suite comment il en a été tenu compte: – Nous devons être en mesure de traiter les spécifications floues, c’est à dire que la conception devra être relativement indépendante de ces paramètres pour pouvoir éventuellement modifier les spécifications. – Le développement doit être relativement indépendant de la technologie (tant matériel que logiciel) pour pouvoir éventuellement partitionner le système ou pour l’intégrer vers différentes cibles technologiques. – Nous devons adapter les algorithmes implantés (sans modifier la fonctionnalité) aux contraintes imposées par la stratégie d’intégration (p.e. minimisation du temps de calcul). – Il faut s’assurer que le système intégré ne présente pas des erreurs de fonctionnement dues à l’intégration. 5.3 Intégration de la commande vectorielle L’intégration de la commande s’est effectuée sur la base de la méthodologie de conception mixte. Pour cette raison, chaque paragraphe de cette partie correspond à une tâche de la méthodologie. Pour une meilleur compréhension, nous avons placé, dans la marge de chaque paragraphe principal, un schéma de la méthodologie avec une étape grisée correspondant à la tâche décrite. 5.3.1 Spécification du système de commande 5.3.1.1 Analyse fonctionnelle Le système de commande à intégrer doit contrôler le couple d’un moteur asynchrone de 4 KW. Ce moteur est alimenté par un onduleur dont la tension continue d’entrée est assurée par huit batteries au plomb connectées en série. Sur le banc d’essai, le moteur est chargé à travers son axe par une génératrice continue qui débite dans un banc de lampes (cf. Fig. 5.2). Du système de commande que nous considérons, on peut extraire six fonctionnalités différentes: 1. L’acquisition des mesures et de la consigne: ce bloc a pour fonction de gérer les convertisseurs analogique/numérique, c’est à dire de générer 113 F IG . 5.2 – Banc de test de la commande du moteur asynchrone les signaux de commande de ces dispositifs, de stocker les données reçus et de les transmettre au bloc de traitement. 2. Le traitement des mesures et de la consigne: les données analogiques acquises par le bloc précédent doivent être traitées et mises au format binaire utilisé. Le bloc de traitement se charge de cette opération. Le détail des opérations de traitement est explicité en annexe F. 3. l’algorithme vectoriel: c’est la fonction principale de la commande. Cet algorithme permet de contrôler le moteur qui entraîne la chaîne de traction électrique. Il reçoit en entrée les mesures au format binaire choisi et calcule les tensions à appliquer au moteur asynchrone. On trouvera la mise en équation de l’algorithme en B.1.2.1, p. 159. L’algorithme utilisé régule le couple du moteur. Comme nous l’avons indiqué en annexe, le contrôle vectoriel permet de réguler indépendamment le couple et le flux. La consigne de couple est donnée par une composante du courant statorique ( ) alors que le flux dépend du courant magnétisant , ce dernier étant une variable interne du système de commande. Pour augmenter ou diminuer le couple, il suffit de varier . A flux constant, on varie donc la puissance délivrée par le moteur, et par conséquent, à couple résistant constant, on fait varier la vitesse de rotation de l’axe. Par contre, si la consigne de couple est trop importante par rapport au couple résistant, l’algorithme se charge de diminuer le flux (opération dite de «défluxage») lorsque le moteur atteint sa vitesse nominale afin de ne pas dépasser la puissance nominale du moteur. 114 4. L’algorithme MLI vectoriel: Cet algorithme sert d’interface algorithmique entre l’algorithme vectoriel et le bloc de génération des impulsions de commande de l’onduleur. L’algorithme MLI vectoriel calcule les instants de commutation des interrupteurs de l’onduleur à partir des consignes de tension reçus de l’algorithme de contrôle vectoriel. Les équations de cet algorithme sont développées en B.2, p. 164. 5. La génération des impulsions de commande de l’onduleur: la fonction de ce bloc est de générer les signaux physiques de commande de l’onduleur à partir des instants de commutation que lui communique l’algorithme MLI. C’est en quelque sorte l’interface du système de commande avec le monde analogique. 6. La sécurité de fonctionnement: pour protéger la chaîne d’entraînement contre des disfonctionnements destructifs, le système de commande inclus une fonctionnalité de sécurité qui gère essentiellement l’interruption du système et la génération des signaux d’erreur. On protège ainsi la chaîne d’entraînement contre les court-circuits dans l’onduleur, contre une baisse excessive de la tension continue d’entrée de l’onduleur et on gère les interruptions causées par l’utilisateur. 5.3.1.2 Topographie fonctionnelle du système A partir de la liste des fonctions constitutives du système de commande, on trace une topographie fonctionnelle du système qui permet de décrire les échanges de données entre les fonctions et d’analyser la nature de chaque bloc en vue de la modélisation fonctionnelle. Cette topographie n’est nullement une préétude architecturale, c’est une vue abstraite du système (cf. Fig. 5.3, p. 116). 5.3.1.3 Spécifications physiques Pour avoir une idée plus précise de la forme que prendra l’intégration physique du système, nous avons résumé des spécifications physiques du système sachant que celles-ci pouvaient changer au cours du développement. Ces spécifications sont «floues», elles servent à donner des ordres de grandeur. – Le moteur: sa puissance est de 4 KW. Ses paramètres caractéristiques sont indiqués en annexe C. – L’alimentation: assurée par huit batteries au plomb de 12V chacune, elle vaut au plus 96V. – La fréquence d’échantillonnage: elle doit au moins valoir 2 KHz, soit une période de 500 %s. – La fréquence de commutation: elle est au moins égale à la fréquence d’échantillonnage et en principe quatre fois supérieure, soit environ 8 KHz. Si l’intégration le permet, on souhaite monter jusqu’à 16 KHz, c’est à dire la fréquence de l’inaudible. – Le temps mort: il est fixé à environ 3 %s. 115 F IG . 5.3 – Topographie du système de commande 116 – Les capteurs de courant: deux capteurs à effet Hall servent à mesurer le courant dans les enroulements statoriques. Ils doivent être alimentés sous 12V ce qui place le point de repos à 6V. – Le capteur de vitesse: il est constitué d’un disque denté de 18 dents. Les dents interceptent les faisceaux infrarouges de deux optocommutateurs qui génèrent deux signaux carrés déphasés. Ils doivent être alimentés sous 5V. – Le capteur de tension d’alimentation : il est constitué par un optocoupleur en régime linéaire alimenté sous 5V. 5.3.1.4 Spécifications technologiques Ici aussi, les spécifications concernant la technologie à employer sont floues. La seule contrainte est l’intégration globale du système sous forme d’ASIC. En ce qui concerne la connection du système de commande avec les circuits de mesure, il fallait conserver la compatibilité avec les signaux TTL en raison des circuits discrets utilisés pour la mise en forme des mesures. En principe, l’alimentation du système devait être générée à partir des tensions des batteries, c’est à dire au minimum 12V. Ceci est dû au fait que la commande était prévue pour être embarquée sur un véhicule électrique dans lequel la seule source d’énergie est le banc de batteries. 5.3.1.5 Modélisation du système La modélisation du système s’est effectuée en deux étapes. D’abord, nous avons décrit un modèle de compréhension de l’algorithme de contrôle afin d’étudier son fonctionnement. Une fois l’algorithme de contrôle maîtrisé, nous avons développé les modèles de spécification de l’ensemble des blocs de la commande. Le modèle de compréhension Ce modèle reprend le schéma bloc de l’algorithme de contrôle (cf. Fig. 5.4, p. 118). Nous avons décrit ce schéma bloc sous MATLAB et simulé le contrôle avec le modèle de Park du moteur. Les résultats de la simulation montrent le comportement idéal du moteur avec la commande vectorielle. Les figures 5.5a-c et 5.6a-c, p. 119 et p. 120, montrent des grandeurs caractéristiques du moteur lors d’un démarrage. On observe clairement que le couple «suit» la consigne donnée par le courant (Fig. 5.6-a et Fig. 5.6-c) jusqu’à ce que la vitesse dépasse sa valeur nominale (1425 t/min) à 7s (Fig. 5.5-c). On peut voir alors la phase de défluxage avec la diminution du courant magnétisant (Fig. 5.6-b) et du couple. La période de 0 à 0.5 secondes correspond à l’établissement du flux. Durant ce laps de temps, aucune consigne de couple n’est appliquée. Les niveaux de courant et de tension enregistrés servent à maintenir le flux nominal dans la machine (Fig. 5.5-a et 5.5-b). Toujours avec ce modèle, nous avons simulé l’influence de la période d’échantillonnage sur les grandeurs caractéristiques du moteur. En effet, cette constante 117 F IG . 5.4 – Schéma bloc de l’algorithme de commande 118 80 60 40 20 0 −20 −40 −60 −80 0 1 2 3 4 5 (a) Courant statorique 6 7 8 9 10 8 9 10 8 9 10 (en A) 100 80 60 40 20 0 −20 −40 −60 −80 −100 0 1 2 3 4 5 6 7 (b) Tension sur une phase du moteur (en V) 200 180 160 140 120 100 80 60 40 20 0 0 1 2 3 4 5 6 7 (c) Vitesse de rotation du moteur (en rad/s) F IG . 5.5 – Simulation de l’évolution des grandeurs caractéristiques du moteur en fonction du temps (en s) lors d’un démarrage 119 70 60 50 40 30 20 10 0 −10 0 1 2 3 4 5 6 7 8 9 10 8 9 10 8 9 10 (a) Consigne de couple (en A) 14 12 10 8 6 4 2 0 0 1 2 3 4 5 6 7 (b) Courant magnétisant estimé (en A) 40 35 30 25 20 15 10 5 0 0 1 2 3 4 5 6 7 (c) Couple moteur (en N) F IG . 5.6 – Défluxage du moteur (fonction du temps en s) 120 est particulièrement importante pour la conception du système puisqu’à partir de sa valeur, on détermine le temps de calcul maximum du système ainsi que l’ensemble des autres temps caractéristiques (cf. 3.2.1.1). Les figures 5.7(af) p. 122, montrent que la diminution de la période d’échantillonnage réduit les pics de courant et de tension. Modèle de spécification Dans la topographie fonctionnelle du système, nous avons dégagé la nature des différentes fonctions de la commande. En dehors de la fonction de sécurité de fonctionnement, la nature des fonctions est compatible avec une modélisation par le Grafcet. En ce qui concerne la sécurité de fonctionnement, la spécification fonctionnelle est suffisamment simple pour que la modélisation par le Grafcet soit également possible. Nous présentons les modèles de la commande (Fig. 5.8, p. 123) et du bloc MLI (Fig 5.9, p. 124). Pour plus de clarté, ces modèles restent au niveau des macro-étapes. On peut voir que le modèle de la commande reprend le modèle du bloc MLI sous forme d’une macro-étape. Rappelons que ces modèles décrivent des opérations binaires, contrairement au modèle de compréhension. 5.3.2 Vérification fonctionnelle Au niveau de la vérification fonctionnelle, nous avons simulé le modèle de spécification MATLAB (traduit du Grafcet) des différents blocs. Dans le cas de la commande, le modèle du moteur et le modèle fonctionnel binaire du système de commande ont été cosimulés pour vérifier que la fonction de contrôle était assurée. Remarquons que nous avons rencontré les problèmes que nous évoquions à propos de la cosimulation analogique/numérique: pour simuler deux secondes du démarrage du moteur, environ 48 heures de simulation ont été nécessaires sur un pentium 133MHz. On peut comparer cela aux dix minutes que durent les cosimulations du modèle de compréhension avec le modèle du moteur (cf. 5.3.1.5). Ces simulations binaires du modèle de spécification de la commande, dont on présente les résultats aux figures 5.10(b,d,f) et 5.11(b,d,f), utilisent des mots binaires au format 1. La période de commutation ( ) a été fixée à 530%s, c’est à dire égale à la période d’échantillonnage. Dans le modèle MATLAB, une fonction d’interface génère les vecteurs de tension MLI à partir des instants de commutation calculés par l’algorithme. Pour activer le modèle analogique du moteur sous MATLAB, il faut que ces signaux de tension soit indexés sur le temps. Pour cette raison, chaque point de la courbe de tension générée correspond à un instant de temps, c’est à dire qu’implicitement, on définit la période d’horloge. Dans le cas des simulations précédentes, les signaux de tension étaient définis sur 100 points, ce qui correspond à une horloge de 5,3%s. Les simulations correspondantes du modèle de compréhension (arithmétique réelle) sont données aux figures 5.10(a,c,e) et 5.11(b,d). On peut voir que 1. 12 bits entiers sur une longueur de 16 bits en tout 121 30 30 20 20 10 10 0 0 −10 −10 −20 −20 −30 −30 −40 0 0.1 0.2 0.3 0.4 0.5 −40 0 0.6 (a) Courant pour 530s (en A) 10 5 5 0 0 −5 −5 −10 −10 0.1 0.2 0.3 0.4 0.5 −15 0 0.6 (c) Tension sur une phase pour 530s (en V) 14 12 12 10 10 8 8 6 6 4 4 2 2 0.1 0.2 0.3 0.4 0.5 0.3 0.4 0.5 0.6 0.1 0.2 0.3 0.4 0.5 0.6 (d) Tension sur une phase pour 300s (en V) 14 0 0 0.2 (b) Courant pour 300s (en A) 10 −15 0 0.1 0 0 0.6 (e) Courant magnétisant estimé pour 530s (en A) 0.1 0.2 0.3 0.4 0.5 0.6 (f) Courant magnétisant estimé pour 300s (en A) F IG . 5.7 – Grandeurs caractéristiques du moteur en fonction du temps (s) pour deux périodes d’échantillonnage différentes 122 F IG . 5.8 – Modèle de spécification de la commande 123 F IG . 5.9 – Modèle de spécification du bloc MLI 124 pour ces conditions de simulation, l’équivalence fonctionnelle entre le modèle de comparaison et le modèle de spécification est assurée. La vérification du bloc MLI a été réalisée en même temps que le bloc de génération des impulsions pour visualiser plus facilement la cohérence des résultats (Fig. 5.12, p. 128). La consigne du bloc MLI est un vecteur de tension de 80V. La période de commutation vaut toujours 530%s mais les vecteurs de tension sont définis cette fois sur 500 points. Finalement, nous avons simulé les blocs d’acquisition et de traitement des données en nous basant sur un convertisseur 8bits. 5.3.3 Partitionnement et estimation Dans cet exemple d’application, une des spécifications initiales est d’intégrer l’ensemble de la commande sous forme matériel. Il n’y a donc pas lieu de partitionner le système. Par contre, il est nécessaire d’effectuer les autres tâches associées à cette étape. Le travail s’effectue sur les modèles Grafcet des fonctions de commande. Cela a pour conséquence que les résultats obtenus durant cette étape ne dépendent pas du modèle, mais des spécifications. On peut donc dire que la conception est indépendante de la technologique à ce niveau. 5.3.3.1 Allocation Jusqu’à présent, nous n’avons pas précisé de technologie pour l’intégration de la commande ce qui doit être fait maintenant au niveau de l’allocation des ressources. Pour l’intégration sous forme matériel, nous avons décidé d’utiliser un FPGA au lieu d’une technologie semi-custom. Ce choix est dicté par la flexibilité de prototypage qu’offrent cette technologie, mais aussi par le fait qu’il est possible de trouver actuellement des FPGA de très grande capacité tant au niveau du nombre de portes (jusqu’à 250.000 portes pour la famille Flex10k250 d’Altera) qu’au niveau fréquence d’horloge (environ 50MHz pour la famille Flex10kB d’Altera). Par ailleurs, ces dispositifs offrent la possibilité d’intégrer directement des ROM et des RAM ce qui élimine la nécessité de les prévoir en boîtier externe. Finalement, grâce à l’utilisation de VHDL pour la modélisation de la partie matériel, il a été envisagé d’intégrer à terme le système en technologie semi-custom après avoir effectué les tests sur FPGA. Dans l’immédiat, nous avons choisi d’utiliser un Flex10K100A d’Altera, dispositif intégrant environ 100.000 portes logiques. Au niveau des convertisseurs analogiques/digitaux, nous avons utilisé des TLC0831 de Texas Instruments. 5.3.3.2 Transformation algorithmiques Dans cette étape, nous analysons les primitives mathématiques utilisées pour déterminer quels algorithmes binaires nous permettront de calculer ces 125 80 80 60 60 40 40 20 20 0 0 −20 −20 −40 −40 −60 −80 0 −60 0.1 0.2 0.3 0.4 (a) Courant 0.5 0.6 0.7 −80 0 0.8 (en A) 0.1 0.2 0.3 (b) Courant binaire 25 0.4 0.5 0.6 0.7 0.8 (en A) - simulation 30 20 20 15 10 10 5 0 0 −5 −10 −10 −15 −20 −20 −25 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 −30 0 0.8 (c) Tension (en V) 0.2 0.3 0.4 0.5 0.6 0.7 0.8 (d) Tension (en V) - simulation binaire 14 14 12 12 10 10 8 8 6 6 4 4 2 2 0 −2 0 0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 −2 0 0.8 (e) Vitesse de rotation (en rad/s) 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 (f) Vitesse de rotation (en rad/s) - simulation binaire F IG . 5.10 – Évolution des grandeurs caractéristiques du moteur en fonction du temps (s) pendant un démarrage: simulation du modèle de compréhension (gauche) et de spécification (droite) 126 14 12 10 8 6 4 2 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 (a) Consigne de flux (en A) simulation binaire 14 14 12 12 10 10 8 8 6 6 4 4 2 2 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0 0 0.8 (b) Courant magnétisant estimé (en A) 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 (c) Courant magnétisant estimé (en A) - simulation binaire 35 45 40 30 35 25 30 20 25 15 20 15 10 10 5 5 0 −5 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 −5 0 0.8 (d) Couple moteur (en N) 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 (e) Couple moteur (en N) - simulation binaire F IG . 5.11 – Évolution du couple et de la consigne de flux en fonction du temps (s): simulation du modèle de compréhension (gauche) et de spécification (droite) 127 1 0.5 0 0 50 100 150 200 250 300 350 400 450 500 50 100 150 200 250 300 350 400 450 500 50 100 150 200 250 300 350 400 450 500 1 0.5 0 0 1 0.5 0 0 F IG . 5.12 – Simulation de la MLI et génération des impulsions fonctions. Le choix de l’une ou l’autre implantation binaire se base sur des considérations de surface d’intégration, de vitesse de calcul et de complexité de mise en oeuvre. Le système de commande considéré utilise les primitives mathématiques suivantes: – la rotation: elle peut être calculée soit par l’algorithme CORDIC classique (cf. annexe D), soit par interpolation linéaire des fonctions sinus et cosinus suivie de multiplications et d’additions. – la division: on peut utiliser soit directement un diviseur, soit utiliser l’algorithme CORDIC généralisé. – la multiplication: comme pour la division, on peut avoir recourt soit à un multiplieur, soit utiliser l’algorithme CORDIC généralisé. – La multiplication par des constantes: nous séparons cette opération de la multiplication simple car la multiplication par des constantes pose des problèmes que nous évoquons en D.4. Pour résoudre cela, nous proposons l’utilisation d’un algorithme de multiplication itérative, l’autre solution étant le recourt à la multiplication classique précédée et suivie d’opérations de décalage. – les opérations logiques (<, >, =, shift, ...etc.): elles peuvent s’intégrer soit par des opérateurs spécifiques (circuits combinatoires), soit par une séquence d’opérations (additions, soustractions ...etc.). A ce stade de la réflexion, nous ne savons pas encore en principe quelle stratégie architecturale nous suivrons (calcul parallélisé ou séquentialisé). Nous verrons plus en avant que nous avons opté pour une architecture relativement séquentielle pour minimiser la surface occupée. Pour cette raison, nous avons choisi de recourir à l’algorithme CORDIC lorsque c’était possible ainsi que les algorithmes séquentiels permettant de réutiliser le plus possible les ressources matérielles (additionneurs, registres, shifters ...etc.). 128 5.3.3.3 Précision de la commande et overflow Le système de commande et les algorithmes auxquels on fait appel sont trop complexes pour apporter la preuve formelle que la précision de calcul est suffisante (format et 19 bits internes pour le CORDIC) et qu’il n’y a pas de risque de débordement. Nous avons donc effectué quelques études pour les blocs les plus sensibles (CORDIC et multiplication par constantes, cf. D.5.3). Pour la commande, nous nous sommes contenté de vérifier ces propriétés à partir des simulations du modèle de spécification, déjà présentées précédemment (cf. Fig 5.11 et 5.11). Nous n’apportons donc pas les preuves mathématiques souhaitables. 5.3.3.4 Estimation de la fréquence de calcul A partir des modèles Grafcet, nous avons évalué le nombre de périodes nécessaires à un cycle de calcul, c’est à dire le temps qui sépare la lecture des échantillons du calcul des instants de commutation. Le Grafcet fonctionnel de la commande compte une centaine d’étapes dont certaines durent plus d’une période d’horloge lorsqu’elles correspondent à des opérations effectuées par des blocs arithmétiques (CORDIC, multiplication de constante, ALU) ou qu’elles requiert des opérations supplémentaires définies par l’affinement du modèle (lecture/écriture de RAM, de registres ...etc.). Nous avons compté 13 multiplications par constante et 17 opérations CORDIC, ce qui correspond au maximum à respectivement 208 et 323 périodes d’horloge. Certaines opération s’effectuent en parallèle (p.e. CORDIC et multiplication par constante) si bien que le nombre total estimé de périodes d’horloge d’une période de calcul de la commande est inférieur à . Par conséquent, on peut admettre un temps maximum de calcul de 1000 périodes d’horloge. Selon les spécification qui fixent la période d’échantillonnage au plus à 500%s, la période d’horloge ne devra donc pas dépasser 500ns. 5.3.4 Synthèse mixte Dans cette étape, nous allons chercher à fixer l’architecture du matériel et affiner le modèle de spécification. A partir de la description affinée, on pourra générer le code VHDL correspondant. 5.3.4.1 Architecture de l’ASIC Le critère principal pour le choix architectural a été la minimisation du coût de l’ASIC et donc de la surface silicium (moins de 100.000 portes logiques). La limitation à cette stratégie a été de respecter la contrainte de chemin critique fixée à 500ns. L’analyse des primitives mathématiques a montré que beaucoup d’opérations complexes pouvaient se réaliser à partir du même algorithme. Pour mi129 nimiser le nombre de ressources matérielles, nous avons donc utilisé l’algorithme CORDIC pour ces opérations. Les autres opérations (multiplication par des constantes, opérations logiques) utilisent des algorithmes qui peuvent également s’intégrer sur une même structure matérielle. Nous avons donc également développé une ALU spécifique. F IG . 5.13 – Architecture de l’ASIC de commande Néanmoins, l’analyse du Grafcet montre également que certaines opérations peuvent s’effectuer en même temps. Pour minimiser le temps de calcul, nous avons donc choisi une architecture globale permettant une utilisation en parallèle de l’ALU et du CORDIC. 130 Un autre point important pour l’architecture est le nombre de constantes et de variables de l’algorithme. En effet, vu leur nombre élevé, nous avons décidé d’allouer les variables à une RAM et les constantes à une ROM. Ce point présente d’ailleurs l’intérêt qu’il devient possible d’adapter l’ASIC à un autre moteur simplement en modifiant les valeurs de la ROM. La figure 5.13 montre l’architecture issue de ces réflexions. 5.3.4.2 Affinement de la spécification L’affinement du modèle de spécification permet maintenant de prendre en compte les caractéristiques de l’architecture. On modifie le modèle afin d’introduire les opérations de lecture/écriture dans les registres et la RAM, la génération des adresses et la gestion du bus partagé. On affine également le modèle du bloc d’acquisition des mesures puisque le modèle des CAN a été défini dans l’étape d’allocation. 5.3.4.3 Synthèse du code VHDL Pour la synthèse du code VHDL, nous avons utilisé les IP développés auparavant: CORDIC, ALU, génération des signaux MLI ...etc. Du coup, la synthèse de code VHDL à partir du modèle Grafcet de la commande s’est réduit essentiellement à la génération de la machine d’état globale qui commande les instances des IP. Cette machine d’état comporte 453 états ce qui la rend plutôt illisible, contrairement au Grafcet. L’ensemble du modèle VHDL du système est paramétrisé par des génériques indiquant notamment la largeur des chemins de données ou le format binaire employé. D’autre part, le modèle VHDL de la ROM génère automatiquement son contenu binaire à partir des constantes caractéristiques de la commande (paramètres électriques du moteur, temps mort, fréquence d’échantillonnage ...etc.). Grâce à ces paramétrisations, des modifications de certaines spécifications, comme le changement du moteur par exemple, ne posent pas de problèmes. 5.3.4.4 Vérification fonctionnelle Pour vérifier fonctionnellement le code VHDL, nous avons opté pour une stratégie qui repose sur deux principes: 1. nous vérifions le système par morceau («divide and conquer»), c’est à dire que nous vérifions d’abord les IP composant le système, puis le système lui-même. 2. nous optons pour la stratégie de comparaison de modèle, c’est à dire que nous prenons le modèle fonctionnel sous MATLAB comme référence et comparons les résultats intermédiaires pour une série de vecteurs de test arbitraires. 131 Avec ce principe, nous avons pu vérifier le fonctionnement du système modélisé par VHDL sans apporter toutefois de preuve formelle. Par contre, en recherchant les vecteurs d’entrée conduisant au temps de calcul le plus long, nous avons vérifié que celui-ci n’était pas supérieur à 1000 périodes d’horloge. 5.3.4.5 Vérification temporelle Pour ce test du système, nous avons développé des modèles VHDL temporels des convertisseurs analogique-digitaux, de la RAM et de la ROM, ces deux derniers dispositifs n’étant pas synthétisés sous Synopsys, mais directement sous Maxplus2. Le modèle des CAN repose sur les spécifications données par Texas-Instruments (cf. Fig. 5.14, p. 132) et convertit des signaux analogiques (valeurs réelles) en données binaires. Lors de la simulation, le modèle de la ROM lit un fichier de constantes spécifiques de la commande (résistances, temps ...etc.) et génère le fichier des mots binaires dans un format accepté par Maxplus2. Finalement, le modèle de la RAM, lors de l’activation d’un signal, envoie son contenu vers un fichier. F IG . 5.14 – Diagramme des signaux du TLC0831 5.3.4.6 Synthèse et placement/routage Après la synthèse par Synopsys, le placement/routage s’est effectué sous Maxplus2 d’Altera. La surface de l’ASIC est de 4480 LC 2 soit environ 89.000 portes logiques. La RAM et la ROM utilisent 2582 bits de l’espace mémoire disponible, soit un équivalent de 322 octets. Le chemin critique estimé par Altera vaut 230 ns. Les estimations de Synopsys donnaient 4239 LC soit une erreur d’estimation de 0.05%. Le tableau 5.1 résume les estimations de surface de Synopsys pour l’ensemble des blocs de l’ASIC. Un fait notoire est l’importance relative de la machine d’état globale de l’ASIC et la taille réduite du processeur CORDIC. 2. Logic Cells 132 Bloc CORDIC ALU Machine d’état Acquisition échantillons Génération des impulsions de commande surface (en LC) 1203 908 935 235 472 quota de surface occupé 28% 22% 21% 5% 11% TAB . 5.1 – Estimations de surface post synthèse logique de Synopsys 5.3.4.7 Prototypage Le prototypage s’effectue sur une carte imprimée que nous avons spécialement conçue à cet effet. Cette carte comprend un FPGA Flex10K100A d’Altera, l’ensemble des circuits analogiques pour l’acquisition des mesures et de la consigne, les connecteurs et buffers pour la commande de l’onduleur, une horloge à 50MHz et les circuits de configuration du Flex (cf. Fig 5.15). Notons que le Flex10K100A est compatible pin à pin avec des dispositifs de la même famille, mais de capacité différente, ce qui permet d’envisager de réutiliser le schéma de la carte pour des dispositifs différents. Cette option est intéressante dans l’optique de la méthodologie de conception mixte où le dispositif à utiliser peut du coup être défini après la synthèse logique. 5.4 Résultats des test expérimentaux Actuellement, seule la MLI vectorielle commandée par un algorithme de contrôle V/f a pu être testée. Cet algorithme génère la consigne de la MLI en boucle ouverte. L’intégration de la MLI et du contrôle V/f a été effectuée en utilisant les mêmes ressources matérielles et la même architecture que l’ASIC de commande vectorielle. Seule la machine d’état globale diffère. Grâce à ces tests, nous avons pu montrer le fonctionnement correct des blocs fonctionnels (CORDIC, ALU, acquisition des échantillons ...etc.) et de l’architecture. Nous avons pu vérifier également que les estimations de chemin critique étaient correctes puisque l’ASIC fonctionne avec une période d’horloge de 320ns. Sur les figures 5.16 et 5.17 on peut voir la mesure des deux signaux de commande d’un bras de l’onduleur (signaux complémentaires) ainsi que le temps mort donné par rapport au nombre de périodes d’horloge (10 périodes). Pour vérifier que l’onduleur était commandé correctement, nous avons filtré la tension de sortie de l’onduleur par un filtre RC avec une fréquence de coupure de 1KHz. Le courant filtré à 50Hz, mesuré sur la résistance (1M), est donné figure 5.18. Remarquons que les tests avec l’onduleur on été effectués sous une tension réduite pour prévenir les risques de claquage des IGBT en cas de court-circuit dû à un défaut de fonctionnement de l’ASIC. Cela explique 133 F IG . 5.15 – Synoptique de la carte de prototypage 134 6 6 bits Circuit de mise en forme de la vitesse Circuit de mise en forme et CAN Circuit de mise en forme et CAN Circuit de mise en forme et CAN connecteur PHA PHB PHB PHA Isq Ib Ia connecteur Buffers des DB25 signaux de commande 0V alim 12V connecteur Ib Ia SENS TOP Isq_m Ib_m Ia_m 2 3 5 6 bits SENS TOP Isq_m Ib_m Ia_m 4 6 7 points de mesure 1 8 50 MHz horloge FLEX10KA BP4 BP1 BP2 boutons poussoirs banc de commutateurs BP3 boutons poussoirs Isq J13 connecteur de configuration bitblaster 1 configuration connecteur pour le choix du type de EEPROM ECP1 de configuration potentiometre F IG . 5.16 – Signaux de commande d’un bras de l’onduleur F IG . 5.17 – Temps mort en fonction de la période d’horloge 135 la faible valeur du courant enregistré. F IG . 5.18 – Courant à la sortie de l’onduleur, filtré à 50Hz 5.5 Conclusion Les méthodologies de conception ayant été définies précédemment, nous avons montré dans ce chapitre comment intégrer la commande vectorielle d’un moteur asynchrone en nous basant sur ces méthodologies. Après avoir rappelé les enjeux de l’intégration d’un système de commande, nous avons appliqué les différentes étapes de la méthodologie de conception spécifique à la commande en utilisant notamment les modèles et outils associés. Grâce à la spécification fonctionnelle du système par le Grafcet, la plupart des résultats des tâches de conception ne dépendent que des spécifications. De ce fait, le même modèle Grafcet de la commande peut servir pour intégrer le système vers différentes cibles technologiques. Puis, en utilisant des blocs IP paramétrisés pour la réalisation de l’ASIC, nous avons gagné en flexibilité d’intégration, un changement de certaines spécifications étant paramétrisé (largeur des chemins de données, constantes électriques du moteur ...etc.). Les différentes simulations fonctionnelles nous ont permis de vérifier le fonctionnement correct du systèmes et éliminer ainsi les erreurs de conception. Puis, grâce au prototypage d’une commande V/f, la validation de certaines fonctions a pu être assurée. Afin de d’atteindre les objectifs fixés par la stratégie d’intégration (surface inférieure à 100.000 portes logiques, chemin critique inférieur à 500ns, précision des calculs suffisante), nous avons étudié en détail l’algorithme CORDIC 136 et la multiplication itérative. Grâce à ces algorithmes, les objectifs ont pu être atteints et la commande intégrée sur une surface réduite. Finalement, le prototypage de la MLI alimentée par un algorithme V/f a permis de valider les estimations de chemin critique et de temps de calcul, ainsi que l’architecture choisie et les blocs IP utilisés. 137 138 Conclusion générale L’objectif de la thèse était double: d’une part offrir au concepteur de la commande une méthodologie et des outils lui permettant une aide à l’intégration de la commande et dans un deuxième temps¸ appliquer la méthodologie ainsi obtenue à l’intégration d’une commande vectorielle de moteur asynchrone. Il s’agissait en effet de: – prendre en compte les contraintes de la mise en oeuvre dès la phase de conception algorithmique. – repousser les choix technologiques à un stade avancé de la conception afin de garder une relative indépendance technologique. – d’écourter le cycle de conception grâce à une automatisation partielle des tâches. Pour atteindre ces objectifs, nous avons procédé de la façon suivante: – Nous avons analysé les techniques employées pour la mise en oeuvre d’algorithmes de commande. – Nous avons ensuite étudié l’état des techniques et outils employés en microélectronique pour la conception des systèmes complexes. – A partir des résultats précédents, nous avons alors proposé une méthode spécifique à la mise en oeuvre des algorithmes de commande. – Finalement¸ nous avons adapté le Grafcet aux contraintes de la conception de systèmes intégrés. Dans le premier chapitre, nous avons décrit la chaîne d’entraînement et les caractéristiques physiques importantes pour le concepteur de l’intégration de la commande. Nous avons notamment insisté sur les non-linéarités des dispositifs en vue d’établir le degré de précision des calculs qu’il faudra atteindre. Nous avons également clairement établi les limites de notre étude en précisant le sens que nous donnons au concept de «commande» des machines AC. En particulier, nous avons extrait les différents blocs fonctionnels et nous avons précisé la tâche de chacun d’eux. Dans le deuxième chapitre, nous avons analysé les méthodes actuelles pour l’intégration d’algorithmes. Nous avons étudié dans un premier temps les méthodes classiques dont on expose les problèmes vis à vis des besoins actuels 139 et dans un deuxième temps¸ des méthodes plus avancées qui font l’objet de nombreux travaux et qui visent à apporter des solutions aux insuffisances des approches classiques. Même si certains travaux portant sur l’intégration des algorithmes de commande des machines électriques ont présenti la nécessité d’aborder la conception autrement, leur approche ne permet pas de résoudre les problèmes évoqués. Ces travaux nous permettent néanmoins de mettre en évidence des spécificités de l’intégration de la commande dont il faudra tenir compte lors de l’application d’une méthodologie d’implantation. On gardera ainsi à l’esprit l’importance du choix de la fréquence de calcul du système, le problème de l’arithmétique binaire à employer et du séquencement des opérations vis à vis de la précision binaire, et finalement, l’intérêt qu’il peut y avoir à modifier l’algorithme de départ pour tenir compte de la réalisation physique. Le concept de conception mixte par contre, aborde l’intégration d’une fonctionnalité (protocoles, algorithmes, fonctions logiques, ...etc.) de façon systématique. L’utilisation de modèles fonctionnels associés aux algorithmes pour l’exploration des solutions de réalisation permet une conception plus flexible, moins liée aux spécifications technologiques et budgétaires, et donc une conception plus réactive également. Les spécifications floues ne posent plus de problème puisqu’il devient possible d’affiner ces spécifications en fonction des estimations sur les performances d’intégration. En ce qui concerne les outils supportant la méthodologie de conception mixte, nous avons vu qu’un choix important s’offre au concepteur, lui permettant de réaliser une grande partie des tâches automatiquement. La méthodologie de conception mixte étant trop complexe à appliquer dans le cas général, nous avons donc proposé et étudié dans le troisième chapitre une méthode spécifique à l’intégration des systèmes de commande. Après avoir formalisé les problèmes liés à l’intégration de la commande, et situé leur traitement dans la méthodologie, nous avons proposé des solutions théoriques pour les résoudre. Nous avons également défini des restrictions au champ d’application de la méthode afin de limiter la complexité des problèmes traités. Nous définissons en particulier l’architecture des systèmes de commande que nous utilisons. La méthodologie étant définie¸ nous avons proposé et étudié dans le cinquième chapitre une solution de mise en oeuvre de cette méthodologie en utilisant comme outil de modélisation le Grafcet. En effet¸bien que le Grafcet présente des caractéristiques intéressantes¸il reste inadapté à la conception des systèmes intégrés. Nous avons donc proposé des ajouts à la sémantique en vigueur et modifié les règles et hypothèses de fonctionnement. Nous avons développé des règles et des techniques d’analyse du Grafcet permettant au concepteur de la commande de baser ses décisions sur des critères objectifs tels que les estimations de performances. L’analyse architecturale revêt une importance particulière dans la mesure où elle permet au concepteur d’étudier les implications physiques du modèle et donc de le modifier en conséquence. 140 La méthodologie d’intégration étant établie¸ et dans un soucis de validation¸ nous avons achevé notre étude par la mise en oeuvre d’une commande vectorielle de moteur asynchrone sous forme d’ASIC. En suivant les étapes de la méthodologie, nous avons pu montrer l’efficacité de celle-ci à résoudre des problèmes tels que la précision binaire ou les spécifications floues. En utilisant des IP génériques paramétrisés, nous avons pu notamment accéder une certaine flexibilité dans la définition des constantes caractéristiques de l’ASIC. Au niveau de l’étude des solutions d’intégration, nous avons étudié en détail l’algorithme CORDIC comme solution algorithmique au calcul de certaines fonctions mathématiques, le CORDIC étant particulièrement intéressant par rapport aux contraintes de surface. Finalement, nous montrons les résultats de quelques tests expérimentaux sur le prototype de la fonction de génération des impulsions MLI. Cette fonction utilisant les mêmes ressources matérielles que l’ASIC de commande complet, le test du prototype permet de juger des prestations et du fonctionnement de l’architecture. Réalisé sur une carte spécifique, le prototype atteint les prestations espérées tant en terme de vitesse de calcul comme en surface occupée. Bien que cette étude nous a permis de valider en partie notre approche¸ nous pensons que certaines étapes de la méthodologie ne sont pas suffisamment exploitées lors de l’intégration de la commande vectorielle. En effet¸ les algorithmes de partitionnement¸ de validation fonctionnelle et d’estimation de performances proposés ne permettent pas de traiter des fonctions complexes. Sur ces points¸ des développements algorithmiques sont prévisibles ultérieurement. Par ailleurs¸ l’automatisation de la majeur partie des tâches est à envisager afin de minimiser le risque d’erreur¸ augmenter la capacité de traitement des systèmes complexes et diminuer les délais de développement. 141 142 Bibliographie [1] A. Kalavade, E. A. Lee. A Hardware/Software Codesign Methodology for DSP applications. [On-line]. IEEE Design and Test of Computers, Sept. 1993, p. 16–28. [16/9/1998] Available from Internet: <URL : http://ptolemy.berkeley.edu/papers/publications.html/index.html>. 58 [2] A. Barancourt. Automate de commande rapprochée multi-machines: essai d’intégration au sein de LCA. Thèse Doct. Ing. : Institut National Polytechnique de Toulouse, 1989. 187 p. 44 [3] G. Berry. Proof, Language and Interaction: Essays in Honour of Robin Milner. [On-line]. Cambridge (USA) : MIT Press, 1998. The Foundations of Esterel. [26/10/98] Available from internet:<URL: http://www.inria.fr/meije/esterel. 62, 73, 96 [4] J. Chatelain. Machines électriques, Tome 2. Paris : Dunod, 1983. 302 p. 30, 35, 152 [5] D. Gajski, F. Vahid, S. Narayan. Specification and design of embedded hardware-software systems. IEEE Design and Test of Computers, 1995, vol 12, n 1, p. 53–67. 46, 54 [6] D. Gajski, F. Vahid, S. Narayan, J. Gong. Specification and design of embedded systems. Englewood Cliffs (USA) : Prentice-Hall, 1994. 468 p. 46, 51 [7] D. Gajski, F. Vahid, S. Narayan, J. Gong. Specification and design of embedded systems. Englewood Cliffs (USA) : Prentice-Hall, 1994. System partitioning, p. 187–201. 52 [8] D. Harel, A. Naamad. The STATEMATE semantics of Statecharts. [On-line]. ACM trans. Soft. Eng. Method., Oct. 1996, [26/10/98] Available from internet:<URL: vol 5, n 4 non paginé. http://cui.unige.ch/eao/www/Visual/statecharts.html. 100 [9] R. David. Du Grafcet aux réseaux de Pétri. Paris : Hermes, 1989. 425 p. 92 [10] E. Monmasson, J.C. Hapiot, M. Grandpierre. A digital control system based on field programmable gate array for AC drives. EPE journal, Nov 1993, vol 3, n 4, p. 227–234. 44, 65 [11] J.M. Bergé (Ed). Hardware/Software Co-Design and Co-Verification. Boston : Kluwer Academic Publishers, 1997. 165 p. 46 143 [12] E.A. Lee et al. The Almagest: Ptolemy 0.7 user’s manual, volume 1. [On-line]. Berkeley : University of California, 1997. non paginé. [16.10.98] Available from internet:<URL: http://ptolemy.berkeley.edu/papers/publications.html/index.html. 57, 61, 73 [13] P. Robert et al. Le Petit Robert, Dictionnaire alphabétique et analogique de la langue française. Paris : Le Robert, 1984. 2171 p. 147 [14] F. Aubépart, C. Girerd, Y.A. Chapuis, P. Poure, F. Braun. ASIC implementation of direct torque control for induction machine: functionnal validation by power and control simulation. Münschen (d) : PCIM conference, 1998. p. 251–260. 45 [15] F. Balarin, L. Lavagno, A. Sangiovanni-Vincentelli et al. HardwareSoftware Co-Design of embedded systems. Boston : Kluwer Academic Publishers, 1997. 289 p. 46, 51, 57 [16] F. Balarin, L. Lavagno, A. Sangiovanni-Vincentelli et al. HardwareSoftware Co-Design of embedded systems. Boston : Kluwer Academic Publishers, 1997. Models and representations, p. 37–134. 49 [17] F. Balarin, L. Lavagno, A. Sangiovanni-Vincentelli et al. HardwareSoftware Co-Design of embedded systems. Boston : Kluwer Academic Publishers, 1997. Interface synthesis and real-time operating system, p. 159– 203. 52 [18] F. Balarin, L. Lavagno, A. Sangiovanni-Vincentelli et al. HardwareSoftware Co-Design of embedded systems. Boston : Kluwer Academic Publishers, 1997. Synthesis, p. 134–1597. 55 [19] G. De Micheli, A. Sangiovanni-Vincentelli, P. Antognetti. Design System for VLSI circuits - Logic synthesis and silicon compilation. Boston : Kluwer Academic Publishers, 1987. 654 p. 40 [20] G.L. Haviland, A. Tuszynski. A CORDIC arithmetic processor chip. IEEE Transactions On Computers, feb. 1980, vol C-29, n 2, p. 68–79. 183 [21] H. Kellermann, P. Hildinger, G. Brandenburg and J. Heinzl. Field oriented position control of a hybrid stepper motor. Sevilla (sp) : EPE conference, 1995. vol 3, p. 3.908–3.913. 43 [22] D. Harel. Statecharts: a visual formalism for complex systems. Science of computer programming, 1987, n 8, p. 231–274. 99 [23] J. Holtz. Pulsewidth modulation: a survey. Toledo (sp) : Power Electronics Specialists Conference (PESC), 1992. vol 1, p. 11–18. 35 [24] J. Cortadella, M. Kishinevsky, A. Kondratyev, L. Lavagno, A. Yakovlev. Petrify: a tool for manipulating concurrent specifications and synthesis of asynchronous controllers. IEICE trans. on Information and Systems, March 1997, vol E80-D, n 3, p. 315–325. 92 [25] J. Hennessy, D. Patterson. Computer organization and design. The Hardware/software interface. San Francisco (USA) : Morgan Kaufmann Publishers, 1994. Chapter 4, p. 261–263. 58 144 [26] J.E. Fletcher, B.W. Williams, T.C. Green. DSP control of a synchronous reluctance motor. Sevilla (sp) : EPE conf., 1995. vol 1, p. 1.480–1.485. 43 [27] J.M. Daveau, G.F. Marchioro, T. Ben-Ismail, A.A. Jerraya. Cosmos: an SDL based hardware/software codesign environment. In Hardware/Software Co-Design and Co-Verification. Boston : Kluwer Academic Publishers, 1997. p. 59–87. 57 [28] J.M. Proth, X. Xiaolan. Les réseaux de Pétri pour la conception et la gestion des systèmes de production. Paris : Masson, 1995. 304 p. 92 [29] J.M. Retif, B. Allard. A PWM ASIC using stochastic coding. Toledo (sp) : IEEE PESC conference, 1992. p. 587–594. 43 [30] J.M. Retif, B. Allard, X. Jorda, A. Perez. Use of ASIC’s in PWM techniques for power converters. Hawaii (USA) : IEEE IECON conference, 1993. vol 2, p. 683–688. 44, 65, 72 [31] X. Jordà. Conception et réalisation d’une commande économique de couple d’une machine asynchrone pour la traction électrique. Thèse Doct. Ing. : Institut National de Sciences Appliquées de Lyon, 1995. 221 p. 46, 65, 151 [32] K. Kota, J. R. Cavallaro. Numerical accuracy and harware tradeoffs for CORDIC arithmetic for special-purpose processors. IEEE Transaction on Computers, July 1993, vol 42, n 7, p. 769–779. 179 [33] A. Kalavade. System-level codesign of mixed hardware-software systems. [On-line]. PhD thesis : University of California, Dept. of EECS, Berkeley, Sept. 1995. 194 p. [16/9/1998] Available from Internet: <URL : http://ptolemy.berkeley.edu/papers/publications.html/index.html>. 46, 51, 53, 61 [34] P. Lautier. Modélisation des convertisseurs à découpage pour la conception et la commande: application à l’onduleur. Thèse Doct. Ing. : Institut National des Sciences Appliquées de Lyon, 1998. 175 p. 30 [35] W. Leonhard. Control of electrical drives. 2nd edition. Berlin : Springer Verlag, 1996. 420 p. 26, 35, 151 [36] W. Leonhard. Control of electrical drives. Berlin : Springer Verlag, 1996. Control of Induction Motor Drives, p. 229–287. 44, 46 [37] E. Monmasson. Architecture de dispositifs de commande numérique. Thèse Doct. Ing. : Institut National Polytechnique de Toulouse, 1993. 174 p. 44, 65, 72, 74 [38] E. Monmasson. Architecture de dispositifs de commande numérique. Thèse Doct. Ing. : Institut National Polytechnique de Toulouse, 1993. p. 147–151. Annexe A. 46 [39] N. Halbwachs, P. Caspi, D. Pilaud. The synchronous dataflow programming language Lustre. Another Look at Real Time Programming, Proceedings of the IEEE, Sept. 1991, vol Special Issue, non paginé. 99 [40] N. Mohan, T.M. Undeland, W.P. Robbins. Power electronics: converters, applications and design. New York : John Wiley & Sons, 1989. 667 p. 26 [41] N.H.E. Weste, K. Eshraghian. Principles of CMOS VLSI design, a system perspective. New-York : Addison-Wesley, 1993. 713 p. 40 145 [42] P. Borne, G. Dauphin-Tanguy, J.P. Richard, F. Rotella, I. Zambettakis. Analyse et régulation des processus industriels. Paris : Technips, 1993. 313 p. 171 [43] P. Foussier, J.P. Chante, X. Jordà, J. Carrabina. Methodologies in the design of an ASIC for AC drive control. Toledo (sp) : VHDL Users’s Forum in Europe, 1997. p. 51–60. 65 [44] P. Le Guernic, M. Le Borgne, T. Gauthier, C. Le Maire. Programming real time applications with Signal. Proceedings of the IEEE, Sept. 1991, vol 79, n 9, p. 1305–1320. 99 [45] P. Naish, P. Bishop. Conception des ASICs. Paris : Masson, 1990. 176 p. 40 [46] R. Aireau, J.-M- Bergé, V. Olive, J. Rouillard. VHDL, du language à la modélisation. First edition. Lausanne : Presses polytechniques et universitaires Romanes, 1990. 553 p. 95 [47] R. Gupta, G. DeMicheli. Partitioning of functional models of synchronous digital systems. In Proc. Int’l Conf. Computer-Aided Design. New-York, USA : IEEE CS Press, 1990. p. 216–219. 54 [48] M. Richard. Réseaux de Pétri, Grafcet, Automates. Villeurbanne (fr) : INSA de Lyon, 1988. 142 p. Cours de Génie Electrique. 92 [49] J.M. Rétif. Systèmes asservis échantillonnés. Villeurbanne (fr) : Institut National de Sciences Appliquées, 1996. 142 p. Cours de Génie Electrique. 195 [50] S.-F. Hsiao, J.-M. Delosme. Householder CORDIC algorithm. IEEE Transactions On Computers, Aug. 1995, vol 44, n 8, p. 990–1000. 183 [51] S. Kleinfelft, M. Guiney, J.K. Miller, M. Barnes. Design methodology management. Proc. of the IEEE, Feb. 1994, vol 82, n 2, p. 231–250. 61 [52] S. Kumar, J.H. Aylor, B.W. Johson, Wm.A. Wulf. The codesign of embedded systems, A unified Hardware/Software representation. Boston : Kluwer Academic Publishers, 1996. 274 p. 46 [53] S. Kumar, J. Aylor, B.W. Johson, Wm.A. Wulf, R.D. Williams. A model for exploring hardware/software trade-offs and evaluating design alternatives. In Hardware/Software Co-Design and Co-Verification. Boston : Kluwer Academic Publishers, 1997. p. 1–21. 52, 107 [54] J.P. Uyemura. Circuit Design for CMOS VLSI. Boston : Kluwer Academic Publishers, 1991. 480 p. 40 [55] J. E. Volder. The CORDIC trigonometric computing technique. IRE Transactions on Electronic Computers, Sept. 1959, n EC-8, p. 330–334. 177 [56] J.S. Walther. The unified algorithm for elementary functions. sine loco : AFIPS Spring Joint Computing Conf., 1971. vol 38, p. 379–385. 181 [57] Y.Y. Tzou, H.J. Hsu. FPGA realization of space-vector PWM control IC for three-phase PWM inverters. IEEE trans. on Power Electronics, nov 1997, vol 12, n 6, p. 953–963. 43, 72 146 Annexe A Définitions Les termes suivants comportent deux définitions. La première correspond à la définition du Petit Robert [13] dans son acceptation courante, la seconde correspond au sens précis qui lui est donné dans cette thèse. «algorithme» 1. Ensemble des règles opératoires propres à un calcul - Calcul, enchaînement des actions nécessaires à l’accomplissement d’une tâche. 2. Séquence d’opérations logiques ou arithmétiques. «cible (target)» 1. Objectif visé. 2. Technologie à employer, c’est à dire un circuit intégré spécifique (ASIC 1 précaractérisé ou FPGA 2 ) ou un processeur standard (processeur classique, DSP 3 , microcontroleur). «fonctionnalité» Rôle général d’un élément. Une fonctionnalité est pour nous un terme générique pour désigner un ensemble de tâches, algorithmes et fonctions que doit réaliser un circuit pour obtenir le fonctionnement souhaité. Une fonctionnalité est par exemple un circuit de reconnaissance de formes. Un tel circuit doit intégrer non seulement l’algorithme de traitement de l’image, mais aussi toutes les fonctions nécessaires à son intégration dans l’environnement envisagé (protocoles de communication, fonctions analogiques ...etc.) et éventuellement des fonctions de surveillance et des machines d’état. «implanter, intégrer» 1. Application Specific Integrated Circuit 2. Field Programable Gate Array 3. Digital Signal Processor 147 1. (Intégrer:) faire entrer dans un ensemble en tant que partie intégrante, (implanter:) introduire et faire se développer d’une manière durable dans (un nouveau milieu). 2. Action de réaliser une fonction donnée sous forme de circuit intégré autonome (matériel/ASIC ou logiciel/processeur) «logiciel (software)» 1. techn. ensemble des travaux de logique, d’analyse, de programmation, nécessaires au bon fonctionnement d’un ensemble de traitement de l’information (opposé à matériel). Recomm. offic. pour Software. 2. Par intégration logiciel, on se réfère au programme assembleur exécuté par un processeur et par extension au processeur lui-même (processeur classique, DSP, microcontroleur). Remarque: dans la suite de ce document, nous employons le terme «logiciel» comme nom propre. Le lecteur ne s’étonnera donc pas lorsque nous n’effectuons pas l’accord avec le terme auquel il se réfère (p.e. cible logiciel)... «matériel (hardware)» Par intégration matériel, on comprend une technologie circuit intégré spécifique (ASIC précaractérisé ou FPGA). Même remarque que pour le terme «logiciel». «méthode ou méthodologie» 1. Ensemble de démarches raisonnées, suivies, pour parvenir à un but. 2. Ensemble de tâches ordonnées et d’algorithmes que le concepteur doit réaliser et appliquer pour parvenir à mettre en oeuvre une fonctionnalité donnée. «migration technologique» Transfert d’une fonction intégrée ou prévue pour être intégrée avec une technologie (matériel ou logiciel) vers une autre technologie. «mise en oeuvre d’une fonctionnalité» Selon nous, la mise en oeuvre d’une fonctionnalité correspond à son intégration sur silicium (sous forme matériel/ASIC ou logiciel/processeur) et à la conception de la carte comprenant l’ensemble des circuits analogiques et digitaux nécessaires à la connection de celle-ci avec l’environnement dans lequel elle doit opérer. «partitionnement» Répartition des noeuds de la fonctionnalité entre le matériel et le logiciel. «système» 148 1. (Robert): Appareil plus ou moins complexe, ensemble structuré (de choses abstraites) «valider» 1. Valide: qui présente les conditions requises pour produire son effet. 2. Certifier que le système fonctionne quelles que soient les entrées ou les conditions physiques d’utilisation. «vérifier» 1. Examiner (une chose) de manière à pouvoir établir si elle est conforme à ce qu’elle doit être, si elle fonctionne correctement. 2. S’assurer que dans des cas précis et définis, le système fonctionne correctement. 149 150 Annexe B Exemple de commande vectorielle Dans cette annexe, nous présentons un exemple de commande vectorielle d’un moteur AC asynchrone que nous avons utilisé tout au long de la thèse. Les développements algorithmiques de cette annexe reposent sur les résultats exposés par X. Jordà dans [31] et par W. Leonhard [35]. Ainsi que nous l’avons déjà précisé dans le premier chapitre, l’algorithme de commande est divisé en deux parties indépendantes, le contrôle et la MLI. Dans notre exemple, la commande comporte un contrôle vectoriel et une MLI vectorielle. Remarquons au passage que la stratégie MLI utilisée est complètement indépendante du contrôle. Nous aurions tout aussi bien pu utiliser une MLI intersective ou précalculée, couplée au contrôle vectoriel. Nous présenterons donc le contrôle et la MLI séparément. B.1 Le contrôle vectoriel Le problème du moteur asynchrone est qu’il n’est pas possible de contrôler directement le flux et le couple à partir des courants d’alimentation comme c’est le cas pour les moteurs DC à excitation séparée. En effet, en alimentant les bobinages du stator, les courants de ligne de la machine asynchrone créent un champ tournant qui induit des courants dans le rotor en court-circuit. Ces courants à leur tour créent un champ dans l’entrefer de la machine qui, en s’ajoutant au champ tournant du stator forme le flux tournant de la machine. A partir des travaux, dans les années 30, de Park et Kron qui développèrent un modèle dynamique de la machine asynchrone, les électrotechniciens imaginèrent d’appliquer des transformations mathématiques aux courants de ligne pour extraire des variables permettant de contrôler indépendamment le couple et le flux. Cette technique de contrôle, appelée par la suite “contrôle vectoriel”, revient en fait à transformer la machine asynchrone AC en une machine DC 151 à excitation séparée équivalente pour laquelle les techniques de contrôle sont bien connues. La base du contrôle vectoriel est donc ce modèle dynamique de la machine asynchrone que nous allons étudier maintenant. B.1.1 Le modèle de la machine asynchrone B.1.1.1 La transformation de Concordia Le modèle repose sur l’hypothèse que toute machine tournante peut être ramenée à une machine primitive caractérisée par des enroulements fictifs pseudostationnaires [4]. Les équations de tension des phases rotoriques et statoriques s’écrivent pour le stator: & & & ) ) ( ) ( ( et pour le rotor: & & & ) ) ( ) ( ( ce qui peut se résumer sous forme matricielle par: & ( ( ) ) avec [& ] [ ] [ ] [) ] [) ] : tensions instantanées des phases a, b et c statoriques. : courants instantanés des phases a, b et c statoriques. : courants instantanés des phases A, B et C rotoriques. : flux totaux à travers les phases a, b et c statoriques. : flux totaux à travers les phases A, B et C rotoriques. 152 ( et ( : respectivement les résistances totales d’une phase statorique et d’une phase rotorique. Quant aux flux magnétiques traversant chaque phase statorique et rotorique, ils sont décrits par: ) ) * + * + avec , , , * , , , , , , , , , * , , , , , , + , + + et , et , , et , , : respectivement les inductances propres d’une phase statorique et d’une phase rotorique. : respectivement les inductances mutuelles entre deux phases statoriques et entre deux phases rotoriques. : valeur maximale de l’inductance mutuelle entre phases rotoriques et statoriques. : angle de rotation du moteur mesuré entre l’axe magnétique de la phase statorique a et de la phase rotorique A. En raisonnant sur ces équations de tension des phases rotoriques et statoriques ainsi que sur l’expression des flux magnétiques qui traversent ces phases, on obtient les équations matricielles des tensions de phase: * + (B.1) ( * + (B.2) & ( Ces équations présentent deux inconvénients majeurs: 1. un nombre important de variables couplées entre elles 153 2. la dépendance des matrices + et + de l’angle de rotation mécanique Pour palier à ce problème, on recherche des transformations linéaires des variables triphasées de la machine permettant de passer du repère triphasé de la machine réelle à un repère triphasé fixe par rapport au stator ou au rotor. Dans le cas des variables statoriques, on va passer d’un repère abc avec des axes espacés de à un repère orthogonal fixe par rapport au stator. La transformation repose sur l’équivalence magnétique du système dans les deux repères. En posant que l’axe a coïncide avec l’axe , on détermine la transformation suivante, aussi appelée transformation de Concordia: - avec - pouvant prendre les valeurs - Remarquons qu’avec - , les valeurs crêtes et efficaces des variables de phase sont identiques dans les deux repères. Remarquons aussi que pour que la puissance instantanée soit invariante, il faut que T soit orthogonale, c’est à . dire Dans le cas des variables rotoriques, on raisonne de la même manière. La transformation de Concordia appliquée aux variables rotoriques permet de passer du repère abc à un repère xyo, solidaire avec le rotor (c’est à dire un repère tournant à la vitesse de rotation du moteur). Si on désire exprimer ces variables rotoriques triphasées dans le repère , il faut leur appliquer la transformation de Concordia puis une rotation d’angle . On remarquera que les coordonnées selon l’axe o restent inchangées durant la rotation car cet axe (dit homopolaire) est commun aux repères et xyo. L’expression de la rotation pour un vecteur z quelconque est: ' ' ' ' ' ' B.1.1.2 Nouvelles équations électriques dans le repère En appliquant les transformations que nous avons décrites (Concordia aux variables statoriques et Concordia plus la rotation aux variables rotoriques), on obtient de nouvelles équations électriques du moteur selon le repère : 154 & ( * & ( * & ( * & ( * * * * * & ( * & ( * ) ) ) ) * * * * * * * * * . * . * . * . avec * * * * . , , , , , , , et & , & , & : tensions des trois enroulements statoriques & , & , & : tensions des trois enroulements rotoriques , , : courants des trois enroulements rotoriques * : inductance propre cyclique rotorique * : inductance propre cyclique statorique * : inductance mutuelle cyclique entre rotor et stator * : inductance propre de l’enroulement homopolaire Avec les équations ci-dessus, on remarquera que: – les paramètres des équations différentielles ne dépendent plus de la position relative entre stator et rotor. 155 – la dynamique selon l’axe homopolaire est découplée de celle des autres axes. Les composantes homopolaires sont d’ailleurs très souvent nulles (par exemple pour un stator branché en étoile, et ). Il suffit alors d’étudier les équations selon les axes . C’est pour cette raison qu’on appelle souvent la transformation de Concordia, transformation 3/2 puisqu’elle permet le passage d’un système triphasé vers un système biphasé équivalent (les composantes homopolaires étant négligées). L’expression du couple électromagnétique est quant à elle extraite d’une étude sur la puissance électrique totale instantanée dans la machine. En admettant que les variables homopolaires sont nulles (la machine est dite équilibrée), on obtient l’expression générale du couple: - /* où p est le nombre de paires de pôles électriques du moteur. B.1.1.3 La transformation de Park Alors que la transformation de Concordia permettait d’exprimer le modèle du moteur dans un repère fixe par rapport au stator, nous verrons en B.1.2.1, p. 159, qu’il peut être plus intéressant, pour les besoins du contrôle, d’exprimer ce modèle dans un repère tournant à la vitesse de synchronisme . , appelé repère . Nous avons déjà indiqué succinctement en 1.2.1.2 que cette vitesse était définie à partir de la fréquence des tensions d’alimentation et qu’elle était liée à la vitesse de rotation maximale que le moteur n’atteignait jamais en raison du couple résistant qui s’exerce sur l’axe du rotor (au minimum, la résistance due aux frottements si le moteur tourne à vide). Pour calculer le modèle du moteur dans le repère , il faut appliquer la transformation de Concordia aux variables statoriques et rotoriques, puis leur appliquer une rotation d’angle pour les variables statoriques, et d’angle pour les variables rotoriques. La combinaison matricielle de la transformation de Concordia et de la rotation constitue la transformation de Park: ' ' - ' ' ' ' ' ' B.1.1.4 Le modèle de Park En appliquant la transformation de Park aux équations électriques du moteur et en négligeant les composantes homopolaires, on obtient les équations 156 de la machine dans le repère . On rappelle que l’angle de la transformation vaut pour les variables rotoriques: & ( * & ( * & ( * & ( * ) ) ) ) * * * * * * * * * * * * - /* * . * . * . * . * . * . * . * . L’ensemble de ces équations constituent ce qu’on appelle aussi le modèle de Park du moteur à induction. B.1.1.5 Équations mécaniques Un dernier point indispensable de la modélisation du moteur asynchrone est l’équation mécanique de la machine qui en décrit le mouvement. Cette équation s’écrit: 0 . / avec 0 : inertie totale des parties mobiles : vitesse mécanique de rotation : couple électromagnétique de la machine : couple de charge (éventuellement nul) : couple résistant de frottement (dû à plusieurs composantes, frottement sec, statique, fluide et avec l’air) : coefficient de frottement fluide 157 B.1.1.6 Le modèle à quatre paramètres Jusqu’à présent, nous avons développé les équations théoriques du moteur asynchrone. Mais, ces équations ne sont d’aucune utilité si nous ne sommes pas en mesure d’identifier les paramètres de ces équations, c’est à dire de déterminer concrètement la valeur de grandeurs telles que la résistance rotorique ( , statorique ( , les inductances ...etc. Or, non seulement cette identification de paramètres est complexe, mais en plus, ces paramètres varient lors du fonctionnement de la machine si bien qu’il sera nécessaire d’introduire une procédure d’identification en ligne dans l’algorithme de commande. Pour faciliter la tâche d’identification, on effectue des hypothèses simplificatrices sur les fuites magnétiques au niveau des circuits rotoriques et statoriques. En fait, on va ramener l’ensemble des fuites du côté du stator ce qui permet de réduire le nombre de paramètres indépendants (du modèle) à quatre. Ainsi, si on associe respectivement les inductances * et * aux flux de fuite du stator et du rotor, on considère que * si bien que l’inductance de fuite vaut * * . Or on avait les équations sur les inductances suivantes: * * * * * * qui deviennent avec les hypothèses simplificatrices: * * * * * Dans le repère dq, les équations électriques du moteur deviennent alors simplement: ) ) . ( . ( . & & / ) ) . ) ) (B.3) (B.4) avec 158 * ( (B.5) - B.1.2 La commande par flux rotorique orienté Historiquement, l’algorithme étudié par Jordà et que nous présentons ici devait servir à la commande d’un moteur électrique pour la traction d’un petit véhicule urbain. Pour cette raison, la stratégie de contrôle adoptée comporte uniquement un contrôle du couple de la machine. On suppose que le contrôle de vitesse est effectué par le conducteur de la voiture avec la pédale d’accélération et la pédale de frein. B.1.2.1 Mise en équation du contrôle On se rappelle que le but de la modélisation du moteur asynchrone, présentée dans la section précédente, est de permettre un découplage de la commande du flux et du couple comme c’est le cas naturellement dans la machine DC à excitation séparée. Pour obtenir ce résultat sur le moteur asynchrone, l’idée de la commande vectorielle est de contrôler le courant statorique dans un repère dq tournant à la vitesse de synchronisme (qui n’est pas, on le rappelle, la vitesse de rotation mécanique). En calant l’axe d sur le vecteur de flux, on contrôlera directement le flux par la composante d du courant statorique et le couple par la composante q. La composante d jouera donc le rôle de courant d’excitation et la composante q celui de courant d’induit. Les équations qui lient le flux, le couple et le courant statorique découlent du modèle de Park à quatre paramètres présenté en B.1.1.6. En effet, choisir un repère dq tournant à . et calé sur le flux rotorique revient à poser que ) ) et ) . De ce fait, les équations B.3 et B.4 se simplifient et deviennent: . ( ( . * ( ( . * ) * /* ( ) & * * * . ) & * * (B.6) (B.7) (B.8) (B.9) (B.10) (B.11) où est la constante rotorique comme définie en B.5 et est le courant magnétisant, proportionnel au flux rotorique ) . 159 En analysant les équations précédentes, on peut observer les points suivants: – Les équations B.8 et B.9 définissent une relation permettant de contrôler le flux par la composante du courant statorique. – A flux constant, le couple dépend uniquement des variations de (équation B.11). – La relation entre tension statorique (& & ) et courant statorique ( ) est donnée par les équations B.6 et B.7. On voit que l’effet recherché a été obtenu avec un découplage du contrôle de flux et de couple. On peut donc maintenant appliquer les techniques classiques de contrôle. B.1.2.2 Le schéma de contrôle Dans la stratégie de contrôle choisie, nous régulons les composantes et du courant statorique. Pour cela, on utilise les fonctions de transfert suivantes, tirées des équations B.6 à B.10: ( ( ( ( ( ( ( ( & * . . * & 1 & * . ( (B.12) & 1 (B.13) (B.14) Comme on peut le constater avec les équations B.12 et B.13, les composantes et se déterminent à partir de la composante de la tension statorique qui leur est associée et d’un terme de couplage entre les axes d et q. On estime toutefois que ces termes de couplage 1 et 1 peuvent être compensés. On obtient alors en figure B.1 un schéma de commande de la machine asynchrone qui néglige le retard d’application de la commande (une période d’échantillonnage) et les retards introduits par l’onduleur (de l’ordre de la microseconde). On suppose également que l’orientation de l’axe d en fonction du flux ) est parfaite. B.1.2.3 Les régulateurs Le schéma de commande comporte trois boucles de régulations pour , , et . Dans les trois cas, la fonction de transfert du processus continu est 160 F IG . B.1 – commande de la machine asynchrone dans le repère du premier ordre. Nous utiliserons des régulateurs du type proportionnel intégral (PI). La figure B.2 montre la transformée en Z avec un bloqueur d’ordre zéro d’une boucle de régulation d’un processus du premier ordre continu de gain K et de constante de temps 2 . Dans le tableau B.1, nous résumons les valeurs de ces constantes pour les trois boucles de régulation de la commande. F IG . B.2 – Transformée en Z d’un processus du premier ordre régulé par un PI Le gain A et le pôle P du processus échantillonné par un bloqueur d’ordre zéro sont liés à K, 2 et (où est la période d’échantillonnage) par les expressions suivantes: - 3 2 2 La fonction de transfert du processus régulé est du deuxième ordre. Le calcul du gain G et du zéro L est effectué tel que la réponse dynamique ait une pulsation propre . et un amortissement 4 donné. L’expression des pôles en boucle fermée sur le plan z (1 56 ) pour 4 vaut: 161 - 1 2 TAB . B.1 – Valeur du gain K et de la constante de temps 2 pour les trois boucles de régulation de courant 1 6 .4 . .4 . 4 4 Avec cette expression des pôles, on identifie les coefficients G et L: 7 * 3 3 1 1 6 7 B.1.2.4 L’orientation du repère dq Comme nous l’avons déjà dit en B.1.2.1, p. 159, le repère dq est calé sur le flux rotorique. En d’autres termes, l’angle entre l’axe d et l’axe , lié au stator, vaut . Toute la stratégie de contrôle dépend du bon calage du repère dq, et donc de la connaissance de l’angle . Deux méthodes existent pour connaître cet angle: 1. soit la mesure directe d’une grandeur permettant le calcul direct de l’angle (par exemple le flux ) par des capteurs à effet Hall) 2. soit l’estimation de l’angle à partir de l’équation B.10 du modèle orienté et de la consigne de courant statorique. Cette dernière solution est moins coûteuse en matériel et simple à mettre en oeuvre. C’est la raison pour laquelle elle a été choisie dans cette commande. Pratiquement, on calcule la vitesse de glissement à imposer à la machine en fonction des consignes et : . 162 et de la mesure de la vitesse mécanique, on calcule la pulsaA partir de . tion statorique et donc aussi l’angle : . . . 8 8 . dépend directement de la constante de Remarquons que le calcul de . temps rotorique . C’est le principal inconvénient de cette méthode car une variation de cette constante entraîne un désalignement du repère dq et donc un recouplage entre le contrôle du flux et du couple, ce qui entraîne une erreur stationnaire et des oscillations transitoires. Il est donc indispensable d’effectuer une estimation en ligne de , ce qui augmente la charge calculatoire de l’algorithme de contrôle. B.1.2.5 Estimation de L’identification de repose sur la méthode dite de la puissance réactive modifiée. Il s’agit en fait de comparer deux calculs différents de la puissance réactive afin d’examiner si la constante rotorique est identique dans les deux cas. Si la constante a varié, les deux calculs donneront des résultats différents. Dans notre cas, nous calculons la puissance réactive à partir des mesures de courant et tension, puis à partir des grandeurs de référence. L’écart entre les deux calculs permettra d’estimer la valeur réelle de . Dans un repère dq tournant à . , on calcule les puissance réactives par les équations suivantes: & * & 3 3 . * . * . * où 3 est la puissance réactive calculée à partir des grandeurs mesurées et 3 est la puissance réactive calculée à partir des grandeurs de référence. L’écart entre ces deux puissances vaut: 3 ) . . * . On voit bien avec ces équations que si tend vers zéro, l’écart entre les deux calculs de la puissance réactive devient nul. Pour estimer la valeur réelle de , il faut donc effectuer les deux calculs de puissance réactive, calculer l’écart, intégrer cet écart et ajouter le résultat à la valeur nominale de la constante de temps rotorique . Le schéma fig. B.3 reproduit cette stratégie d’estimation de la constante de temps rotorique. 163 F IG . B.3 – Estimation de la constante de temps rotorique B.2 La MLI vectorielle Comme nous l’avons déjà dit, l’algorithme MLI sert à calculer les instants de commutation des interrupteurs de l’onduleur qui alimente le moteur. Le principe de la MLI vectorielle consiste à reconstruire le vecteur de tension sta& à partir de huit vecteurs de tension correspondant aux huit états torique possibles de l’onduleur. Dans le paragraphe suivant, nous allons décrire l’algorithme employé pour calculer les instants de commutation et définir les grandeurs de référence que nécessite cet algorithme. B.2.1 Description de l’algorithme Figure B.4, nous représentons un onduleur idéal à trois bras, c’est à dire un onduleur sans temps mort, retard de commutation ni distortion de la tension de sortie. Pour un tel onduleur, il n’existe que huit configurations possibles selon l’état de ses interrupteurs, ce qui correspond à huit combinaisons de tension entre ligne soit, dans le repère , huit vecteurs de tension statorique applicables au moteur. Le tableau B.2 résume ces combinaisons de tension. On & dans le remarquera au passage que & et & sont les deux composantes de plan complexe : & & 5& Sur la figure B.5, nous avons représenté les huit vecteurs de tension statorique dans le plan . On remarquera que deux des huit vecteurs (& et & ) sont nuls. Quant aux six autres, ils définissent six secteurs angulaires de ! . Si on repère ces secteurs par un indice entier , on peut exprimer les vecteurs par les relations suivantes: 164 TAB . B.2 – combinaisons de vecteurs de tension d’un onduleur trois bras idéal, moteur branché en triangle (F: fermé, O: ouvert) 165 F F F F F O O F O F O O O O O F F O F O F O F O 0 0 0 0 0 0 0 0 0 0 0 0 & & & 0 0 0 0 & 0 0 & 0 ! ! ! ! ! ! 0 & & & & & & & & & nom F IG . B.4 – Onduleur idéal a trois bras & & & & 9 9 5 9 9 5 (B.15) (B.16) (B.17) (B.18) Ces huit vecteurs de tension que nous avons définis correspondent à la tension statorique qu’on pourrait mesurer si les interrupteurs de l’onduleur restaient dans un état correspondant à un vecteur donné. Mais le but de la méthode est d’obtenir une tension statorique quelconque. Pour cela, nous allons appliquer sur une période de commutation un vecteur & pendant un temps pendant un temps . De cette manière, puis un vecteur & en moyenne, on peut obtenir n’importe quelle tension statorique désirée. Figure B.6 montre le principe d’application. Le poids de chaque vecteur est en fait le rapport cyclique, c’est à dire le rapport entre son temps d’application et la période de commutation: 2 (B.19) est inférieure à Si la somme des durées d’application des vecteurs & et & ( ), alors on complète la séquence par les vecteurs nuls. Le & est donc une combinaison linéaire de vecteurs de base: vecteur reconstitué 166 F IG . B.5 – Vecteurs de tension statorique dans le plan F IG . B.6 – Principe de construction du vecteur de tension statorique 167 2 & 2 & 2 & & 2 & (B.20) Tout le problème est de calculer ces temps d’application et . A partir des équations B.15 à B.20, on peut déduire les relations suivantes qui vont nous permettre de calculer ces temps: 9 9 & & 9 9 & & (B.21) (B.22) On voit que pour calculer et , on a besoin de connaître: 1. la tension statorique de référence & donnée par ses composantes & et & 2. le secteur angulaire dans lequel se situe le vecteur statorique de référence & , donné par l’indice 3. la période de commutation 4. la tension d’alimentation de l’onduleur Le vecteur statorique de référence & étant connu, on propose un algorithme de recherche du secteur angulaire pour déterminer (cf. Fig. B.7). F IG . B.7 – Algorithme pour déterminer le secteur angulaire 168 B.2.2 Calcul des instants de commutation Une fois les durées d’application calculées, il faut déterminer les instants de commutation des interrupteurs, le problème étant qu’il est possible de déterminer plusieurs séquences de commutations qui correspondent aux temps calculés. Pour un même fondamental de sortie, chaque séquence produit des harmoniques et des pertes en commutation différentes. Dans notre exemple, nous utilisons une MLI continue avec des impulsions centrées au milieu de la période de commutation. Ce type de modulation limite le contenu harmonique des tensions générées. La méthode pour déterminer les instants de commutation consiste à dis& et tribuer le temps d’application du vecteur nul de façon identique entre & . On applique donc successivement & , puis des vecteurs non nuls, puis & , & . Les vecteurs non nuls sont deux vecteurs puis des vecteurs non nuls, puis dont la durée d’application est répartie symétriquement & et & successifs autour du milieu de la période. Quant à l’ordre d’application de ces vecteurs, on le détermine à partir du tableau B.2 et de la contrainte que l’interrupteur ne doit pas commuter plus de deux fois durant la période de commutation pour minimiser les pertes de l’onduleur. La figure B.8 représente ces séquences en fonction du secteur angulaire où se trouve le vecteur de référence. A partir de cette figure, il est facile de calculer les instants de commutation. Exemple: prenons . Avec , temps d’application du vecteur nul, "# , instant de fermeture de l’interrupteur 8 et $ , instant d’ouverture de l’interrupteur 8 on a: "# "# "# $ $ "# "# "# $ $ $ B.2.3 Limites de validité de la MLI vectorielle Physiquement, il est évident que les durées d’application des vecteurs & et ne peuvent pas dépasser la période de commutation, c’est à dire: & 169 F IG . B.8 – Séquences MLI en fonction du secteur angulaire (repéré par ) (B.23) Dans le cas extrême de l’égalité entre les deux membres, cette équation représente les cotés de l’héxagone (cf. Fig. B.5) pour chaque secteur. B.2.4 Méthode de limitation Si la consigne de l’algorithme MLI requiert l’application d’un vecteur de tension de référence au delà des limites de la MLI, l’algorithme doit pouvoir le détecter et limiter cette consigne. Une méthode simple pour cela est de vérifier la propriété B.23, puis de recalculer éventuellement les temps et par les équations suivantes: ¼ ¼ (B.24) (B.25) ¼ Avec cette limitation, le module du vecteur de tension généré & , associé ¼ ¼ à et , est diminué de : , avec : par rapport au module du vecteur de référence. Par contre, sa phase reste inchangée. B.2.5 Modification de la commande En cours de fonctionnement, la tension d’alimentation peut être amenée à fluctuer (p.e. décharge de batteries dans le cas d’une alimentation par accu170 mulateurs) ce qui peut provoquer la limitation de la consigne de tension de la MLI. Cette limitation, assimilable à un phénomène de saturation, peut être problématique pour les régulateurs PI de l’algorithme de contrôle. Pour assurer un fonctionnement correct, il faut ajouter aux régulateurs un système antisaturation. Pour cela, on utilisera la méthode anti-dérive de Franklin-Powell (cf. Fig. B.9)[42]. Ces systèmes anti-saturation s’appliqueront aux régulateurs ( et ( de et . Le bloc LIM de la figure B.9 contient un modèle de limitation définit comme suit (on utilise ici le cas de , il en est de même pour avec & ): & reste inchangé: & & Si la MLI ne limite pas, le module de ¼ ¼ & est diminué: & Si la MLI limite, le module de & 1 ¼ ¼ 1 reste inchangé pour assurer le découplage des fonctions de transfert. F IG . B.9 – Méthode anti-dérive Franklin-Powell B.3 Schéma bloc de l’algorithme de commande La figure B.10 représente l’ensemble de la commande, contrôle et MLI, sur un schéma bloc. Dans ce schéma, on remarquera la présence d’un bloc comp. Ce bloc sert à compenser le temps de calcul de l’algorithme sur l’estimation de l’angle . En effet, cet angle est utilisé pour une rotation à l’entrée de l’algorithme de contrôle (transformation de Park), mais aussi à l’entrée de la MLI pour calculer la tension statorique de référence & dans le repère . Entre ces deux rotations, un certain temps de calcul s’est écoulé pendant lequel le moteur a continué à tourner. L’angle ne reste donc pas inchangé au niveau du moteur. La commande étant très sensible à ce paramètre, il convient de rectifier au niveau de la deuxième rotation. On remarquera également la présence de blocs hachurés. Ces blocs fonctionnent à une fréquence d’échantillonnage beaucoup plus basse que le reste de l’algorithme. Pour expliquer cela, il faut en revenir aux constantes de temps 171 des fonctions de transfert de et . Jusqu’à présent, nous n’avons pas précisé quel moteur nous utilisions puisque la validité de l’algorithme n’est pas limité à un moteur donné. Néanmoins, pour l’intégration de la commande, il va falloir en tenir compte afin d’étudier les phénomènes liés à l’arithmétique binaire (précision limité, dépassement de capacité ...etc.). Dans notre cas, nous utilisons un moteur de 4 KW dont les paramètres identifiés sont donnés en annexe C. Avec ces paramètres, nous voyons que la constant de temps des fonctions de transfert de et , , est de l’ordre de 4 ms tandis que la constante de temps rotorique est proche de 150 ms. Afin d’éviter des problèmes numériques dus au sur-échantillonnage, on fixe deux constantes de temps. Une première, , fixe la cadence de calcul des boucles de régulation rapides de et . Une deuxième est associée à la régulation de et vaut . 172 F IG . B.10 – Schéma bloc de l’algorithme de commande 173 174 Annexe C Paramètres du moteur 4 kW paramètre 3 (kW) (V) (A) ; (Hz) (t/min) / ( () * (H) * (H) ( () < ) (Wb) valeur 4,4 70 ( ) 52 0.79 50 1425 2 0.211 0.00099 0.0147 0.099 0.177 0.18 TAB . C.1 – paramètres du moteur 4 KW 175 176 Annexe D L’algorithme CORDIC D.1 L’algorithme CORDIC classique Développée en 1959 par J. Volder [55], la technique de calcul dénommée CORDIC 1 servait à la résolution en temps réel de problèmes de navigation. Cet algorithme calcule la rotation ou la norme d’un vecteur du plan, ainsi que la tangente inverse. L’idée développée par cette technique est d’effectuer ces opérations de façon itérative, c’est à dire de calculer par exemple la rotation par micro-rotations successives, en utilisant des fonctions logiques simples tels que des additionneurs, des décaleurs, des registres et une ROM pour stocker les micro-angles. L’algorithme CORDIC classique est décrit par les équations suivantes: 8 = ' 8 = = 8 ' où sont les micro-angles précalculés et stockés dans la ROM, et avec l’indice de l’itération courante. Dans son article, Volder présente deux modes opératoires: 1. Le mode rotation: dans ce mode, étant donné les coordonnées d’un vecteur et un angle de rotation, l’algorithme calcule les coordonnées du vecteur pivoté. Ce mode est défini par > . 2. Le mode vectorisation: étant donné les coordonnées d’un vecteur, l’algorithme calcule la norme de ce vecteur et son angle par rapport à l’axe des abscisses. Ce mode est défini par ? . Il prouve également que si ' #### 1. COrdinate Rotation DIgital Computer 177 (D.1) alors après itération avec , 8 8 ' = ' = - 8 ' = ' ' où K est le facteur d’échelle égale à - #### Remarquons que si on choisit le vecteur d’entrée égal à & 8 ! : = ! : ! : 8 = avec et l’angle de rotation tel que #, alors on calcule ! : 8 = - ! : ' avec une erreur absolue théorique de 8 ! : ! = ! : ! et Remarque: si ! et : , alors 8 et = . Les équations que nous avons présenté se basent sur une arithmétique réelle. Mais le but de cet algorithme étant une intégration digitale, il faut étudier l’influence de l’arithmétique binaire sur l’algorithme. 178 D.2 Le CORDIC binaire Dans la suite de cette annexe, nous utiliserons le formalisme pour décrire le format binaire employé, avec le nombre de bits de la partie entière et la longueur totale du mot binaire. Ainsi que nous l’avons déjà dit, l’algorithme atteint une précision théorique définie par: 8 ! : ! avec le nombre total d’itérations. Cette erreur est appelée erreur d’approximation et est due au nombre d’itération fini. Supposons maintenant un vecteur & 8 = codé sur bits. La micro-rotation qui calcule le vecteur & 8 = à l’itération est déterminée par la valeur de & . Mais l’expression & n’a un sens que si . Si " , alors & est le vecteur nul et la valeur de & n’a pas de sens. D’autre part, la précision du calcul est déterminée par la précision de la décomposition de l’angle de rotation en micro-angles (à travers l’expression ' ). Cela signifie que pour un format binaire , décomposer l’angle de rotation avec une précision supérieure à n’a pas de sens. Comme les micro-angles sont définis par , la dernière micro-rotation sera de et donc le nombre maximum d’itération est donné par , nombre de bits de la partie fractionnaire. Toutefois, ce résultat ne tient pas compte de l’erreur introduite par la troncature des résultats, erreur produite par la longueur finie des mots binaires. Cette erreur peut excéder l’erreur d’approximation lors du calcul répété des opérations d’addition et de soustraction sur des mots binaire de longueur finie. Dans ce cas, la précision de l’algorithme n’est plus fixée par le nombre d’itérations. Pour remédier à cela, Kota et Cavallaro ont montré en [32] que si on calcule l’algorithme CORDIC en mode rotation sur bus de données interne de longueur avec alors l’erreur de troncature reste inférieure à l’erreur d’approximation et on peut atteindre une précision de bits, c’est à dire une erreur de après itérations. Remarque: Dans cette étude, le format binaire envisagé valait . Dans notre cas, vaut . Donc, si on reprend tous les éléments avec un format binaire de par exemple, il faudrait calculer théoriquement 5 itérations CORDIC. Mais pour atteindre une précision de , il faut en fait calculer sur un bus interne de 19 bits: 179 F IG . D.1 – Résultats partiels d’une rotation CORDIC simulée sur MATLAB 180 valeurs par défaut de X0, Y0 et Z0: X0 = 1 Y0 = 0 Z0 = 0 réponse: valeurs du nombre de bits du chemin de données de XY et de Z par défaut? (y,n) réponse par défaut: y Valeurs par défaut des largeurs de chemin de données: nombre de bit de Z : 19 nombre de bit de XY: 19 réponse: valeurs du nombre de bits de XY et de Z par défaut? (y,n) réponse par défaut: y Valeurs par défaut des constantes de calcul: nombre de bit de Z : 16 nombre de bit de XY: 16 nombres de bits alloués à la partie entière de Z : 11 nombres de bits alloués à la partie entière de XY: 11 réponse: 1 Choisir les fonctions à calculer (ce choix défini le mode de fonctionnement de l'algorithme) sinus/cosinus => indiquer 1 => indiquer 2 X*Z racine carrée/arctan => indiquer 3 Y/X => indiquer 4 réponse par défaut: 4 --- Programme de calcul de fonctions complexes par l'algorithme CORDIC ----------------- Les calculs se font sur des nombres binaires --------------- 0000000000100000000 0000000000010000110 1111111111110111101 0000000000000110011 0000000000000110011 1111111111111110101 1111111111111110101 0000000000000010100 0000000000000000101 1111111111111111110 1111111111111111110 0000000000000000001 0000000000000000000 0000000000000000000 1111111111100000000 1111111111110000000 1111111111111000000 1111111111110010000 1111111111101110100 1111111111110001111 1111111111110000001 1111111111101111010 1111111111101111111 1111111111110000010 1111111111110000001 * : résultats des itérations de normalisation p : opération de pré-rotation -1 0 1 1 2 2 3 4 5 5 6 7 Z 0.52344 p -0.26172 0.19922 0.19922 * -0.04297 -0.04297 * 0.07812 0.01953 -0.00781 -0.00781 * 0.00391 0.00000 2.09375 1.00000 1.00000 1.50000 0.75000 0.68750 0.85938 0.92969 0.89844 0.88281 0.85547 0.86719 0.86328 0.00000 0.00000 -1.00000 -0.50000 -0.25000 -0.43750 -0.54688 -0.44141 -0.49609 -0.52344 -0.50391 -0.49219 -0.49609 1.00000 0000000000100000000 0000000000100000000 0000000000110000000 0000000000011000000 0000000000010110000 0000000000011011100 0000000000011101110 0000000000011100110 0000000000011100010 0000000000011011011 0000000000011011110 0000000000011011101 Y 0000000000000000000 ----- Evolution de Zi, Xi et Yi binaires ainsi que X, Y et Z réels ------- Poids forts et bit de signe à gauche --X it| X binaire Y binaire Z binaire 0000000001000011000 ----- valeurs initiales de Z0, X0 et Y0 ainsi que X, Y et Z réels ----- Première rotation de Pi/2 effectuée Valeur de Z0 : 2*pi/3 Donner une valeur de z0 comprise entre -2pi et 2pi. Valeur de Y0 : 0 Valeur de X0 : 1 Donner des valeurs de X0 et Y0 codables sur le nombre de bits indiqué (nottamment la partie entière). réponse: n valeurs de X, Y et Z par défaut? (y,n) réponse par défaut: y Il faut donc calculer itérations. Figure D.1, p. 180, donne les résultats intermédiaires d’une simulation CORDIC avec le format binaire défini ci-dessus. Remarque: Cette simulation inclut les itérations de normalisation (cf. D.4, p. 183). D.3 L’algorithme CORDIC généralisé En 1971, J. Walther décrit un algorithme CORDIC légèrement modifié qui permet de calculer toutes les fonctions mathématiques classiques [56]. Même si cet algorithme n’est pas le moyen le plus rapide de calculer certaines des fonctions calculables, il est très intéressant de pouvoir calculer toutes ces fonctions en réutilisant toujours les mêmes ressources matérielles. L’algorithme CORDIC généralisé est défini par les équations suivantes: 8 = ' 8 = % = 8 % ' % avec et % est une base discrète. Cet algorithme généralisé permet de définir deux nouvelles classes de fonctions. Aux fonctions circulaires ( ), définies déjà avec l’algorithme classique, on ajoute maintenant les fonctions linéaires ( ) et les fonctions hy). Le calcul de ces deux nouvelles classes de fonctions est perboliques ( possible grâce à la définition de trois bases discrètes : – pour – pour – ! pour La figure D.2, p. 182, et le tableau D.1, p. 181, résument ces modes de fonctionnement de l’algorithme CORDIC. Remarquons que certaines itérations doivent afin d’assurer la convergence de l’algorithme. être répétées pour Circulaire Linéaire Mode Hyperbolique Itérations calculées < < < ### ### Base discrète % % % ! TAB . D.1 – Valeurs de < et de % pour chaque mode Pour l’algorithme CORDIC classique, Volder avait prouvé que si > , l’angle initial, est décomposé en micro-angles tel que 181 Rotation mode Vectoring mode Z K[Xcos(Z)-Ysin(z)] X K[Ycos(Z)+Xsin(Z)] Y 0 Z K (X 2 +Y2 ) 0 Z-Arctan(y/X) X Y+XZ Y Z 0 Z Z+Y/X X K’[Xcosh(Z)-Ysinh(Z)] X K’ (X -Y ) K’[Ycosh(Z)+Xsinh(Z)] Y 0 Z Y Z F IG . D.2 – Fonctions calculées par l’algorithme CORDIC généralisé 182 X 0 2 CORDIC Y CORDIC X CORDIC X dn=-sign(Yk ) CORDIC Y CORDIC X CORDIC Hyperbolic m=-1 Linear m=0 Circular m=1 dn=sign(Zk ) 2 0 Z-argth(Y/X) > alors la condition nécessaire et suffisante de convergence est donnée par " " (D.2) Cette condition reste valable pour l’algorithme généralisé ce qui permet de déduire les conditions de convergence du CORDIC. On résume ces conditions dans le tableau D.2, p. 183, pour les modes qui nous intéressent. Circulaire ' rotation # # # # # # # # ' Linéaire vectorisation = 8 and 8 " TAB . D.2 – Conditions de convergence des modes circulaires et linéaires Dans le mode hyperbolique, déterminer la séquence d’itérations à répéter est un problème complexe que Hsiao et Delosme proposent de résoudre par un algorithme de recuit simulé [50]. Le calcul de fonctions complexes à partir des fonctions calculées par l’algorithme CORDIC généralisé est plutôt simple: ! 8 ! 8 ! ! ! 8 !! 8 ! !! 8! " 8 8 8 D.4 La normalisation des résultats Du point de vue algorithmique, la normalisation des résultats peut s’effectuer de deux manières: 1. soit par la multiplication par & 2. soit en utilisant une méthode de multiplication itérative présentée par Haviland et Tunzynsky dans [20]. Cette solution consiste à décomposer sous forme de produit de facteurs tels que la multiplicala constante & tion par un facteur puisse s’effectuer avec les ressources matérielles du 183 CORDIC. La normalisation s’effectue alors en insérant des itérations de normalisation avant, après ou entre les itérations de l’algorithme. La factorisation est donnée par l’expression suivante: - # est la longueur des mots binaires et est tel que est codable dans le format binaire choisi. Remarquons au passage que cette méthode de multiplication itérative a un intérêt non négligeable pour l’intégration des algorithmes de commande. En effet, ces algorithmes comportent de nombreuses multiplications par des constantes. Ces multiplications posent souvent problème lors de l’intégration en virgule fixe car les constantes en questions sont trop petites pour être codées dans le format binaire choisi. Il en résultent de nombreuses opérations de décalage pour changer de format de données. Or la multiplication itérative par le biais de la factorisation des constantes permet de s’affranchir de ce type de problèmes. Prenons par exemple la multiplication d’un nombre 8 par une constante # avec un format binaire . La constante ne pouvant être codée dans ce format, la multiplication 8 serait nulle avec un multiplieur normal. Mais, si 8 , cette multiplication devrait valoir 8 , résultat qui est codable dans le format binaire . Si maintenant est décomposé sous la forme: La décomposition atteint une précision de # # . Avec le format binaire choisi, la valeur maximale codable en arithmétique binaire signée vaut 8 et la précision de codage maximale est de . La factorisation de sera donc choisie de telle manière que l’erreur sur la multiplication soit au maximum égale à ce qui se traduit par: 8 Cette condition est remplie avec La multiplication itérative de 8 par donnera alors en quatre itérations. 184 8 D.5 Extension des limites de convergence L’analyse des algorithme de contrôle montre que les domaines de convergence de l’algorithme CORDIC sont insuffisants pour les variables impliquées: – L’opération de rotation est utilisée dans le calcul de la transformation de Park où la rotation du vecteur de tension s’effectue avec l’angle de rotation du flux moteur. Cet angle varie bien entendu de 9 à 9 , soit bien plus que prévu par l’algorithme CORDIC. – Les opération linéaires (multiplication et division) s’opèrent sur des variables dont la valeur maximale correspond à la valeur maximale de codage binaire. Une solution serait d’utiliser l’arithmétique virgule flottante, mais comme les opérandes restent codés en arithmétique virgule fixe, il faudrait envisager des opérations de conversion. Par ailleurs, le coût d’une implantation virgule flottante du CORDIC nous a parut excessif. Nous avons donc modifié légèrement l’algorithme pour étendre les limites de convergence. D.5.1 Extension des limites de convergence de la rotation La première opération proposée par Volder lui-même est d’effectuer une prérotation de ce qui étend les limites de convergence à: 9 9 # # # # # # # # L’extension à 9 9 est effectué ensuite en calculant l’angle ' équivalent à l’angle de rotation ' si celui-ci vérifie la condition: ' 9 9 9 9 9 9 Si on résume tout cela, on obtient les condition suivantes pour l’extension des limites de convergence: Si ' " 9 et ' , alors ' 9 9 9 ' ' Si ' " 9 et ' " , alors ' 9 9 ' ' 185 9 Ces opérations sont très faciles à réaliser, soit avec le matériel déjà existant (on calcule la valeur absolue de ' en scrutant son MSB 2 et en calculant éventuellement ' ' ), soit en utilisant un opérateur de valeur absolue. L’autre point dont il faut tenir compte est la norme du vecteur d’entrée. Pour éviter un débordement binaire lors de l’addition = 8 ¸ la norme de ce vecteur est limitée par une valeur maximale ! . Dans le cas d’une rotation vraie¸ ! serait égale codable dans le format binaire à la valeur maximale envisagé¸ c’est à dire¸ . Mais¸ comme les rotations CORDIC sont des pseudo-rotation affectées par -¸ cette valeur maximale vaut: ! - Les simulations par MATLAB de l’algorithme binaire étendu, figures D.3 et D.4, p. 187, montrent la précision atteinte pour des mots au format binaire avec un bus interne de bits. 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −1 −0.5 0 0.5 1 F IG . D.3 – Simulation du CORDIC (trait plein) en mode rotation par rapport à une rotation réelle (trait hachuré) D.5.2 Extension des limites de convergence du mode linéaire L’extension des domaines de convergence des fonctions linéaires est beaucoup plus complexe. solution simple à première vue serait d’étendre la base discrète à # Une $ avec le nombre de bits entiers et le nombre de bits de la partie fractionnaire. Dans ce cas, la borne supérieure de chaque domaine de % convergence augmenterait jusqu’à , valeur maximale codable dans le format . 2. Most Significant Bit 186 0.04 0.03 0.02 0.01 0 −0.01 −0.02 −0.03 −0.04 0 1 2 3 4 5 6 7 F IG . D.4 – Précision des rotations CORDIC Mais examinons les équations CORDIC pour le mode linéaire: 8 = ' 8 = 8 % % ' avec < positif ou négatif. Si < est positif, le décalage de 8 vers la gauche produira un débordement numérique si: 8 " 8 " Comme 8 8 , la dernière condition est équivalente à 8 " Remarque: Ce résultat suppose que le décalage maximal vers la gauche est limité à en raison du bit de signe en arithmétique complément à deux. La solution proposée étant inappropriée, nous proposons de suivre la même technique que pour le mode circulaire, c’est à dire de normaliser les variables d’entrée. L’idée de cette normalisation est de transformer le format binaire des variables d’entrée pour le ramener à et d’utiliser la base discrète . Mais, pour conserver toute la précision de codage des variables, la transformation dépend de la valeur des variables. En fait, on réalise une sorte de transformation des variables de l’arithmétique virgule fixe vers l’arithmétique virgule flottante. Voyons maintenant le détail des opérations à réaliser pour chaque fonctions. 187 D.5.2.1 Cas de la division On commence ici par tester le signe de 8 (en scrutant son MSB). Si 8 est négatif, on calcule avec 8 et on change le signe du résultat final. Ensuite, on teste si . Si c’est le cas, on se trouve dans les limites de convergence de l’algorithme CORDIC normal. On calcule donc directement les itérations CORDIC et on économise le temps de la normalisation. La normalisation est effectuée de la manière suivante: 1. Tant que le bit = vaut 0, on décale = et 8 de un bit vers la gauche. Comme on décale les deux opérandes, le rapport reste constant et égale à . 2. Quand le bit = passe à 1, on arrête de décaler = mais on continue avec 8 jusqu’à ce que 8 vaille 1. On conserve la valeur du décalage effectué sur 8 dans cette phase pour corriger le rapport final calculé par le CORDIC. 3. On effectue ensuite itérations CORDIC avec longueur du chemin de données interne du CORDIC. En raison des décalages sur 8 et = , l’équation CORDIC pour la coordonnée = vaut maintenant: & = = 8 avec le nombre total d’itérations de décalage sur = et le nombre total d’itérations de décalage sur 8 . Après itérations, on a: & = = 8 % La coordonnée ' est donnée quant à elle par: & Après ' ' % ' itérations, on obtient: % ' % ' 188 = 8 (D.3) 4. En décalant le résultat des itérations CORDIC de bits (équation D.3) et après troncature des bits additionnels du chemin interne, soit une troncature des bits de poids faible, on obtient le rapport sur la coordonnée ' : ' Remarque: la valeur est nécessairement inférieure à car une valeur supérieur signifierait que " , et donc le rapport ne serait pas codable dans le format binaire . Le décalage final est donc toujours à droite. D.5.2.2 Cas de la multiplication Nous appliquons ici le même méthode que pour la division mais avec la variable ' : 1. Test si ' 8 . Si c’est le cas, on permute 8 et ' pour des raisons de précision de calcul (justification en D.5.3). 2. Test si ' . Si c’est le cas, on calcule directement les itérations CORDIC. 3. Normalisation de ' : on décale ' jusqu’à ce que le bit ' vaille 1. L’équation CORDIC devient alors: ' ' 4. Calcul des itérations CORDIC. On obtient alors: = ' = % = 8 % ' En supposant que ' , on a: % = 5. En décalant = de sultats, on obtient: = ' 8 ' bits, et après troncature des ré- 8 ' Remarque: La valeur de est toujours inférieure à car dans la cas contraire, cela signifierait que ' et dans ce cas, on calcule directement les itérations CORDIC sans normalisation des variables d’entrée. Par conséquent, le décalage final est toujours vers la gauche. 189 D.5.3 Précision du CORDIC étendu En modifiant l’algorithme, nous modifions aussi la précision des résultats. Il nous faut donc étudier maintenant la précision atteinte par le CORDIC étendu pour les fonctions linéaires. D.5.3.1 Cas de la multiplication Théorème 1 L’erreur de décomposition de ' est toujours inférieure à après itérations. Autrement dit: ' Preuve 1 La condition de convergence D.2 donne ' Comme ' ' on a Supposons que ' Comme . ' . ' ' on aurait ' Comme on a ' , on prouve que ' Dans le cas de la multiplication, les itérations CORDIC donnent après itérations les résultats suivants: 8 8 % = = % 8 ' ' ! % Du théorème 1, on déduit que !' définir une précision théorique du résultat: ' 8 ' ' % % = ! ! ce qui permet de ' 8 ' Dans une première approximation, nous avons donc une précision de = égale à 8 . On remarquera que puisque cette précision est proportionnelle à 8 , il faut s’assurer que 8 soit inférieur à ' (ce qui explique le premier test de la multiplication). 190 Cependant, ce calcul ne tient pas compte des points suivant, sources d’erreur: 1. Le changement de format initial et la correction du résultat final: en raison du décalage final à gauche ( est positif), l’erreur sur = est en fait de 8 , cette erreur étant supérieure à 8 . 2. l’erreur introduite par la troncature: le calcul de l’erreur sur = n’a pas pris l’erreur de troncature introduite par la longueur finie des mots binaires. Cette erreur est de l’ordre de Æ avec Æ et peut dans certains cas excéder 8 . En effet, avec le calcul du CORDIC non étendu, nous n’effectuons pas de décalage final. Cette erreur reste alors inférieure à . Par contre, le décalage final multiplie cette erreur et la rend très supérieure à 8 . 3. l’erreur de quantification (introduite par le codage binaire de grandeurs réelles): elle reste toujours inférieure à et est inévitable. Pour éliminer cette erreur de nos simulations et mettre en évidence l’influence des autres facteurs d’imprécision, nous avons comparé des simulations CORDIC avec la même opération effectuée sur des nombres réels obtenus par conversion des entrées binaires du CORDIC. L’erreur globale étant très difficile à quantifier, il est toutefois facile de montrer que lorsque 8 est très supérieur à l’erreur de troncature, l’erreur maximale commise sur le calcul d’une multiplication par l’algorithme CORDIC étendu est donnée par: 8 avec 8 la valeur maximale codable dans le format binaire envisagé. En effet, si 8 est très supérieur à l’erreur de troncature, c’est à dire qu’il n’est pas trop proche de la limite de codage, alors l’erreur de calcul est limitée par 8 . Dans ce cas, = vaut: = 8 ' Sachant que ' 8 8 8 ' on retrouve la valeur de l’erreur maximale de calcul. En figure D.5, nous avons représenté le pourcentage d’erreur commis par l’algorithme CORDIC étendu pour un format binaire . On y voit clairement que pour de faibles valeur de 8 , l’erreur de troncature devient prépondérante. 191 3.5 3 2.5 2 1.5 1 0.5 0 40 30 20 20 0 10 0 −20 −10 −20 −40 −30 F IG . D.5 – Pourcentage d’erreur commis par le CORDIC étendu sur la multiplication D.5.3.2 Cas de la division Dans le cas de la division, on peut montrer de la même manière que pour la multiplication, que l’erreur de décomposition = est égale à 8 . Par conséquent, le résultat final est atteint avec une précision valant: = 8 = 8 8 Comme pour la multiplication, nous devons prendre en compte la correction finale et l’erreur de troncature. Le décalage final étant toujours vers la droite, la précision finale est donnée par: Figure D.6 représente une simulation de la division CORDIC étendu. Avec les figures D.7 et D.8 nous avons voulu mettre en évidence l’influence de l’erreur de quantification. 192 120 100 80 60 40 20 0 10 8 1 6 0.8 0.6 4 0.4 2 0.2 0 0 F IG . D.6 – Simulation de la division avec le CORDIC étendu 2 0 −2 −4 −6 −8 10 8 1 6 0.8 0.6 4 0.4 2 0.2 0 0 F IG . D.7 – Erreur sur la division incluant l’erreur de quantification 0.04 0.03 0.02 0.01 0 −0.01 10 8 1 6 0.8 0.6 4 0.4 2 0.2 0 0 F IG . D.8 – Erreur sur la division sans l’erreur de quantification 193 194 Annexe E Simulation sous Ptolemy Nous proposons dans cette annexe un exemple de modélisation et simulation sous Ptolemy. Le système modélisé et simulé est la commande échantillonnée d’un processus du premier ordre. Cet exemple de commande a été tiré de [49]. Le transmittance du processus proposé est donnée par: / / / / On synthétise le correcteur numérique tel que le système en boucle fermée ait un comportement du second ordre. On choisit la période d’échantillonnage égale à . La transmittance en z du processus avec un bloqueur d’ordre zéro est donnée par: ' ' ' ' ' Ce processus a une constante de temps ' , ce qui correspond à une pulsation propre de .' ! . En choisissant pour le processus asservi une pulsation propre de . ! et un coefficient d’amortissement de , la transmitance du processus asservi vaut: $' ' ' ' ' La transmitance du correcteur synthétisé est alors donnée par: ' '' ' ' Figure E.1, on a représenté le schéma bloc de principe de ce système. 195 Ce système a été modélisé avec Ptolemy dans le domaine SDF 1 . Les figures E.2 à E.4 représentent les schémas blocs construits dans l’environnement graphique de Ptolemy. La courbe figure E.6 donne la réponse temporelle du système pour un échelon unité perturbé. La perturbation est donnée figure E.5. F IG . E.1 – Schéma bloc de l’asservissement du processus Regulation d’un processus du premier ordre perturbation in1 in2 Const in3 Sampler processus Clock F IG . E.2 – Schémas blocs sous Ptolemy du système asservi 1. Synchronous Data Flow 196 XMgraph Generation d’une perturbation Impulse Delay Filter F IG . E.3 – Schémas blocs sous Ptolemy du système asservi Regulateur et processus XMgraph Add Sub IIR regulateur XMgraph IIR processus F IG . E.4 – Schémas blocs sous Ptolemy du système asservi 197 Signal epsilon Y Set 0 1.00 0.80 0.60 0.40 0.20 0.00 X 0.00 50.00 100.00 150.00 200.00 F IG . E.5 – Perturbation Sortie Y Y Set 0 1.00 0.80 0.60 0.40 0.20 0.00 X 0.00 50.00 100.00 150.00 F IG . E.6 – Réponse temporelle du système asservi 198 200.00 Annexe F Traitement des mesures et consignes Dans le traitement des mesures et consignes, il faut considérer deux cas différents. D’une part, nous avons l’acquisition d’échantillons analogiques par des convertisseurs analogique-numérique, et d’autre part, nous mesurons la vitesse en comptant les créneaux générés par un disque denté. F.1 Acquisition des échantillons analogiques L’acquisition des mesures et consignes analogiques est effectuée par des convertisseurs de 8 bits. Le traitement de ces mesures consiste à calculer la valeur correspondante à la valeur mesurée. La valeur binaire générée par un convertisseur de 8 bits code un entier . Chaque bit de cette valeur binaire correspond à un incrément analogique donné par: avec la tension d’alimentation du convertisseur (dans notre cas, 5V). La valeur analogique de l’échantillon acquis par le convertisseur se calcule à partir de la valeur de incrément analogique: Cette tension mesurée par le CAN varie entre 0V et 5V. Les convertisseurs mesures quatre signaux analogiques: deux courants statoriques ( et ), la consigne de couple sous forme de la composante du courant statorique dans le repère ( ), et la tension d’entrée de l’onduleur ( ). Le calcul de la valeur réelle de chaque mesure ou consigne est calculée différemment selon le circuit de mesure utilisé. 199 F.1.1 Valeur des courants statoriques et La mesure des courants s’effectue par des capteurs à effet Hall alimentés sous 12V. Le courant maximal mesurable est de A. La sortie des capteurs est reliée à un filtre anti-repliement et à un circuit de mise en forme des signaux analogiques qui ramène la mesure à une valeur entre 0V et 5V, le point de repos étant à V. La valeur réelle des courants est donc calculée à partir de la mesure par la relation suivante: F.1.2 Valeur de la consigne de couple La consigne de couple est générée par une simple résistance variable connectée directement au convertisseur. La consigne varie entre 0A et . La valeur de se calcule à partir des caractéristiques du moteur données en Annexe B. Pour déterminer , on se base sur les équations suivantes: % * /* 3 @ ! avec le courant magnétisant, % le flux rotorique, * l’inductance rotorique, le couple moteur, / le nombre de paires de pôles, le couple moteur nominal, 3 la puissance nominale et @ ! , la vitesse de rotation nominale. Avec les valeurs des paramètres identifiés, on obtient un courant magnétisant maximal de A, un couple nominal N/m et donc un courant de consigne nominal A. Le calcul de la mesure de la consigne devient alors: F.1.3 Calcul de la mesure de tension La mesure de la tension s’effectue par un optocoupleur en régime linéaire, couplé directement au CAN. Dans la plage de tension qui nous intéresse, la réponse du circuit est pratiquement linéaire. 200 La tension se calcule donc par l’équation suivante: avec une estimation pour de et pour de F.2 Mesure de la vitesse Dans le cas de la mesure de vitesse, nous disposons de deux signaux déphasés dont nous scrutons les flancs de montée et de descente. Le premier signal (TOP) permet de calculer la vitesse et le second (SENS), le sens de rotation. Le principe de calcul de la vitesse est le suivant. On compte le nombre de périodes d’horloge que dure une période du signal TOP, c’est à dire de flanc de montée à flanc de montée, pour mesurer le temps que dure cette période. Puis on divise l’angle parcouru par la période de TOP. Formalisé sous forme d’équation, on a: @ ( avec le nombre de dents du disque et la période d’horloge. Toutefois, comme la vitesse mesurée peut être trop lente et provoquer un débordement du compteur, on commande celui-ci par un signal d’enable plus lent que l’horloge. On en tient compte dans le calcul de la vitesse. 201