Vous êtes sur la page 1sur 26

1

1
2
PROBLEMATIQU
E

2
3

3
4
La portée lumineuse d’un véhicule se modifie avec sa charge, le profil de la route (ou/et)
les conditions de conduite. Cette modification entraine une variation d'inclinaison de l'axe du
faisceau lumineux ; ce qui provoque une malaise pour les conducteurs.
D’où la nécessité d’utiliser des systèmes de correction de portée lumineuse
automatique.

4
5

A- Les composants électroniques:

1- moto-réducteur 2-capteur d'assiette 3- Unité de commande


Référence du moteur : FF- Carte Arduino
180SH-19130
6 B- Diagramme de définition de block
<<block>> <<block>> <<block>>
Calculateur Régulation de portée Alimentation
électrique

<<block>>
Bouton de commande
<<block>>
Capteurs d’assiette

<<block>>
Contacteur
<<block>>
<<block>> <<block>> Bielle + bloc
Moteur Bloc d’orientation d’orientation

FF-180SH-19130

<<block>> <<block>> <<block>>


Roue / vis sans fin Vis / écrou Potentiomètre
7
A- Modélisation de système :

Ԑ(p) θ(p)
Β(p)
⊗ 𝟏
Ω(p) X(p)
Kc +_ M(p) Kred Kvis Kor
𝒑

Ktach

-Kc : gain pur de l’ensemble [capteur, calculateur ]. [V/rad]


𝑲
- M(p)= avec M(p) forme de fonction de transfert du moteur
𝟏+𝑻𝒑
-Ktach : gain pur de la génératrice tachymetrique. [V.s]
-Kred : gain pur de fonction de transfert du réducteur.
-Kvis : gain pur de fonction de transfert de système vis écrou. [m/rad]
-Kor : gain pur de bloc d’orientation. [rad/m] 7
8
B-Fonction de transfert :
𝜃(𝑝) 𝐾. 𝑘𝑐 1 4.32∗10−5
𝐹𝑇𝐵𝐹 = =
𝐵(𝑝) 1 + 𝑇𝑝 + 𝐾. 𝐾𝑡𝑎𝑐ℎ
. 𝐾𝑟𝑒𝑑. 𝐾𝑣𝑖𝑠. . 𝐾𝑜𝑟
𝑝 FTBF= 1+0.025𝑝 .𝑝

Calcule de Ө(t) en fonction de β(t) une échelon :

La repense indicielle de système : β(t)= β0.u(t) et B(t)= β0Τ𝑝

4.32∗10−5 .β0
La sortie devient : θ(p)= 1+0.025𝑝 .𝑝2

Si on calcule la limite à l’infini :


4.32∗10−5 .β0
lim θ 𝑡 = lim 𝑝.θ(p)= lim =+∞
𝑡↦+∞ 𝑝↦0 𝑝↦0 1+0.025𝑝 .𝑝
9

Signale de sortie

Entre une échelon


10
 Entre une impulsion

Signale de sortie
11

B(p)
Kc ⊗ +
-
Ԑ(p)
A
𝟎. 𝟎𝟎𝟑
𝟏 + 𝟎. 𝟎𝟐𝟓𝐩 . 𝐩
Θ(p)

K
on calcule la limite à l’infini :
0.003.β0.A 𝐾𝑐.β0
lim θ 𝑡 = lim 𝑝.θ(p)= lim Kc. =
𝑡↦+∞ 𝑝↦0 𝑝↦0 1+0.025𝑝 .𝑝+0.003.𝐾.𝐴 𝐾

lim Ԑ(t)=0
𝑡↦+∞
12 Simulation des résultats obtenus

Entre un échelon Signal de sortie


13 Simulation des résultats obtenus

Entre une impulsion Signale de sortie


14

B(p)
Kc ⊗+
-
Ԑ(p)
C(p) 𝟎. 𝟎𝟎𝟑
𝟏 + 𝟎. 𝟎𝟐𝟓𝐩 . 𝐩
Θ(p)

𝐾𝑖.(1+∝.𝑇𝑝)
Ki =5
C(p)= ∝=4
1+𝑇𝑝
T=1s
15 Simulation des résultats obtenus
16
17
18
19
20

Z4=14

Z1=14

Z3=32
Z2=48
21
22
23

Durant mon travail TIPE j’ai pu mettre en œuvre mon savoir-


faire, pour modéliser simuler et réaliser mon système de
Correction automatique de la portée lumineuse.
Un système pluriethnique que j’ai pu étudier, afin d’optimiser
et améliorer son fonctionnement toute en se basant sur une
démarche scientifique et technique rigoureuse, et qui m’a
permis d’avoir une initiation aux démarches adoptées par un
ingénieur.
24
Kc=14.4 V/rad
#include <FlexiTimer2.h>
K=300 rad/(V.s) int increment=0;
int consigne=0;
T=0.05s int byte_read;
int erreur=0;
Ktach=0.33*10^-2 V.s const int maxPwm=60;
const float kp=8;
Kred=2.04*10^-3 const float ki=2;
int somerreur=0;
Kvis=9.5*10^- 4 m/rad int pwm=0;
void setup() {
Kor=0.0105 rad/mm Serial.begin(9600);
pinMode(6,OUTPUT);
A=69.44 pinMode(5,OUTPUT);
pinMode(3,INPUT);
Ki=5 attachInterrupt(digitalPinToInterrupt(3), codeur, RISING);
FlexiTimer2::set(30, asserv); // call every 500 1ms "ticks"
∝=4 FlexiTimer2::start();
}
T=1 void loop() {
if ( Serial.available() ) {
int sens=1;
int sens=1; return n*10 + (byte_read - 48); if(corr_i<-maxPwm){corr_i=-maxPwm;}
consigne=0; } pwm=corr_i+corr_p;
while ( Serial.available() ) { void codeur(){ if(pwm>maxPwm){pwm=maxPwm;}
byte_read = Serial.read(); if(pwm>=0) {increment++;} if(pwm<-maxPwm){pwm=-maxPwm;}
if (byte_read==45) {sens=-1;} else{increment--;} if(pwm>=0){analogWrite(6,pwm);
if ( is_a_number(byte_read) ) { } analogWrite(5,0);}
consigne = ascii2int(consigne, void asserv(){ else{analogWrite(5,-pwm);
byte_read); erreur=consigne-increment; analogWrite(6,0);}
} int corr_p=erreur*kp; Serial.print(corr_p);
delay(2); if(corr_p>maxPwm){corr_p=maxPwm;} Serial.print(" ");
} if(corr_p<-maxPwm){corr_p=-maxPwm;} Serial.print(corr_i);
consigne*=sens; if(abs(somerreur+erreur)*ki<maxPwm) { Serial.print(" ");
consigne*=8; somerreur+=erreur;} Serial.print(consigne);
}} else { Serial.print(" ");
boolean is_a_number(int n) somerreur=maxPwm/ki; Serial.print(erreur);
{ if(erreur<0) {somerreur*=-1;} Serial.print(" ");
return n >= 48 && n <= 57; } Serial.println(increment);
} if(erreur==0) {somerreur=0;} }
int ascii2int(int n, int byte_read) int corr_i=somerreur*ki;
{ if(corr_i>maxPwm){corr_i=maxPwm;}

Vous aimerez peut-être aussi