ECOLE DE L’AIR
DEPARTEMENT DES VEHICULES AEROSPATIAUX
TRAVAUX DE MODELISATION
ET D’EXPERIMENTATION
Monsieur BATEMAN
Table des matieres
TABLE DES MATIERES i
Introduction 1
I SIMULATION ET PROGRAMMATION SOUS SIMULINK 3
1 RAPPELS SUR LES SIGNAUX ET LES SYSTEMES 5
1.1 Aspects temporels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 A propos des nombres sous SIMULINK . . . . . . . . . . . . . . . . . . . . . . . 8
2 PROGRAMMATION DE DSPICs 11
2.1 Microcontroleur DsPic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Programmation du DsPic sous SIMULINK . . . . . . . . . . . . . . . . . . . . . 12
2.3 Presentation du blockset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 PROGRAMMATION DES PERIPHERIQUES DU DSPIC 19
3.1 Ports numeriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Les UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Le bus SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4 Les signaux PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.5 Convertisseurs Analogiques-Numeriques . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Le bus I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.7 Insertion de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.8 Machine a etats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
II TRAVAUX PRATIQUES D’AUTOMATIQUE 47
1 CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE 49
i
Table des matieres
1.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.2 Le filtrage anti-repliement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.3 La conversion numerique-analogique . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.4 Analyse spectrale du signal echantillonne-bloque . . . . . . . . . . . . . . . . . . 51
1.5 La conversion numerique-analogique . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.6 Traitement du signal par filtre numerique . . . . . . . . . . . . . . . . . . . . . . 52
2 IDENTIFICATION PARAMETRIQUE 55
2.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.2 Algorithme des moindres carres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.3 Algorithme de descente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3 COMMANDE D’UN MOTEUR BRUSHLESS 65
3.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.2 Modelisation du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.3 Synthese d’une loi de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4 CENTRALE D’ATTITUDE 69
4.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2 La centrale d’attitude MTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.3 L’estimation d’attitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.4 Implementation temps reel de la centrale d’attitude . . . . . . . . . . . . . . . . . 74
5 FILTRE DE KALMAN 77
5.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2 Modelisation des signaux et du systeme . . . . . . . . . . . . . . . . . . . . . . . 77
5.3 Presentation de la maquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.4 Implementation du filtre de Kalman . . . . . . . . . . . . . . . . . . . . . . . . . 81
6 CONTROLE DE L’ASSIETTE D’UN DRONE A VOILURE TOURNANTE 83
6.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2 Preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.3 Manipulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
III TRAVAUX PRATIQUES D’AUTOMATIQUE 91
1 CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE 93
1.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1.2 Le filtrage anti-repliement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1.3 La conversion numerique-analogique . . . . . . . . . . . . . . . . . . . . . . . . . 94
1.4 Analyse spectrale du signal echantillonne-bloque . . . . . . . . . . . . . . . . . . 95
1.5 La conversion numerique-analogique . . . . . . . . . . . . . . . . . . . . . . . . . 96
1.6 Acquisition d’un signal audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
ii
Table des matieres
2 FILTRES NUMERIQUES 99
2.1 Filtrage numerique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.2 Les filtres a Reponse Impulsionnelle Finie . . . . . . . . . . . . . . . . . . . . . . 101
2.3 Filtres a Reponse Impulsionnelle Infinie . . . . . . . . . . . . . . . . . . . . . . . 105
3 BANCS DE FILTRES 109
3.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.2 L’algorithme de Mallat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.3 La steganographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.4 Implementation de l’algorithme de steganographie . . . . . . . . . . . . . . . . . 114
4 FILTRAGE ADAPTATIF 115
4.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.2 Modele d’un signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4.3 Les moindres carres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4.4 Reduction de bruit active . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
A Liste des fichiers MATLAB-SIMULINK 125
iii
Introduction
Ce fascicule rassemble l’ensemble des travaux de modelisation et d’experimentation d’auto-
matique et de traitement de signal. Il est organise en trois parties :
1. La premiere est dediee a l’utilisation de SIMULINK, elle se decline en trois sequences :
— La simulation de systemes dynamiques a temps discret.
— La programmation de ces systemes , la cible retenue ici est un microcontroleur dsPic
de Microchip, toutefois des blocksets dedies permettent, avec la meme philosophie, la
programmation de PC, cartes Raspberry, BeagleBone Black, GumStick, etc.
— La programmation des peripheriques du dsPic30F6014.
2. La seconde partie comporte six travaux pratiques d’automatique appliques au controle des
aeronefs. Toutes les notions vues en premiere et deuxieme annee sont mises en application.
Les correcteurs, la commande par retour d’etat, les observateurs deterministes, le filtre
de Kalman et l’identification parametrique sont appliques a des systemes tels que la
commande du moteur d’un quadrirotor, une centrale d’attitude, la mesure de la hauteur
d’un drone, le controle de l’assiette d’un drone a voilure tournante.
3. La troisieme partie comporte quatre travaux pratiques de traitement du signal appliques.
Les notions sont pour partie celles vues en premiere annee : acquisition, numerisation et
restitution de signaux, filtres RIF et RII, bancs de filtres. Les applications portent sur le
traitement du son : reduction active de bruit et camouflage d’un message dans un signal
audio.
Il vous est demande, avant chaque seance, de lire et de preparer le sujet qui vous est attribue
et de consulter votre cours dans le but de les mettre pleinement a profit.
Premiere partie
SIMULATION ET
PROGRAMMATION SOUS
SIMULINK
3
SEQUENCES 1
RAPPELS SUR LES SIGNAUX ET LES SYSTEMES
1.1 Aspects temporels
1.1.1 Definition
En premiere annee, dans le cours d’automatique, les modeles des systemes etudies etaient
supposes continus 1. Cette propriete traduit le fait que les variables fonction du temps (ou si-
gnaux) qui caracterisent l’evolution du systeme sont definis a tout instant. En outre, sur un
intervalle donne, ces variables peuvent prendre toutes les valeurs comprises dans cet intervalle.
De tels signaux sont qualifies d’analogiques. SIMULINK, un add-on de MATLAB, permet au
moyen de bibliotheques graphiques de representer les modeles de simulation de ces systemes et
de les simuler grace a differents solvers. Depuis quelques decennies, la plupart des systemes sont
controles par des calculateurs (des microcontroleurs dans le cadre de ces TME) qui permettent
l’acquisition de signaux issus des capteurs et la generation de signaux. Ces signaux sont lus et
elabores a des intervalles de temps discrets, en outre ils sont codes sur un nombre fini de bits et
par consequent, les valeurs que ces signaux peuvent prendre sont elle-memes discretes. On parle
alors de systemes et de signaux numeriques. SIMULINK permet la modelisation de tels systemes
mais aussi celle de systemes hybrides mixant des sous-systemes continus et des sous-systemes
numeriques.
1.1.2 Signaux et systemes a temps continu, discret et hybride
Depuis le bureau de votre ordinateur, executez MATLAB, executez SIMULINK et ouvrez
un nouveau modele File New Model.
Systeme continu :
— Construisez un systeme continu d’ordre un (gain statique 1, constante de temps 0,1s)
soumis a un signal sinusoıdal (Amplitude 5, Frequency 2, Sample Time 0) et observez sur
1. De plus, des hypotheses stipulaient que les modeles de ces systemes etaient lineaires et invariants.
5
Sequences 1. RAPPELS SUR LES SIGNAUX ET LES SYSTEMES
un meme oscilloscope les signaux d’entree et de sortie. Soit S1 ce systeme.
Systeme echantillonne-bloque : Si l’on suppose que ce systeme continu est pilote par un
calculateur, il convient de lui appliquer le signal d’entree et de mesurer le signal de sortie a
des intervalles de temps reguliers definis par la periode d’echantillonnage ou sample time Ts. Le
systeme est alors qualifie d’echantillonne-bloque.
— A partir du systeme continu, realiser un systeme echantillonne-bloque en inserant des
bloqueurs d’ordre zero (Discrete Zero Holder Block). Le Sample Time choisi est egal
a 50ms. Soit S2 ce systeme.
— Simuler ce systeme et comparer sa reponse a celle du systeme continu.
— Compte-tenu des proprietes du systeme continu, dans quelle plage de frequence [ωmin, ωmax]
peut-on raisonnablement l’utiliser ?
— Quelle est alors la periode d’echantillonnage maximale Tsmax qui peut-etre theoriquement
choisie ?
— Sur quatre essais successifs, mettre en evidence ces limites. Pour cela vous appliquerez
successivement un signal de pulsation egale a ωmax avec les periodes d’echantillonnage
Tsmax , 2Tsmax ,Tsmax
2etTsmax
10.
Systeme echantillonne-bloque decrit par sa fonction de transfert en Z :
On rappelle (voir le cours de traitement du signal de premiere annee) que la transformee en
Z d’un systeme de fonction de transfert H(s) echantillonne et muni d’un bloqueur d’ordre zero
a pour expression :
H(z) = (1− z−1)ZH(s)
s
(1.1)
La fonction tf permet de construire une fonction de transfer (consulter l’aide en ligne help
tf ). La fonction c2d de MATLAB permet de calculer la fonction de transfert en Z d’un tel
systeme a partir de sa fonction de transfert continue obtenue avec la fonction tf.
— Calculer avec MATLAB la fonction de transfert en Z du systeme a temps continu defini
supra. Le temps d’echantillonnage est egal a 50ms.
— Au moyen de SIMULINK, realiser cette fonction de transfert (Discrete Transfer Func-
tion). Vous parametrerez en particulier le champ Sample Time. Soumettez ce systeme au
meme signal sinusoıdal que celui defini precedemment. Soit S3 ce systeme.
— Simuler ce systeme decrit par sa fonction de transfert en Z et comparer sa reponse a celle
du systeme continu muni de ses echantillonneurs-bloqueurs.
Systemes hybrides : On qualifie de systeme hybride ou mixte un systeme qui comporte des
elements a temps continu et d’autres a temps discret. C’est par exemple le cas des systemes
asservis pilotes par calculateur :
— Le systeme a commander est un systeme a temps continu e.g. avion, satellite, etc.
— Le comparateur et le correcteur qui le controle sont implementes sur un calculateur et
constituent un systeme a temps discret.
6 F.BATEMAN
1.1. Aspects temporels
Cet aspect est important car par la suite, au moyen de SIMULINK, vous simulerez des systemes
hybrides pour lesquels vous aurez prealablement synthetise les correcteurs. Puis, toujours au
moyen de SIMULINK, vous genererez le code source relatif au comparateur et au correcteur
seuls. Ce code sera ensuite implemente sur le calculateur en vue de piloter le systeme reel.
— Sous SIMULINK, inserez le systeme continu d’ordre 1 deja etudie et muni de ses bloqueurs
d’ordre zero dans une boucle d’asservissement avec retour unitaire. Le correcteur utilise
a pour fonction de transfert :
C(s) = 200.1s+ 1
s(1.2)
— Comment appelle-t-on ce correcteur, quelles performances garantit-il ?
— Etablissez sa fonction de transfert en Z, la periode d’echantillonnage restant egale a
50ms, et realisez la boucle d’asservissement de ce systeme hybride. Pensez a parametrer
le Sample Time du comparateur. Soit S4 ce systeme.
— Soumettez ce systeme a une consigne sinusoıdale (Amplitude 2, Frequency 2, Sample
Time 50ms) et simulez-le. Vous observerez en particulier le signal de commande en sortie
du correcteur et le signal en sortie du systeme continu.
— Notez que les blocs discrete transfer function contiennent un bloqueur d’ordre zero qui
rend caduque la presence du bloc zero-holder en sortie du correcteur.
1.1.3 Quantification du signal echantillonne-bloque
Pratiquement, les signaux echantillonnes sont numerises (au moyen de convertisseurs analo-
gique numerique ou CAN). Cette numerisation s’effectue sur un nombre de bits N fini, gene-
ralement N = 8, 10, 12, 16. La resolution minimale du signal numerise definit le quantum. Les
effets de cette numerisation sur le signal echantillonne-bloque peuvent etre mis en evidence par
un bloc Quantizer (Discontinuities Quantizer). Sur le schema S2, vous l’ intercalerez entre le
bloqueur d’ordre zero en sortie du systeme et l’oscilloscope.
— Reglez successivement le Quantization Interval q a5
28 − 1puis
5
23 − 1et mettez ainsi en
evidence les effets de la numerisation sur le signal 2.
— Cette operation est a l’origine d’un bruit dit de quantifiquation que vous visualiserez en
operant a la difference entre les signaux en amont et en aval du Quantizer.
— Realisez sous SIMULINK l’operation qui permet de calculer la valeur efficace de ce bruit,
laquelle sous l’hypothese d’ergodicite n’est autre que la variance de ce bruit dont vous
verifierez qu’elle est egale aq2
12.
— Recherchez dans les ouvrages mis a votre disposition la demonstration ayant conduit a
ce resultat. Prenez-en connaissance.
Dans ce qui suit et sauf indication contraire, on supposera que la resolution des convertisseurs
employes est suffisamment petite pour negliger les effets dus a la quantification.
2. Ces valeur seraient celles obtenues pour des CAN 8 bits et 3 bits et pour une tension pleine echelle de 5
Volts.
F.BATEMAN 7
Sequences 1. RAPPELS SUR LES SIGNAUX ET LES SYSTEMES
1.2 A propos des nombres sous SIMULINK
Par defaut, les nombres calcules par SIMULINK sont, sauf exception, des nombres a virgule
flottante signes et codes sur 64 bits appeles double. Ce type de nombre permet de coder les
nombres reels et convient en particulier pour la simulation de systemes continus. Toutefois,
lorsqu’on realise un filtre numerique ou une loi de commande, le calculateur peut manipuler
d’autres types de nombre et il peut etre interessant d’effectuer les simulations dans des conditions
plus proches de la realite. SIMULINK manipule entre autres les nombres de type :
— single : nombres a virgule flottante signes et codes sur 32 bits
— int32, int16, int8 : nombres entier signes et codes sur 32, 16, 8 bits
— uint32, uint16, uint8 : nombres entier non-signes et codes sur 32, 16, 8 bits
— etc.
Le codage sur un nombre de bits reduit permet d’economiser l’espace memoire et d’accroıtre la
vitesse de calcul mais peut degrader de maniere significative les resultats obtenus avec le type
double. C’est ce que l’on se propose de mettre en evidence sur le modele du systeme hybride S4.
Codage du type single : Ouvrez le fichier sequence1 2.mdl, puis parametrez le bloc Add
Signal Attribute Output Data Type comme single. Notez que par defaut le bloc discrete
transfer function herite du type du signal d’entree.
— Simulez ce systeme et comparez-les reponses a celles obtenues avec le type double.
— Reiterez ces simulations avec des nombres de type int8 et uint8.
— Expliquez pourquoi cela ne pouvait fonctionner pour ce dernier type.
1.2.1 Retour sur les signaux et les systemes a temps discret
Single sample time : Dans les travaux qui suivent, vous aurez a implementer sur calculateur
des algorithmes de filtrage, de commande, etc. La simulation mais surtout la programmation de
ces algorithmes au moyen de SIMULINK necessitent pour le solver un pas de calcul constant.
Ce dernier est defini a partir du menu Simulation Parameters Solver options :
— Type : Fixed Step
— Solver : discrete (non continuous...)
— Fixed Step Size : la valeur du pas, par exemple 50ms
Au niveau du schema, dans chaque bloc, le parametre Sample Time definit la cadence a laquelle
chacun des blocs est controle par le solver. Ce temps doit etre un multiple entier du Fixed Step
Time. Il est donc possible, sur un meme modele, de faire cohabiter des blocs avec des Sample
Time differents.
— Realiser un systeme comportant deux integrateurs a temps discret (Discrete discrete
time integrator) soumis a une constante unitaire. Les deux integrateurs ont un gain
unitaire. Pour le premier le Sample Time est egal a 100ms, pour le second a 200ms.
Visualiser les signaux en sortie des deux integrateurs. Soit S5 ce systeme.
— A propos des integrateurs a temps discret, montrer qu’a partir de l’equation de recurrence
qui decrit l’integrateur :
S(nTs) =
nTs∑
i=0
e(i) (1.3)
8 F.BATEMAN
1.2. A propos des nombres sous SIMULINK
La fonction de transfert de ce dernier a bien pour expression :
S(z)
E(z)=
z
z − 1(1.4)
Il est egalement possible d’ajouter un offset T0 de sorte que l’instant d’execution d’un bloc tnsoit decale :
tn = nTs + T0 (1.5)
Pour ce faire, le champ du parametre Sample Time du bloc selectionne s’ecrit [Ts, T0]. Ou
T0 ≤ Ts et est un multiple entier du Fixed Step Solver.
— Modifier le systeme S5 de sorte que l’instant d’execution de l’integrateur initialement
controle toutes les 200ms soit decale de 50ms.
Multi sample time : Lorsqu’un signal est propage dans un systeme au travers de plusieurs
blocs, il est possible de definir pour differents ensembles de blocs des instants d’execution dis-
tincts au moyen d’un bloc Signal Attributes Rate transition. Cela presente un interet pour
des systemes comportant plusieurs boucles imbriquees. La boucle interne ayant generalement a
traiter des signaux plus rapides que la boucle externe. Pour respecter le theoreme de Shanon,
la periode d’echantillonnage de la boucle interne est generalement plus petite que celle de la
boucle externe. L’autre interet est que cela necessite moins de calculs que si toutes les boucles
fonctionnaient a la periode d’echantillonnage de la petite boucle.
— Ouvrez le fichier Sequence1 4.mdl qui represente un systeme asservi comportant deux
boucles. Analysez sa structure, vous vous attacherez en particulier aux parametres Sample
Time des differents blocs et a la valeur retenue pour le Fixed Step Time. Simulez-le et
observez les periodes d’echantillonnage des signaux des boucles interne et externe.
— En vous aidant de l’aide du bloc rate transition, mettez en evidence sur le schema, au
moyen de couleurs ou de facon explicite les differents temps d’echantillonnage de la boucle.
— Modifiez le temps d’execution des blocs qui realisent la boucle interne en introduisant un
offset de 1ms.
F.BATEMAN 9
Sequences 1. RAPPELS SUR LES SIGNAUX ET LES SYSTEMES
10 F.BATEMAN
SEQUENCES 2
PROGRAMMATION DE DSPICs
2.1 Microcontroleur DsPic
Les microcontroleurs de la famille DsPic (Digital Signal Peripheral Interface Controller) de
Microchip sont des unites de traitement et d’execution de l’information auxquels on a ajoute des
peripheriques internes permettant de realiser des montages sans necessiter l’ajout de composants
annexes. Un microcontroleur peut donc fonctionner de facon autonome apres programmation.
Les PIC integrent une memoire de programme, une memoire de donnees, des ports d’entree-
sortie (numeriques, analogiques, MLI, UART, bus I2C, etc.) et une horloge, bien que des bases
de temps externes puissent etre employees.
Les PIC sont des processeurs dits RISC, c’est-a-dire processeur a jeu d’instructions reduit.
Plus on reduit le nombre d’instructions, plus facile et plus rapide en est le decodage, et plus
vite le composant fonctionne. Cependant, il faut plus d’instructions pour realiser une operation
complexe.
L’horloge est realisee par un quartz, par exemple avec un quartz de 8 MHz, on obtient donc
8.106 cycles d’horloge par seconde, qu’il est possible de multiplier a l’aide d’un module dit de
PLL. Nous choisissons de la multiplier par 16 (PLL x16). Or, pour executer une instruction, le
processeur a besoin de 4 cycles d’horloge. On arrive ainsi a une frequence de fonctionnement
finale de 32 millions d’instructions par seconde ou 32 MIPS. Une instruction dure alors une
trentaine de nanosecondes. A ce propos, les dsPIC33E ont une puissance calcul pouvant aller
jusqu’a 70 MIPS.
2.1.1 Caracteristiques du DsPic 30F6014A
On se reportera a la documentation du constructeur sur le site http://microchip.com. On
presente ici quelques caracteristiques de ce composant :
11
Sequences 2. PROGRAMMATION DE DSPICs
Parameter Name Value
Architecture 16-bit
CPU Speed (MIPS) 30
Memory Type Flash
Program Memory (KB) 144
RAM Bytes 8192
Digital Communication Peripherals 2-UART
2-SPI
1-I2C
Analog Peripherals 1-A/D 16x12-bit @ 200(ksps)
CAN 2 CAN
Capture/Compare/PWM Peripherals 8
PWM Resolution bits 16 16
Timers 5 x 16-bit 2 x 32-bit
2.2 Programmation du DsPic sous SIMULINK
Dans le cadre de ce TME, le DsPic sera programme dans l’environnement MATLAB-SIMULINK
au moyen du blockset Embedded Target For DsPic. Le descriptif de ce blockset est accessible de-
puis l’URL http://www.kerhuel.eu/wiki/Simulink_-_Embedded_Target_for_PIC. Cet outil
de prototypage rapide presente l’interet d’utiliser un meme outil, SIMULINK, pour la simulation
et la programmation, ce que montre la figure 2.1.
— La simulation est menee de facon classique comme cela a ete vu lors de la sequence 1. Il
n’est toutefois pas possible d’utiliser le blockset a des fins de simulation.
— La programmation du microcontroleur DsPic se fait en adjoignant au schema de simula-
tion les fonctions du blockset qui realisent les peripheriques du microcontroleur. Ceux-ci
lui permettent d’acquerir des signaux et de communiquer avec les differents modules
constitutifs du systeme. Lors de cette phase de programmation, il convient d’etre extre-
mement rigoureux dans l’utilisation des types de nombre manipules par les blocs et au
choix des temps du solver (Fixed Step Time) et des blocs (Sample Time).
Les differents peripheriques des microcontroleurs DsPic sont deja programmes et presentes
sous forme de blocs, qu’il ”suffit” d’agreger au modele de simulation pour realiser la fonction
desiree. Les bibliotheques du blockset sont illustree sur la figure 2.2.
2.3 Presentation du blockset
2.3.1 Configuration de base
Cette configuration sera, a quelques details pres, la meme pour l’ensemble des travaux pra-
tiques sur le microcontroleur. Il vous est conseille de conserver ce template pour ne pas perdre
de temps lors des prochaines seances.
Sous SIMULINK, parmi les blocksets installes, selectionnez l’Embedded Target for DsPic block-
set, FileNew model. Ouvrez un nouveau Model et, depuis le blockset, copier-coller les bloc
12 F.BATEMAN
2.3. Presentation du blockset
Figure 2.1 – Prototypage rapide avec l’Embedded Target for DsPic blockset
Figure 2.2 – Librairie du blockset
F.BATEMAN 13
Sequences 2. PROGRAMMATION DE DSPICs
Master, Compiler configuration et le bloc Port Info s’il existe dans la version du blockset installee.
Parametrez-les comme suit :
Le bloc Master
Onglet General
— Time step reference : Timer 1
— PIC : 30F6014A
Onglet Real Time Quartz
— Number Instruction per second : 40e6
— Oscillator Mode : XT PLL × 16
Concernant les parametres de cet onglet, voir les explications donnees a la section 2.1.
Le bloc Compiler configuration
Par defaut, le code qui sera genere pour le DsPic utilise des nombres de type Single tandis que
par defaut les nombres utilises lors des simulations sont des Double. Les differences de resultats
observees avec ces deux types de nombre sont peu significatives (cf. sequence 1), aussi pour ne
pas surcharger la memoire du DsPic et reduire le temps de calcul, c’est ce codage qui par defaut
est retenu.
Le bloc Port info
Lors de la construction du schema de programmation sous SIMULINK, il indique le numero des
”pins” du microcontroleur qui sont utilisees.
Le bloc Simulink Configuration Compile
C’est en fait un bouton sur lequel on double-clique et qui genere le code C (appele C30 pour les
DsPic de la famille 30F) propre aux microcontroleurs DsPic ainsi que la traduction sous forme
hexadecimale (extension hex) de ce code. Pratiquement, c’est cette derniere qui sera implementee
sur le microcontroleur.
Plus generalement, les fichiers SIMULINK, au moyen de l’outil Real Time Workshop peuvent
generer du code pour differents types de materiels, lesquels peuvent etre programmes dans dif-
ferents type de langage C. Il suffit que ces langages C soient installes sur l’ordinateur et qu’ils
soient accessibles depuis SIMULINK (voir le menu Simulation Configuration Parameters
Real Time Workshop).
Le solver
Pour generer le code, il faut utiliser un solver a temps discret. Par defaut, le solver utilise
un Fixed Step Time de 1ms. Pratiquement, il faut adapter ce pas de calcul en fonction de la
dynamique du systeme a concevoir (selon qu’il est plus ou moins rapide ou lent) et au volume
de calculs a effectuer.
Ce reglage est souvent delicat et le blockset met a disposition un certain nombre d’outils pour
operer au choix de ce pas. On se reportera a la documentation en ligne du bloc Master champs
Busy Flag Port et Overload Flag Port et bloc Calculus Time Step dans la librairie Others du
blockset. La figure 2.3 montre :
14 F.BATEMAN
2.4. Premier exemple
a. un systeme pour lequel le pas de calcul du solver Fixed step time et la periode a laquelle
les blocs sont controles (Sample time) sont identiques, tandis que le temps de calcul ou
Tbusy (le nombre de cycles machines) est inferieur a la periode du solver.
b. un systeme pour lequel la periode a laquelle les blocs sont controles est un sous-multiple
de celle du solver.
c. un systeme pour lequel il y a un offset au niveau de la periode a laquelle les blocs sont
controles.
d. un systeme pour lequel le le temps de calcul requis pour effectuer les calculs est superieur
a la periode du solver.
Tbusy=k cycles machine
Fixed step time (solver)
sample time (bloc)
Fixed step time (solver)
sample time (bloc)offset T0
Tbusy=k cycles machine
Fixed step time (solver)
sample time (bloc)
Tbusy=k cycles machine
Fixed step time (solver)
sample time (bloc)
a. b.
c. d.
Figure 2.3 – Le temps sous SIMULINK
2.4 Premier exemple
Dans ce premier exemple, on se propose de realiser un chenillard a 4 LEDs. Pour cela, il faut
realiser un registre a decalage circulaire. Comme l’indique la figure 2.4, les donnees se propagent
d’une cellule a une autre au rythme d’une horloge. A chaque coup d’horloge, la sortie de la
cellule ayant la valeur 1 allume une des 4 LEDs. Les diodes s’eclairent les unes apres les autres
au rythme de la seconde.
. . .
1 0 0 0
10 0 0
100 0
t=0.T
t=1.T
t=2.T
1 0 0 0 t=4.T
Figure 2.4 – Registre a decalage circulaire
F.BATEMAN 15
Sequences 2. PROGRAMMATION DE DSPICs
2.4.1 Schema de simulation
Realiser un registre a decalage comportant 4 cellules. Ces cellules seront realisees par des
blocs DiscreteUnit delay dont vous reglerez judicieusement les champs Initial condition et
Sample time. Vous aurez egalement a regler les parametres de simulation du solver, notamment
le Fixed step time. Simulez ce systeme simple et verifiez son bon fonctionnement.
2.4.2 Schema de programmation et compilation
Apres avoir insere et parametre les blocs Master, Compiler configuration, Port info et Com-
pile, vous ajouterez le schema du registre a decalage. Comme on souhaite allumer ou eteindre
des LEDs (signaux tout ou rien), vous supprimerez les blocs permettant de visualiser les signaux
(a l’instar des blocs Scope et Display, ils ne se programment pas) et ajouterez sur chaque sortie
un bloc Commonly used blocks convert de sorte qu’ils transforment les signaux en boolean.
Vous pourrez alors inserer les blocks Digital I/O Digital output write en les parametrant
sur les sorties numeriques des lignes de port b2, . . . , b5.
Enregistrez ce schema et compilez-le. A l’issue de la compilation, les pourcentages de me-
moires requises pour le programme et utilisee par les donnees sont communiquees. Ces informa-
tions sont importantes. Un fichier avec une extension hex et ayant le meme nom que le fichier
mdl est genere, il se trouve dans le dossier ou Current folder defini par le Command window de
MATLAB.
2.4.3 Programmation du DsPic
1. Connectez un cable USB entre votre PC et la carte BigDsPic6,
2. Alimentez puis mettez cette carte sous tension,
3. Depuis le bureau Ouvrez le programme dsPICFLASH.
— choisissez le microcontroleur 30F6014A dans le champ device,
— cliquez sur le bouton Load Hex et selectionnez le fichier avec l’extension hex preala-
blement genere,
— cliquez sur bouton Write pour implementer le fichier hex sur le microcontroleur.
2.4.4 Visualisation du temps de calcul du microcontroleur
Dans cette partie, on souhaite mettre en evidence les differents temps caracteristiques du
microprocesseur. Parametrer le bloc MASTER de sorte que le Busy Flag Port et Overload Flag
Port puissent etre visualises sur les ports B0 et B1.
— Choisissez un Fixed Step Time egal a la moitie du Sample Time des blocs Unit delay,
compiler le modele et exporter le fichier .hex genere sur le microcontroleur.
— Visualiser avec l’oscilloscope le signal au niveau du quartz et le bit RB0 Busy Flag Port.
Observez egalement le bit RB1. Relever ces signaux.
— Choisissez un Fixed Step Time egal a la moitie du Sample time les blocs Unit delay,
compiler le modele et exporter le fichier .hex genere sur le microcontroleur.
— Visualiser avec l’oscilloscope le signal au niveau du quartz et le bit b0 Busy Flag Port.
Observez egalement le bit b1. Relever ces signaux.
16 F.BATEMAN
2.4. Premier exemple
Il est difficile avec un montage aussi simple de depasser les capacites de calcul du microcontro-
leur. En revanche, lorsque les calculs a effectuer seront beaucoup plus importants, il conviendra
de surveiller le busy time du microcontroleur. A ce propos, le bloc Others Calculus step time
peut fournir cette information sous forme numerique.
— Sur l’un des blocs Unit delay, ajouter un offset egal a un Fixed Step Time.
— Compiler et verifier avec l’oscilloscope que la LED associee au bloc sur lequel vous avez
opere la modification s’allume avec un retard.
F.BATEMAN 17
Sequences 2. PROGRAMMATION DE DSPICs
18 F.BATEMAN
SEQUENCES 3
PROGRAMMATION DES PERIPHERIQUES DU DSPIC
3.1 Ports numeriques
Le DsPic dispose de 5 ports references RA, RB, RC, RD, RF et RG. Chacune des lignes du
ports peut, au moyen de blocs Digital I/ODigital input et Digital output etre parametree. Il
convient de preciser que le bloc qui precede ou suit les blocs Digital output et Digital input doit
renvoyer ou pouvoir lire un nombre de type booleen.
Bascule T
La platine de developpement BigDsPic6, dont la documentation est fournie avec le kit, dispose
de boutons poussoirs (BP) connectes aux ports RA, RB, RC, RD, RF et RG. Ces boutons
poussoirs permettent d’appliquer sur ces ports (configures comme entree) un niveau logique
haut ou bas selon la position du jumper J13.
Comme cela a deja ete entrevu, des LEDs permettent de visualiser l’etat de ces ports. Des
switchs permetent d’activer ou de desactiver ces LEDS en portant leur cathode a un etat logique
bas (0 Volt) ou haut (5 Volts).
Lorsqu’on appuie sur le BP RB4, on desire que la LED associee au port RB5 s’allume et
le reste lorsqu’on relache ce BP. La LED s’eteint lorsqu’on appuie a nouveau sur le BP. Cette
fonction peut etre realisee au moyen d’une bascule D vue en cours d’electronique de premiere
annee.
— Rappelez la structure d’une bascule D possedant une entree d’horloge H et sa table de
verite.
— La bascule T (T designe l’entree de commande de la bascule reliee au BP), construite
avec une bascule D a pour equation :
Dn = Qn (3.1)
H = T (3.2)
19
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
— Realisez la bascule T et Simulez-la sous SIMULINK (bibliotheques Logic and bit opera-
tion et Simulink extras Flip-flop D Flip-flop).
— Realisez sous SIMULINK le schema permettant de programmer la bascule T sur le mi-
crocontroleur, generez le code correspondant et implementez-le sur la cible.
— Verifiez le bon fonctionnement du systeme.
20 F.BATEMAN
3.2. Les UART
3.2 Les UART
Les Universal Asynchronous Receiver-Transmitter (UART) sont des peripheriques qui per-
mettent au microcontroleur de communiquer avec le monde exterieur. Cette communication
s’opere dans ce cas par une liaison serie, ce qui signifie que les bits sont transmis sequentielle-
ment sur un fil en emission et sur un fil en reception. De plus, il y a un fil de masse.
3.2.1 Le protocole de liaison serie RS232
Ce protocole est dedie a la transmission de donnees bidirectionnelle en mode full-duplex et
est illustre sur la figure 3.1. Malgre l’apparition de protocoles plus rapides et plus robustes aux
erreurs de transmission, il reste utilise, en particulier pour la communication avec des capteurs
tels que les recepteurs GPS. Ce type de liaison est asynchrone, cela signifie que les donnees sont
emises ou recues a n’importe quel moment, sans reference de temps particuliere. Cela signifie que
les ordinateurs qui communiquent doivent pouvoir interrompre les programmes en cours pour
traiter ces informations. Une trame type est representee sur la figure 3.2, elle comporte :
— 8 bits de donnees soit des nombres de type UINT8 ∈ [0, 255]. Le transfert d’un Single
requiert par exemple que celui-ci soit code sur 4 octets.
— 1 bit de start.
— 1 a 2 bits de stop.
— vitesse de transmission 300 a 115200 bauds
— Les donnees sont emises de la broche Tx (Transmit Data du peripherique 1) vers la broche
Rx (Receive Data du peripherique 2).
— L’etat 0 logique correspond a un signal de +12V alors que le 1 logique correspond a un
signal de -12V. Ces amplitudes relativement elevees visent a garantir une bonne immunite
au bruit et par la-meme a assurer l’integrite des signaux emis et recus, et ce pour des
longueurs de connection pouvant atteindre plusieurs metres. Pratiquement, sur la carte
BigDsPic6, un circuit MAx202 realise cette adaptation de tension.
— La connectique de cette liaison se presente frequemment sous la forme du connecteur
DB-9 represente sur la figure 3.3. Ces connecteurs appeles port serie et references COM1,
COM2, etc. tendent a disparaıtre au profit des ports USB. De fait, il existe des adapteurs
USB qui permettent d’emuler la liaison serie RS323. La carte BigDsPic6 comporte un tel
adaptateur.
— Le protocole presente dans ce tutoriel n’utilise que les lignes Tx, Rx et la masse GND. Il
faut toutefois savoir que d’autres protocoles de transmission utilisant les lignes de controle
RTS, CTS, etc. existent.
Quelques considerations sur la vitesse de transmission : Supposons que l’on ait a
recevoir une trame de N octets qui se repete k fois par seconde (typiquement, ce serait le cas
des donnees issues d’un GPS). Comme un octet comporte en plus, pour sa transmission, un bit
de start et un bit de stop, ce sont 10.N.k bits qu’il faut transmettre par seconde. La vitesse de
transmission B en bits/S doit verifier : B > 10.k.N
Dans le cas d’une programmation avec SIMULINK, comme les octets sont recus au rythme du
F.BATEMAN 21
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
Figure 3.1 – Une liaison serie
Figure 3.2 – La trame d’une liaison serie
Figure 3.3 – Connecteur DB9
22 F.BATEMAN
3.2. Les UART
Sample Time ou ST , il faut aussi s’assurer que ST ≥ 1
k.N
3.2.2 Programmation des UARTs du DsPic
La mise en œuvre d’un protocole RS232 au niveau du DsPic necessite l’utilisation d’un des
UARTs du microcontroleur Le DsPic 30F6014a possede deux UART appeles UART1 et UART2,
respectivement accessible depuis les ports :
RF2 (UART1 RX) RF3 (UART1 TX)
RF4 (UART2 RX) RF5 (UART2 TX)
Pour un programme donne, si ces lignes sont utilisees par l’UART, elles ne peuvent plus etre
utilisees a d’autres fins.
Dans ce qui suit, en parallele a la lecture de ce document, vous etes invites a consulter l’aide
en ligne du blockset et en particulier la bibliotheque Serial Port.
Pour programmer les UARTs avec le blockset sous SIMULINK, vous devez ajouter au tem-
plate (modele sur lequel ont deja ete inseres et parametres les blocs Master, Compiler configu-
ration et Compile) les blocs :
— Serial PortUART Configuration
— Le numero de l’UART utilise, il faut donc deux blocs UART Configuration si on veut
realiser deux liaisons serie.
— La vitesse de transmission des donnees.
— Sous l’onglet Tx on gere la transmission, en particulier le niveau de priorite de l’in-
terruption. Une interruption est un arret temporaire de l’execution normale du pro-
gramme par le microcontroleur afin d’executer un programme juge prioritaire, en
l’occurrence, l’emission des donnees. Plusieurs peripheriques pouvant interrompre le
programme en cours, il existe un ordre de priorite des interruptions. On gere egalement
la taille de la memoire (Buffer) qui contient les donnees a emettre.
— Parametres analogues sous l’onglet Rx.
— Ajouter un bloc Serial PortTx Output si vous souhaitez emettre des donnees. Noter
qu’il est possible de copier autant d’instances de ce bloc qu’il y a de donnees a emettre.
Ces dernieres doivent etre du type UINT8.
— Ajouter un bloc Serial PortRx Input si vous souhaitez recevoir des donnees. Les donnees
recues doivent etre du type UINT8, elles le sont a un rythme defini par le Sample time
du bloc. Les donnees recues sont propagees dans le schema SIMULINK a ce rythme. Le
reglage de ce temps est delicat, il procede du nombre de donnees a emettre et de la vitesse
de transmission en bauds.
Si les interruptions sont autorisees, un flag avertit de la presence des donnees (double-clic
sur le bloc Rx Input, case a cocher Received Output Flag).
Transmission de donnees par port serie RS232
Vous allez realiser une liaison serie entre le module USB UART de la carte BigDsPic6 et un
PC. Un composant FDI implante sur la carte emule le port serie. Il s’agit tres simplement
F.BATEMAN 23
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
d’afficher sur l’ecran du PC au moyen du logiciel Realterm une suite de caracteres genere par le
microcontroleur et transmis via l’UART par une liaison serie.
— Rechercher dans une table de caracteres ASCII les codes decimaux correspondant aux
lettres $, A, B, C.
— Generer des constantes ayant les valeurs correspondantes et affecter-leur le type UINT8.
— Ajouter au fichier template les blocs UART Configuration
— Parametrer l’UART de votre choix, veillez simplement a sortir les signaux sur les bonnes
pins.
— Parametrer la liaison a 38400 bauds.
— Ajouter les Tx Output en sortie de chaque constante.
— Adopter pour le solver un pas de 1ms.
— Connecter la carte BigDsPic6 (sortie USB UART) au PC par le cable USB et commuter
les switchs 1 et 2 de SW2 en position USB UART.
— Mettre la carte BigDsPic6 sous tension.
— Sur le PC, identifier le numero de port serie alloue par le gestionnaire de port USB :
DemarrerPanneau de configurationPerformances et Maintenance Systeme Ma-
terielGestionnaire peripheriquesPorts.
— Depuis le bureau du PC, ouvrir le logiciel Realterm (cf. figure 3.4). Ce freeware permet
d’analyser les trames pour differents types de protocoles (RS232, I2C, etc.). Selectionner
l’onglet PORT et configurer la liaison serie (numero du port, vitesse de transmission en
baud, 8 bits de donnees, 1 bit de stop et aucun bit de parite).
— Compiler le programme et implementer-le sur le DsPic, ouvrir le port sous Realterm
(bouton OPEN) et verifier que les caracteres recus sont conformes a ce qui est attendu.
Figure 3.4 – Le menu du programme Realterm
24 F.BATEMAN
3.2. Les UART
Reception-Emission de donnees 1 Realterm comporte une fenetre d’edition depuis laquelle
il est possible de saisir du texte. Ce texte traduit sous forme de codes ASCII est ensuite emis
vers le port serie. Ouvrez le fichier Test Rx Tx.mdl, ce programme, une fois compile, interagit
Realterm.
— Analysez ce programme, vous prendrez le temps de lire l’aide des blocs que vous n’avez
pas encore eu l’occasion d’utiliser.
— Expliquez ce qu’il fait.
— Compilez-le et testez-le.
Reception-Emission de donnees 2 Modifiez ce programme de sorte que seul le caractere
ASCII a soit retransmis. Vous trouverez des fonctions de test de caractere (tester un caractere
ASCII equivaut a tester un nombre) dans la bibliotheque Logic and bit operation
Reception-Emission d’un flux de donnees 3 Cette situation est typiquement celle ren-
contree lorsqu’on lit un capteur delivrant des informations au format RS232. On suppose une
trame composee de trois nombres codes en UINT8.
— le caractere d’entete de trame 255,
— deux caracteres de donnees quelconques.
Cette trame sera generee depuis Realterm, pour cela :
— onglet Port : baudrate 300, no parity, 8 bits de donnees, 1 bit de stop, numero de port.
N’ouvrez pas encore le port.
— onglet Send : dans le champ dedie a cet effet, saisissez une trame telle que definie supra.
Realisez un systeme qui receptionne les donnees, identifie l’entete de debut de trame et opere
a la somme des deux octets de donnees. Cette somme sera alors renvoyee sur l’hyperterminal.
Pour realiser ce systeme, il convient d’operer a une transformation serie-parallele de la trame
recue. Cela est realise par un registre a decalage au moyen de blocs DiscreteDelay.
F.BATEMAN 25
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
3.2.3 Visualisation des signaux
Le blockset offre des outils qui permettent de visualiser en temps reel, dans MATLAB, les si-
gnaux calcules et traites par le microcontroleur. Ces outils utilisent un UART du microcontroleur
et le port serie du PC sur lequel MATLAB est installe.
— Ouvrez le template et adoptez un Fixed Step Time de 1ms.
— Vous allez observer un signal issu d’un compteur dont la sortie varie de 0 a 15 (bloc
SourceLimited Counter). Regler le Sample time pour que la periode de ce signal soit
de 1,6 s.
— Vous allez, dans le meme temps, observer un signal sinusoidal echantillonne (mode Sam-
pled based) d’amplitude egale a 16, de bias egal a 16, choisissez le Sample Time et le
nombre de Sample per Period pour que la periode de ce signal soit egale a 1,6s. Il ne doit
pas y avoir plus de 100 points par periode.
— Ajouter un bloc UART Configuration et definir le numero de l’UART que vous voulez
utiliser. Le choix de la vitesse de transmission va dependre :
— du nombre de signaux a observer (jusqu’a 16) en mode alterne,
— de la frequence de ces signaux. Par exemple, si l’on desire observer 2 signaux dont
la frequence n’excede pas 100 Hz avec pour chacun un minimum de 10 points par
periode, il faut 20 points par periode de 10 ms soit 2000 points par seconde. Comme
chaque donnee est codee sur deux octets 1, cela represente 4000 octets, soit 40000 bits
(bits de start et de stop a inclure). On doit donc fixer une vitesse de transmission
superieure, le choix se portera sur 57600 bauds.
— Pour l’envoi de ces signaux vers le PC, il faut ajouter autant d’instances du bloc Serial port
Tx Labview Matlab qu’il y a de signaux a visualiser. Ces blocs admettent des nombre
du type UINT16 (chaque information est codee sur 2 octets), il faut donc adapter le type
des signaux qu’on veut visualiser, au besoin en inserant un bloc Data type conversion.
Il faut ensuite parametrer ces blocs en allouant a chaque bloc Tx Labview Matlab un
numero de voie compris entre 0 et 15. Une fois le schema termine, il reste a le compiler
et a implementer le programme sur le microcontroleur.
— La liaison entre le microcontroleur et le PC reste identique a celle cablee precedemment.
Sur le PC, depuis le Command Window de MATLAB, taper rs232gui. Reporter le numero
de port COM et appuyer sur le bouton Connexion puis sur Start. Les signaux apparaissent alors
dans une fenetre. Pour plus de details sur cette fonction, se reporter a l’aide en ligne Serial
portInterface Tx Matlab.
Par defaut, la fonction rs232gui affiche des nombres de type UINT16, donc strictement
positifs. Pour visualiser des nombres negatifs de type INT16, cliquez sur le bouton plot int16. A
titre d’exemple, portez le champ Bias du signal sinusoıdal a 0, recompiler le modele et observer
les signaux sur rs232gui.
Les donnees affichees sont stockees dans 2 tableaux references R et Rn pouvant respective-
ment contenir 50000 et 10000 points. Les vecteurs t R et t Rn contiennent les valeurs des temps
auxquels ont ete realisees ces simulations. Il est donc possible d’operer a un post-traitement de
1. On reviendra sur ce point un peu plus loin.
26 F.BATEMAN
3.2. Les UART
ces donnees sous MATLAB.
F.BATEMAN 27
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
3.3 Le bus SPI
Le bus SPI (Serial Peripheral Interface) est un bus serie synchrone qui opere en mode full-
duplex 2 . La communication s’opere au rythme d’une horloge entre un maıtre et un esclave, ce
dernier est selectionne par le biais d’une ligne de controle CS (chip select) ou SS active a l’etat
bas. Les donnees echangees sont codees sur 8 ou 16 bits. Une ligne est dediee a l’emission, une
autre ligne a la reception. Si ce bus est rapide, il necessite en revanche des liaisons courtes entre
le maıtre et l’esclave et il faut un CS par esclave.
— SCK : l’horloge generee par le maıtre,
— MOSI : Master Output - Slave Input ou SDI sur le DsPic,
— MISO : Master Input - Slave Output ou SDO sur le DsPic,
— SS : ligne active a l’etat bas qui permet d’activer le SS ou CS de l’esclave.
La figure 3.5 illustre ce protocole et la figure 3.6 montre les signaux dans le cas d’une ecriture
du maıtre vers l’esclave.
Figure 3.5 – Communication entre un maıtre et un ou plusieurs esclaves
2. Communication bidirectionnelle.
28 F.BATEMAN
3.3. Le bus SPI
3.3.1 Application : controle d’un DAC (Digital to Analog Converter)
Le DsPIC 30F6014A n’integre pas de convertisseur numerique - analogique. Il est toutefois
possible d’en controler un avec le port SPI. L’interet est de pouvoir operer a des conversions a
frequence elevee. Ce qui peut s’averer utile pour des applications audio embarquees. Pour debit
Pour cette application, on met en œuvre le convertisseur 12 bits MCP4921 dont on trouvera la
notice dans le dossier Datasheet sur le Bureau. Ce composant est implemente sur un support
realise par la societe MIkroElektronika et se plugge directement sur la carte BigDsPic6.
1. Sur la documentation du DsPic, Identifier les ports alloues au bus SPI2,
2. Sur la carte du DAC 12 bits, vous veillerez a ce que les switchs aient la configuration
suivante :
— SW 1,2, 4, 6,7 : Off
— SW 3, 5, 7 : On
— Cavalier sur 4.096V, ainsi la resolution du DAC 12 bits sera de 1mV.
3. Plugger le DAC12 bits sur le port G,
4. Sur la carte BigDsPic6, commuter les switchs de SW12 sur MOSI, MISO, SCK,
Bien que le 30F6014A possede une ligne SS associee a RG9, cette derniere ne peut etre reliee
au CS du DAC 12 bits. On utilise en lieu et place le port RG1 qu’on utilisera comme ligne de
selection du DAC 12 bits lorsqu’on voudra convertir les donnees.
On veut generer un signal sinusoıdal analogique de frequence 440Hz (soit un LA naturel). Le
signal source est echantillonne a 8kHz, soit un Fixed-Sample-Time egal a 1.25e−4 s. Toutefois,
comme le signal de CS alterne entre les valeurs 1 et 0, on prend un Fixed-Sample-Time deux
fois plus rapide, soit 6.25e−5s.
1. Modifier le template pour regler le Fixed-Sample-Time desire,
Figure 3.6 – Les signaux du protocole SPI
F.BATEMAN 29
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
2. Ajouter une source sinusoıdale : Sources Sine Wave et parametrer ce bloc de sorte qu’il
produise un signal d’amplitude crete egale a 2048, de valeur moyenne egale a 2048 (bias)
et qu’il genere par periode un nombre d’echantillons tel que le signal de sortie ait une
frequence 440 Hz et soit echantillonne a 8000Hz (choisir l’option Sine Type Sampled
Base.
3. Ajouter un bloc SPI config pour definir la configuration du port SPI parametre comme
suit : Port 2, Master, SDO Enable, donnees sur 16 bits, frequence d’horloge regle avec
le prescaler a 416kHz.4. Ajouter un bloc SPI Input-Output, ce bloc est parametre comme suit : Port 2, Always
Enable, SPI Input 3 , SPI Output. L’entree de ce bloc sera reliee a la source sinusoıdale
par l’intermediaire d’un bloc Commonly Used Blocksconvert UINT16.
5. Pour controler le SS, ajouter un bloc Digital Output parametre sur RG1 et pilote par
un Sources Limited counter qui compte jusqu’a 1 (soit 0, soit 1) a une cadence de
6.25e−5s.
La donnee issue du bus SPI est constituee des 12 bits de poids faible, les 4 bits de poids fort
sont utilises pour le controle du DAC 12 bits, en particulier, si l’on se refere a la datasheet de ce
composant page 18, vous justifierez l’interet de regler les bits b12 et b13 a 1.
— Comment pourrait-on simplement modifier la donnee (le signal sinusoıdal code en UINT16)
pour regler les bits b12 et b13 a 1 ? La fonction bin2dec convertit un mot binaire en
nombre decimal, elle peut vous aider a comprendre coment realiser cette modification.
— Sauvegardez votre modele et generez le fichier hex correspondant. Transferez-le sur le
microcontroleur et observez avec l’oscilloscope le signal ainsi genere.
— Observez a l’oscilloscope les signaux du bus SS, SCK et MOSI en vous synchronisant sur
le front descendant de SS.
— Il est possible d’utiliser les differentes sources fournies par SIMULINK pour generer des
signaux de differentes natures. Attention toutefois a les convertir au format UINT16.
Veillez egalement a ce que l’amplitude de ces signaux aient des valeurs coherentes avec le
format UINT16 (c-a.d ∈ [0− 65535]).
3. Normalement, on n’aurait pas a activer cette option mais si la case est decochee, le DAC ne fonctionne pas.
30 F.BATEMAN
3.4. Les signaux PWM
3.4 Les signaux PWM
Mise en œuvre des fonctionnalites Output Compare et Input Capture.
3.4.1 Definition d’une PWM
Le principe de fonctionnement de ces deux blocs repose sur la generation ou l’analyse d’un
signal carre a rapport cyclique variable (Duty Cycle). Sur la figure 3.7 vous pouvez observer
differentes valeurs de rapport cyclique avec la forme du signal qui en resulte. Le rapport cyclique
a pour expression a = ∆tt, avec :
— ∆t : temps du signal a l’etat haut
— T : periode du signal
— a : rapport cyclique
Lorsque a est fonction du temps, le signal a rapport cyclique variable est qualifie de PWM
(Pulse Width Modulation).
Figure 3.7 – Le menu du programme Realterm
Exemples d’utilisation :
— L’echange d’informations entre un capteur (temperature, accelerometre, etc.) et un mi-
crocontroleur ou entre microcontroleurs,
— La commande de moteurs a travers des transistors de puissance.
3.4.2 Generation d’une PWM
Pour cela vous allez dans un premier temps realiser un programme qui permet le codage
numerique d’une entree analogique (ADC Input). Cette entree sera reliee par cavalier a l’un des
F.BATEMAN 31
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
deux potentiometres (A/D converter input) presents sur votre carte de developpement. Vous
etes libre du choix de l’entree (RB8, RB9, ..., RB15).
— Parametrez le convertisseur analogique numerique (bloc ADC Input) en utilisant une
tension de reference externe. Pratiquement la tension de 4, 096V generee sur la carte
BigDsPic6 (consultez le manuel de cette carte p 13). Vous parametrerez le rythme des
conversions (Trigger Source) en mode auto convert.
— Visualisez le signal issu de la conversion analogique numerique au moyen de rs232gui et
d’un bloc Tx Labview Matlab.
— Configurer ensuite le bloc Peripheral I/OOutput Compare HW, celui-ci vous permettra
de generer un signal a rapport cyclique variable directement proportionnel a la tension
d’entree du potentiometre que vous avez choisi. Pour la configuration des parametres du
bloc consulter l’aide. On opere les choix suivants :
— Channels Input Type : nous voulons definir la PWM par sa periode et sa duree a
l’etat haut.
— La Period Max sera definie a 20ms (periode typique pour des servocommandes).
— La variable OCmax est essentielle. Pour un signal egal a OCmax a l’entree du bloc
Output Compare HW correspond un rapport cyclique a = 100%. Vous pouvez acceder
a la valeur de OCmax depuis le Workspace de MATLAB qui sera mis a jour apres
une configuration de votre programme.
— Pour fonctionner, le bloc Output Compare HW est pilote par l’entree (OCx Up) qui
prend ses valeurs dans [0, OCmax]. Attention, le seul format d’entree admis-
sible par le bloc est le type UINT16. Au moyen d’un gain, realiser la fonction
qui transforme le signal issu de l’ADC ([0, 4095]) en un signal de type UINT16 qui
varie dans l’intervalle [0, OCmax].
— Observer a l’oscilloscope le signal de sortie module en rapport cyclique a l’aide du po-
tentiometre, en parallele, relever avec rs232gui le signal issu de l’ADC. Pour connaitre
les pins utilisees dans votre programme, afficher le Port info et cliquer dessus pour la
mise a jour. Attention malgre tout a verifier sur la documentation (datasheet de votre
composant) des erreurs peuvent apparaitre.
3.4.3 Decodage d’un signal PWM
Dans ce qui suit, l’objectif est de decoder une PWM (periode, duree de l’etat haut ou bas
etc.), par exemple, celle issue du signal genere par le module Output Compare HW precedem-
ment programme. Plus generalement, la PWM peut permettre de transmettre des informations.
Ces dernieres proviennent par exemple d’une radiocommande et sont decodees par le microcon-
troleur.
— Mettre en place un bloc Input Capture dans votre programme et consulter l’aide pour la
configuration.
— De la meme facon que precedemment, la valeur de ICimax vous sera donnee dans le
Workspace de MATLAB.
— Au moyen du rs232gui, vous visualiserez la valeur du temps haut de votre signal d’entree
ainsi que sa periode (sorties ICx Up et ICx Periode).
— Avant de compiler votre programme, assurez-vous qu’aucune pins ne soit utilisee plus
32 F.BATEMAN
3.4. Les signaux PWM
d’une fois.
— Pour effectuer la mesure, realisez une liaison filaire entre la sortie Output Compare HW
et l’entree Input Capture. Attention les donnees inscrites dans Port info sont erronees
pour le bloc Input Capture, se reporter au datasheet du microcontroleur.
— Faire varier le rapport cyclique du signal d’entree de Input Capture avec le potentiometre
et relever la valeur mesuree.
— Verifier la coherence de vos mesures avec la valeur de ICxmax. Par exemple, si la valeur
de ICxmax est 9999 et la valeur du rapport cyclique du signal d’entree de 0,2. Le resultat
en sortie doit etre tres proche de 2000.
— Relever les valeurs de ICi Up et ICi Periode pour les valeurs de rapport cyclique extremes.
Commenter les resultats. Comment peut-on modifier ces valeurs ?
F.BATEMAN 33
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
3.5 Convertisseurs Analogiques-Numeriques
Il s’agit de numeriser des signaux analogiques et de mettre en evidence les limites de cette
operation.
Au moyen du generateur basses-frequences (GBF), generez un signal sinusoıdal de frequence
50 Hz dont l’amplitude crete a crete varie entre 0 et 5 Volts et visualisez-le sur l’oscilloscope.
Au moyen d’un bloc ADC Analog to Digital Converter ou CAN, realisez une conversion
analogique-numerique du signal sinusoıdal delivre par le GBF. En exploitant la documentation
HTML de ce bloc, parametrez-le de sorte que le signal sinusoıdal soit echantillonne a 200 Hz.
Pour ce faire, cette conversion sera declenchee par une source exterieure mode trigger. Vous
pourrez realiser facilement la source qui declenche les conversions en utilisant un Source
Counter limited.
Pour l’observation des signaux, vous mettrez en œuvre un bloc TX Labview Matlab, la
transmission des donnees sera cadencee a 115200 bauds et le Fixed Step Time regle a 1.10−4.
Pour une telle vitesse de transmission, le dsPIC Master est cadence a 40 MIPS.
Dans la fenetre rs232gui, affecter la valeur 200 a Rn, cela limitera la duree d’observation des
signaux. N’hesitez pas a chercher dans l’aide la syntaxe de la fonction axis.
— Observez sous rs232gui le signal echantillonne, avec le curseur, relevez la periode d’echan-
tillonnage et l’amplitude crete a crete de ce signal dont on rappelle qu’il est code sur 12
bits, autrement dit 5V equivalent a 4096.
— Representez le spectre du signal echantillonne.
— Quelle est l’expression du signal obtenu en sortie du CAN.
On diminue la frequence d’echantillonnage et on la porte a 250Hz, l’objectif est de mettre
en evidence l’effet du bloqueur d’ordre zero.
— Observez sous rs232gui le signal echantillonne, avec le curseur, relevez l’amplitude crete
a crete de ce signal et comparez-la a celle relevee precedemment.
— Representez le spectre du signal echantillonne.
— Donner une explication a ce que vous observez en sortie du CAN. Pour repondre a cette
question, on vous rappelle que la fonction de transfert du BOZ est :
BOZ(jω) = Tesin
ωTe2
ωTe2
e−jωTe2 (3.3)
34 F.BATEMAN
3.5. Convertisseurs Analogiques-Numeriques
F/Fe Gain/Te
0.1 0.98363
0.2 0.93549
0.3 0.85839
0.4 0.75683
0.5 0.63662
0.6 0.50455
0.7 0.36788
0.8 0.23387
0.9 0.10929
1.0 0.00000
1.1 0.08942
1.2 0.15591
1.3 0.19809
1.4 0.21624
1.5 0.21221
1.6 0.18921
1.7 0.15148
1.8 0.10394
1.9 0.05177
2.0 0.00000
2.1 0.04684
2.2 0.08504
2.3 0.11196
2.4 0.12614
2.5 0.12732
2.6 0.11643
2.7 0.09538
2.8 0.06682
2.9 0.03392
3.0 0.00000
F.BATEMAN 35
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
3.6 Le bus I2C
Le bus I2C est un bus de donnees serie, asynchrone, bidirectionnel et half-duplex (deux
sens de communication possibles mais pas simultanement). Les equipements connectes au bus
sont maıtres ou esclaves, et reciproquement. Il faut noter que les echanges ont toujours lieu a
l’initiative du maıtre vers un esclave uniquement.
Electriquement le bus necessite trois conducteurs : la masse, l’horloge (SCL, Serial Clock)
et les donnees (SDA, Serial Data). L’impedance de chaque equipement sur le bus doit etre
absolument adaptee, la charge capacitive maximale des conducteurs SDA et SCL est de 400 pF.
Les deux lignes SDA et SCL sont reliees au niveau de tension VDD a travers des resistances de
tirage (< 3.5 KOhms).
Dans ce qui suit, le microcontroleur pilote des cartes de controle de moteurs brushless via le
bus I2C.
Le protocole I2C
Le protocole peut se decomposer en deux parties, la premiere definit l’adresse de l’esclave
concerne et la seconde contient les donnees envoyees ou receptionnees par le maıtre. Le maıtre,
avant d’envoyer des informations sur le bus, s’assure que celui-ci est disponible. Alors, ensuite, il
passe la ligne SDA de l’etat haut a l’etat bas, tout en maintenant la ligne SCL a l’etat haut, c’est
la condition de depart (bit de Start). Le maıtre envoie alors l’adresse de l’esclave designe qui
est composee de huit bits dont un bit (possibilite d’un codage sur 10 bits) qui precise l’ecriture
ou la lecture des donnees (Read a 1, Write a 0). L’esclave renvoie alors un bit d’acquittement
ACK ou de non acquittement NACK pour informer de la prise en compte de l’information. Les
donnees sont codees sur un octet ou plus et envoyees du maitre vers l’esclave ou inversement,
avec acquittement du receptionnaire. Sur la Figure 3.8 on presente la structure du protocole I2C
configure en ecriture. De plus en exemple sur la Figure 3.9, on donne les signaux SDA (en haut)
et SCL (en bas) qui permettent pour l’adresse 82 l’ecriture de la valeur 10 (en decimal).
Figure 3.8 – Structure de la trame I2C
Commande d’un moteur brushless
Dans cette partie, vous mettrez en œuvre un bus I2C dans le but de controler un moteur
brushless ou moteur sans balai utilise en aeromodelisme. Ce moteur est controle par une carte
de controle des moteurs brushless (Bl-Ctrl) qui fournit la puissance electrique au moteur. Cette
carte permet egalement de mesurer le courant consomme et la vitesse du moteur. Le bus I2C peut
travailler a des cadences d’horloge elevees, typiquement 400kz. Il est ainsi possible de controler
36 F.BATEMAN
3.6. Le bus I2C
plusieurs peripheriques en raffraichissant les commandes a un rythme eleve. Cela est particulie-
rement interessant pour le controle des drones a voilure tournantes tels que les quadrirotors.
Commande d’un moteur brushless sur 8 bits
Pour realiser ce montage, reportez-vous aux documentations du microcontroleur, de la Bl-Ctrl
http://www.mikrokopter.de/ucwiki/fr/BL-Ctrl_2.0 et a la figure 3.12. Toutes les cartes
sont hors tension.
— Reliez les ports SCL et SDA ainsi que la masse du microcontroleur aux points C (SCL)
et D (SDA) ainsi qu’a la masse de la Bl-Ctrl.
Figure 3.9 – Releve d’une trame I2C
Figure 3.10 – Moteur brushless
F.BATEMAN 37
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
— Commutez les switchs SWI2 SCL et SDA en position I2C.
— Reliez les trois phases du moteurs brushless notees sur les cables A, B, C aux sorties A,
B, C de la Bl-Ctrl.
L’alimentation ne doit pas encore etre reliee a la carte Bl-Ctrl.
— Mettre l’alimentation sous tension, regler la tension a 15 Volts et ne pas limiter le courant,
en effet, les demandes en courant peuvent atteindre 10A (ce qui depasse les capacites de
l’alimentation.)
— Couper l’alimentation et connecter-la a la Bl-Ctrl.
— Relier la masse de la BL-Ctrl a la masse de la carte BigDsPic6.
— Ouvrir le fichier I2C.mdl et analyser les parametres du bloc I2C Master qui permet
de piloter une carte de controle Bl-Ctrl pour un moteur brushless depuis un bus I2C.
L’adresse de la carte est 82 (decimal), la commande du moteur est codee sur un octet ([0,
255]) et la frequence du bus est de 400 kHz. Les donnees sont transmises sur le bus avec
un Sample Time egal a 2 ms. Par defaut, dans ce montage, la commande est egale a 10.
Soyez prudent a ne pas appliquer un nombre trop grand, l’helice atteindrait des vitesses
de rotation tres elevees.
— Compiler le schema et implementer-le sur le microcontroleur, le moteur doit tourner. Pour
le stopper, cliquer sur le bouton Erase du programme DsPicFlash.
Commande d’un moteur brushless sur 11 bits
Pour un controle plus fin de la vitesse des moteurs, il est possible de controler la Bl-Ctrl sur
11 bits ([0,2047]). Pratiquement, les donnees sont codees sur 2 octets sur le bus I2C, les bits
11 . . . 15 n’etant pas pris en compte par la Bl-Ctrl.
Figure 3.11 – Carte Bl-Ctrl
DsPic
moteur
BCTRL
sdascl
gnd
+12V-8A
Figure 3.12 – Plan de cablage du moteur
38 F.BATEMAN
3.6. Le bus I2C
0 0 0 0 0 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Il faut realiser une fonction qui, partant d’un mot code sur 16 bits et compris dans [0, 2047]
genere ce mot sur 2 octets codes en UINT8.
L’octet de poids faible ou LSB 4 contiendra les bits
0 0 0 0 0 b2 b1 b0
L’octet de poids fort ou MSB 5 contiendra les bits
b10 b9 b8 b7 b6 b5 b4 b3
On se rappellera qu’un decalage d’un bit a droite equivaut a une division par deux.
0 0 0 0 0 0 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1
On se rappellera qu’un decalage d’un bit a gauche equivaut a une multiplication par deux,
0 0 0 0 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 0
Realisez sous SIMULINK un schema de simulation qui transforme un nombre de type
UINT16 dont la valeur peut varier entre 0 et 2047 en deux nombres codes sur 8 bits. Les
octets de poids faible et de poids fort doivent avoir la structure proposee ci-dessus.
Modifiez le modele I2C.mdl pour controler le moteur avec un mot de commande code sur
deux octets et dont la valeur peut varier entre 0 et 2047. Sur la Bl-Ctrl, les octets doivent etre
transmis dans l’ordre suivant :
MSB LSB
Lecture d’octets depuis un bus I2C
Pour cet essai, vous reprendrez le modele du systeme qui permet l’ecriture d’un mot de 8 bits
sur le bus I2C.
Le bus I2C permet egalement de lire des donnees issues de peripheriques externes. En par-
ticulier, la carte Bl-Ctrl est egalement accessible en lecture a l’adresse 83. Il est notamment
possible de lire :
— octet 1 : l’intensite du courant absorbe par le moteur
— octet 2 :
— octet 3 :
— octet 4 : la vitesse du moteur en tour/s
— octet 5 : la tension d’alimentation de la carte Bl-Ctrl
Pour lire ces donnees, il faut ouvrir une nouvelle instance du bloc I2C Master et l’ajouter au
modele qui comporte deja un premier bloc I2C Master pour l’ecriture sur la carte Bl-Ctrl.
4. Less Significant Byte
5. Most Significant Byte
F.BATEMAN 39
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
— En lecture, la carte Bl-Ctrl doit etre adressee a l’adresse 83.
— Parametrer le bloc I2C Master de facon a pouvoir lire les cinq premiers octets. Attention,
pour pouvoir fonctionner correctement, la sequence de lecture des cinq octets doit etre
suivie d’une operation d’ecriture (cependant aucun octet ne doit etre envoye) 6.
— Connecter un bloc Tx Labview Matlab de facon a pouvoir enregistrer la vitesse du mo-
teur.
— Appliquer a l’entree du bloc I2C un signal dont la valeur varie discretement de 0 a 100
(utiliser un Counter Limited) et relever la vitesse de rotation du moteur. La constante de
temps du moteur est de l’ordre de 100 ms, il vous faut tenir compte de cette information
pour cadencer correctement le signal applique a l’entree du bus I2C.
Releve des caracteristiques de l’ensemble Bl-Ctrl-Brushless-Helice
On conserve le meme montage que precedemment.
— Mettre en œuvre le banc moteur Brushless muni de son helice et pilote par la carte Bl-Ctrl.
Installer une balance/masselotte en vue de mesurer la poussee exercee par l’helice.
— Relever la caracteristique statique f(N) ou f designe la frequence de rotation du
moteur et N l’octet de commande applique a la Bl-Ctrl.
— relever egalement la tension d’alimentation et le courant. Calculer la puissance elec-
trique et visualiser-la.
— Relever pour chaque acquisition de f la poussee P exercee par l’helice.
— Representer la caracteristique P (f2), vous etes invites a relever les points de cette carac-
teristique dans un tableau sous MATLAB. Au moyen de la fonction polyfit, proposez une
approximation polynomiale de cette caracteristique et donnez une expression de P (f2).
— En supposant, au rendement du systeme Bl-Ctrl + moteur pres, que la puissance
electrique delivree par l’alimentation sert a compenser les pertes dues a la trainee aero-
dynamique, en deduire le coefficient de trainee de l’helice.
6. Nous n’avons pas a ce jour d’explication sur ce point.
40 F.BATEMAN
3.7. Insertion de code
3.7 Insertion de code
3.7.1 Insertion de code C
Le blockset permet d’inserer dans des blocs des programmes codes en langage C OthersC
function call. Cela peut permettre de realiser des fonctions qui n’existent pas sous SIMULINK.
Dans ce qui suit, les programmes le code source figure dans le fichier essai .c, lequel appelle les
fonctions declarees dans le bloc C function call.
Premier exemple
Un exemple simple peut etre consulte en ouvrant le fichier Programme en C.mdl. Vous consul-
terez par ailleurs l’aide du bloc C function call pour comprendre le parametrage du bloc. Il faut
en particulier indiquer le nom du fichier *.C sous Simulation Real-Time Workshop Custom
Code Source files.
— Compiler et implementer ce bloc et visualiser au moyen de RS232gui le resultat de l’ope-
ration programmee.
Second exemple : cinematique de rotation d’un solide
Le controle des vehicules aerospatiaux requiert le controle de leur attitude. Il est theoriquement
possible de calculer cette derniere a partir de la mesure des vitesses angulaires realisees par les
gyrometres de roulis, de tangage et de lacet. Ces vitesses angulaires sont respectivement notees
p, q et r. Les angles d’attitude qui permettent de localiser la position du repere vehicule par
rapport a un repere de reference sont respectivement les angles de gıte ϕ, d’assiette θ et le cap
ψ. On demontre que :
ϕ = p+ q sinϕ tan θ + r cosϕ tan θ
θ = q cosϕ− r sinϕ
ψ =
(sinϕ
cos θ
)
q +(cosϕ
cos θ
)
r (3.4)
— Quelles sont les limites de cette representation de l’attitude ?
— Au moyen d’un bloc C function call implementez ces equations.
— Ajouter a ce schema les fonctions necessaires a l’obtention des angles de gıte ϕ, d’assiette
θ et le cap ψ.
— Inserer des blocs Tx Labview Matlab afin de relever les angles d’attitude.
— Pour tester cette fonction, appliquer successivement aux entrees des signaux emulant des
vitesses angulaires constantes, par exemple du roulis seul puis du tangage seul enfin du
lacet seul. Pour information le taux de roulis maximal d’un Mirage 2000 est de l’ordre de
300/s .
— En option, test de l’algorithme avec la MTI ou la Sparkfun.
Troisieme exemple : gestion des peripheriques du DsPic
Il est possible de reprogrammer ou d’ameliorer les fonctionnalites proposees par le blockset.
Ainsi, le fichier Programme en C2.mdl associe au fichier essai .c et a la fonction cna ecrit un mot
F.BATEMAN 41
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
de 8 bits sur le port D. La fonction TRISD, propre au C des microcontroleurs de cher Microchip
declare le port D en sortie tandis que la fonction LATD recopie sur ce meme port le mot de 8
bits contenu dans la variable qui lui est affectee.
3.7.2 Insertion de code MATLAB
Le bloc Embedded Matlab Function que l’on trouve dans la bibliotheque User defined func-
tions appelle une fonction ecrite sous MATLAB pour laquelle le code C correspondant est genere
en vue de pouvoir etre utilise dans des applications temps reels. Ces blocs sont particulierement
interessants car ils permettent de disposer de la diversite des fonctions proposees par MATLAB.
L’exemple qui suit vous montre sur un exemple simple comment utiliser un tel bloc.
Soit a realiser la fonction suivante :
xk+1 = xk +
(
3
1
)
εk
yk+1 = xk+1 (3.5)
Pour faire simple, εk est un signal sinusoıdal d’amplitude unitaire et de frequence egale a
1rad/s. Sous SIMULINK, on realise le schema suivant (3.13) :
Figure 3.13 – Embedded MATLAB Function
Le code programme dans l’Embedded Matlab function :
f unc t i on y = observateur ( e r r eu r )
%UNTITLED Summary o f t h i s f unc t i on goes here
% Deta i l ed exp lanat ion goes here
k= [3 ; ˜1 ]
p e r s i s t e n t x ; % l e type p e r s i s t e n t e s t memorise e t a c t u a l i s e a
% chaque Sample Time
i f isempty (x ) ; % Ce t e s t permet d ’ en t r e r dans l a bouc le i f une f o i s
% l o r s de l ’ i n i t i a l i s a t i o n
42 F.BATEMAN
3.8. Machine a etats
x = [ 0 ; 0 ] ; % et d ’ a l l o u e r des va l eu r s a x
end ;
x=x+k∗ e r r eu r % L ’ e t a t pr e s ent e s t c o r r i g e par l ’ e r r eu r au t r av e r s
% des ga ins
y = x ; % L ’ equat ion de s o r t i e
end
Toutes les lignes du code sont executees a chaque Sample Time (utiliser un bloc Rate Tran-
sition, sinon la fonction est appelee au rythme du Fixed Step Time ).
Substituer au scope un demultiplexeur et deux blocs Tx Labviex Matlab pour observer cha-
cune des variables du vecteur x.
3.8 Machine a etats
Stateflow est un blockset qui permet de sequencer des taches au sein d’un systeme decrit
sous SIMULINK. Ceci est illustre sur la figure 3.14 qui montre un tel systeme construit autour
d’un bloc Stateflowchart. Ce systeme accessible depuis le fichier automate.mdl.
Figure 3.14 – Exemple de systeme sous Stateflow
Dans cet exemple, ce systeme comporte :
— deux entrees logiques a et b,
— une entree d’horloge.
— une sortie numerique sortie
— une sortie binaire out0
— une sortie analogique out1
Un double-clic sur le bloc chart montre la structure de la machine a etats, figure 3.15. Celle-
ci a ete realisee au moyen de fonctions accessibles depuis les icones figurant dans la colonne de
gauche.
Cette machine comporte deux etats respectivement appeles Etat1 et Etat2.
F.BATEMAN 43
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
Au demarrage, la transition par defaut pointe sur Etat1 et la donnee raz de type booleen
est forcee a 0.
Une fois entre dans l’Etat1, et pendant toute la duree de cet etat (During),
— la variable raz est maintenue a 1,
— la fonction model0 qui n’admet aucun argument est active.
Lorsque les conditions sur a et b sont satisfaites, le systeme passe dans Etat2 en passant la
variable raz a 0. Une fois entre dans l’Etat2, et pendant toute la duree de cet etat (During),
— la variable raz est maintenue a 0,
— la fonction SIMULINK model1 qui admet comme argument in1 renvoie out1. Cette fonc-
tion est definie et accessible sous le bloc Simulink Fcn. Il s’agit ici d’un simple integrateur.
Lorsque le systeme sort de l’Etat2 (Exit), la variable sortie est forcee a 2. Le systeme ne
revient dans Etat1 que lorsque les signaux a et b valent tous deux zero, la variable raz est quant
a elle forcee a un.
Le menu Tools Explore permet d’acceder au type des differentes variables, il suffit de cliquer
sur l’une d’elle pour prendre connaissance de sa declaration. Sur la figure 3.16 la variable a
est declaree comme une variable d’entree (sous-entendu comme une entree de SIMULINK) de
type booleen. Pour ajouter des signaux, il faut cliquer sur le menu adddata. Un cas particulier
concerne ici la variable raz qui a ete declaree avec le type Data Store Memory puisqu’elle change
d’etat lors des transitions, elle ne correspond pas a une entree physique. Elle requiert toutefois
d’utiliser au niveau du schema de la figure 3.15 un bloc de type Signal RoutingData Store
Memory.
Modifier le systeme decrit sur les figures 3.14 et 3.15 de sorte que la machine comporte
quatre etats accessibles a partir des entrees logiques a etb. Une entree c et une sortie out de
type booleen doit egalement etre declaree.
Les signaux logiques de transition pour entrer dans les differents etats et les fonctions realisees
dans chacun de ces etats sont decrites dans le tableau 3.1.
Figure 3.15 – Exemple de systeme sous Stateflow
44 F.BATEMAN
3.8. Machine a etats
Figure 3.16 – Le menu Explore
a b Etat fonction
0 0 1 signal carre periode 1Hz
0 1 2 signal carre periode 2Hz
1 1 3 sortie recopie entree
1 0 4 sortie a 1
Tableau 3.1 – Tableau des etats
F.BATEMAN 45
Sequences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
De plus,
— au demarrage, on entre dans l’etat 3,
— On peut entrer dans l’etats 1 a partir des etats 2, 3, 4,— on peut entrer dans les etats 2 a partir des etats 1, 3, 4,— on peut entrer dans les etats 3 a partir des etats 1, 2, 4,— on ne peut entrer dans l’etat 4 qu’a partir de l’etat 3, en revanche depuis l’etat 4 on peut
entrer dans n’importe quel etat 1, 2, 3.
46 F.BATEMAN
Deuxieme partie
TRAVAUX PRATIQUES
D’AUTOMATIQUE
47
TP 1
CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
1.1 Objectif
Faire l’acquisition, le traitement et la restitution d’un signal analogique. Cette chaıne d’ac-
quisition et de traitement sera utilisee lors des prochaines seances de travaux pratiques afin
d’etudier un procede de camouflage d’un mesage dans un signal audio (steganographie) et un
filtre adaptatif utilise pour supprimer le bruit ambiant.
1.1.1 Liste du materiel
— Carte de developpement BigDsPic6 + 2 cables USB + Boitier d’alimentation
— Bred board
— Carte a amplificateurs operationnels Sparkfun
— Filtre a capacite commutee, condensateurs 100nF, petits fils
— Carte DAC 12 bits Mikroelektronika ou Carte DAC 8 bits Mikroelektronika R2R
— Cable + prise jack, casque audio, haut-parleur
— PC + MATLAB-SIMULINK, MPLAB
— GBF, oscilloscope, prises BNC, sonde d’oscilloscope, cable BNC.
1.2 Le filtrage anti-repliement
Le signal a traiter est un signal audio qui sera echantillonne a 8000 Hz.
1.2.1 Les caracteristiques du filtre a capacite commutee
— Quelle doit-etre la frequence de coupure fcut du filtre d’anti-aliasing ?
— En utilisant la notice du filtre a capacite commutee LCT16091 accessible depuis le bureau
sous le dossier datasheet :
— choisissez la frequence d’horloge du LCT16091,
49
TP 1. CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
— representez le gabarit de ce filtre.
1.2.2 Mise en œuvre du filtre
— Cablez ce circuit sur la bredboard. Vous l’alimenterez a partir des tensions 0-5V delivrees
par la carte BigDsPic6.
— Pour realiser l’horloge du filtre a capacite commutee 100fcut , on genere un signal haute
frequence en utilisant les blocs Peripheral I/OOutput Compare (HW) du microcon-
troleur. Le fonctionnement de ces blocs est detaille au §3.4 et dans l’aide en ligne du
blockset.
— Ouvrez le fichier template.mdl puis renommez-le. C’est sur ce fichier que vous allez
realiser le programme qui delivre le signal d’horloge. Reglez le Fixed Step Time a
1.25e−4 soit 8kHz.
— On utilise le canal de sortie OC1, voir sur la datasheet du DsPic le port correspondant.
— Reglez la periode max du bloc egale a la periode du signal d’horloge du filtre.
— Le parametre du signal genere qu’on regle est l’etat haut du rapport cyclique (duty
cycle), ce dernier est defini par la variable OCmax,
— Reglez la valeur du signal d’entree du blockset pour obtenir un signal OC1 de rapport
cyclique egal a 50%.
— Compilez le modele et implementez le programme.
— Avec l’oscilloscope, mesurez la periode du signal OC1.
— Appliquez a l’entree du filtre un signal sinusoıdal ∈ [1V, 3V ] dont vous ferez varier la
frequence. Vous verifierez que le signal de sortie du filtre presente, en terme d’attenuation,
les caracteristiques annoncees par le constructeur.
1.3 La conversion numerique-analogique
Vous allez realiser l’acquisition du signal prealablement filtre au moyen d’un convertisseur
analogique-numerique du DsPic.
Au moyen du generateur basses-frequences (GBF), generez un signal sinusoıdal de frequence
440 Hz dont l’amplitude crete a crete varie entre 0 et 4 Volts et visualisez-le sur l’oscilloscope.
Sur la datasheet du DsPic30F6014A, reperez les ports associes au convertisseur analogique-
numerique AN0 et l’entree de controle INT0.
Au moyen d’un bloc ADC Analog to Digital Converter, realisez la conversion analogique-
numerique (CAN) du signal sinusoıdal delivre par le GBF. En exploitant la documentation
HTML de ce bloc, parametrez-le de sorte que le signal sinusoıdal soit echantillonne a 8000 Hz.
Pour ce faire, cette conversion sera declenchee par une source exterieure mode trigger Low
to High transition on INT0 pin. Vous pourrez realiser facilement la source qui declenche les
conversions en utilisant un bloc Peripheral I/O Output Compare. Le signal de sortie doit
presenter un rapport cyclique de 50% et une frequence egale a 8000Hz.
Comme l’ADC code le signal sur 12 bits, l’information en sortie de ce dernier peut prendre
4096 valeurs. A cet effet, une reference de tension de 4.096V peut etre appliquee au DsPic de
sorte que le quantum soit egal a 1mV. Pour ce faire, vous devez commuter le switch RA10 de
SW13 → 4.096V.
50 F.BATEMAN
1.4. Analyse spectrale du signal echantillonne-bloque
Pour l’observation des signaux, vous mettrez en œuvre un bloc TX Labview Matlab, la
transmission des donnees sera cadencee a 230400 bauds . Pour une telle vitesse de transmission,
le dsPIC Master est cadence a 40 MIPS.
— Dans la fenetre rs232gui, affecter la valeur 128 au champ Rn, cela limitera l’observation
des signaux a un maximum de 128 points, ce qui ne represente que quelques periodes du
signal.
— Observez sous rs232gui le signal echantillonne,
1.4 Analyse spectrale du signal echantillonne-bloque
On souhaite, en temps quasi-reel affichez la transformee de Fourier du signal echantillonne
bloque avec une precision en frequence N egale a 512. Dans le Command Window, on commence
par generer le vecteur des frequences auxquelles on va tracer le spectre du signal :
f=0 :8000/512 :8000(1-1/512) ;
Vous verifierez qu’il s’agit bien d’un vecteur de 512 lignes par 1 colonne avec la fonction size.
Dans la fenetre d’edition de rs232gui, ecrivez au moyen de la fonction fft le script qui utilise
les P=128 echantillons du signal issus de l’ADC contenus dans la variable Rn en vue de calculer
et d’afficher le module du spectre du signal pour un nombre discret de frequences 1 N=512.
Vous pouvez connecter un casque sur la face arriere du PC et ecouter les sequences sonores
correspondant au contenu de la variable Rn au moyen de la fonction sound que vous ajouterez
a la suite du calcul et de l’affichage de la FFT.
Testez ce programme pour le signal sinusoıdal de frequence 440 Hz et d’amplitude ∈ [1, 4]
Volts.
En utilisant le mode sweep du GBF, generez un chirp compris dans la bande de frequence
∈ [440, 1000] Hz.
Memes questions pour un signal carre de meme frequence et de meme amplitude. Mettez en
evidence les harmoniques et le repliement du spectre.
On etudie l’effet du nombre de points de calcul de la FFT : si N designe le nombre de points
de calcul de la TFD, la precision en frequence est egale a1
N. Pour des signaux echantillonnes a
la frequence Fe, cela onneFe
N.
Toujours pour Rn=128, testez N=16 pour un signal carre, comparez a ce que vous observiez
pour N=512
La resolution frequentielle est la capacite de discerner des frequences distinctes. Elle est
de l’ordre de grandeur deFe
Psoit l’inverse de la largeur de la fenetre temporelle utilisee pour
prelever le signal a analyser dans le domaine temporel.
Testez pour P=32 N=512 et comparez le spectre a celui obtenu pour P=128 et N=512
1. N definit les frequences k∆F auquel sont conduites les calculs k∆F = kFe
Net k ∈ [0, N − 1]. On a par
ailleurs (cf. Cours de traitement du signal) N ≥ P .
F.BATEMAN 51
TP 1. CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
Rappelez l’interet de multiplier la sequence temporelle de longueur P par une fenetre de
ponderation. Vous visualiserez sur MATLAB une fenetre temporelle de Hamming de longueur P.
Ponderez Rn en le multipliant par une fenetre temporelle de votre choix : hamming, hanning,
bartlett, blakman, etc. Ces fonctions ont le meme nom sous MATLAB. On rappelle que le produit
terme a terme des coefficients de deux tableaux ∈ Rn×m s’ecrit A. ∗B
1.5 La conversion numerique-analogique
Elle peut etre realisee au moyen d’un convertisseur numerique analogique (CNA)DAC pour
Digital to Analog Converter 12 bits ou 8 bits. En fonction du convertisseur disponible, procedez
comme suit :
— Convertisseur 12 bits : vous reprendrez pour cela la procedure decrite au §3.3.1. Vousconnecterez directement la sortie de l’ADC 12 bits a celle du DA C12 bits (eventuellement
inserez un bloc Rate Transition cadence a 8000Hz entre les deux fonctions).
— Convertisseur 8 bits : La gestion du DAC 8 bits est realisee par un bloc Others C function
Call. La procedure d’utilisation de ce bloc, rappelee ci-dessous, est decrite au §3.7.1.— Ouvrez le fichier cna.mdl et copier-coller le schema qu’il contient.
— Copier-coller le fichier essai.c dans le repertoire sous lequel vous travaillez.
— Specifiez le nom du fichier essai.c depuis le menu Simulation Real-TimeWorkshop Custom
Code Source files de MATLAB.
— Vous connecterez entre la sortie de l’ADC 12 bits et celle du DAC 8 bits un gain
(a determiner), la sortie s’operant en UINT8 puisque ce convertisseur admet a son
entree des nombres codes dans l’intervalle [0, 255].
— Inserez la Carte DAC 8 bits Mikroelektronika R2R sur le slot RB0-RB7.
— Sauvegarder le schema de la chaıne d’acquisition et de restitution du signal sous le nom
DigitalProcessing.mdl, il sera utilise lors des prochaines seances.
Visualisez sur l’oscilloscope le signal analogique a l’entree et le signal analogique restitue par
le DAC.
1.6 Traitement du signal par filtre numerique
http://www.esiee.fr/~courivad/Files/ST4-RF1/st4rf1_filtreshyper.pdf pages 3-5.
Dans cette partie, vous synthetiserez et implementerez un filtre numerique RII visant a
extraire l’harmonique de rang 3 d’un signal carre x(t) de frequence fondamentale egale a 50Hz
de valeur moyenne egale a 2 V et d’amplitude crete a crete egale a 2V. On rappelle qu’un tel
signal admet la decomposition en serie de Fourier suivante :
x(t) = x++∞∑
k=0
4
(2k + 1)πsin((2k + 1)πft) (1.1)
— Quel type de filtre choisir pour extraire l’harmonique 3 ?
Avec l’outil fdatool, synthetisez un filtre de Butterworth RII tel que :
52 F.BATEMAN
1.6. Traitement du signal par filtre numerique
— le signal est echantillonne a 1000Hz
— le fondamental soit attenue d’un facteur 100,
— l’harmonique de rang 5 et les harmoniques de rang superieur soient attenues d’au moins
d’un facteur 100,
— l’amplitude de l’harmonique 3 conserve la meme amplitude.
Depuis le menu FileExport to Simulinl model puis cliquez sur le bouton Realize. Le bloc
correspondant au filtre figure desormais dans le schema developpe sous SIMULINK.
— Inserez le filtre ainsi synthetise entre les convertisseurs analogique-numerique et numerique-
analogique.
— Appliquez a l’entree du filtre a capacites commutes le signal carre defini precedemment
que vous aurez prealablement visualise sur l’oscilloscope.
— Visualisez le signal en sortie du filtre a capacites commutees . Commentez.
— Visualisez le signal numerique-analogique et verifiez que le filtre synthetise realise la
fonction souhaitee.
F.BATEMAN 53
TP 1. CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
54 F.BATEMAN
TP 2
IDENTIFICATION PARAMETRIQUE
2.1 Objectifs
Dans cette seance vous decouvrirez et implementerez des algorithmes d’identification para-
metrique dont la fonction est d’estimer, au sens d’un critere, les parametres du modele d’un
systeme ou d’un signal. Differentes methodes existent, leur mise en œuvre depend entre autres,
de la nature du modele e.g lineaire Vs. non lineaire, de la presence ou non de bruit, etc.
D’une maniere general, un systeme ou un signal peuvent etre decrits par une equation de la
forme :
y = f(η,x) (2.1)
ou y contient les sorties mesurees, η contient les parametres et x contient des variables,
supposees connues et appelees variables explicatives.
2.1.1 Exemple de modeles
Modele de la force de portance ℓ d’un avion :
ℓ =1
2ρSV 2 (cz0 + czαα+ czqq) (2.2)
y =1
2ρSV 2xη (2.3)
avec y = ℓ, la force de portance qui peut etre mesuree au moyen d’ un accelerometre,
ηT =
(
cz0 czα czq
)
, x =(
1 α q)
.
55
TP 2. IDENTIFICATION PARAMETRIQUE
Modele d’un filtre a reponse impulsionnelle infinie : La fonction de transfert d’un tel
filtre s’ecrit :
Y (z)
U(z)=
b0 + · · ·+ bmz−m
1 + a1z−1 + · · ·+ apz−p(2.4)
L’equation de recurrence associee :
y(k) = −a1y(k − 1)− · · · − apy(k − p) + b0u(k) + . . . bmu(k −m) (2.5)
soit :
y(k) = xη (2.6)
avec y = y(k), ηT =(
a1 . . . bm
)
, x =(
−y(k − 1) . . . u(k −m))
Le modele de la force de portance et celui du filtre du premier ordre sont des modeles lineaires
en les parametres.
Estimation d’attitude : Les coordonnees d’un vecteur, par exemple l’acceleration de pe-
santeur ou le champ magnetique terrestre, peuvent etre mesures dans un repere local dont on
cherche a estimer l’orientation par rapport a un repere de reference dans lequel les coordonnees
dudit vecteur sont connues. En utilisant par exemple les angles d’euler :
−→VRlocal
mes = M(φ, θ, ψ)−→VRref (2.7)
M(φ, θ, ψ) est la matrice de passage de Rref → Rlocal, sa structure est connue a priori mais
pas les angles φ, θ, ψ qui sont les parametres a estimer de ce modele. Ici y =−→VRlocal
mes , x =−→VRref
(e.g.(
0 0 9.81)T
) et ηT =(
φ θ ψ)
.
L’estimation d’attitude procede de l’exploitation d’un modele nonlineaire en les parametres.
2.1.2 Liste du materiel
— Carte BigDsPic6
— PC + MATLAB-SIMULINK, MT Manager
— Boitier d’alimentation
— Cable USB
2.2 Algorithme des moindres carres
2.2.1 Les moindres carres simples
Soit le systeme lineaire decrit par le modele (4.5) :
56 F.BATEMAN
2.2. Algorithme des moindres carres
yn = Xnη + ε (2.8)
et n le nombre de mesures est superieur a m le nombre de parametres a identifier. Le systeme
est dit surdetermine.
⋆ les n mesures yn =
y(1)
. . .
y(n)
⋆ le jeu de n variables explicatives Xn =
x1(1) . . . xm(1)
. . .
x1(n) . . . xm(n)
⋆ les m parametres a estimer η =
η1. . .
ηm
ou εn ∈ Rn represente les erreurs de modelisation
On cherche une estimation ˆgamma des parametres γ qui minimise la somme des erreurs
elevees au carre :
J = minη
1
2
(ε(1)2 + . . . ε(n)2
)= min
η
1
2εTnεn = min
η
1
2(yn −Xnη)
T (yn −Xnη) (2.9)
On demontre que la solution a ce probleme a pour expression :
η = (XTnXn)
−1XTnyn (2.10)
ou η est le vecteur qui contient les estimations des parametres η du modele.
Premier exemple : modele du coefficient de portance d’une aile : On a releve a partir
d’essais en soufflerie le coefficent de portance d’une aile cℓ en fonction de l’incidence α.
α() -2 0 2 4 8
cℓ 0.114 0.298 0.491 0.69 1.105
Figure 2.1 – Coefficient de portance d’un profil NACA-W-6-64A412
On cherche a donner de ce profil une approximation polynomiale de la forme :
cℓ =
p∑
i=0
cℓiαi (2.11)
— Au moyen des moindres carres simples, proposer un modele de ce profil sous la forme
d’un polynome d’ordre 1, d’ordre 2, d’ordre 3.
— Calculer pour chacune de ces approximations la norme de l’erreur au carre.
— Retrouver ces modeles en utilisant la fonction polyfit de MATLAB.
F.BATEMAN 57
TP 2. IDENTIFICATION PARAMETRIQUE
Second exemple : identification des parametres d’un systeme du premier ordre
On considere cette fois le systeme d’ordre un (en fait un filtre RII) decrit par l’equation de
recurrence :
y(k) = −ay(k − 1) + bu(k) (2.12)
ou y(−1) = 0 et dont la fonction de transfert est :
Y (z)
U(z)=
b
1 + az−1(2.13)
Il s’agit ici d’identifier les parametres a et b d’un systeme dont la structure est connue a
priori (on suppose su le fait que le modele recherche est celui d’un systeme du premier ordre a
temps discret). L’equation de recurrence est lineaire en les parametres et l’on peut appliquer les
moindres carres simples. On notera ηT =
(
a b)
, yTn =
(
y(0), . . . , y(n))
avec n > 2 l’horizon
des mesures et Xn la matrice contenant les variables explicatives collectees sur l’horizon des
mesures.
— Donner la structure de la matrice Xn.
— Realiser le modele de ce systeme sous SIMULINK, vous adopterez une valeur de 10ms
pour le Fixed step time et le Sample time, a = 0.7 et b = 1. Le signal de commande u(n)
est un signal carre issu d’un SourcesSignal generator de frequence 1Hz et d’amplitude
egale a 1.
— En plus des oscilloscopes, il faut utiliser des blocs SinksTo workspace pour pouvoir
operer a un post-traitement des donnees obtenues par simulation sous MATLAB. Pour
pouvoir disposer des mesures et des variables explicatives sous forme de tableaux dans
MATLAB, les blocs To workspace doivent etre parametres comme Array.
— Appliquer la methode des moindres carres et verifier que les parametres estimes sont
egaux a ceux recherches.
Dans ce qui precede, les mesures etaient supposees parfaites, or en realite, celles-ci sont
entachees de bruit. De ce fait, chaque nouvelle campagne de mesure fournit une estimation des
parametres differente des precedentes. Les parametres estimes sont des variables aleatoires que
l’on caracterise par leur moyenne et leur variance 1. Sous SIMULINK, ce bruit est modelise par
un bloc SourcesBand limited white noise. Pour ce bloc :
— noise power est la variance du bruit.
— Seed definit la sequence des variables aleatoires en sortie du bloc. Pour generer des bruits
non correles, il faut modifier la valeur du seed.
— Operer a plusieurs simulations (au moins 5) avec un bruit de mesure de variance constante
et egale a 1.10−4 dont vous ferez varier le seed. Donner dans chacun des cas une estimation
des parametres.
— Dans le plan a, b porter les differentes estimations des parametres obtenues.
— Calculer la moyenne des parametres (fonction mean) et faire le constat que les para-
metres moyens estimes different des parametres vrais. L’estimation est dite biaisee.
— Calculer la variance des erreurs d’estimation (fonction var)
1. Hypothese est faite que ces parametres sont decrits par une loi normale
58 F.BATEMAN
2.2. Algorithme des moindres carres
— Operer a plusieurs simulations (au moins 3) avec un bruit de mesure de variance crois-
sante, le seed restant constant. Evaluer les consequences de l’augmentation de la variance
du bruit de mesure sur le credit a apporter aux parametres estimes.
2.2.2 Algorithmes des moindres carres recursifs
L’expression de η nous oblige a tout recalculer lors de l’acquisition d’une nouvelle mesure.
D’ou l’interet d’une formulation recursive. Il est possible de donner une telle formulation de
l’algorithme MCS pour l’implementer en temps reel sur un calculateur. On note ηn l’estimation
des parametres obtenue apres n mesures. En posant yn la nieme mesure :
Pn = (XTnXn)
−1
Qn = XTnyn
En posant xn le nieme vecteur ligne des variables explicatives, On demontre que :
ηn = ηn−1 +Pn−1xn
1 + xTnPn−1xn
(y(n)− xT
nηn−1
)(2.14)
Algorithme mcr
— η0 = 0
— Pn = Idm
Pour n = 1, 2, . . .
— k(n) =Pn−1xn
1 + xTnPn−1xn
gain visant a prendre en compte l’erreur d’estimation
— e(n) = y(n)− xTnηn−1 l’erreur d’estimation pour la nieme mesure
— ηn = ηn−1 + k(n)e(n) actualisation des parametres
— Pn = Pn−1 − k(n)xTnPn−1 actualisation de la matrice Pn (a completer)
— Reprendre le schema realise sous SIMULINK utilise dans le second exemple. Il n’y a pas
de bruits de mesure.
— Copier-coller dans ce schema un bloc User defined functionsEmbedded Matlab function,
double-cliquer sur ce bloc et dans la feuille de l’editeur, implementer l’algorithme des
moindres carres recursifs et visualiser les parametres estimes sur un bloc SinksDisplay.
— Vous adopterez une valeur de 10ms pour le Fixed step time et le Sample time.
— Une fois ce modele de simulation valide, vous l’insererez dans un template en vue d’im-
plementer cet algorithme sur le DsPic 30F6014A.
— Visualiser les parametres estimes au moyen d’un bloc Tx Labview Matlab et de l’interface
rs232gui.
F.BATEMAN 59
TP 2. IDENTIFICATION PARAMETRIQUE
2.3 Algorithme de descente
Ces methodes de systemes sont utilisees pour l’identification de systemes non lineaires.
2.3.1 L’algorithme du gradient
Estimer les parametres η du modele revient a chercher un minimum a la fonction de cout
(4.6). La figure 2.2 illustre cette notion dans le cas d’un modele a deux parametres.
Figure 2.2 – La fonction de cout
La fonction a minimiser est convexe, l’algorithmes du gradient est un algorithme de descente
qui permet, a partir d’un jeu de parametres initiaux quelconques, en suivant la direction opposee
a la plus forte pente d’atteindre un voisinage du minimum.
ηk = η
k−1 − α−→∇J α ∈ R
+ (2.15)
k est le nombre d’iterations,
La figure 2.3 illustre le principe de cet algorithme.
60 F.BATEMAN
2.3. Algorithme de descente
Figure 2.3 – Le principe de l’algorithme du gradient
Deux ecueils peuvent apparaıtre dans la recherche d’un minimum :
— La presence de minima locaux.
— Un mauvais choix du parametre α qui permet de regler la vitesse de convergence et qui
Application de la methode gradient a l’identification des prametres d’un filtre RII :
Pratiquement, la methode du gradient est operante sur des modeles de systemes non lineaires
en les parametres. Toutefois, et pour faire simple, cet algorithme est applique a la recherche de
parametre du systeme decrit par l’equation de recurrence :
y(k) = −ay(k − 1) + bu(k) (2.16)
et dont on cherche a estimer les parametres, soit a et b les parametres estimes. Pour cela, on
cherche η qui minimise la fonction de cout :
J =1
2
n∑
i=1
(
y(i) + ay(i− 1)− bu(i))2
(2.17)
— Calculer le gradient de la fonction de cout (2.17) relativement aux parametres estimes a
et b.
— Exprimer le gradient sous forme recursive, i.e.−→∇J pour la nieme mesure en fonction du
gradient du gradient calcule a la n-1ieme
— Reprendre le modele realise sous SIMULINK au §2.2.1 du filtre RII et generer dans
le Workspace de MATLAB le vecteur des mesures yn et la matrice Xn constituee des
vecteurs de variables explicatives xi avec i = 1 . . . n. Adopter une duree de simulation
de 10 s.
— Sous MATLAB, implementer l’algorithme du gradient :
Les performances de l’algorithme dependent du nombre de mesures collectees n, du nombre
d’iterations Kmax et du pas α. Ce dernier peut etre modifie au fil de la descente vers le minimum
F.BATEMAN 61
TP 2. IDENTIFICATION PARAMETRIQUE
Algorithm 1 Algorithme du gradient
Initialisation du vecteur des parametres a identifier η0 = 0
Initialisation du gradient−→∇J0
0 =−→0
for k=1 :K do
for i=1 :n do
Calcul du gradient−→∇Jk
i = f(−→∇Jk
i−1, y(i),xi) (formulation recursive)
end for
Calculer les parametres estimes : ηk = ηk−1 − α
−→∇Jkn ou α = 1e−3
Reinitialiser−→∇Jk
0 =−→0
end for
mais son choix reste delicat.
La methode de Gauss-Newton adapte la valeur du pas en fonction de la convexite de la fonction
de cout.
2.3.2 Methode de Gauss-Newton
La fonction a minimiser (2.17) est convexe , l’algorithmes de Gauss-Newton est un algorithme
de descente qui permet, a partir d’un jeu de parametres initiaux quelconques (pratiquement
choisis proches du minimum), en suivant la direction opposee a la plus forte pente d’atteindre
un voisinage du minimum. Le pas de descente est fonction de la convexite de la fonction de cout.
Cette convexite est mesuree par la matrice des derivees partielles secondes de J appelee hessien
et notee H.
ηk = η
k−1 −H−1−→∇J (2.18)
Pratiquement, cet algorithme est adapte a l’identification de parametres de modeles de sys-
temes nonlineaires. Toutefois, on continue, pour des raisons de simplicite, a l’appliquer au filtre
RII (2.16). Pour ce systeme :
— Reprendre l’expression du gradient de la fonction de cout (2.17) relativement aux para-
metres estimes a et b.
— Reprendre l’expression du gradient sous forme recursive, i.e.−→∇Ji pour la iieme mesure en
fonction du gradient du gradient calcule a la i-1ieme
— Calculer le hessien de la fonction de cout (2.17) relativement aux parametres estimes a
et b.
— Exprimer le hessien sous forme recursive, i.e. Hi pour la iieme mesure en fonction du
hessien calcule a la i-1ieme.
— Reprendre le modele realise sous SIMULINK au §2.2.1 du filtre RII et generer dans
le Workspace de MATLAB le vecteur des mesures yn et la matrice Xn constituee des
vecteurs de variables explicatives xi avec i = 1 . . . n. Adopter une duree de simulation
de 10 s.
— Modifier l’algorithme du gradient ecrit precedemment pour en faire un algorithme de
Gauss-Newton.
62 F.BATEMAN
2.3. Algorithme de descente
— Comparer les vitesses de convergence des deux algorithmes 2
2. Pratiquement, le calcul du hessien et son inversion sont ”gourmandes” en ressources de calcul et on prefere
utiliser une approximation du hessien. C’est la methode de Newton-Raphson.
F.BATEMAN 63
TP 2. IDENTIFICATION PARAMETRIQUE
64 F.BATEMAN
TP 3
COMMANDE D’UN MOTEUR BRUSHLESS
3.1 Objectifs
Ce TP est fortement inspire du TDAO 2 traite en premiere annee et consultable sur le site
http://francois-bateman.e-monsite.com/pages/ressources.html dans lequel vous aviez a
synthetiser un correcteur en vue d’asservir la vitesse d’un moteur a une consigne. Dans cet
seance, vous aurez a realiser cet asservissement.
Le moteur brushless etudie equipe les drones a voilure tournante de la marque Mikrokopter.
Il a fait l’objet d’une premiere etude a la section 3.6. En particulier, vous avez interface ce moteur
avec le microcontroleur et releve sa caracteristique statique f(N) ou f designe la frequence de
rotation du moteur et N la commande codee sur 8 bits appliquee a la carte de controle BCTRL
via le bus I2C.
3.1.1 Liste du materiel
— Banc moteur + moteur brushless Roxxy BL 2827+ carte de controle moteur BCTRL
— Alimentation stabilisee 30V-2A
— Balance electronique ou dynamometre
— Carte BigDsPic6
— PC + MATLAB-SIMULINK, MT Manager
— Boitier d’alimentation
— Cable USB
3.2 Modelisation du moteur
3.2.1 Exploitation de la caracteristique statique
La masse d’un hexacoptere est de 1, 5kg et l’equilibre correspond a un vol stationnaire.
65
TP 3. COMMANDE D’UN MOTEUR BRUSHLESS
— En utilisant la caracteristique P (f2) tracee lors d’une seance precedente et ou P designe
la poussee, porter le point d’equilibre sur la caracteristique statique du moteur f(N)
relevee a la section 3.6.
— Pour ce point d’equilibre Ne, fe, donner une valeur approchee du gain statique.
3.2.2 Caracteristique dynamique
Dans cette partie, vous etablirez, a partir d’essais en regime dynamique, un modele sous
forme de fonction de transfert du moteur. Pour cela,
Releve experimental de la reponse indicielle
— Ouvrez le fichier I2C3.mdl. Realisez l’interfacage via le bus I2C de la carte de develop-
pement BigDsPic6 et du microcontroleur 30F6014 avec la carte de controle Bl-Ctrl et
le moteur brushless comme cela a deje ete realise sur la figure 3.12. Vous penserez a
visualiser au moyen d’un bloc UART associe a un bloc Tx Labview Matlab et grace a
l’interface rs232gui la commande N et la vitesse de rotation f du moteur.
— Appliquez a la Bl-Ctrl une commande N(t) = Ne + n ou n est un signal carre d’am-
plitude << Ne et de frequence judicieusement choisie pour pouvoir observer les regimes
transitoires. Vous procederez par iteration pour le choix de cette frequence.
— Relevez les chronogrammes de N(t) et de f(t) sur une meme figure. Lors du post-
traitement, il ne faut pas hesiter a afficher au moyen de la fonction plot les variables
t R et R ou t Rn et Rn accessibles depuis le Workspace.
Identification du systeme
— Par la methode de Broıda, proposez un modele du systeme Bl-Ctrl, moteur brushless,
helice.— Au moyen de l’approximation de Pade, proposez une fonction de transfert du systeme
Bl-Ctrl, moteur brushless, helice.— Sous SIMULINK, representez le schema fonctionnel de simulation de la boucle d’as-
servissement visant a controler ce moteur. Vous insererez dans un premier temps pour
le correcteur un gain. Attention, comme le modele du systeme Bl-Ctrl, moteur est
continu, il faut utiliser un solver a pas variable. De plus, comme on souhaite qu’a t = 0
le moteur tourne a sa vitesse d’equilibre, le Start time de la simulation pourra etre choisi
a -1.
3.3 Synthese d’une loi de commande
Synthese du correcteur proportionnel
Le correcteur est un gain pur k = 3. Representer sur une feuille le schema fonctionnel de la
boucle d’asservissement en regime permanent (s→ 0) et en utilisant la caracteristique statique
etablir :
66 F.BATEMAN
3.3. Synthese d’une loi de commande
— la valeur de la commande Ne pour laquelle le moteur tourne a sa vitesse d’equilibre fe.
— la valeur du signal d’erreur.
— en deduire la valeur de la consigne.
Test du correcteur proportionnel
— Concernant l’implementation de cette loi sur le microcontroleur, sachant que la vitesse
mesuree sur la carte Bl-Ctrl via le bus I2C est un nombre au format UINT8 et que la
Bl-Ctrl admet une commande numerique N ∈ [0−255], dites pourquoi le montage risque
de ne pas fonctionner.
— Realiser la loi de commande pour k = 3 puis k = 5, dans chacun des cas relever, le temps
de reponse a 5%, le signal de commande N et le signal d’erreur.
— Conclure.
Synthese d’un correcteur proportionnel-integral
Pour cette partie, il ne faut pas hesiter a reprendre les sujets et les corriges des TDAO1 et
TDAO2 vus en premiere annee.
— Saisir la fonction de transfert du moteur brushless sous MATLAB, au moyen de sisotool
synthetisez un correcteur qui confere a ce moteur les performances suivantes :
• pas d’erreur de position,
• depassement ≤ 5%,
• on ne cherche pas necessairement a ameliorer la rapidite, en effet, le controleur qui
pilote le moteur n’est pas reversible en courant et il n’est pas possible d’accroıtre la
rapidite lors des phases de decceleration
— Tester ce correcteur sur le modele de simulation.
Simulation du correcteur proportionnel-integral
Pratiquement, le DsPic ne peut traiter que des signaux echantillonnes, pour cette raison, il
faut disposer d’un modele du correcteur decrit par une fonction de transfert en z. La fonction
c2d realise, pour un systeme muni d’un bloqueur d’ordre zero, la transformation d’une fonction
de transfert laplacienne (s) en une fonction de transfert en z.
— Etablir l’expression de la fonction de transfert en z du correcteur trouve dans la partie
3.3.
— Tester ce correcteur sur le schema de simulation, attention a l’interfacage des blocs a
temps continu et a temps discret, penser a utiliser des blocs Rate transition.
3.3.1 Implementation sur le DsPic d’une loi de commande
Implementation du correcteur proportionnel-integral
— Completer le modele ayant permis le releve des caracteristiques statiques pour realiser le
schema de l’asservissement de vitesse qui sera implemente sur le DsPic.
— Compiler ce schema et implementer-le sur le microcontroleur.
F.BATEMAN 67
TP 3. COMMANDE D’UN MOTEUR BRUSHLESS
— Appliquer une vitesse de consigne fc(t) constante correspondant a la vitesse d’equilibre
et relever la vitesse.
— Appliquer une vitesse de consigne fc(t) = fce + f ou f << fc et relever la vitesse de
consigne, la vitesse et le signal de commande.
— Verifier que les performances definies dans le cahier des charges sont atteintes.
68 F.BATEMAN
TP 4
CENTRALE D’ATTITUDE
4.1 Objectif
Au cours de cette seance, vous allez realiser une centrale d’attitude au moyen d’un observa-
teur. On rappelle qu’un observateur est un systeme dynamique qui permet d’estimer les etats
que l’on ne mesure pas. Dans le cas d’un systeme lineaire decrit par l’equation d’etat dont on
cherche a estimer les etats x :
x = Ax+Bu (4.1)
y = Cx (4.2)
Un observateur est un systeme dynamique d’equation :
˙x = Ax+Bu︸ ︷︷ ︸
prediction
+L(y − y)︸ ︷︷ ︸
recalage
(4.3)
y = Cx (4.4)
L’estimation est correcte si les erreurs d’estimation limt→+∞
ε = limt→+∞
x− x → 0. Cette condi-
tion est realisee si et seulement si la matrice A−LC a toutes ses valeurs propres a partie reelle
negative. Les erreurs d’estimation convergent d’autant plus vite vers zero que les parties reelles
de ces valeurs propres sont petites.
4.1.1 Liste du materiel
— Centrale d’attitude MTI de XSENS + cable de connection au PC + connecteur ODU-DB9
— Carte BigDsPic6
— PC + MATLAB-SIMULINK, MT Manager
— Boitier d’alimentation
— Cable USB
69
TP 4. CENTRALE D’ATTITUDE
4.2 La centrale d’attitude MTI
Dans ce TP, le systeme etudie est une centrale d’attitude MTI de la marque XSENS http:
//www.xsens.com/. Cette centrale comporte :
— trois accelerometres qui mesurent les trois composantes de l’acceleration projetees dans
le repere du capteur notees accx = γx, accy = γy, accz = γz ;
— trois gyrometres qui mesurent les trois composantes de la vitesse angulaire absolue pro-
jetees dans le repere du capteur notees gyrx = p, gyry = q, gyrz = r ;
— trois magnetometres qui mesurent les trois composantes du champ magnetique terrestre
projetees dans le repere du capteur notees magx = Bx, magy = By, magz = Bz.
Le repere capteur est defini comme suit (cf. figure 4.1) :
Figure 4.1 – Le repere capteur
Connecter la MTI au port USB du PC au moyen du cable USB-RS232 converter.
Figure 4.2 – Le cable USB-RS232
Depuis le bureau, ouvrir le logiciel MT Manager, la fenetre suivante apparaıt :
70 F.BATEMAN
4.2. La centrale d’attitude MTI
Figure 4.3 – Le logiciel MT Manager
Il faut ensuite cliquer sur Ok puis sur Annuler.
Figure 4.4 –
Le capteur est deja programme, les donnees sont transmises via le port USB au format RS232
(100 mesures /seconde, 115200 bauds, 8 bits), il s’agit de accx, accy, accz, gyrx, gyry, gyrz,magx,
magy, magz, φ, θ, ψ. Ces donnees sont de type single, soit des reels a virgule flottante codes sur
F.BATEMAN 71
TP 4. CENTRALE D’ATTITUDE
32 bits (4 octets forment un single).
— Pour visualiser les angles d’attitude roll φ, pitch θ, yaw ψ, cliquer sur le bouton Orienta-
tion Data View.
— Pour visualiser les mesures accx, accy, accz, gyrx, gyry, gyrz, magx, magy, magz, cliquer
sur le bouton Calibrated Data View.
— Realiser un enregistrement des donnees en cliquant sur le bouton Record/Stop Record.
Operer a des petits mouvements du capteur autour des axes de roulis et de tangage.
— Cliquer sur FileOpen MT-XXXX (type MT manager log file) Export ; le fichier est
exporte au format *.txt et peut etre lu sous MATLAB,
— DepuisMATLAB, cliquer sur FileImport Data, ouvrir le fichier texte MT-XXXX, pour-
suivre la procedure de transfert des donnees (Next, Finish). Les donnees sont accessibles
depuis la variable data qui a la structure suivante :
data counter accx accy accz gyrx gyry gyrz magx magy magz φ θ ψ
1 xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
N xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
Figure 4.5 – La structure de la variable data
Comme les mesures sont effectuees a 100Hz, la duree de l’essai est egale a N100s et N peut
etre connu avec la fonction size(data) qui renvoie la dimension du tableau correspondant, soit
N lignes, 13 colonnes. Pour afficher les donnees, il faut recreer un vecteur temps :
— time = [0 : 1100
: N−1100
]’ genere un vecteur de longueur N par pas de 1100
— Pour acceder aux mesures de l’angle de gıte, taper data( :,11) affiche toutes les lignes de
la 11eme colonne,
— Pour acceder aux mesures des angles de gıte, d’assiette et de cap, taper data( :,11 :13)
affiche toutes les lignes de la 11eme a la 13emecolonne.
Ces donnees serviront ulterieurement a alimenter le modele de simulation de la centrale
d’attitude que vous allez realiser. Avant de debrancher la MTI, cliquer sur le bouton Disconnect.
4.3 L’estimation d’attitude
Ce modele repose pour partie sur l’utilisation des relations cinematiques :
φ = p+ tanθ(q sinφ+ r cosφ) (4.5)
θ = q cosφ− r sinφ
ψ = qsinφ
cos θ+ r
cosφ
cos θ
72 F.BATEMAN
4.3. L’estimation d’attitude
4.3.1 Le modele de prediction seul
Les equations (4.5) sont non lineaires et ne satisfont pas aux hypotheses faites sur les obser-
vateurs.
— Etablir le modele linearise des equations (4.5) pour de petites variations φ, θ, ψ, p, q, r
autour du point de fonctionnement note e et defini par φe = θe = ψe = pe = qe = re = 0
— On ne s’interesse qu’aux mouvements autour des axes de roulis et de tangage. En posant
x =(
φ θ)T
et u =(
p q)T
qui sont en fait les vitesses angulaires mesurees par la
MTI, etablir les expressions des matrices A et B.
— Implementer les equations cinematiques linearisees sous SIMULINK. Comme ce modele
est destine a etre implemente en temps reel, vous en realiserez une version a temps discret
et utiliserez unDiscreteDiscrete integrator. Le Fixed step size est choisi egal a la periode
des mesures, soit 1100s.
— Vous alimenterez ce modele au moyen de blocs SourcesSimin qui permettent d’utiliser
sous SIMULINK des donnees du Workspace de MATLAB. A ce propos, il est necessaire
dans le bloc Simin d’utiliser le vecteur time cree precedemment.
— Sur un meme oscilloscope, visualiser les angles φ et θ mesures sous MT Manager et ceux
estimes, accessibles en sortie de l’integrateur.
— Qu’observe-t-on ?
4.3.2 Recalage des estimations par les mesures accelerometriques
Les mesures des accelerations sur les axes de roulis −→x et de tangage −→y sont utilisees pour
recaler les estimations des angles de gıte et d’assiette. Un accelerometre ne peut mesurer que
l’acceleration non gravitationnelle (appelee egalement force specifique)−→f =
−→Γ − g ou Γ resulte
des forces autres que celles de gravitation (portance, poussee, etc.). Par consequent, la MTI,
immobile sur un plan horizontal, l’axe de mesure −→z dirigee vers le haut comme l’illustre la
figure 4.1 renverra, aux bruits de mesure pres, accz = 9.81.
Deux reperes sont utilises dans ce probleme :
1. Le repere capteur O,−→x b,−→y b,
−→z b, l’origine O st le point d’intersection des axes des trois
capteurs.
2. Le repere terrestre RE (O,−→xE ,−→yE ,−→zE) est un repere orthonorme direct suppose galileen.
L’axe (O−→xE) est dirige vers le nord geographique et l’axe (O−→yE) vers l’ouest. L’axe (O−→zE)complete le triedre. L’origine de ce repere coıncide avec celle du repere capteur. Le repere
capteur est donc en rotation autour du repere terrestre.
La matrice de passage du repere capteur Rb au repere terrestre suppose inertiel RE notee
TEb s’ecrit :
TEb =
cos θ cosψ sinφ sin θ cosψ − cosφ sinψ cosφ sin θ cosψ + sinφ sinψ
cos θ sinψ sinφ sin θ sinψ + cosφ cosψ cosφ sin θ sinψ − sinφ cosψ
− sin θ sinφ cos θ cosφ cos θ
(4.6)
— Au moyen de la matrice de passage TEb, etablissez l’expression des composantes de
l’acceleration mesurees sur accx et accy dans le repere capteur.
F.BATEMAN 73
TP 4. CENTRALE D’ATTITUDE
— L’angle ce cap ψ etant egal a 0, lineariser les equations precedentes pour de petites
variations des angles φ et θ autour de O.— Ecrire l’equation de sortie (4.2), le vecteur des mesures y =
(
accx accy
)T
, le vecteur
d’etat est constitue par x =(
φ θ)T
.
— En deduire l’expression de la matrice de sortie C et la saisir sous MATLAB.
— Calculer le gain L de l’observateur de sorte que les poles de l’observateur spe(A−LC) =
−10−10i, −10+10i. Vous utiliserez la fonction place de MATLAB pour laquelle vous
consulterez l’aide en ligne. Attention a penser a transposer les matrices !
— Sous SIMULINK, completer le modele de prediction pour realiser l’observateur complet.
— Simuler la centrale d’attitude et observer les angles de gıte φ et d’assiette estimes θ.
— Calculer le gain L de l’observateur de sorte que les poles de l’observateur spe(A−LC) =
−1− 1i, −1 + 1i et simuler a nouveau la centrale d’attitude.
— Donner une explication au phenomene observe.
4.4 Implementation temps reel de la centrale d’attitude
4.4.1 Cablage de la MTI
La centrale d’attitude est connectee a la carte BigDsPic6 via un connecteur ODU, attention
a bien realiser la connection, les points rouges sur les connecteurs males et femelles doivent
coıncider. Il ne faut surtout pas forcer la connection et ne pas hesiter a demander
conseil si vous avez des doutes sur le branchement .
— fil rouge relie a une broche +VCC,
— fil noir relie a une broche GND,
— fil de donnees vert, relie a la broche 3 du connecteur CN13.
— Le switch RF4 de SW14 doit etre sur la position ON, tous les autres switchs sont en
possition OFF. Pour comprendre ces choix, il faut se reporter a la page 15 du User
manual de la carte BigdsPIC6.
— Les signaux seront visualises sur l’interface rs232gui au moyen d’un bloc Serial Port
Tx Labview Matlab sur le Tx de l’UART 1, soit la pin RF3.
4.4.2 Programme de lecture de la MTI
Le fichier Lecture MTI.mdl permet, apres compilation de lire les donnees issues de la centrale
MTI sur le microncontroleur.
— Verifier le bon fonctionnement de ce schema en observant l’angle de gıte sous rs232gui.
Vous noterez que le bloc UINT16 est precede d’un amplificateur de gain 100. En effet,
comme l’angle mesure peut varier entre −π2(-1,57) et π
2(1,57), le codage sous forme
d’un nombre entier est problematique, aussi les donnees sont elles multipliees par un gain
important pour pouvoir etre lues sur l’interface rs232gui. A ce propos, il faut cliquer sur
le bouton int16 de cet interface pour visualiser les nombres negatifs.
74 F.BATEMAN
4.4. Implementation temps reel de la centrale d’attitude
4.4.3 Implementation de l’algorithme d’estimation d’attitude
Dans cette derniere partie vous avez a implementer la centrale sur le microcontroleur et a la
tester.
— Implementer le schema de l’observateur a temps discret sous SIMULINK.
— Ajouter des blocs Tx Labview Matlab afin d’observer les angles de gıte et d’assiette
estimes par l’observateur.
— Compiler ce modele et simuler la centrale d’attitude pour de petits mouvements de la
centrale MTI autour des axes de roulis et de tangage.
— Comparer ces reponses en gıte et en assiette a celles delivrees par la centrale MTI.
— Augmenter l’amplitude des mouvements, qu’observe-t-on ? Expliquer.
— Ouvrir dans le schema le terme de recalage L(y − y) de sorte que l’attitude soit recons-
truite seulement a partir des mesures gyrometriques. Qu’observe-t-on ?
F.BATEMAN 75
TP 4. CENTRALE D’ATTITUDE
76 F.BATEMAN
TP 5
FILTRE DE KALMAN
5.1 Objectif
Au cours de cette seance vous realiserez un capteur de hauteur et de vitesse ascensionnelle
pour un drone en hybridant les mesures issues d’un accelerometres et celles d’un capteur a
ultrasons. En particulier, on ne dispose pas de capteur de vitesse ascensionnelle, aussi cette
variable doit etre estimee. En outre, la mesure de position realisee par le capteur a ultrason n’est
pas rafraıchie suffisamment rapidement pour permettre le controle de l’altitude. Enfin, comme
toutes ces mesures sont bruitees, ces estimations sont devolues a un filtre de Kalman. Dans ce
TP Vous aurez a :
1. etablir les equations du modele du systeme et du filtre de Kalman,
2. caracteriser les bruits de mesure de l’accelerometre et du capteur a ultrason qui joueront
respectivement les roles de bruit d’etat et de bruit de mesure du filtre,
3. simuler le filtre en vue d’estimer la hauteur et la vitesse ascensionnelle,
4. implementer ce filtre sur le microcontroleur et a evaluer la qualite des estimations.
5.1.1 Liste du materiel
— Boitier contenant un accelerometre et un telemetre a ultrason
— Boitier de programmation ICD3 + 2 cables USB + cable de programmation
— Boitier d’alimentation
— PC + MATLAB-SIMULINK, MPLAB
5.2 Modelisation des signaux et du systeme
5.2.1 Modele
— Dans le cas d’un mouvement de translation, la vitesse ascensionnelle v et la hauteur
h sont obtenues successivement en integrant l’acceleration γ puis v. En pratique, on
77
TP 5. FILTRE DE KALMAN
dispose de la mesure bruitee de l’acceleration, soit γm = γ + wγ cette mesure. En vous
inspirant du cours (Chapitre 7 - Observateurs deterministes), etablir dans le cas discret
l’equation d’etat de h et de v tandis que l’acceleration mesuree γm joue le role d’entree de
commande de ce systeme. Ici wγ est le bruit de genere lors de la mesure de l’acceleration.
Cette derniere est mesuree selon l’axe sensible toutes les 10ms.
— Etablir l’equation d’observation de ce systeme sachant que la hauteur mesuree par le
capteur a ultrasons hm = h+ vh l’est toutes les 20ms. Ici vh est le bruit de mesure de la
hauteur.
A propos du bruit d’etat
Dans le cas ou l’equation d’etat est de la forme :
Xk+1 = FXk +GUk +HWk (5.1)
Wk est suppose centre et de covariance Qw, la covariance du bruit d’etat a pour expres-
sion :E[(HWk)(HWk)T ] = HQwH
T Vous tiendrez compte de cette description de la covariance
du bruit d’etat lorsque vous ecrirez les equations du filtre.
5.2.2 Equations du filtre de Kalman
Rappeler les cinq equations du filtre de Kalman. Vous pouvez reprendre les notations utilisees
dans le cours.
— Estimation a priori ou prediction, toutes les 10ms :
1. Deduire de ce qui precede l’equation de l’estimation a priori de l’etat xk+1|k
2. Donner l’equation de la covariance de l’erreur d’estimation a priori Pk+1|k
— Estimation a posteriori ou recalage, toutes les 20ms :
1. Equation de la covariance de l’erreur d’estimation a posteriori Pk+1|k+1
2. Equation du gain de Kalman Lk+1
3. Equation d’estimation a posteriori de l’etat xk+1|k+1
— Pour chacun des vecteurs et des matrices, preciser sa dimension.
5.3 Presentation de la maquette
— Le boitier contient un microcontroleur 30F6014, un capteur a ultrason qui delivre une
information de position toutes les 20ms et un accelerometre qui renvoie l’acceleration
mesuree selon l’axe sensible toutes les 10ms.
— Une prise jack a raccorder a un boıtier d’alimentation (du meme type que ceux utilises
pour alimenter les cartes BigDsPic6)
— Un connecteur ICD pour programmer le microcontroleur dont le programme edite sous
SIMULINK est compile depuis MATLAB 1. Le programme compile *.hex est implemente
sur le microcontroleur au moyen du logiciel MPLAB IDE.
— Les mesures peuvent etre recueillies sur MATLAB via un cable FDTI/liaison Bluetooth
au moyen de la fonction rs232gui.
1. En fait MATLAB appelle un compilateur dedie a ce microcontroleur C30 de Microchip.
78 F.BATEMAN
5.3. Presentation de la maquette
Figure 5.1 – Le boitier ICD3
5.3.1 Collecte de mesures
Vous realiserez une premiere fois les essais qui suivent en regime statique (capteurs immobiles)
de maniere a calibrer les capteurs et a modeliser les bruits de mesure. Dans un second temps,
vous procederez a un essai en regime dynamique. Pensez lors de chacun des essais a sauvegarder
les variables dans un fichier *.mat de maniere a en garder une trace.
1. Ouvrez le fichier CollectData.mdl, analyser sa structure (sequences 3.4.3, 3.5 et 3.7) et le
compiler.
2. Reliez le PC au boitier ICD3 via le cable USB puis le boitier ICD3 a la maquette via le
cable ICD3 comme illustre sur la figure 5.1.
3. Depuis le bureau, ouvrir le programme MPLAB IDE
— Programmer ICD3
— File Import importer le fichier CollectData.hex
— Cliquer sur l’icole Program afin d’implementer ce fichier sur le microcontroleur.
4. Ouvrez MATLAB et executer rs232gui, cliquer sur le bouton plot int16 pour observer
des nombres signes puis visualisez les signaux issus de l’accelerometre et du telemetre a
ultrason. Vous prendrez soin auparavant d’identifier le port serie utilise.
5.3.2 Caracterisation des bruits
Les mesures d’acceleration et de hauteur sont stockes dans les variable R et Rn, les instants
auxquels sont associees ces mesures sont stockees dans le tableau t R et t Rn. Comme les
mesures d’acceleration sont prelevees a une frequence double de celles de hauteur, le tableau R
a la structure suivante Tab.4.1) :
F.BATEMAN 79
TP 5. FILTRE DE KALMAN
NaN y
x NaN
x NaN
Nan y
x NaN
x NaN
NaN y
. . . . . .
Figure 5.2 – Structure de R
Ou NaN est l’acronyme de Not a Number. Il faut donc dans un premier temps reconstruire
un tableau dans lequel les NaN n’apparaissent pas.
— Ecrivez un script sous MATLAB qui permette de stocker dans deux vecteurs gamma et
height les donnees numeriques contenues dans R. Vous pouvez utiliser avec profit les
fonctions suivantes :
— R( :,1), R( :,2) permettent respectivement d’acceder a la premiere et a la seconde
colonne de R.
— isnan
— find
— Representez l’histogramme des valeurs contenues dans gamma et height hist.
— Calculez la moyenne et l’ecart-type des bruits de mesure accelerometre et capteur a
ultrason mean, std
— Definissez les valeurs des coefficients par lesquels il faut multiplier les grandeurs issues de
ces capteurs pour obtenir des mesures en m.s−2 et en m. Vous vous reporterez au §4.3.2pour prendre connaissance de ce que mesure effectivement un accelerometre.
— Proposez un modele (au sens des probabilites) pour les bruits de mesure de l’accelerometre
et du capteur a ultrason.
5.3.3 Simulation du filtre de Kalman
Avant d’implementer l’algorithme du filtre de Kalman sur le microcontroleur, on le met
au point sur SIMULINK. Pour cela, on a besoin des mesures precedentes obtenues en regimes
dynamiques calibrees. Ces mesures sont normalement contenues dans les vecteurs gamma et
height respectivement de taille 2N et N (N depend evidemment de la duree de votre experience,
vous pouvez y acceder avec la fonction size). C’est a partir de ces mesures que vous allez estimer
la hauteur h et la vitesse ascensionnelle v. Vous avez donc a creer pour chacune des variables un
vecteur qui contient les instants associes a chaque mesure. Vous pouvez proceder comme suit :
— t gamma = [0 :0.01 : 0.01*(2N-1) ]’ genere un vecteur de longueur 2N par pas de 0.01.
— de la meme maniere, creer un vecteur temps t height pour les mesures du capteur a
ultrason.
— Ouvrez un nouveau Model et le parametrer de sorte que le Fixed-step size soit egal a
10ms avec un discrete Solver.
80 F.BATEMAN
5.4. Implementation du filtre de Kalman
— Inserez deux blocs SourcesSimin et les parametrer avec les vecteurs gamma, t gamma,
height et t height. Verifier au moyen de Scopes la bonne restitution de ces mesures.
— Copiez-collez un bloc User Defined Functions Embedded Matlab Function, (deja utilise
au §3.7.2). Vous noterez en particulier l’utilisation du type persistent qui permet de
sauvegarder en memoire les variables calculees entre deux appels de la fonction. Cela sera
particulierement utile pour propager l’etat estime et la covariance de l’erreur d’estimation.
— En vous inspirant du programme propose au §3.7.2, implementer les equations du filtre
de Kalman en prenant soin de traiter l’acceleration mesuree toutes les 10ms et la mesure
du capteur a ultrasons toues les 20ms. Pratiquement le bloc Embedded Matlab Function
est appele toutes les 10 ms et il faut mettre en œuvre un test qui ne prenne en compte la
mesure des ultrasons qu’une fois sur deux.
— Simulez et restituez les resultats. Vous evaluerez notamment les effets de la meconnais-
sance des conditions initiales sur le comportement du filtre.
5.4 Implementation du filtre de Kalman
— Copiez-collez l’Embedded Matlab Function simulee precedemment dans le fichier Collect-
Data.mdl. Comme les donnees pour etre visualisees doivent etre mises au format uint16
(donnees∈ [0, 1, 2, . . . , 216 − 1]), il n’est pas possible de restituer les mesures de hauteur
avec precision (l’affichage de 0.25m renverrait 0). Il vous faut donc amplifier, d’un facteur
100 ou 1000 les sorties calculees par l’Embedded Matlab Function pour les lire directement
en cm ou en mm.
— Inserez les blocks TX Labview Matlab de maniere a visualiser la hauteur estimee et la
hauteur mesuree, la vitesse ascensionnelle estimee. Compiler et implementer le fichier
*.hex sur la cible.
— Visualisez et relevez la hauteur et la position estimee par le filtre. Comparer la hauteur
estimee a celle mesuree.
5.4.1 Filtrage complementaire
Dans cette derniere partie, on met en œuvre un filtre de Kalman stationnaire c.-a-d un filtre
dont les gains dependent des seuls bruits d’etat et de mesure et pas des conditions initiales.
L’interet de cette structure reside dans sa simplicite d’implementation. Pratiquement, lorsque
k → +∞ la matrice de covariance de l’erreur d’estimation Pk|k → P = cte et par suite le gain
de Kalman Lk → L = cte.
F.BATEMAN 81
TP 5. FILTRE DE KALMAN
Xk+1|k+1 = Xk+1|k + L(hk+1 − Yk+1|k) (5.2)
Xk+1|k+1 = Xk+1|k + L(hk+1 − CXk+1|k) (5.3)
. . . = . . . (5.4)
Xk+1|k+1 = (I− LC)(FXk|k +Gγk) + Lhk+1 (5.5)
Xk+1|k+1 = (I− LC)FXk|k + (I− LC)Gγk + Lhk+1 (5.6)
Xk+1|k+1 = (I− LC)FXk|k +(
(I− LC)G L)(
γkhk+1
)
(5.7)
En appliquant le theoreme de l’avance §2.2.1 a (4.41), il vient :
(zI− (I− LC)F ) X(z) = (I− LC)Gγ(z) + Lzh(z) (5.8)
X(z) = (zI− (I− LC)F )−1 (I− LC)G︸ ︷︷ ︸
dim 2×1
γ(z) + (zI− (I− LC)F )−1 Lz︸ ︷︷ ︸
dim 2×1
h(z)
(5.9)
Que l’on met sous la forme :
(
h(z)
v(z)
)
=
(
P11(z)
P21(z)
)
γ(z) +
(
P21(z)
P22(z)
)
h(z) (5.10)
Le calcul du gain de Kalman et des fonctions de transfert P11(z), P21(z), P12(z) et P22(z)
peuvent etre conduits en suivant la demarche suivante :
— Ouvrez un script
— Saisissez les matrices F, G, C, D et construire avec la fonction ss le systeme discret
(Ts=0.01s) afferent sys,
— Saisissez la matrice de covariance du bruit d’etat Q et la variance du bruit de mesure R,
— Ouvrez l’aide de la fonction kalman et pour le systeme sys et les matrices Q et R calculer
au moyen de cette fonction le gain de Kalman stationnaire L.
— Construisez la representation d’etat discrete (4.42) avec la fonction ss et calculer les
fonctions de transfert correspondantes avec la fonction tf.
— Vous pouvez acceder aux expressions des numerateurs et des denominateurs des fonctions
de transfert au moyen de la fonction tfdata. Les Cette derniere renvoie des objets de type
Cell dont on accede aux contenus comme suit :
— Num est un objet de type Cell, on accede y accede en executant Num1, Num2,etc.
— Realisez les filtres sous SIMULINK dans le modele de simulation et le tester.
— Copiez le schema du filtre complementaire dans une copie de Collect Data.mdl, inserez
les blocs Tx Labview, compilez-le et visualisez la hauteur et la vitesse estimees par le
filtre.
82 F.BATEMAN
TP 6
CONTROLE DE L’ASSIETTE D’UN DRONE A VOILURE TOURNANTE
6.1 Objectifs
Mettre en œuvre differentes lois de commande dans le but de controler l’assiette d’un hexa-
coptere. Vous devez imperativement preparer avant la seance les lois de commande
proportionnelle-derivee et par retour d’etat.
6.1.1 Liste du materiel
— Hexacoptere Mikrokopter,
— support a 3 d.d.l,
— boitier de programmation ICD3, cable de programmation, cable USB,
— cable FTDI pour le transfert des donnees entre l’hexacoptere et le PC,
— radiocommande SPEKTRUM 6 voies, 2.4GHz,
— PC + MATLAB-SIMULINK, MPLAB
— Lunettes, blouse et gants de protection a porter imperativement lors des essais.
6.1.2 Presentation du materiel
L’hexacoptere a controler est represente sur la figure 6.2. Le bras rouge materialise l’axe de
roulis et porte l’helice 1. L’axe de tangage est dirige vers la droite de l’axe de roulis et l’axe de
lacet complete le triedre. Les helices sont comptees de 1 a 6 dans le sens horaire.
La radiocommande representee sur cette meme figure permet avec le joystick droit de contro-
ler les gaz (deplacement vertical) et l’assiette avec le joystick gauche (deplacement vertical). Deux
switchs Gear et Flap servent a commuter entre les differents modes de fonctionnement du drone.
83
TP 6. CONTROLE DE L’ASSIETTE D’UN DRONE A VOILURE
TOURNANTE
Figure 6.1 – L’hexacoptere et la radiocommande
6.2 Preparation
Le controle des angles de gıte et de cap est deja realise. La poussee est controlee en boucle
ouverte via la commande des gaz, vous avez seulement a controler l’assiette. Pour cela vous
disposez :
— de la consigne d’assiette elaboree a partir de la radiocommande θref (pitch angleath ref ),
— des mesures d’assiette θ (pitch angle) et de vitesse de tangage q (pitch) realisees toutes
les 10 ms.
Donnees sur le drone : ℓ, b, m, IyCoefficient de poussee de l’helice b 1.6832e−5N(s/rad)2
Longueur du bras de levier ℓ 27cm
masse de l’appareil m 1.6kg
Moment d’inertie autour de l’axe de tangage Iy 0.018kg.m2
Pour cette etude simplifiee, le modele du drone est :
Iy q = bℓ(Ω21 − Ω2
4) (6.1)
θ = q (6.2)
6.2.1 Equilibre
— En vol stationnaire, que valent l’assiette θ et la vitesse de tangage q ?
— Que dire de la vitesse de rotation des helices a l’equilibre Ω1e, Ω4e ?
— Calculer la vitesse de rotation des helices tandis que l’hexacoptere vole en stationnaire.
6.2.2 Modele linearise
— Autour de l’equilibre et pour de petites variations de vitesse des helices ω1, ω4 autour de
Ωe = Ω1e = Ω4e, etablir les equations d’etat de θ et q.
— On pose My = 2bℓΩe(ω1 − ω4),
84 F.BATEMAN
6.2. Preparation
— Etablir les fonctions de transfertq(s)
My(s)et
θ(s)
My(s)— au moyen d’integrateurs, representer le schema fonctionnel de la commande d’axe de
tangage de l’hexacoptere.
— Autour de l’axe de tangage, l’hexacoptere est-il asymptotiquement stable ?
6.2.3 Correction Proportionnelle-Derivee
On met en œuvre une premiere loi de commande de type Proportionnelle-Derivee :
My = kd
kp(θref − θ)︸ ︷︷ ︸
qref
−q
(6.3)
— Completer le schema fonctionnel de l’hexacoptere en lui adjoignant celui de la loi de
commande (6.3).
— Calculer kp et kd de sorte que ce systeme se comporte comme un ordre deux dont le
facteur d’amortissement est egal a
√2
2et le temps de reponse a 0.5s
— Verifier le bon fonctionnement de ce correcteur sous MATLAB sisotool.
— My est ici une commande virtuelle, pratiquement on agit sur ω1 et ω4. Sachant que
l’on choisit de controler les vitesses de rotation des helices de telle sorte que ω1 = −ω4,
exprimer les vitesses de rotation effectives de ces helices en fonction du moment de tangage
My calcule precedemment.
6.2.4 Commande par retour d’etat
Le systeme est decrit par l’equation d’etat linearisee etablie au §6.2.2. Les variables θ et q
sont toutes deux mesurees.
— Etablir les expressions des matrices d’etat A, de commande B, de sortie C et de transfert
direct D.
La commande realisee est de la forme
My(t) = hθref (t)− k1θ(t)− k2q(t) (6.4)
— Calculer avec les gains k1 et k2 pour que les poles du systeme corrige soient egaux a
−5± 5i.
— Calculer h de sorte qu’en regime permanent et en reponse a un echelon de consigne
d’amplitude θ(∞) = θref . On aura evidemment q(∞) = 0.
6.2.5 Commande Proportionnelle-Integrale-Derivee
On met en œuvre une loi de commande de la forme de type Proportionnelle-Integrale-
Derivee :
F.BATEMAN 85
TP 6. CONTROLE DE L’ASSIETTE D’UN DRONE A VOILURE
TOURNANTE
My = kd
kp(θref − θ) + ki
∫ t
0
(θref − θ)dτ
︸ ︷︷ ︸
qref
−q
(6.5)
— Completer le schema fonctionnel de l’hexacoptere en lui adjoignant celui de la loi de
commande (6.5).
— Pour la boucle interne, calculer kd de sorte que la boucle interne de ce systeme se comporte
comme un ordre un dont le temps de reponse est egal a 150ms (il ne peut etre plus rapide
que celui des moteurs etudies lors du TP 3.1.)
— Quel type de correcteur realise le correcteur de la boucle externe ? Montrer qu’il peut
s’ecrireTis+ 1
Tis— En vous inspirant de la methode dite de l’optimum symetrique http://eavr.u-strasbg.
fr/~laroche/student/MasterIT-ComMach/ComMach1/node58.html, calculer kp et ki.
Vous adopterez pour ce reglage a = 4.
— Verifier le bon fonctionnement de ce correcteur sous MATLAB sisotool.
6.2.6 Commande par retour d’etat augmente
La commande a pour expression :
My(t) = h
∫ t
0
(θref (τ)− θ(τ))dτ − k1θ(t)− k2q(t) (6.6)
L’ajout d’un effet integral vise a rendre le systeme davantage robuste aux perturbations. On
va operer a une strategie de placement de pole sur le systeme augmente, pour cela, on definit
une nouvelle variable d’etat z =∫ t
0(θref (τ)− θ(τ))dτ et par consequent z = θref − θ.
— Ecrire l’equation d’etat associee au systeme dont le vecteur d’etat est X =(
θ q z)T
et d’entree θref .
— Montrer que la matrice d’etat augmentee corrigee se met sous la forme :
Aaug −BaugKaug =
0 1 0
0 0 0
−1 0 0
−
0
1
0
(
k1 k2 −h)
— Calculer avec la fonction place de MATLAB les gains k1, k2 et h pour que les poles du
systeme corrige soient egaux a −5,−5± 5i. Attention a modifier le signe de h calcule par
MATLAB.
6.3 Manipulations
Lors de toutes les phases d’experimentation vous devrez imperativement porter
lunettes de protection, blouse et gants.
86 F.BATEMAN
6.3. Manipulations
Implementation des lois de commande
— Ouvrir le fichier TP TME sujet.mdl 1. Sauvegarder ce fichier sous un autre nom dans
votre espace de travail. Vous noterez que la maquette utilise un microcontroleur DsPic
30F4013 cadence a 32 MIPS.
— Double-cliquer sur le bloc Chart, cette fonction integre un automate ou machine a etat
illustre sur la figure 6.3. Pratiquement, on accede aux etats en commutant les switchs Flap
et Gear (tous deux a 0 en position basse, a 1 en position haute) de la radiocommande.
1. Initial : moteurs arretes
2. Open Loop : commande de la poussee seule. Celle-ci est bornee par mesure de securite.
3. Closed Loop P : Une loi de commande est deja implementee, elle permet de valider le
bon fonctionnement du drone lors des essais. Vous ne devez absolument pas la
modifier.
4. Closed Loop PI : Vous y implementerez les lois de commande proportionnelle-derivee
(6.3) et par retour d’etat (6.4). Si vous en avez le temps, vous y implementerez ega-
lement les lois de commande qui mettent en œuvre un terme integral, soit (6.5) et
(6.6).
— Depuis l’automate (StateFlow Chart), cliquer sur le bloc Loi4 represente figure et comple-
ter la commande de l’axe de tangage avec la structure de la commande Proportionnelle-
Derivee. Les blocs que vous inserez doivent etre parametrer avec un Sample Time egal a
-1 afin d’heriter de celui de l’automate.
— Inserer la fonction qui permet de transformer le moment de tangage My en vitesses de
rotation des helices 1 et 4. Pratiquement, il s’agit d’un bloc gain qui realise le produit
d’une matrice par un vecteur. Ici :
ω1
ω2ω3
ω4
ω5
ω6
=
g1g2g3g4g5g6
My (6.7)
ou g1, . . . , g6 sont des gains qui transforment My en vitesse de rotation des helices, en
particulier celles des helices 1 et 4.
— Inserer des blocs TX Matlab Labview, ces blocs sont associes a l’UART 2 Vous releverez
en particulier la consigne θref , l’assiette θ, la vitesse de tangage q et les vitesses de
rotation des moteurs 1 et 4. Les positions et les vitesses angulaires sont en radians et
radians par seconde, il convient de les multiplier par un facteur180
πet de convertir le
resultat en UINT16 pour lire ces signaux avec rs232gui en degres. Pour davantage de
precision, utiliser un facteur1800
π.
— Montrer votre schema de programmation au responsable du TME puis le compiler.
1. L’etude detaillee de la structure du programme represente figure 6.2 de l’autopilot sera vue dans la derniere
partie du TME. Ce programme gere la radiocommande SPEKTRUM, la centrale d’attitude (IMU) NAVEOL ainsi
que les six moteurs brushless et les cartes de controle (Bl-Ctrl).
F.BATEMAN 87
TP 6. CONTROLE DE L’ASSIETTE D’UN DRONE A VOILURE
TOURNANTE
Figure 6.2 – Le programme SIMULINK de l’autopilot
6.3.1 Programmation de l’autopilot
1. Relier le PC au boitier ICD3 via le cable USB puis le boitier ICD3 a la maquette via le
cable ICD3 comme illustre sur la figure 5.1.
2. Mettre la commande des gaz de la radiocommande (situee a droite) en position basse
(gaz a zero) et verifier que les switchs Flap et Gear sont en position basse (ou repousses)
3. Mettre la radiocommande sous tension.
4. Relier les connecteur d’alimentations de la batterie et de l’hexacoptere. La mise sous
tension des moteurs est signalee par un signal sonore.
5. Depuis le bureau, ouvrir le programme MPLAB IDE
— Selectionner un microcontroleur 30F4013,
— Programmer ICD3,
— File Import importer le fichier TP TME.hex ,
— Cliquer sur l’icole Program afin d’implementer ce fichier sur le microcontroleur.
6. Test des la lois de commande :
(a) Commuter le switch Flap en position haute (vers vous) et augmenter les gaz. Verifier
que les toutes helices tournent puis ramener les gaz a zero. Le switch Flap reste en
position haute.
88 F.BATEMAN
6.3. Manipulations
Figure 6.3 – La machine a etat controlee par les switchs de la radiocommande
Figure 6.4 – La loi de commande a completer
F.BATEMAN 89
TP 6. CONTROLE DE L’ASSIETTE D’UN DRONE A VOILURE
TOURNANTE
(b) Commuter le switch Gear en position haute, augmenter les gaz pour amener l’appareil
a se sustenter et controler avec le joystick gauche le mouvement de l’appareil autour
de l’axe de tangage.
(c) Relever les chronogrammes.
— Ajouter a la consigne un signal carre de periode egal a 5 s, de rapport cyclique egal a 0.5
et d’amplitude egale a 15 . Utiliser pour cela un bloc Source Pulse Generator que vous
ferez suivre d’un bloc Commonly Used Blocks Convert. Vous transformerez ce signal
en type Single avec un Sample Time de 10 ms.
— Reiterer la procedure precedente.
6.3.2 Autres lois de commande
Commande par retour d’etat
— Dans Loi4 remplacer la loi de commande Proportionnelle-Derivee (6.5) par la commande
par retour d’etat 6.4.
— Reprendre la meme procedure que celle conduite precedemment pour tester cette loi de
commande.
Commande Proportionnelle-Integrale-Derivee
— Dans Loi4 inserer la loi de commande Proportionnelle-Integrale-Derivee (6.5) pour le
controle de l’assiette. En vous inspirants de ce qui a ete fait pour le controle des axes de
roulis et de lacet, vous utiliserez des integrateurs discrets (DiscretDiscrete Integrator)
cadences avec un Sample Time egal a -1 (herite du Chart). Vous noterez que lorsque l’on
entre dans Loi4, le signal raz=0, les integrateurs sont actives. Lorsque l’on quitte Loi4,
raz=1 et ces memes integrateurs voient leur sortie forcees a zero.
— Reprendre la meme procedure que celle conduite precedemment pour tester cette loi de
commande.
Commande par retour d’etat augmente
— Dans Loi4 inserer la loi de commande par retour d’etat augmente (6.6) pour le controle
de l’assiette. vous traiterez l’integrateur a temps discret comme au paragraphe precedent.
— Tester cette loi de commande.
90 F.BATEMAN
Troisieme partie
TRAVAUX PRATIQUES
D’AUTOMATIQUE
91
TP 1
CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
1.1 Objectif
Faire l’acquisition, le traitement et la restitution d’un signal analogique. Cette chaıne d’ac-
quisition et de traitement sera utilisee lors des prochaines seances de travaux pratiques afin
d’etudier un procede de camouflage d’un mesage dans un signal audio (steganographie) et un
filtre adaptatif utilise pour supprimer le bruit ambiant.
1.1.1 Liste du materiel
— Carte de developpement BigDsPic6 + 2 cables USB + Boitier d’alimentation
— Bred board
— Carte a amplificateurs operationnelsSparkfun
— Filtre a capacite commutee, condensateurs 100nF, petits fils
— Carte DAC 12 bits Mikroelektronika ou Carte DAC 8 bits Mikroelektronika R2R
— Cable + prise jack, casque audio
— PC + MATLAB-SIMULINK, MPLAB
— GBF, oscilloscope, prises BNC, sonde d’oscilloscope, cable BNC.
1.2 Le filtrage anti-repliement
Le signal a traiter est un signal audio qui sera echantillonne a 8000 Hz.
1.2.1 Les caracteristiques du filtre a capacite commutee
— Quelle doit-etre la frequence de coupure fcut du filtre d’anti-aliasing ?
— En utilisant la notice du filtre a capacite commutee LCT16091 accessible depuis le bureau
sous le dossier datasheet :
— choisissez la frequence d’horloge du LCT16091,
93
TP 1. CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
— representez le gabarit de ce filtre.
1.2.2 Mise en œuvre du filtre
— Cablez ce circuit sur la bredboard. Vous l’alimenterez a partir des tensions 0-5V delivrees
par la carte BigDsPic6.
— Pour realiser l’horloge du filtre a capacite commutee 100fcut , on genere un signal haute
frequence en utilisant les blocs Peripheral I/OOutput Compare (HW) du microcon-
troleur. Le fonctionnement de ces blocs est detaille au §3.4 et dans l’aide en ligne du
blockset.
— Ouvrez le fichier template.mdl puis renommez-le. C’est sur ce fichier que vous allez
realiser le programme qui delivre le signal d’horloge. Reglez le Fixed Step Time a
1.25e−4 soit 8kHz.
— On utilise le canal de sortie OC1, voir sur la datasheet du DsPic le port correspondant.
— Reglez la periode max du bloc egale a la periode du signal d’horloge du filtre.
— Le parametre du signal genere qu’on regle est l’etat haut du rapport cyclique (duty
cycle), ce dernier est defini par la variable OCmax,
— Reglez la valeur du signal d’entree du blockset pour obtenir un signal OC1 de rapport
cyclique egal a 50%.
— Compilez le modele et implementez le programme.
— Avec l’oscilloscope, mesurez la periode du signal OC1.
— Appliquez a l’entree du filtre un signal sinusoıdal ∈ [1V, 3V ] dont vous ferez varier la
frequence. Vous verifierez que le signal de sortie du filtre presente, en terme d’attenuation,
les caracteristiques annoncees par le constructeur.
1.3 La conversion numerique-analogique
Vous allez realiser l’acquisition du signal prealablement filtre au moyen d’un convertisseur
analogique-numerique du DsPic.
Au moyen du generateur basses-frequences (GBF), generez un signal sinusoıdal de frequence
440 Hz dont l’amplitude crete a crete varie entre 0 et 4 Volts et visualisez-le sur l’oscilloscope.
Sur la datasheet du DsPic30F6014A, reperez les ports associes au convertisseur analogique-
numerique AN0 et l’entree de controle INT0.
Au moyen d’un bloc ADC Analog to Digital Converter, realisez la conversion analogique-
numerique (CAN) du signal sinusoıdal delivre par le GBF. En exploitant la documentation
HTML de ce bloc, parametrez-le de sorte que le signal sinusoıdal soit echantillonne a 8000 Hz.
Pour ce faire, cette conversion sera declenchee par une source exterieure mode trigger Low
to High transition on INT0 pin. Vous pourrez realiser facilement la source qui declenche les
conversions en utilisant un bloc Peripheral I/O Output Compare. Le signal de sortie doit
presenter un rapport cyclique de 50% et une frequence egale a 8000Hz.
Comme l’ADC code le signal sur 12 bits, l’information en sortie de ce dernier peut prendre
4096 valeurs. A cet effet, une reference de tension de 4.096V peut etre appliquee au DsPic de
sorte que le quantum soit egal a 1mV. Pour ce faire, vous devez commuter le switch RA10 de
SW13 → 4.096V.
94 F.BATEMAN
1.4. Analyse spectrale du signal echantillonne-bloque
Pour l’observation des signaux, vous mettrez en œuvre un bloc TX Labview Matlab, la
transmission des donnees sera cadencee a 230400 bauds . Pour une telle vitesse de transmission,
le dsPIC Master est cadence a 40 MIPS.
— Dans la fenetre rs232gui, affecter la valeur 128 au champ Rn, cela limitera l’observation
des signaux a un maximum de 128 points, ce qui ne represente que quelques periodes du
signal.
— Observez sous rs232gui le signal echantillonne,
1.4 Analyse spectrale du signal echantillonne-bloque
On souhaite, en temps quasi-reel affichez la transformee de Fourier du signal echantillonne
bloque avec une precision en frequence N egale a 512. Dans le Command Window, on commence
par generer le vecteur des frequences auxquelles on va tracer le spectre du signal :
f=0 :8000/512 :8000(1-1/512) ;
Vous verifierez qu’il s’agit bien d’un vecteur de 512 lignes par 1 colonne avec la fonction size.
Dans la fenetre d’edition de rs232gui, ecrivez au moyen de la fonction fft le script qui utilise
les P=128 echantillons du signal issus de l’ADC contenus dans la variable Rn en vue de calculer
et d’afficher le module du spectre du signal pour un nombre discret de frequences 1 N=512.
Vous pouvez connecter un casque sur la face arriere du PC et ecouter les sequences sonores
correspondant au contenu de la variable Rn au moyen de la fonction sound que vous ajouterez
a la suite du calcul et de l’affichage de la FFT.
Testez ce programme pour le signal sinusoıdal de frequence 440 Hz et d’amplitude ∈ [1, 4]
Volts.
En utilisant le mode sweep du GBF, generez un chirp compris dans la bande de frequence
∈ [440, 1000] Hz.
Memes questions pour un signal carre de meme frequence et de meme amplitude. Mettez en
evidence les harmoniques et le repliement du spectre.
On etudie l’effet du nombre de points de calcul de la FFT : si N designe le nombre de points
de calcul de la TFD, la precision en frequence est egale a1
N. Pour des signaux echantillonnes a
la frequence Fe, cela onneFe
N.
Toujours pour Rn=128, t
Testez N=16 pour un signal carre, comparez a ce que vous observiez pour N=512
La resolution frequentielle est la capacite de discerner des frequences distinctes. Elle est
de l’ordre de grandeur deFe
Psoit l’inverse de la largeur de la fenetre temporelle utilisee pour
prelever le signal a analyser dans le domaine temporel.
Testez pour P=32 N=512 et comparez le spectre a celui obtenu pour P=128 et N=512
1. N definit les frequences k∆F auquel sont conduites les calculs k∆F = kFe
Net k ∈ [0, N − 1]. On a par
ailleurs (cf. Cours de traitement du signal) N ≥ P .
F.BATEMAN 95
TP 1. CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
Rappelez l’interet de multiplier la sequence temporelle de longueur P par une fenetre de
ponderation. Vous visualiserez sur MATLAB une fenetre temporelle de Hamming de longueur P.
Ponderez Rn en le multipliant par une fenetre temporelle de votre choix : hamming, hanning,
bartlett, blakman, etc. Ces fonctions ont le meme nom sous MATLAB. On rappelle que le produit
terme a terme des coefficients de deux tableaux ∈ Rn×m s’ecrit A. ∗B
1.5 La conversion numerique-analogique
Elle peut etre realisee au moyen d’un convertisseur numerique analogique (CNA)DAC pour
Digital to Analog Converter 12 bits ou 8 bits. En fonction du convertisseur disponible, procedez
comme suit :
— Convertisseur 12 bits : vous reprendrez pour cela la procedure decrite au §3.3.1. Vousconnecterez directement la sortie de l’ADC 12 bits a celle du DA C12 bits (eventuellement
inserez un bloc Rate Transition cadence a 8000Hz entre les deux fonctions).
— Convertisseur 8 bits : La gestion du DAC 8 bits est realisee par un bloc Others C function
Call. La procedure d’utilisation de ce bloc, rappelee ci-dessous, est decrite au §3.7.1.— Ouvrez le fichier cna.mdl et copier-coller le schema qu’il contient.
— Copier-coller le fichier essai.c dans le repertoire sous lequel vous travaillez.
— Specifiez le nom du fichier essai.c depuis le menu Simulation Real-TimeWorkshop Custom
Code Source files de MATLAB.
— Vous connecterez entre la sortie de l’ADC 12 bits et celle du DAC 8 bits un gain
(a determiner), la sortie s’operant en UINT8 puisque ce convertisseur admet a son
entree des nombres codes dans l’intervalle [0, 255].
— Inserez la Carte DAC 8 bits Mikroelektronika R2R sur le slot RB0-RB7
— Sauvegarder le schema de la chaıne d’acquisition et de restitution du signal sous le nom
DigitalProcessing.mdl, il sera utilise lors des prochaines seances.
Visualisez sur l’oscilloscope le signal analogique a l’entree et le signal analogique restitue par
le DAC
1.6 Acquisition d’un signal audio
Le DsPic n’admet sur ses entrees d’acquisition que des signaux ≥ 0. Or, les signaux audio
issus de la carte son du PC via la prise jack ou le microphone sont des signaux a valeurs moyennes
nulles pouvant prendre des valeurs positives et negatives. On opere a une amplification et a une
translation de ce signal au moyen de la carte a amplificateurs operationnels Sparkfun alimentee
en 0, 5V a partir des slots de la carte de developpement.
— Cablez la carte a amplificateurs operationnelsSparkfun.
— Pour une entree nulle (connectee a la masse), visualisez le signal en sortie de cet amplifi-
cateur et relevez sa valeur.
— Avec l’oscilloscope, reglez un signal sinusoıdal a valeur moyenne nulle, d’amplitude 1 V
et de frequence 1000Hz.A quelle nombre correspond cette tension en sortie du CAN?
— Visualisez le signal en sortie de cet amplificateur et reglez le potentiometre pour que
l’amplitude de la sortie soit de 1V. Verifiez que la valeur moyenne du signal est inchangee.
96 F.BATEMAN
1.6. Acquisition d’un signal audio
— La sortie de l’amplificateur a decalage peut maintenant etre reliee au filtre a capacite
commutee et son entree a la sortie audio du PC.
F.BATEMAN 97
TP 1. CHAINE D’ACQUISITION D’UN SIGNAL NUMERIQUE
98 F.BATEMAN
TP 2
FILTRES NUMERIQUES
2.1 Filtrage numerique
De nombreux capteurs (accelerometres, gyrometres, magnetometres, etc.) delivrent une in-
formation sous la forme d’une tension analogique image de la grandeur physique mesuree. Ces
signaux doivent le plus souvent faire l’objet d’un traitement, par exemple le calcul de leur
moyenne ou de leur valeur efficace. Un tel traitement est avantageusement realise par un filtre
numerique.
La numerisation d’un signal analogique est illustree sur la figure 2.1. Pratiquement, le signal ana-
logique doit etre prealablement filtre par un filtre passe-bas, d’ordre generalement eleve, appele
filtre d’antirepliement ou anti-aliasing. Ce signal est alors echantillonne, bloque et numerise. A
ce stade, il peut faire l’objet d’un traitement par le filtre numerique.
Le microcontroleur DsPic 30F6014A associe au blockset Embedded Target For DsPic et aux
outils proposes par la toolbox Signal Processing de MATLAB permet d’implementer rapidement
de tels filtres.
2.1.1 Liste du materiel
— Carte de developpement BigDsPic6 + 2 cables USB + Boitier d’alimentation
— Bred board
— Carte a amplificateurs operationnelsSparkfun
— Filtre a capacite commutee, condensateurs 100nF, petits fils
e(t)filtreantialiasing
CANBOZ
signaux analogiques signaux numeriques
Traitementnumerique
frequence d’echantillonnage
e(n)
Figure 2.1 – Numerisation d’un signal analogique
99
TP 2. FILTRES NUMERIQUES
— Carte DAC 12 bits Mikroelektronika ou Carte DAC 8 bits Mikroelektronika R2R
— Cable + prise jack, casque audio
— PC + MATLAB-SIMULINK, MPLAB
— GBF, oscilloscope, prises BNC, sonde d’oscilloscope, cable BNC.
2.1.2 Premiers filtres numeriques
Le signal numerique e(nTe) est constitue d’une suite de nombres cadences au rythme de la
periode d’echantillonnage Te, par la suite on ecrira e(n).
Filtre a moyenne glissante :
On propose un premier filtre qui realise en sortie la moyenne des k dernieres valeurs prises
par l’entree :
s(n) =e(n) + e(n− 1) + · · ·+ e(n− k + 1)
kavec k ∈ N
∗ (2.1)
Ce filtre est d’ordre k. Dans le cas ou le signal a filtrer est bruite par un bruit centre, ce filtre
peut simplement reduire ce bruit.
— Sous SIMULINK, generez un signal sinusoıdal a temps discret d’amplitude unitaire et de
valeur moyenne nulle. La periode de ce signal est constituee de 100 echantillons et la
periode d’echantillonnage est egale a 1ms.
— Ce signal est bruite par un bruit blanc (Sources Band-limited white noise) de variance
egale a 0,001.
— Realisez le filtre numerique (2.1) pour k = 5, vous utiliserez les blocs DiscreteUnit
delay.
— Mettez en evidence les effets de ce filtre sur le signal.
Filtre a moyenne glissante ponderee :
Pour privilegier les derniers echantillons, on peut introduire un facteur d’oubli, les equation
du filtre deviennent :
s(n) =a0e(n) + a1e(n− 1) + · · ·+ ak−1e(n− k + 1)
∑ai
avec a0 > a1 · · · > ak−1 (2.2)
— Sous SIMULINK, modifiez le schema du systeme representant (2.1) et implementer (2.2),
vous choisirez les coefficients ai de sorte qu’ils realisent une suite geometrique decroissante
de raison a0. Tester le comportement pour differentes valeurs de la raison 1 ≥ a0 ≥ 0 de
cette suite.
Rejection du bruit a 50Hz : Il est frequent d’observer sur une mesure une composante
residuelle de frequence 50Hz ayant pour source le reseau EDF. Un filtre a moyenne glissante
judicieusement choisi peut permettre d’eliminer ce bruit.
— Ajoutez a un signal sinusoıdal d’amplitude unitaire, de valeur moyenne nulle dont la
periode est constituee de 125 echantillons et la periode d’echantillonnage est egale a
2ms (soit une periode de 250ms), un bruit 50 Hz modelise par un signal signal sinu-
soıdal d’amplitude 0,1 et de valeur moyenne nulle dont la periode est constituee de 10
echantillons et la periode d’echantillonnage est egale a 2ms (soit une periode de 20ms).
100 F.BATEMAN
2.2. Les filtres a Reponse Impulsionnelle Finie
z−1z−1z−1z−1
a0 a1 a2 ak−1
+ + +s(n)
e(n)
Figure 2.2 – Structure d’un filtre RIF
— Proposez une structure de filtre a moyenne glissante qui supprime ce bruit.
2.2 Les filtres a Reponse Impulsionnelle Finie
Comme precedemment, la sortie du filtre a pour expression :
s(n) =
k−1∑
i=0
aie(n− i) (2.3)
La structure d’un tel filtre est representee sur la figure 2.2.
— Calculez la reponse de ce filtre a une impulsion de dirac δ(j) de poids unitaire. Soit s(0),
s(1), . . . , s(k − 1), s(k), etc. Que constate-t-on ?
— Precisez le terme reponse impulsionnelle finie.
2.2.1 Rappels sur la transformee en ZLa transformee en Z de la suite d’echantillons x(n) a pour expression :
Z[x(n)] = X(z) =+∞∑
i=0
x(i)z−i (2.4)
Un retard de k1 echantillons (cf. figure 2.3) s’ecrit :
Z[x(n− k1)] = X(z)z−k1 + z−k1
i=−1∑
i=−k1
x(i)z−i
︸ ︷︷ ︸
echantillons ajoutes a la sequence
(2.5)
On suppose les conditions initiales toutes nulles, soit x(n) = 0 pour n < 0.
— Calculer la fonction de transfert en Z du filtre RIF (2.3).
En regime harmonique z = ej2πfTe et la fonction de transfert harmonique a pour expression :
H(jf) =
k−1∑
i=0
aie−j2πfTe (2.6)
F.BATEMAN 101
TP 2. FILTRES NUMERIQUES
x(n)
x(n− 2)
n
n
Figure 2.3 – Retard temporel et transformee en Z
H(jf)
f
Fe
1
fc−fc
Fe
2
Fe
2
Figure 2.4 – Filtre cardinal
On demontre, lorsque les coefficients ai = ak−1−i, soit a0 = ak−1, a1 = ak−2, etc. que
l’argument de H(jf), autrement dit le dephasage introduit par le filtre vaut −2πfk − 1
2Te et le
filtre est dit a phase lineaire. L’interet est que le temps de propagation du signal a travers le
filtre est constant et egal ak − 1
2Te.
— Sous SIMULINK, reprendre la structure du filtre a moyenne glissante ponderee et choi-
sissez pour ce filtre des coefficients tels qu’il presente une phase lineaire.
— Tester ce filtre en reponse a des signaux sinusoıdaux a temps discret de periode egale a
50ms, 100ms et 200ms. Dans chacun des cas mettre en evidence le retard produit par le
filtre et verifier qu’il est conforme a la theorie.
— Quel interet offre selon vous un filtre lineaire dans le traitement d’un signal audio ?
2.2.2 Synthese de filtre RIF
Le but est, pour un gabarit frequentiel donne, de determiner les coefficients ai du filtre qui
realisent ce gabarit.
L’expression analytique de H(jf), la fonction de transfert harmonique du filtre a synthetiser
est obtenue a partir du gabarit frequentiel. La transformee de Fourier inverse de H(jf) notee
F−1[H(jf)] = h(t) est la reponse impulsionnelle du filtre. Apres echantillonnage de h(t) a
la frequence Te = 1Fe, les echantillons h(n) sont, a la periode d’echantillonnage Te pres, les
coefficients an du filtre.
On se propose de synthetiser un filtre cardinal dont le diagramme frequentiel est represente
sur la figure 2.4. On prendra Fe = 400Hz.
Rappel 1 : La transformee de Fourier du peigne de Dirac
δTe =+∞∑
n=−∞
δ(t− nTe)
102 F.BATEMAN
2.2. Les filtres a Reponse Impulsionnelle Finie
est egalement un peigne de Dirac :
δ 1
Te
=1
Te
k=+∞∑
k=−∞
δ(f − k
Te)
Rappel 2 : F [x(t).y(t)] = F [x(t)] ∗ F [y(t)] ou ∗ est le produit de convolution.
— Calculez la transformee de Fourier inverse de ce filtre, soit h(t), qui n’est autre que sa
reponse impulsionnelle et representez son chronogramme.
— Ce filtre est-il causal ? realisable ? La reponse est a justifier.
— Representez le chronogramme de h(nTe), la reponse impulsionnelle echantillonnee, obte-
nue par multiplication de h(t) par le peigne de dirac δTe .
A l’echantillonnage dans le domaine temporel correspond une periodisation du motif du
spectre du module de H(jf) et une multiplication de l’amplitude des motifs du spectre par1
Te.
— Representez le module du spectre du signal echantillonne H∗(jf) = |F [h(nTe)]|.
Pour que dans la bande [−Fe
2, Fe
2] le spectre du signal echantillonne ait la meme amplitude
que H(jf), les echantillons de la reponse impulsionnelle h(nTe) doivent etre multiplies par Te,
soit h(nTe) cette reponse dont les echantillons ne sont autres que les coefficients du filtre.
— Donnez les valeurs des coefficients ai du filtre.
— Ecrivez un script sous MATLAB pour visualiser les coefficients du filtre. A ce propos, il
est conseille d’utiliser la fonction sinc.
Ce filtre presente une reponse impulsionnelle infinie et il est non causal, pour le realiser, on
opere a une troncature suivie d’un decalage a droite des echantillons restants.
— Multipliez la reponse impulsionnelle par une fenetre temporelle w(nTe) telle que :
w(nTe) = 1 pour 5 ≥ n ≥ −5
w(nTe) = 0 sinon
— Modifiez le script pour visualiser la reponse tronquee. A ce propos, la fonction find per-
met d’acceder aux indices des variables satisfaisant une ou plusieurs conditions dans un
tableau.
c l e a r a l l ; c l c ;
x =0 : 0 . 1 : 1 . 5 ; % d e f i n i t un tab leau de t a i l l e 16 qui c on t i en t des
% va l eu r s compr i ses ent r e [ 0 , 1 . 5 ] par pas de 0 .1
y=x . ˆ 2 ; % c a l c u l e y (x ) , y e s t un tab leau de meme t a i l l e que x
n=f i nd (x>0.2 & x<0 .6 ) ; % n e s t un tab leau contenant l e s i n d i c e s 4 5 6 de x
% dont l e s va l eu r s sont contenues dans [ 0 . 3 , 0 . 5 ]
x (n) % con t i en t 0 . 3 , 0 . 4 , 0 . 5
y (n) % renvo i e l e s y (x ) pour x dans [ 0 . 3 , 0 . 5 , 5 ]
F.BATEMAN 103
TP 2. FILTRES NUMERIQUES
— Au moyen de la fonction freqz, calculez le module (fonction abs) et l’argument (fonction
angle) de cette fonction de transfert.
— Tracez le module et l’argument en fonction de la frequence et observez que ce ce dernier
qui represente la phase varie lineairement en fonction de la frequence.
Sur le trace du diagramme du module fonction de la frequence reduite apparaissent, dans en
dehors de la bande passante, des oscillations. C’est le phenomene de Gibbs. Ces oscillations ont
pour origine la troncature.
— Expliquez pourquoi la multiplication dans le domaine temporel de h(nTe) par w(nTe) est
a l’origine du phenomene de Gibbs.
Une troncature operee par une fenetre de Hamming permet d’eliminer ce phenomene.
— Modifiez le programme MATLAB de maniere a tronquer h(nTe) par une fenetre de Ham-
ming comportant 11 echantillons (fonction hamming).
— Au moyen de la fonction freqz, calculer et tracer le module et l’argument de cette fonction
de transfert en fonction de la frequence. Il peut etre interessant, de pouvoir comparer les
reponses obtenues pour les differentes fenetres en les tracant sur une meme figure.
— Verifier que le phenomene de Gibbs a disparu.
La fonction fdatool est un outil de synthese de filtres numeriques propose sous MATLAB.
Figure 2.5 – Une liaison serie
— Parametrez les differents champs de cette fonction pour synthetiser un filtre RIF d’ordre
10, le signal est echantillonne a 400 Hz, la frequence de coupure est choisie egale a 100
104 F.BATEMAN
2.3. Filtres a Reponse Impulsionnelle Infinie
Hz et la troncature est realisee par une fenetre de Hamming. Synthetiser le filtre.
— Sous le menu Analysis,
— verifiez que les coefficients du filtres sont identiques a ceux obtenus par le calcul,
— observez le module et la phase ainsi que le retard introduit par ce filtre.
— Generez le bloc SIMULINK correspondant a ce filtre File Export to SIMULINK model.
Ce bloc peut ensuite etre colle dans le template en vue d’une implementation du filtre
sur le DsPic.
Realisation et test du filtre
— Cablez la chaıne d’acquisition et de restitution d’un signal realisee lors du TP .
— Ouvrez le fichier DigitalProcessing.mdl et inserez le filtre RIF synthetise supra Vous
parametrerez la frequence d’acquisition des donnees a 400 Hz . Ajoutez des blocs UART
et Tx Output Multiplexed For Matlab-Labview pour visualisez le signal filtre.
— Au moyen du GBF, appliquer un signal sinusoıdal dont l’amplitude varie entre 1V et 3V
et dont la frequence varie entre 0 et 200Hz. Relever les diagrammes du module et de la
phase sur la meme figure que celle sur laquelle vous avez trace ces diagrammes theoriques.
2.3 Filtres a Reponse Impulsionnelle Infinie
Ces filtres sont decrits par une equation de recurrence de la forme :
s(n) =n∑
j=0
bje(n− j) +m∑
i=0
ais(n− i) (2.7)
et leur fonction de transfert en Z a pour expression :
S(z)
E(z)=
∑mj=0 bjz
−j
∑ni=0 aiz
−i(2.8)
Stabilite des filtres RII
Soit le filtre du premier ordre decrit par l’equation de recurrence :
s(n) = b0e(n)− a1s(n− 1) (2.9)
— A partir de l’equation de recurrence, etablir l’expression du terme general de la reponse
impulsionnelle du filtre (e(n) = δ(n)) avec s(−1) = 0. En deduire a quelle condition sur
a1 ce filtre est stable.
— Realisez ce filtre sur Simulink au moyen de blocs Unit delay. L’impulsion de dirac peut
etre modelisee avec le bloc SourcesPulse generator. Choisissez une periode egale a 100
s et une largeur d’impulsion egale a 1% de la periode.
— Testez ce filtre et relever la reponse pour b0 = 1, a1 = 0.5, b0 = 1, a1 = −0.5,b0 = 1, a1 = 1, b0 = 1, a1 = −1, b0 = 1, a1 = 2, b0 = 1, a1 = −2.
F.BATEMAN 105
TP 2. FILTRES NUMERIQUES
Dans le cas general, on demontrer qu’un tel filtre est stable si et seulement si tous ses poles ziavec i ∈ 1, . . . , n verifient |zi| < 1. Ce resultat est a rapprocher de celui qui definit la stabilite
des systemes lineaires continus, a savoir qu’un tel systeme est stable si et seulement si tous ses
poles pi verifient Re(pi) < 0. En effet, pour un systeme echantillonne z = epTe.
2.3.1 Synthese des filtres RII
On ne presente ici qu’une seule methode.
Synthese par invariance impulsionnelle :
Cette methode consiste a synthetiser la version discrete de la reponse impulsionnelle 1 d’un
filtre lineaire a temps continu. On se propose de la decouvrir sur un exemple simple.
Soit le filtre passe-bas du premier ordre de fonction de transfert :
H(p) =k
p
ωc+ 1
(2.10)
— Calculez sa reponse impulsionnelle h(t).
— Donnez l’expression de h(nTe).
— Calculez H(z) la transformee en Z de h(nTe) et verifier le resultat en utilisant la fonction
c2d de MATLAB avec l’option impulse, vous adopterez k = 1 et ωc = 200πrad/s et
Te = 1.10−3.
— Tracez avec la fonction Bode le diagramme de Bode de ce filtre.
— Implementez ce filtre sur le DsPic.
Synthese a partir d’un gabarit :
http://www.esiee.fr/~courivad/Files/ST4-RF1/st4rf1_filtreshyper.pdf pages 3-5.
Dans cette partie, vous synthetiserez et implementerez un filtre numerique RII visant a
extraire l’harmonique de rang 3 d’un signal carre x(t) de frequence fondamentale egale a 50Hz.
On rappelle qu’un tel signal admet la decomposition en serie de Fourier suivante :
x(t) = x+
+∞∑
k=0
4
(2k + 1)πsin((2k + 1)πft) (2.11)
Ce signal est represente sur la figure 2.6.
1. Il serait egalement possible de synthetiser un filtre RIF a partir de l’expression de la reponse indicielle du
filtre continu (c2d option zoh).
106 F.BATEMAN
2.3. Filtres a Reponse Impulsionnelle Infinie
t
x(t)
2V
3V
20msFigure 2.6 – Le signal a filtrer
— Quel type de filtre choisir pour extraire l’harmonique 3 ?
Avec l’outil fdatool, synthetisez un filtre de Butterworth RII tel que :
1. le signal est echantillone a 1000Hz
2. le fondamental soit attenue d’un facteur 100,
3. l’harmonique de rang 5 et les harmoniques de rang superieur soient attenues d’au moins
d’un facteur 100
4. l’amplitude de l’harmonique 3 conserve la meme amplitude
F.BATEMAN 107
TP 2. FILTRES NUMERIQUES
108 F.BATEMAN
TP 3
BANCS DE FILTRES
3.1 Objectif
Traiter un signal audio echantillonne et numerise par l’algorithme de Mallat. L’application
etudiee consiste a cacher un message dans un signal audio. Pour cela, vous reprendrez le montage
realisant l’acquisition d’un signal audio par un CAN et sa restitution par un CNA.
Dans un premier temps, l’algorithme de Mallat sera developpe et teste avec SIMULINK. Dans
un second temps, il sera implemente sur le microcontroleur 30F6014 pour etre teste en temps
reel.
3.1.1 Liste du materiel
— Carte de developpement BigDsPic6 + 2 cables USB + Boitier d’alimentation
— Bred board
— Carte a amplificateurs operationnelsSparkfun
— Filtre a capacite commutee, condensateurs 100nF, petits fils
— Carte DAC 12 bits Mikroelektronika ou Carte DAC 8 bits Mikroelektronika
— Cable + prise jack, haut-parleur,
— PC + MATLAB-SIMULINK, MPLAB
— GBF, oscilloscope, prises BNC, sonde d’oscilloscope, cable BNC.
109
TP 3. BANCS DE FILTRES
3.2 L’algorithme de Mallat
3.2.1 L’analyse
Le signal a analyser est echantillonne a Fe = 8kHz. Pour respecter la condition de Shannon,
son spectre est dans la bande [0 − Fe
2] 1. L’analyse de ce signal consiste en une succession
d’operations de filtrage passe-bas et passe-haut de maniere a explorer les differentes bandes du
spectre du signal etudie. Les coefficients des fonctions de transfert de ces filtres sont obtenues
au moyen de la toolbox Wavelett de MATLAB. Les filtres utilises pour la decomposition (d) sont
d’ordre trois a reponse impulsionnelle finie (RIF). Ils ont pour fonction de transfert :
Lod = −0.1294 + 0.2241z−1 + 0.8365z−2 + 0.4830z−3 Lo pour Low pass (3.1)
Hid = −0.4830 + 0.8365z−1 − 0.2241z−2 − 0.1294z−3 Hi pour High pass (3.2)
Premier etage : La frequence de coupure des filtres est localisee aFe
4. Chaque filtre de
decomposition est suivi d’un decimateur, ce dernier supprime un echantillon sur deux 2, de sorte
que le signal en sortie du decimateur apparaıt comme echantillonne aFe
2. Cette operation de
filtrage est representee sur la figure 3.1.
Le signal issu du filtre passe-haut echantillonne a Fe couvre la bande de frequence [Fe
4− Fe
2]. Il
est ensuite decime (echantillonne aFe
2). Ce signal est appele Detail 1 et note D1.
2
2
Lod
Hid
x(kT )
A1(k2T )
D1(2kT )
2
2
Lod
Hid
A2(22kT )
D2(22kT )
Figure 3.1 – Algorithme de Mallat
— Saisissez les fonctions de transfert de ces filtres sousMATLAB avec la fonction filt et tracez
sur une meme figure leur diagramme de Bode. Vous mettrez en evidence le caractere
complementaire de ces filtres.
Second etage : L’algorithme de Mallat est recursif. Le signal issu du premier filtre passe-bas
et decime est a nouveau traite par deux filtres passe-haut et passe-bas de fonction de transfert
1. Un filtre d’anti-repliement precede l’acquisition.
2. Ce qui est un abus de langage, la decimation, pratique utilisee dans l’armee romaine, consistait a sacrifier
un legionnaire sur dix lorsque une legion s’etait mal comportee au combat.
110 F.BATEMAN
3.2. L’algorithme de Mallat
etage 1 2 . . . n
D1 D2 . . . Dn A
frequence d’echantillonnageFe
2
Fe
22. . .
Fe
2nFe
2n
bande analysee
[Fe
4,Fe
2
] [Fe
8,Fe
4
]
. . .
[Fe
2,Fe
2n
] [
0,Fe
2n
]
Tableau 3.1 – Frequences d’echantillonnage et bandes de frequences analysees en fonction du nombre
d’etages
(3.3) dont les frequences de coupure sont localisees aFe
8. Ces deux filtres sont eux-memes suivis
de decimateurs. Le signal issu du second filtre passe-haut et echantillonne aFe
2couvre la bande
de frequence [Fe
8− Fe
4]. Ce signal est ensuite decime (echantillonne a
Fe
4). Il est appele Detail
2 et note D2.
— Sur la meme figure que precedemment, tracez les diagrammes de Bode des filtres du
second etage. Pour le trace, utilisez differentes couleurs.
neme etage : Si le filtre comporte n etages, le signal issu du neme filtre passe-bas couvre la
bande du spectre comprise dans [0,Fe
2.2n]. Il est decime (echantillonne a
Fe
2n) et est appele ap-
proximation et note A.
Le signal issu du filtre passe-haut couvre la bande de frequence [Fe
2.2n,Fe
2n]. Il est decime (echan-
tillonne aFe
2n) et est appele Detail n et note Dn.
Le tableau 3.1 resume ce qui precede :
Simulation
Sous SIMULINK realisez un filtre d’analyse a n=4 etages.
— Le Fixed Sample Time est fixe a 18000
s,
— Pour les filtres : blocs Discrete Discrete FIR Filter,
• vous parametrerez les Sample time en vous referant aux explications qui precedent.
— Pour la decimation : blocs DSP System toolbox Signal operation Downsample. Le
parametrage est le suivant :
• Element as channel (sample based)
• Allow multirate processing
— Encapsulez votre modele dans un Subsystem
— Vous mettrez en evidence la capacite de ce banc de filtres a operer a l’analyse temps/-
frequence d’un signal en appliquant a son entree un chirp 3. Pour cela vous utiliserez un
3. Signal dont la frequence est modulee lineairement en fonction du temps sur une plage [fmin, fmax].
F.BATEMAN 111
TP 3. BANCS DE FILTRES
bloc Source Chirp suivi d’un bloc Rate Transition. Il vous est demande de parametrer
ces blocs.
— Observez l’approximation A et les details D1 a D4. Attention, ces signaux ne sont pas
echantillonnes a la meme frequence et doivent etre observes sur des Scope distincts.
3.2.2 La reconstruction
Un second banc permet la reconstruction (r) du signal a partir des details Di et de l’approxi-
mation A. Les filtres passe-bas et passe-haut utilises ont pour fonction de transfert :
Lor = 0.4830 + 0.8365z−1 + 0.2241z−2 − 0.1294z−3 Lo pour Low pass (3.3)
Hir = −0.1294 +−0.2241z−1 + 0.8365z−2 − 0.4830z−3 Hi pour High pass (3.4)
Ces filtres sont precedes d’interpolateurs 2 ↑, ces derniers doublent la frequence d’echan-
tillonnage du signal applique a leur entree en inserant des zeros entre les echantillons.
2
2
Lod
Hid
x(kT )
D1(2kT )
An(2nkT )
Dn(2nkT )
2
2 2
2
Lod
Hid
LoR
HiR
+
+
2
2
Figure 3.2 – Algorithme de Mallat
Simulation
Sous SIMULINK realisez un filtre de reconstruction a n=4 etages.
— Pour les filtres : blocs Discrete Discrete FIR Filter,
• vous parametrerez les Sample time en vous referant aux explications qui precedent.
— Pour l’interpolation decimation : blocs DSP System toolbox Signal operation Up-
sample. Le parametrage est le suivant :
• Upsample factor egal a 2,
• Sample offset a 1, on insere des zeros sur les echantillons impairs.
— Encapsulez votre modele dans un Subsystem
— Connectez les deux sous-systemes, le bloc analyse et le bloc reconstruction.
Vous allez tester le systeme ainsi realise en le soumettant a un signal audio.
— Depuis le Command Window tapez et executez load handel puis ecoutez le signal audio
contenu dans la variable y en tapant et executant sound(y, 8000).
— Appliquez a l’entree du bloc analyse un bloc.
112 F.BATEMAN
3.3. La steganographie
— Sous SIMULINK, ajoutez un bloc SourceSimin qui generera y. Pour que ce bloc fonc-
tionne, vous devrez aussi generer un vecteur temps de meme dimension que y.
— Inserez un bloc Scope et parametrez-le de maniere a ce que le signal observe soit accessible
depuis le Workspace dans une variable appelee out 4.
— Ecoutez le signal audio contenu dans la variable out.
3.3 La steganographie
Le principe de la steganographie est illustre sur la figure 3.3 dans le cas n = 2. Dans le cas
presente, on substitue au detail D2, un message echantillonne a la meme frequence et de duree
inferieure au signal x(kT ) qui lui sert de support. Le camouflage du message est opere dans les
domaines temporels et frequentiels.
2
2
Lod
Hid
x(kT )
D1(2kT )
A2(4kT )
D2(4kT )
2
2 2
2
Lod
Hid
LoR
HiR
+
+
2
2
+
+
x(kT )
message(2kT )
Figure 3.3 – Principe de la steganographie
3.3.1 Generation du message a cacher
Le message a cacher est le code morse EA code ”. .-”, pour le generer, vous modulerez un
signal sinusoıdal par un signal binaire. Ce dernier peut etre realise avec le bloc SourceRepeating
sequence stair. Le message a cacher doit se substituer a D1 dans le bloc de reconstruction.
— Quelle doit etre la periode d’echantillonnage pour le message a cacher ?
— On adopte un signal sinusoıdal de frequence egale a 2500Hz. Justifiez ce choix.
4.
1. double-cliquez sur le scope qui affiche le signal que vous voulez traiter,
2. cliquez sur l’icone Parameters onglet History
3. decochez la case Limit data point to last
4. cochez la case Save data to workspace
5. donnez un nom explicite a la variable, par exemple out et choisissez le format Array, validez
6. relancez la simulation
7. out est un tableau accessible depuis le Command Window dont la premiere colonne est le temps, les colonnes
suivantes sont les valeurs prises par les signaux appliques au Scope. La commande plot(out( :,1),out( :,2))
permet d’afficher le premier signal.
F.BATEMAN 113
TP 3. BANCS DE FILTRES
— Realisez le message code, simulez-le, observez-le. Pour qu’il soit audible, regler l’amplitude
de la sinuosıde a 0.5. Ecoutez le message code.
— Inserez le message code dans le bloc reconstruction (amplitude du sinus cette fois reglee
a .0.05 ), lancez la simulation, visualisez et ecoutez le signal audio en sortie du bloc de
reconstruction (il sonne un peu metal). Le message en morse y est cache,
— Faites une copie due bloc analyse et inserez-le en sortie du bloc reconstruction. Observez
et ecoutez le detail D1, (au besoin amplifiez-le) .
3.4 Implementation de l’algorithme de steganographie
— Vous reprendrez le fichier DigitalProcessing.mdl realise lors de la seance de TP 2.2.2.
— Cablez et validez la chaıne d’acquisition et de restitution d’un signal analogique. Cette
chaıne comprend : l’amplificateur a decalage, le filtre a capacite commutee LTC1609, un
des convertisseurs analogique numerique 12 bits du microcontroleur DsPic30F6014 et un
convertisseur numerique analogique 12 ou 8 bits.
— Verifiez le bon fonctionnement de cette chaıne, vous pourrez en particulier appliquer a
l’entree du montage un signal issu de la sortie audio du PC et restituer la sortie du DAC
sur un haut parleur.
— Inserez le schema de simulation de l’algorithme de Mallat entre le bloc ADC du micro-
controleur et le bloc DAC.
— On ne dispose que d’un DAC et on ne peut donc connecter qu’un seul haut-parleur.
— Pour que le message cache audio soit audible, il faut ajouter un offset de 1 sur la sortie
D1 du bloc qui permet l’analyse du signal audio contenant le message et amplifier ce
message avec un gain de l’ordre de 50.
— Compilez et testez ce programme.
114 F.BATEMAN
TP 4
FILTRAGE ADAPTATIF
4.1 Objectif
Dans cette seance vous decouvrirez et implementerez des algorithmes d’identification para-
metrique dont la fonction est d’estimer, au sens d’un critere, les parametres du modele d’un
signal. Le but etant de realiser un filtre adaptatif. L’application proposee consiste a eliminer
le bruit qui couvre un message audio. Typiquement, les casques a reduction de bruit active ou
le controle actif de structures integrent ce type de technologie. Les methodes d’identification
etudiees sont tres largement utilisees dans des domaines tout aussi differents que le traitement
du signal, l’economie, l’automatique, etc.
4.1.1 Liste du materiel
— Carte de developpement BigDsPic6 + 2 cables USB + Boitier d’alimentation
— Bred board
— Carte a amplificateurs operationnelsSparkfun
— Filtre a capacite commutee, condensateurs 100nF, petits fils
— Carte DAC 12 bits Mikroelektronika ou Carte DAC 8 bits Mikroelektronika R2R
— Cable + prise jack, casque audio
— PC + MATLAB-SIMULINK, MPLAB
— GBF, oscilloscope, prises BNC, sonde d’oscilloscope, cable BNC.
4.1.2 Principes
Le signal qu’on cherche a caracteriser peut etre vu comme la reponse d’un filtre auquel
on a applique un signal ayant un spectre frequentiel suffisamment riche et dont on connaıt
les proprietes 1. Caracteriser le signal inconnu equivaut alors a connaıtre la structure et les
1. Pratiquement, on peut utiliser un bruit blanc ou une sequence binaire pseudo aleatoire ; a contrario un
signal harmonique fige en frequence presente un contenu frequentiel extremement pauvre.
115
TP 4. FILTRAGE ADAPTATIF
parametres du filtre.
4.2 Modele d’un signal
D’une maniere general, le signal en sortie du filtre peut etre decrit par une equation de la
forme :
y = f(η,x) (4.1)
ou y contient les sorties mesurees, η contient les parametres recherches et x contient des
variables supposees connues et appelees variables explicatives, ce seront par exemple la sequence
d’entrees appliquees au filtre et/ou les sorties mesurees passees. Pour illustrer ceci, on donne la
fonction de transfert d’un filtre a reponse impulsionnelle infinie :
Y (z)
U(z)=
b0 + · · ·+ bmz−m
1 + a1z−1 + · · ·+ apz−p(4.2)
L’equation de recurrence de ce processus qualifie d’ARMA (Auto Regressive Moving Average)
s’ecrit :
y(k) = −a1y(k − 1)− · · · − apy(k − p)︸ ︷︷ ︸
auto regressive AR
+ b0u(k) + . . . bmu(k −m)︸ ︷︷ ︸
moving average MA
(4.3)
soit :
y(k) = xη (4.4)
avec y = y(k), ηT =(
a1 . . . bm
)
, x =(
−y(k − 1) . . . u(k −m))
Le modele de ce filtre est lineaire en les parametres, ces derniers peuvent etre estimes au
moyen de la methode dite des moindres carres.
4.3 Les moindres carres
4.3.1 Les moindres carres simples
Soit le filtre lineaire decrit par le modele (4.5) :
yn = Xnη + ε (4.5)
ou n le nombre de mesures est superieur am le nombre de parametres a identifier. Le systeme
est dit surdetermine.
116 F.BATEMAN
4.3. Les moindres carres
⋆ les n mesures yn =
y(1)
. . .
y(n)
⋆ le jeu de n variables explicatives Xn =
x1(1) . . . xm(1)
. . .
x1(n) . . . xm(n)
⋆ les m parametres a estimer η =
η1. . .
ηm
⋆ εn ∈ Rn represente les erreurs de modelisation.
On cherche une estimation η des parametres η qui minimise la somme des erreurs elevees au
carre :
J = minη
1
2
(ε(1)2 + . . . ε(n)2
)= min
η
1
2εTnεn = min
η
1
2(yn −Xnη)
T (yn −Xnη) (4.6)
On demontre que la solution de ce probleme a pour expression :
η = (XTnXn)
−1XTnyn (4.7)
ou η est le vecteur qui contient les estimations des parametres η du modele.
Dans ce qui suit, les signaux sont echantillonnes a 8kHz. Pour mieux percevoir les effets, il
n’est pas inutile de visualiser et d’ecouter les signaux generes. Pour ce faire, les signaux peuvent
etre enregistres dans un bloc Sinks simout To workspace puis ecoutes avec la fonction sound,
en precisant la frequence d’echantillonnage.
Identification des parametres d’un processus MA
On considere le processus a moyenne mobile (Moving Average) d’ordre un decrit par l’equa-
tion de recurrence :
y(k) = b0u(k) + b1u(k − 1) (4.8)
u ∼ N (0, 1) et y(0) = 0.
— Quel systeme simple pourrait, selon vous, etre decrit par ce type de processus (on peut
l’etendre a un ordre beaucoup plus eleve).
La fonction de transfert associee est celle d’un filtre RIF :
Y (z)
U(z)= b0 + b1z
−1 (4.9)
F.BATEMAN 117
TP 4. FILTRAGE ADAPTATIF
Il s’agit ici d’identifier les parametres b0 et b1 de ce filtre dont la structure est connue a
priori. L’equation de recurrence est lineaire en les parametres et l’on peut appliquer la methodes
des moindres carres simples.
On note ηT =
(
b0 b1
)
, yTn =
(
y(0), . . . , y(n))
avec n > 2 l’horizon des mesures et Xn la
matrice contenant les variables explicatives collectees sur l’horizon des mesures.
— Etablissez la structure de la matrice Xn.
Dans un premier temps, vous caracteriserez quelques proprietes du signal etudie :
— Ouvrez et simulez-le le fichier ProcessMA.mdl.
— Calculez et representez sur une meme figure la transformee de fourier fft du bruit. En
deduire la nature du filtre recherche. Vous pouvez aussi ecouter les sons correspondant
aux variables en entree et en sortie du filtre.
— Calculez avec les fonctions xcov et xcorr les fonctions d’autocovariance et d’autocorrela-
tion du bruit blanc d’entee u et de la reponse y. Interpretez la fonction d’autocorrelation.
Dans un second temps, vous identifierez les parametres du filtre qui permet de generer le
signal etudie :
— Completez ce schema de maniere a pouvoir enregistrer les tableaux contenant les variables
explicatives Xn et les mesures yn. Pour cela, il faut utiliser des blocs Sinkssimout.
Ceux-ci permettent de disposer des signaux simules dans l’espace de travail afin de pou-
voir operer a un post-traitement sous MATLAB. Pour que les mesures et les variables
explicatives apparaissent sous forme de tableaux dans MATLAB, les blocs To Workspace
doivent etre parametres comme Array. Ils peuvent etre precedes d’un bloc Mux a n
entrees si l’on souhaite enregistrer un tableau a n colonnes.
— Appliquer la methode des moindres carres et verifier que les parametres estimes sont
bien a ceux recherches. Pour cela, construisez sous SIMULINK et sur le meme schema, le
processus (??) ou le filtre correspondant (4.9).
— Soumettez-le au bruit a l’origine du signal recherche, tracez le spectre frequentiel du signal
obtenu et comparez-le a celui du spectre du signal recherche.
Identification des parametres d’un processus AR
On considere le processus auto-regressif (AR) d’ordre un decrit par l’equation de recurrence :
y(k) = −ay(k − 1) + bu(k) (4.10)
u ∼ N (0, 1) et y(0) = 0.
— Quel systeme simple pourrait, selon vous, etre decrit par ce type de processus (on peut
l’etendre a un ordre beaucoup plus eleve).
La fonction de transfert associee est celle d’un filtre RII :
Y (z)
U(z)=
b
1 + az−1(4.11)
118 F.BATEMAN
4.3. Les moindres carres
Il s’agit ici d’identifier les parametres a et b de ce filtre dont la structure est connue a
priori (on suppose su le fait que le modele recherche est celui d’un systeme du premier ordre a
temps discret). L’equation de recurrence est lineaire en les parametres et l’on peut appliquer la
methodes des moindres carres simples.
— Ouvrez et simulez-le le fichier ProcessAR.mdl. Memes questions que pour le processus
MA.
Dans ce qui precede, les reponse y etaient supposees parfaites, or en realite, celles-ci sont
entachees de bruit. De ce fait, chaque nouvelle campagne de mesure fournit une estimation des
parametres differente des precedentes. Les parametres estimes sont des variables aleatoires que
l’on caracterise par leur moyenne et leur variance 2. Sous SIMULINK, ce bruit s’ajoute a la
reponse y et est modelise par un bloc SourcesBand limited white noise. Pour ce bloc :
— Noise power est la variance du bruit.
— Seed definit la sequence des variables aleatoires en sortie du bloc. Pour generer des bruits
non correles, il faut attribuer a chaque bloc un seed quelconque mais different des autres.
— Operez a plusieurs simulations (au moins 5) avec un noise power constant et egale a0.1
8000dont vous ferez varier le seed. Donnez dans chacun des cas une estimation des parametres.
— Dans le plan a, b portez les differentes estimations des parametres.
— Calculez la moyenne des parametres (fonction mean) et faire le constat que les para-
metres moyens estimes different des parametres vrais. L’estimation est dite biaisee.
— Calculez la variance des erreurs d’estimation (fonction var)
— Operez a plusieurs simulations (au moins 3) avec un bruit de mesure de variance crois-
sante, le seed restant constant. Evaluez les consequences de l’augmentation du noise power
du bruit de mesure sur le credit a apporter aux parametres estimes.
Autres processus
Il existe d’autres modeles de processus, notamment le modele ARMA (Auto Regressive Mo-
ving Average), ARX (Auto Regressive Exogen), ARMAX, etc. Toute la difficulte consiste lors
d’une phase d’identification a cerner le modele de processus ad’hoc
— Quel modele choisir ?
— Quel ordre pour le modele retenu ?
4.3.2 Algorithmes des moindres carres recursifs
L’expression de η nous oblige a tout recalculer lors de l’acquisition d’une nouvelle mesure.
Une formulation recursive de l’algorithme MCS est proposee afin d’identifier les parametres en
temps reel. On note ηn l’estimation des parametres obtenue apres n mesures. En posant yn la
nieme mesure :
Pn = (XTnXn)
−1
Qn = XTnyn
2. Hypothese est faite que ces parametres sont decrits par une loi normale
F.BATEMAN 119
TP 4. FILTRAGE ADAPTATIF
En posant xn le nieme vecteur ligne des variables explicatives, On demontre que :
ηn = ηn−1 +Pn−1xn
1 + xTnPn−1xn
(y(n)− xT
nηn−1
)(4.12)
Algorithme MCR
— η0 = 0
— Pn = Idm
Pour n = 1, 2, . . .
— k(n) =Pn−1xn
1 + xTnPn−1xn
gain visant a prendre en compte l’erreur d’estimation
— e(n) = y(n)− xTnηn−1 l’erreur d’estimation pour la nieme mesure
— ηn = ηn−1 + k(n)e(n) actualisation des parametres
— Pn = Pn−1 − k(n)xTnPn−1 actualisation de la matrice Pn
Vous allez maintenant implementer cet algorithme.
— Reprenez le schema realise sous SIMULINK utilise pour l’etude des processus MA.
— Copiez-collez dans ce schema un bloc User defined functionsEmbedded Matlab func-
tion, double-cliquez sur ce bloc et dans la feuille de l’editeur, implementez l’algorithme des
moindres carres recursifs et visualisez les parametres estimes sur un bloc SinksDisplay.
Pour plus de details sur ce bloc, reportez-vous au §3.7.2.— Avec les parametres estimes par l’algorithmeMCR et des blocsMaths OperationProduct
et DiscreteDelay, construisez le processus MA (4.8). Pour des filtres d’ordre plus eleve
vous utiliserez le bloc DiscreteDiscrete FIR filter en le parametrant de sorte que ses
coefficients soient definis en entree du bloc.
Implementation temps reel
— Une fois ce modele de simulation valide, vous l’insererez dans un template en vue d’im-
plementer cet algorithme sur le DsPic 30F6014A.
— Visualisez les parametres estimes au moyen d’un bloc Tx Labview Matlab et de l’interface
rs232gui.
— Visualisez le bruit blanc filtre et son estimation. Pour ce faire, il convient de traiter les
donnees collectees en appliquant la demarche suivante.
Les mesures d’acceleration et de hauteur sont stockes dans les variable R et Rn, les instants
auxquels sont associees ces mesures sont stockees dans le tableau t R et t Rn. Comme les
mesures d’acceleration sont prelevees a une frequence double de celles de hauteur, le tableau R
a la structure suivante Tab.4.1) :
120 F.BATEMAN
4.4. Reduction de bruit active
NaN y
x NaN
x NaN
Nan y
x NaN
x NaN
NaN y
. . . . . .
Figure 4.1 – Structure de R
Ou NaN est l’acronyme de Not a Number. Il faut donc dans un premier temps reconstruire
un tableau dans lequel les NaN n’apparaissent pas.
— Ecrivez un script sous MATLAB qui permette de stocker dans deux vecteurs les donnees
numeriques contenues dans Rn. Vous pouvez utiliser avec profit les fonctions suivantes :
— Rn( :,1), Rn( :,2) permettent respectivement d’acceder a la premiere et a la seconde
colonne de Rn.
— isnan
— find
4.4 Reduction de bruit active
4.4.1 Principe
Une source de bruit externe b (par exemple le bruit ambiant dans la cabine d’un avion) per-
turbe un message audio m (message recu au moyen d’un casque audio par le pilote). Cependant,
le bruit interne b entendu dans le casque n’est pas tout a fait le bruit externe. Il est, du fait des
ecouteurs, attenue et dephase. Toutefois b et b sont correles et b peut etre vu comme la reponse
de b a un filtre inconnu F. Le signal entendu s’ecrit :
mb = m+ b (4.13)
Pratiquement, un premier microphone est utilise pour mesurer le bruit ambiant b tandis
qu’un second microphone implante dans les ecouteurs est utilise pour mesurer le message bruite
mb. La methode des MCR permet d’identifier en ligne les parametres du filtre F et par suite, de
produire avec ce filtre, a partir de b une estimationˆb de b. Cette estimation est alors soustraite
de mb en vue de restituer une estimation m de m.
4.4.2 Simulation
Ouvrez le fichier NoiseCancel.mdl et completez-le en procedant comme suit :
— Comme on ne dispose pas de tous ces equipements, le bruit b est genere par un SourcesBand
Limited White Noise echantillonne a 18000
s et de puissance 18000
. Il est accessible depuis
le out micro1.
F.BATEMAN 121
TP 4. FILTRAGE ADAPTATIF
— Le bruit interne b est la reponse du filtre F a reponse impulsionnelle finie d’ordre 10 dont
les coefficients sont a priori inconnus. Il modelise les effets des ecouteurs qui tendent a
etouffer le bruit externe sans pour autant le supprimer.
— Le message m est le fichier handel, on y accede en tapant load handel, par defaut le son
est contenu dans la variable y. On l’ecoute avec la fonction sound. Vous pouvez toutefois
produire vos propres messages avec la fonction audiorecorder. Generez le message m avec
un bloc Sourcesimin et ajoutez-le a b pour produire mb.
— Reprenez le schema sur lequel vous avez implemente l’algorithme MCR et modifiez-le
pour identifier les parametres d’un filtre d’ordre 10 et generer le filtre correspondant.
Le vecteur de dimension 11 contenant les sequences b(k), b(k − 1), b(k − 2), . . . , b(k − 10)
pourrait etre realisees avec 10 blocs Discretedelay. Il est cependant plus simple d’utiliser
le bloc DiscreteTaped delay parametre comme il se doit.
— A partir du bruit interne estimeˆb et du message bruite mb (visualisez-les sur un meme
Scope), reconstruisez le message m et ecoutez-le.
Remarque : On peut effectuer la procedure d’identification a une frequence qui soit un sous-
multipe de 18000
en inserant des bloc Rate Transition en amont et en aval de l’Embedded Matlab
Function.
4.4.3 Implementation sur le microcontroleur
Programme en C, le DsPic est, compte-tenu du volume de calculs, trop lent pour appliquer
la methode des moindres carres recursifs a un systeme d’ordre 10 echantillonne a 8000Hz avec
des nombres de type single. On va donc, pour realiser un demonstrateur, considerer un filtre
RIF d’ordre 4 et un signal echantillonne a 1000Hz. Il n’est donc pas possible avec l’outil de
programmation dont nous disposons d’implementer en temps reel 3 l’algorithme simule dans la
section precedente. Nous allons donc travailler sur ce meme algorithme avec des signaux audio
de plus basse frequence et avec des cadences d’echantillonnages plus petites.
Le signal audio
— Mettez en œuvre la chaıne d’acquisition/restitution d’un signal l’amplificateur audio com-
prenant l’amplificateur a decalage, (le filtre a capacites commutees est facultatif), le CAN
et le CNA (8 ou 12 bits).
— Ouvrez le fichier DigitalProcessing.mdl constuit lors du TP 2.2.2 qui realise une chaıne
d’acquisition d’un signal analogique, de numerisation, de traitement et de restitution d’un
signal analogique.
— Modifiez le Fixed Step Time et le Sample Time pour que les signaux soient echan-
tillonnes a 1000Hz.
— Modifiez ce fichier de sorte que le signal sinusoıdal apres numerisation par le CAN
soit centre sur zero.
— Apres traitement et avant la restitution sur le CNA, il faut egalement ajouter un
offset au signal que l’on veut par exemple ecouter (+127 sur CNA 8 bits suivie d’une
3. Il existe une bibliotheque fournie par Microchip qui realise cette fonction, elle est programmee en Assembler
et utilise des fonctionnalites specifiques au processeur de traitement de signal du 30F6014.
122 F.BATEMAN
4.4. Reduction de bruit active
attenuation d’un facteur 16, +2048 sur CNA 12 bits sans attenuation), de sorte que
le signal en sortie du CNA ∈ [0, 5V ].
— Appliquez a l’entree du CAN (ou du filtre a capacites commutees s’il est cable) le signal
audio en provenance d’une source externe (sortie GBF - signal sinusoıdal 180Hz - valeur
moyenne 2.048 V - amplitude crete 1V).
— Verifiez le bon fonctionnement en restituant directement sur haut-parleur le message
analogique traite par le CAN-CNA. Le son n’est malheureusement pas tres bon, ce type
de haut-parleur n’est pas concu pour restituer les basses.
La reduction de bruit active
Inserez le schema de la reduction de bruit active realise sous SIMULINK au §4.4.2. Pour qu’ilpuisse fonctionner, les modifications suivantes s’imposent :
— Modifiez les Sample Time des differents blocs pour que ceux-ci operent a 1000Hz.
— Modifiez leNoise Power du bruit blanc de sorte que celui-ci bruite effectivement le message
audio issu du CAN (∈ [−2048, 2047]). Pour ce bloc, le noise power represente l’amplitude
du bruit soit ±3
√
1
Tset
√
1
Tset la variance du bruit, inversement proportionnelle au
Sample Time. Il faut donc que les amplitudes du bruit et du signal audio aient des
amplitudes du meme ordre de grandeur.
— Dimensionner avec l’outil fdatool un filtre RIF d’ordre 4 (en lieu et place de l’ordre 10
teste precedemment). Les caracteristiques de ce filtre sont :
— Ordre 4 echantillonne a 1000Hz,
— attenuation de 1 dB dans la bande [0,200Hz],
— attenuation 40dB dans la bande [400, 500Hz],
— Pensez a modifier le nombre de retard dans le bloc Tapped Delay et les dimensions
des matrices et vecteurs dans l’algorithme des moindres carres.
Verifiez le bon fonctionnement en :
— Restituant directement sur haut-parleur via le CNA le signal audio bruite.
— Restituant sur haut-parleur le signal issu du module de controle actif du bruit.
F.BATEMAN 123
TP 4. FILTRAGE ADAPTATIF
124 F.BATEMAN
ANNEXE A
Liste des fichiers MATLAB-SIMULINK
Fichier § Titre fourni (f)/a produire(p)
Sequence 1 1.1.2
Sequence1 1.mdl Systemes continus p
Systemes echantillonnes-bloques
Systemes echantillonnes-bloques
1.1.3 Quantification
Sequence1 2.mdl 1.2 A propos des nombres f
Sequence1 3.mdl 1.2.1 Deux integrateurs p
Sequence1 4.mdl Multiple sample time f
Sequence 2
Chenillard.mdl 2.4 Chenillard p
Sequence 3
Bascule T.mdl 3.1 Bascule T p
Test Tx.mdl 3.2 transmission donnees RS232 p
Test Rx Tx.mdl reception-emission de donnees 1 f
Test Rx Tx1.mdl reception-emission de donnees 2 p
Test Rx Tx3.mdl reception-emission d’un flux de donnees 2 p
Visualisation.mdl 3.2.3 visualisation des signaux p
SPI CNA12bits 3.3 CAN12 bits controle par bus SPI p
PWM1.mdl 3.4.2 Generation d’une PWM p
PWM2.mdl 3.4.3 Decodage d’une PWM p
CAN.mdl + essai.c 3.5 Convertisseur Analogique Numerique f
125
Annexe A. Liste des fichiers MATLAB-SIMULINK
I2C1.mdl 3.6 Commande brushless 8 bits p
I2C2.mdl 3.6 Commande brushless 11 bits p
I2C3.mdl 3.6 Lecture d’un octet depuis un bus I2C f
Program en C.mdl 3.7.1 Premier exemple f
Program en C1.mdl 3.7.1 Second exemple p
Embedded.mdl 3.7.2 Insertion de code MATLAB f
Automate.mdl 3.8 Machine a etats - Stateflow f
TP1 AUTO
DigitalProcessingCNA12bits.mdl Echantillonnage-CAN12bits-CNA12bits p
DigitalProcessingCNA8bits.mdl Echantillonnage-CAN12bits-CNA8bits p
essai.c Code C gestion du port B ou D pour CNA 8 bits f
TP2 AUTO
ProfildAile.m Modele de la force de portance p
mcs.mdl Generations de donnees pour algorithmes d’identification p
mcr.m Fichier .m pour l’algorithme mcd embedded p
algo gradient.m Algorithme du gradient p
algo gauss newton1.m Algorithme de Gauss-Newton p
TP3 AUTO
I2C3 f
TPMoteur p
TP4 AUTO
Attitude observer.mdl p
Lecture MTI.mdl f
IMU With MTI.mdl p
MT xxxx xxxx.txt p
TP5 AUTO
Collect Data.mdl f
Caractbruit.m p
InitKF.m p
KF.mdl p
FiltreKalman.mdl p
FiltComp.m p
FiltreComplementaire.mdl p
126 F.BATEMAN
TP6 AUTO
Commande Hexa Template.mdl f
Commande Hexa PD.mdl p
Commande Hexa RE.mdl p
TP1 TS
DigitalProcessingCNA12bits.mdl Echantillonnage-CAN12bits-CNA12bits p
DigitalProcessingCNA8bits.mdl Echantillonnage-CAN12bits-CNA8bits p
essai.c Code C gestion du port B ou D pour CNA 8 bits f
TP2 TS
PremiersFiltres Premiers filtres numeriques p
Rejection 50Hz
Filtres RIF a phase lineaire
filtre RIF1.m Synthese de filtres RIF p
RIF1.mdl Realisation et test du filtre RIF p
RII2.mdl Realisation et test du filtre RII p
DigitalProcessingCNA12bits.mdl Echantillonnage-CAN12bits-CNA12bits f
DigitalProcessingCNA8bits.mdl Echantillonnage-CAN12bits-CNA8bits f
essai.c Code C gestion du port B ou D pour CNA 8 bits f
TP3 TS
BancFiltres p
BancFiltresR2R p
DigitalProcessingCNA8bits.mdl Echantillonnage-CAN12bits-CNA8bits f
essai.c Code C gestion du port B ou D pour CNA 8 bits f
TP4 TS
ProcessMA.mdl f
ProcessAR.mdl f
MCR MA.mdl p
MCR AR.mdl p
MCR RealTime.mdl p
FiltreAdaptatifOrdre.mdl p
DigitalProcessingCNA12bits.mdl Echantillonnage-CAN12bits-CNA12bits f
DigitalProcessingCNA8bits.mdl Echantillonnage-CAN12bits-CNA8bits f
essai.c Code C gestion du port B ou D pour CNA 8 bits f
NoiseCancelCNAR2R.mdl p
F.BATEMAN 127