Présentation du travail

publicité
Naudot guillaume
TEL2
Lycée Pierre-Emile-Martin
Académie Orléans-Tours
1
PRESENTATION DU TRAVAIL
3
I) ANALYSE FONCTIONNEL
4
I-1) Schéma fonctionnel de niveau 1 :
I-2) Schéma fonctionnel de 1er degrés :
I-3) Schéma fonctionnel de degrés 2 :
I-4) Description des fonctions secondaires :
II) ANALYSE STRUCTURELLE :
II-1) Calcul de RA1 :
II-2) Etude de la chaîne d’acquisition (théorique) :
III) ANALYSE DU LOGICIEL :
III-1) Description du programme :
III-2) Fonctionnement du programme :
III-3) Algorithme du programme :
4
4
5
7
8
8
8
11
11
11
12
IV) MISE EN ŒUVRE, TESTS ET REGLAGES
13
ANNEX : listing commenté du programme :
16
2
PRESENTATION DU TRAVAIL
Le thème de cette année est une attelle de rééducation de la
hanche. Utilisée en médecine, elle permet d’aider à la reconsolidation
des muscles par un système de flexion et d’extension programmable.
Notre carte à pour but de mesurer et limiter le courant moteur :
en cas de contrainte sur l’attelle, pour la sécurité du patient comme
celle de l’appareil, il faut arrêter le système et prévenir de la
défaillance en cas de surintensité.
Le cœur de la carte est un microcontrôleur ATMEL 90s8535 qui
permet de paramétrer la valeur du seuil ainsi que l’affichage de
l’intensité en temps réel.
Le capteur utilisé est un CSLACD qui permet de convertir en
tension des courants pouvant aller de -36A à +36A (dans notre cas
nous utiliserons un plage d’environ [0 ;5A]). Nous pourrons ainsi
convertir le courant moteur en une tension exploitable par le
microcontrôleur et donc afficher la valeur de l’intensité.
La sensibilité du capteur fourni pas le constructeur est de
32.7mVxN pour 8Vcc. Nous utilisons un capteur munit de 10 Spires
et d’un Vcc de 12V. La sensibilitée devrai être de 490mV/A. dans le
dossier technique de l’attelle, il nous est donné une sensibilité de
0.552V/A avec un décalage de +6V. Nos calculs seront donc effectué
grâce à cette dernière valeur. La fonction désirée étant de 1V/A, nous
allons utiliser un réseau d’ADI afin de supprimer le décalage puis
d’amplifier pour obtenir la bonne sensibilité de 1V/A.
VCAPT
+12V
Courbe réelle.
+6V
0
VCOUR-ANA
+2,5A
5A
IMOT
+5V
Courbe souhaité.
+2,5V
0
+2,5A
5A
IMOT
3
I) ANALYSE FONCTIONELLE.
I.1) Schéma fonctionnel de niveau 1
Affichage du
Courant moteur
courant moteur
I-mot
Mesure et affichage du
courant moteur
Alarme de
surintensité
Schéma fonctionnel présentent ensemble de la maquette.
I.2) Schéma fonctionnel de 1er degré
I-mot
Captage et
mise en forme
du courant
moteur
FP5
Alarme de
Cour-ana
Traitement et
memorosation
FP1
LCD
BUZ
S2
Acquisition des
consignes
Informations visuelles
et sonores FP2
surintensité
Affichage
LCD
Schéma fonctionnel de degrés 1, présentent les fonctions principales
de notre carte, ainsi que les différents signaux d’entrées et de sortie.
4
I.3) Schéma fonctionnel de degrés 2.
Création d’une
tension
continue : 6V
Vdecal
I-mot
Conversion
courant
tension
FS 51
Vcapt
Décalage
FS 52
Vimg-cour
Filtrage et
amplification
Vimg-cour-amp
FS 53
Ce schéma de degrés 2 représente l’ensemble des fonctions
secondaires de la fonction principal. Cette fonction étant la plus
importante : le reste se déroulant dans le CAN sous la forme d’un
programme
Cette photo montre la carte
que nous avons fabriqué,
avec les différents
composant qui la consiste.
Sur la page suivante, un schéma montrant les fonctions secondaires de
la carte et les composants utilisés.
5
+12v
C10
100nF
+12v
8
U3B
6
7
PT2
R1
100k
R4
3,9k
5
P1
10K
4
TL082
+12v
0
8
100nF
C16
-12v
PT3
U3A
R2
2
DECAL
100k
1
+5v
R15
3
JP1
100k
TL082
Capt
4
1
2
3
4
5
6
7
8
9
10
R3
100k
-12v
IMG_COUR
he10-10
+5v
0
+5v
+5v
30
32
AVCC
PORTA
PA0(ADC0)
PA1(ADC1)
PA2(ADC2)
PA3(ADC3)
PA4(ADC4)
PA5(ADC5)
PA6(ADC6)
PA7(ADC7)
40
39
38
37
36
35
34
33
D7
PT6
11
PT1
S2
+5v
PC0
PC1
PC2
PC3
PC4
PC5
PC6(T OSC1)
PC7(T OSC2)
AGND
PORTC
(RXD)PD0
(T XD)PD1
(INT 0)PD2
(INT 1)PD3
(OC1B)PD4
(OC1A)PD5
(ICP)PD6
PD7(OC2)
22
23
24
25
26
27
28
29
31
R7
10k
XT AL1
PORTD
C6
22pF
P4
10K
R13
D8
2
1
U1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
VSS
VDD
VO
RS
R/W
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
R11
3
10k
TL082
R9
10K
0
+
100nF
C18
-12v
LCD
2X16
C7
10uF
470
+12V
0
4.7K
470
D9
VccP
+ALIM
+
BU1
buzzer
1
1N4001
ALIM +
12V
CA1
IN
330nF
GND
ALIM 12V
+5V
UA1
LM7805C
DA1
OUT
3
+
R14
Q1
GND
R12
2
0
14
15
16
17
18
19
20
21
U4A
+5V
XT AL2
PT4
C17
100nF
C8
10uF
+5V
RESET /
GND
13
P2
20K
PT5
IMG-COUR-AMP
+12v
D6
1N4148
X1
4MHz
+5v
R10
10K
1N4148
COUR-ANA
8
9
12
(T 0)PB0
(T 1)PB1
(AIN0)PB2
(AIN1)PB3
(SS/)PB4
(MOSI)PB5
(MISO)PB6
(SCK)PB7
0
4
C5
22pF
0
+5v
C1
10uF
+
1
2
3
4
5
6
7
8
AREF
10
C9
1u
C15
100nF
+
VCC
S1
U2
at90s8535
PORTB
R5
4,7K
+
D1
1N4148
P3
10K
ANA_TEST
C11
100nF
CA2
100nF
CA7
10u
RA1
LEDA1
1N4001
-ALIM
VccN
DA2
-12V
E. BRANLY
29 rue F. KENNEDY
28100 DREUX
Auteur : RB-MM
ATTELLE DE REEDUCATION
CARTE N°2
Date : 29 /09 / 04
version:
Page 1
1
of
1
6
I.4) Description des fonctions secondaires.
FS5.1 : conversion courant tension
Cette fonction, réalisée par le capteur à effet HALL, permet de
transformer un courant en une tension exploitable pour faire des
mesures. Sa fonction est Vcapt=0.552Imot +6V
FS5.2 : Soustracteur
Cette fonction permet de supprimer le décalage du capteur en
soustrayant 6V à la tension du capteur. La tension d’entrée : Vcapt,
ayant pour fonction : Vcapt=0.552I-mot+6. Cette fonction permet de
donner la fonction : Vimg-cour=0.552I-mot.
FS5.3 :
a) amplification
Cette fonction permet d’amplifier le signal Vimg-cour pour donner un
signal Vimg-cour-amp=1V/A
b) Filtrage
Différents filtres passe bas sont implantés pour filtrer les bruits du
circuit. Deux diode de protection D5 et D6 ont été implantées pour ne
pas endommager le microcontrôleur : l’une (D5) relier au +5V permet
de supprimer les valeurs dépassant 5V plus la tension de seuil de la
diode d’environ 0.6V, ce qui limite les valeur à 5.6V. Et l’autre (D6)
relier à la masse pour supprimer les valeurs négatives. En tenant
compte la tension de seuil de 0.6V, les deux diodes maintiennent le
circuit dans la plage de valeurs [-0.6V ; 5.6V].
7
II) ANALYSE STRUCTURELLE :
Voir plan page précédente pour repérage des composants et des fonctions.
II.1) Calcul de RA1.
Sur notre carte, seul la résistance d’alimentation était à calculer.
RA1=U/I
I=20mA : courant de seuil de la diode
U=5V : tension d’alimentation
RA1=250Ω
II.2) Etude la chaîne d’acquisition (théorique):
L’équation de la droite Vcapt en fonction de I mot est :
Vcapt = 0.552 I-mot + 6
Le but ici, est de supprimer le décalage de 6V.Pour cela on créer une tension de
6V avec P1 et un suiveur, ensuite on applique cette tension à l’entrée d’un
soustracteur pour qu’il annule le décalage.
Vdecal en fonction P1 :
Vcc  P1
P1  R 4
12  10
Vdecal 
10  3.9
Vdecal 
Pour α=0, on a Vdecal=0V.
Pour α=1, on a Vdecal=120/13.9=8.633V.
La tension Vdecal peut donc varier sur la plage de valeurs [0V ; 8.633V]
Pour le soustracteur on a :
-Vcapt sur l’entrée non-inverseuse et vdecal sur l’entrée inverseuse.
-Vimg-cour en sortie
-VI=Vimg-cour
8
Vcapt  R3
R3  R15
Vecal  R1 VI  R 2
V 

R1  R 2
R1  R 2
Vcapt  R3( R1  R 2)
 Vdecal  R1
R
3

R
15
VI 
R2
V 
En constatant que R1=R2=R3=R15
On simplifie l’expression suivante et on obtient celle-ci :
VI = Vcapt – Vdecal
Avec Vdecal=6V, l’on obtient les courbes suivantes :
Décalage
10
Tension (V)
8
Vcapt (V)
Vdecal (V)
VI (V)
6
4
2
0
0
1
2
3
intensitée
(A)
4
5
Réglage de P2 :
VIFA = Vimg-cour-amp
V+ = VI
VIFA  P 2
P 2  R 9
VIFA  P 2
VI 
P 2
[( Vdecal  R1 Vcapt  R3)

 ( R 2  R1)]
P 2  R9
R
1

R
2
R
5

R
15
VIFA 

R2
P 2
V 
9
Les courbes que nous souhaitons obtenir sont les suivantes :
10
9
8
7
6
5
4
3
2
1
0
Vcapt (V)
Vdecal (V)
Vimg-Cour (V)
Vimg-Cour-Amp
(V)
0
1
2
3
4
5
On désire obtenir VIFA = 0V lorsqu’on a Imot = 0A.
Que valent VI et Vdecal ?
VI doit être égal à 0 et Vdecal = Vcapt
On veut pour un courant égal à 5A avoir VIFA = 5V.
Calcule de αP2 :
Si I-mot=5A, VI=0.552*5=2.76
V- =VI
R9
P 2  R 9
 20  10
VIFA  2.76 
10
V   VIFA 
Pour α = 0
VIFA = 2.76V
Pour α = 1
VIFA = 8.28V
Dans notre cas, pour avoir une sensibilité de 1V/A, α doit être réglé à 0.406
α=0.406
10
III) ANALYSE DU LOGICIEL
III.1) Description du programme.
Notre programme à pour but de relever deux valeur et de les afficher sur
un afficheur LCD à 2lignes.
La première est une valeur test réglable par un potentiomètre de 0 à 5V.
La deuxième valeur étant le courant mesuré par le capteur et étalonné par la
chaîne de mesure (expliquer pages précédentes).
Cette valeur test va servir à créer une alarme pour le courant mesuré. En réglant
une valeur avec le potentiomètre P3, valeur afficheur sur l’afficheur LCD en
temps réel, le programme pourra ensuite la comparer avec celle du capteur, et
ainsi s’en servir comme seuil d’alarme réglable. Une foie le seuil dépassé, une
alarme sonore retentie.
III.2) Fonctionnement du programme.
Une foie la mise sous tension, l’afficheur LCD indique le message :
« Capteur de courant »
« Appuie sur S2 »
En appuyant sur S2, l’afficheur indique
« Test = *,**A »
les *,** étant la valeur seuil
« Appuie sur S2 »
La led8, situé sur la même ligne que celle de l’afficheur pour Test, s’allume en
même temps. Ceci indique que l’on peut régler la valeur seuil avec le
potentiomètre P3, faisant donc varier la valeur seuil qui allumera le buzzer si le
courant moteur la dépasse.
En appuyant de nouveaux sur S2, l’afficheur indique :
« Test = *,**A »
*,** étant la valeur seuil réglé précédemment.
« Imot = *,**A »
*,** étant la valeur du courant mesuré par le capteur.
La led9, situé sur la même ligne que Imot, s’allume en même temps, indiquant
que l’on peut voir varier le courant moteur en temps réel.
Il faut appuyer de nouveaux sur S2 pour retourner au réglage du seuil, celui-ci
ne variant pas si ça voie est sélectionné.
Si Imot dépasse la valeur Test affiché, le buzzer sonnera.
11
III.3) algorithme du programme.
Début
Initialisation µc
Initialisation LCD
Affichage d’un
message à la mise
sous tension
Attendre appui sur
S2
S2
Appuyé ?
Oui
Complémenter
variable bascule.
non
Oui
Imot > seuil
Attendre 200 mS
non
S2
Appuyé ?
Eteindre buzzer
Allumer buzzer
Oui
non
Variable
Bascule=0
Oui
non
Allumer led8
Eteindre led9
Choisir la voie
ADMUX=0x03 et
relever sa valeur
Faire calcul de Imot
par rapport à ADMUX
Afficher
«imot=0.00A » puis
mettre la valeur de
imot calculé
Allumer led8
Eteindre led9
Choisir la voie
ADMUX=0x00 et
relever sa valeur
Faire calcul de seuil
par rapport à ADMUX
Afficher
«Test=0.00A » puis
mettre la valeur de
seuil calculé
Attendre 200 mS
Attendre 200 mS
12
IV) MISE EN ŒUVRE, TESTS ET REGLAGES.
Dans cette partie, nous allons mettre en pratique les calculs théoriques de
la partie II. Pour cela, nous avons branché la maquette et relever les valeurs des
différentes partis de la carte.
Sur cette photo, nous
pouvons voir les différents
branchements des alims.
L’alims de gauche sert à
l’alimentation en +12V et 12V.
L’alim de droite sert à créer un courant dans le capteur. Nous les avons brancher
en parallèle de façon à additionner leurs courant max qui est de 2.5A, ce qui
nous fait un courant réglable et 0A à +5A.
Le multimètre en position ampèremètre, contrôle le si l’affichage de notre carte
est bien égale au courant réel dans le capteur.
Ici, nous pouvons voir le chéma de notre chaine de mesure et la place des
point tests ainsi que des potentiomêtres.
+ 12v
C10
100nF
8
+ 5v
D7
6
R10
10K
1N4148
P2
20K
PT5
IMG-COUR-AMP
7
+
4
TL082
8
+ 12v
8
2
R11
3
-12v
C7
10uF
DECAL
R15
3
100k
TL082
4
+
100nF
C18
R9
10K
100nF
C16
-12v
R2
100k
1
10k
TL082
0
PT3
U3A
2
PT4
P1
10K
0
U4A
1
R4
3,9k
5
C17
100nF
C8
10uF
PT2
R1
100k
+ 12v
4
PT6
COUR-ANA
D6
1N4148
+ 12v
U3B
Capt
R3
100k
-12v
13
PT2 = Vdecal avant isolation
PT3 = Vdecal
PT4 = Vimg-cours = VI
PT5 = Vimg-cours-amps = VIFA
PT6 = VIFA + filtrage.
Nous commençons par ajuster les
limites de l’alim à 0A afin de
pourvoir amplifier une tension avec
une equation passant par 0.
Nous réglons le potentiomètre P1 affin d’avoir de créer une tension de 6V
(relevé sur PT3), puis de la soustraire à celle du capteur et supprimer son
décalage de 6V.
Sa sensibilité est toujours de 0.552V/A mais cette foie, sans décalages.
Nous mesurons cette valeur sur PT4
Nous rebranchons le capteur à la
2nd alim afin de lui fournir un
courant et nous le réglons à 4A.
L’afficheur de la carte étant limité
à 5A, nous le mettons à 4 pour être
sur de ne pas avoir un affichage
qui devrait être supérieur à 5.
Nous réglons ensuite P2 pour avoir
la bonne sensibilité de 1V/A, donc
4V pour 4A
14
Une foie l’étalonnage de la carte effectué, nous relevons les valeurs de chaque
tension de 0A à 5A tout les 0.5A.
Ce qui nous donne le tableau suivant :
Imot (A)
Vcapt(V)
Vdecal(V)
VI(V)
VIFA(V)
0
6.03
6.03
0
0
0.5
1
1.5
6.28 6.54 6.79
6.03 6.03 6.03
0.252 0.516 0.773
0.5
1.01
1.5
2
7.05
6.03
1.02
2
2.5
7.3
6.03
1.27
2.49
3
7.56
6.03
1.53
3
3.5
7.82
6.03
1.79
3.49
3
7.656
6
1.656
3
3.5
7.932
6
1.932
3.5
4
8.07
6.03
2.04
4.01
4.5
8.33
6.03
2.3
4.48
5
8.6
6.03
2.57
5.01
Les valeurs théoriques étant :
Imot (A)
Vcapt(V)
Vdecal(V)
VI(V)
VIFA(V)
0
6
6
0
0
0.5
6.276
6
0.276
0.5
1
6.552
6
0.552
1
1.5
6.828
6
0.828
1.5
2
7.104
6
1.104
2
2.5
7.38
6
1.38
2.5
4
8.208
6
2.208
4
4.5
8.484
6
2.484
4.5
5
8.76
6
2.76
5
En pratique, nous ne somme pas loin des valeurs théoriques, ce qui veut dire que
la carte fonctionne correctement et que les potentiomètres ont été bien réglés.
15
ANNEX 1
// Nom : Naudot Guillaume
// Titre : carte 2 : mesure et limitation du courant moteur
// Année 2005
#include <mega8535.h>
// Microcontrôleur mega8535
#asm
.equ __lcd_port=0x15
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdlib.h>
// Entrer les différents registres.
// Définition des registres d’entrée, de sortie et les port utilisé pour les variables // de
comptages
#define debutconv ADCSRA.6
#define finconv ADCSRA.4
#define buzzer PORTD.0
#define led8 PORTD.2
#define led9 PORTD.1
#define s2 PIND.7
float seuil;
char *seuil_str="0.00";
// seuil devient un nombre fotant
// seuil_str devient la chaîne de caractère 0.00
float imot;
char *imot_str="0.00";
bit bascule;
// bascule devient un nombre binaire : 0 ou 1
// Initialisation des différents registre d’entrés, sortie
void init_ports(void)
{
// Entré de mesure du microcontrôleur : bit placé à 0
0
DDRA = 0x00;
PORTA = 0x00;
PA7
0
PA6
0
0
PA5
0
PA4
0
PA3
0
PA2
0
PA1
0
PA0
0
16
// Sortie pour l’afficheur LCD : bit placé à 1
F
DDRC = 0xFF;
PORTC = 0x00;
PC7
1
PC6
1
F
PC5
1
PC4
1
PC3
1
PC2
1
PC1
1
PC0
1
PC1
1
PC0
1
// Les sortie PD0,PD1 et PD2 sont des sortie et PD7 est une entrée (S2)
0
DDRD = 0x07;
PORTD = 0x00;
PC7
0
PC6
0
7
PC5
0
PC4
0
PC3
0
PC2
1
}
void init_can(void)
{
ADCSRA=0x86;
}
void main(void)
{
init_ports();
init_can();
lcd_init(16);
// Début du programme
buzzer=1;
bascule=0;
led8=1;
led9=1
// Buzzer éteind : 1 pour éteindre
// Variable bascule mise à 0
// led8 alumée
// led9 alumée
// Initialisation de l’afficheur en 16 cases
while(s2==1)
// Tend que la condition entre parenthèse est vrai, créer une boucle entre les crochet suivant :
tend que s2 n’est pas appuyer.
{
lcd_gotoxy(0,0);
// Curseur du LCD sur la colonne 0, ligne 0
lcd_putsf("Capteur Courant");
// Affichage de la phrase “Capteur courant” à
lcd_gotoxy(3,1);
l’endroit du curseur.
lcd_putsf("Appuie S2");
}
while(s2==0);
// ten que s2 est appuyé faire action entre crochet
En l’absence de crochet, ne rien faire : Attendre
17
while(1)
{
// 1 sera toujours vrai, donc créer une boucle
infinie
if(s2==0)
{
bascule=!bascule;
delay_ms(200);
while(s2==0);
}
// Si s2 est appuyé, complémenté bascule et
attendre 200ms puis le relâchement de s2
if(bascule==0)
{
led8=0;
led9=1;
// Si la condition est vrai, faire la suite, sinon
faire else ou après les crochet.
ADMUX=0x00;
// Choisir la voir 0 pour relever les valeur.
debutconv=1;
// débuter la conversion
while(finconv==0);
// Attendre fin de conversion
finconv=1;
// Remetre finconv à 1
seuil=((float)ADCW*5/1024);
// seuil devient la valeur fait dans le calcul
ftoa(seuil,2,seuil_str);
// transforme un nbr flottant en une chaîne de caractère :
lcd_gotoxy(0,0);
seuil_str et 2correspond au nbr de chiffre après la
lcd_putsf("Test = 0.00 A "); virgule
lcd_gotoxy(7,0);
lcd_puts(seuil_str);
// Afficher la valeur contenue dans seuil_str
delay_ms(200);
}
else
// Sinon
{
led8=1;
led9=0;
ADMUX=0x03;
// Mesurer sur la voie 03
debutconv=1;
while(finconv==0);
finconv=1;
imot=((float)ADCW*5/1024);
// Imot devient la valeur fait par le calcul
ftoa(imot,2,imot_str);
lcd_gotoxy(0,1);
lcd_putsf("Imot = 0.00 A ");
lcd_gotoxy(7,1);
lcd_puts(imot_str);
delay_ms(200);
}
if(imot > seuil)
{
buzzer = 0;
}
// Si imot supérieur à seuil
// Alumer le buzzer
18
else
// Sinon
{
buzzer = 0;
}
// Eteindre buzzer
delay_ms(200);
}
}
19
Téléchargement