Vous êtes sur la page 1sur 25

Applications maquette d'étude EP10K20

G ÉN ÉRA T EUR PWM S VM T R IPHAS É P OUR


MO T EUR B LDC
SC H ÉMAS E T D E SCRI P TI O NS P OUR E PL D
L'acronyme SVM provient de "Space Vector Modulation". Il s'agit d'un procédé de PWM permettant
d'appliquer au moteur une tension entre phases de forme sinusoïdale et d'amplitude égale à la tension
DC appliquée aux 3 bras de l'interface de puissance. Le gain est de 15% par rapport au procédé PWM
sinusoïdal conventionnel.
1. Objectifs
Étudier, mettre en œuvre et tester des structures proches de celles intégrées dans les microcontroleurs
MICROCHIP destinées à piloter des moteurs BLDC (brushless à courant continu).
Le moteur utilisé pour les tests est en fait une machine "synchro" de PRECILEC qui comportent un
stator et un rotor triphasé à 1 paire de pôles (modèle 50MT33). Le rotor est alimenté en DC entre 2
phase pour le magnétiser, le stator est alimenté par une source DC de 12V via 3 bras PWM.
Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC

2. Principe de la modulation SV
On utilise la structure classique des 3 bras de commutateurs commandés par 3 comparateurs. Le signal
de référence est de forme triangulaire et de fréquence FPWM très grande devant la fréquence des signaux
ua, ub et uc (au moins 20x).

CREMMEL Marcel Page 2/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
Dans ces conditions on peut écrire (commutateurs parfaits) :
E E E
Uan moy   u a , Ubn moy   u b et Ucn moy   u c
2 2 2
Les valeurs instantanées de ua, ub et uc doivent rester à l'intérieur des valeurs crêtes de la
porteuse ("carrier).
En éliminant les composantes harmoniques (fréquences multiples de FPWM), et si FPWM est très grande
devant la fréquence des signaux ua, ub et uc, on peut confondre Uanmoy et Uan.
2.1 PWM sinusoïdal
On produit 3 consignes sinusoïdales déphasées de 120° :
 2   4 
u a  m  sin ωt  u b  m  sin ωt   u c  m  sin  ωt  
 3   3 
m : indice de modulation compris entre 0 et 1
Il en résulte :
E E  2  E  4 
U aN   m  sin ωt  U bN   m  sin  ωt   U cN   m  sin  ωt  
2 2  3  2  3 
CQFD
Les tensions entre phases sont :
E  
U ab  3  m  sin ωt  
2  6
E  5 
U bc  3  m  sin  ωt  
2  6 
E  3 
U ca  3  m  sin ωt  
2  2 
E
L'amplitude maximum entre phases est donc de 3 , soit 86,6% de E pour m=1.
2

CREMMEL Marcel Page 3/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
2.2 Modulation Space Vector
Les 6 commutateurs peuvent prendre 23
états différents représentés dans la figure
ci-contre.
Ces 8 états sont codés de S0 à S7. La
modulation "SV" consiste à piloter les
commutateurs en PWM pour passer
progressivement d'un état au suivant.

Les 3 sorties a, b et c alimentent les 3


phases du moteur qui créent des champs
magnétiques déphasés de 120°.
On peut alors représenter l'orientation du
champ magnétique pour chacun des 8
états. Ces états se transforment alors en
 
vecteurs de tension ( U 0 à U 7 sur la
figure ci-contre).
Les états S0 et S7 ne créent pas de champ
 
magnétique, les vecteurs U0 et U7 ont
donc une longueur nulle.
Les autres vecteurs ont une longueur de 1
et respectent les relations suivantes :
 
U1   U 4
 
U 2  U5
 
U 3  U 6
  
U1  U 3  U 5  0

Objectif : créer un vecteur U de longueur
constante qui suit, pour sa valeur maxi, le
3
cercle en pointillé de rayon .
2
Pour cela on module en conséquence les rapports cycliques de conduction des commutateurs dans
chacun des 6 secteurs.
En notant T0 à T7 la durée de chaque état S0 à S7 sur une période PWM, on obtient la relation vectorielle

suivante (on suppose que la fréquence PWM est très grande devant la vitesse de rotation du vecteur U :
 T  T  T  T  T  T  T  T 
U  0 U 0  1 U1  2 U 2  3 U 3  4 U 4  5 U 5  6 U 6  7 U 7
TS TS TS TS TS TS TS TS
Avec TS=T0+T1+T2+T3+T4+T5+T6+T7 : période PWM

Pour respecter cette relation à la lettre et donc atteindre l'objectif, il faut calculer les durées T0 à T7 pour

chaque position angulaire de U . On en déduit les consignes de tension ua, ub et uc nécessaires.
Ce procédé n'est pas utilisé car il provoque de trop nombreux changements d'états (32 par période
PWM) et les pertes par commutation deviennent excessives.
Solution adoptée :
 Le diagramme vectoriel est divisé en 6 secteurs de 60°
 
 Dans chaque secteur, seuls 4 vecteurs U i sont utilisés pour produire U (les 2 vecteurs qui
 
encadrent le secteur, ainsi que U 0 et U 7 ) :
 T  T  T  T 
 secteur I : U  0 U 0  1 U1  2 U 2  7 U 7 Avec TS=T0+T1+T2+T7 : période PWM
TS TS TS TS
CREMMEL Marcel Page 4/25 TS électronique - 31/08/06
Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
 T  T  T  T 
 secteur II : U  0 U 0  2 U 2  3 U 3  7 U 7 Avec TS=T0+T2+T3+T7
TS TS TS TS
 T  T  T  T 
 secteur III : U  0 U 0  3 U 3  4 U 4  7 U 7 Avec TS=T0+T3+T4+T7
TS TS TS TS
 T  T  T  T 
 secteur IV : U  0 U 0  4 U 4  5 U 5  7 U 7 Avec TS=T0+T4+T5+T7
TS TS TS TS
 T  T  T  T 
 secteur V : U  0 U 0  5 U 5  6 U 6  7 U 7 Avec TS=T0+T5+T6+T7
TS TS TS TS
 T  T  T  T 
 secteur VI : U  0 U 0  6 U 6  1 U1  7 U 7 Avec TS=T0+T6+T7+T7
TS TS TS TS
 A un instant donné, l'angle magnétique du moteur se trouve dans un des 6 secteurs. On calcule alors

les rapports cycliques nécessaires pour placer le vecteur U dans cette position.
Cette solution ne nécessite que 12 changements d'états par période PWM (pertes plus faibles) et réduit
aussi le nombre de calculs nécessaires.
Par exemple, dans le secteur I :

 T  T  T  T 
U  0 U 0  1 U1  2 U 2  7 U 7 Avec TS=T0+T1+T2+T7 : période PWM
TS TS TS TS

Quand le vecteur U se déplace de 0° à 60°, la durée T1 de S1 varie du max à 0 tandis que la
durée T2 de S2 varie de 0 au max.
On choisit généralement : T0 = T7 pour des raisons de symétrie et limiter les composantes
harmoniques.

Pour obtenir un vecteur U de longueur m (m est l'indice de modulation), on calcule T0, T1, T2 et
T7 à partir du diagramme vectoriel :
T1 2 π  2 π 
  m  sin      m  sin   ω  t 
TS 3 3  3 3 
T2 2 2
  m  sin     m  sin ω  t 
TS 3 3
T0 T7 TS  T1  T2 
 
TS TS 2

CREMMEL Marcel Page 5/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
On en déduit :
T
PWMa  0
TS
T  T0
PWMb  1
TS
T  T1  T2 TS - T7
PWMc  0 
TS TS

Pour ne pas obtenir des durées T0 et T7 négatives (irréalisables !), le vecteur U doit rester à
l'intérieur de l'hexagone. Le cas limite est obtenu à  = 30°: on obtient T1=T2=TS/2 et T0=T7=0
 3
quand le vecteur U est sur le cercle en pointillé de rayon .
2
3
L'indice de modulation m doit donc rester inférieur à mmax = = 0,866
2
Pour cette valeur mmax, on obtient :
E 3
 amplitude de Ua , Ub et Uc =  m max   E  0,433  E
2 4
E
 amplitude de Uab, Ubc et Uca = 3  m max  E
2
Conclusion : les amplitudes sont augmentées de 15,5% par rapport au PWM sinusoïdal
conventionnel.
2.3 Durées des états des commutateurs dans chaque secteur
Une simple transposition d'angle permet de calculer les durées T0 à T7 des états S0 à S7 dans chacun des
secteurs :
Secteur I Secteur II Secteur III
(0    /3) (/3    2/3) (2/3    )
T1 2 π  T2 2  2.π  T3 2
 m.sin     m.sin   m.sin   
TS 3 3  TS 3  3  TS 3
T2 2 T3 2   T4 2  2 
 m.sin    m.sin     m.sin   
TS 3 TS 3  3 TS 3  3 
T0 T7 TS  T1  T2  T0 T7 TS  T2  T3  T0 T7 TS  T3  T4 
     
TS TS 2.TS TS TS 2.TS TS TS 2.TS
Secteur IV Secteur V Secteur VI
(    4/3) (4/3    5/3) (5/3    2)
T4 2  4π  T5 2  5π  T6 2
 m.sin     m.sin     m.sin2   
TS 3  3  TS 3  3  TS 3
T5 2 T6 2  4  T1 2  5 
 m.sin      m.sin     m.sin   
TS 3 TS 3  3  TS 3  3 
T0 T7 TS  T4  T5  T0 T7 TS  T5  T6  T0 T7 TS  T6  T1 
     
TS TS 2.TS TS TS 2.TS TS TS 2.TS
On constate que les calculs donnent des résultats identiques dans chaque secteur ce qui simplifie la
réalisation du modulateur.

CREMMEL Marcel Page 6/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
2.4 Succession des états des commutateurs dans chaque secteur
Les solutions sont multiples, mais on s'impose le critère suivant : pas de changement d'état simultané
de 2 bras. On obtient les résultats suivants :
Etats S0 (000) S1 (100) S2 (110) S7 (111) S2 (110) S1 (100) S0 (000)
Durées T0/2 T1/2 T2/2 T7 T2/2 T1/2 T0/2
Secteur I

UaN

UbN

UcN

Etats S0 (000) S3 (010) S2 (110) S7 (111) S2 (110) S3 (010) S0 (000)


Durées T0/2 T3/2 T2/2 T7 T2/2 T3/2 T0/2
Secteur II

UaN

UbN

UcN

Etats S0 (000) S3 (010) S4 (011) S7 (111) S4 (011) S3 (010) S0 (000)


Durées T0/2 T3/2 T4/2 T7 T4/2 T3/2 T0/2
Secteur III

UaN

UbN

UcN

Etats S0 (000) S5 (001) S4 (011) S7 (111) S4 (011) S5 (001) S0 (000)


Durées T0/2 T5/2 T4/2 T7 T4/2 T5/2 T0/2
Secteur IV

UaN

UbN

UcN

Etats S0 (000) S5 (001) S6 (101) S7 (111) S6 (101) S5 (001) S0 (000)


Durées T0/2 T5/2 T6/2 T7 T6/2 T5/2 T0/2
Secteur V

UaN

UbN

UcN

Etats S0 (000) S1 (100) S6 (101) S7 (111) S6 (101) S1 (100) S0 (000)


Durées T0/2 T1/2 T6/2 T7 T6/2 T1/2 T0/2
Secteur VI

UaN

UbN

UcN
TS

2.5 Calculs des rapports cycliques dans chaque secteur


Ces calculs étant numériques, il est nécessaire de fixer la résolution de l'angle magnétique du moteur.
Dans l'exemple qui suit la résolution choisie est de 360/(6x256)=0,234°.
Il serait possible de calculer les 3 rapports cycliques de chaque bras pour les 6x256=1536 angles
élémentaires et les ranger dans une table en mémoire morte. Cette solution est rejetée car la taille de la
table excède les possibilités de l'EPLD. Celle-ci n'intègre que 12288 bits alors que la table nécessite
1536x3x8 bits (3 rapports cycliques codés sur 8 bits) = 36864 bits.

CREMMEL Marcel Page 7/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
Les symétries dans le diagramme vectoriel permettent de réduire la taille de la table, mais au détriment
de calculs supplémentaires que l'EPLD doit exécuter.
Les 2 tables utilisées permettent de déterminer les rapports cycliques TA/TS et TB/TS dans un secteur :
T 2 π 
Table TA : A   m  sin   
TS 3 3 
T 2 
Table TB : B   m  sin   pour 0   
TS 3 3
La correspondance entre les temps Ti et TA ou TB est donnée dans le tableau ci-dessous :
UaN UbN UcN
Sect. Période PWM TA TB PWMa PWMb PWMc
T0 T0  T1 T0  TA TS  T7 TS  T0
I TS = T1+T2+T0+T7 T1 T2  
TS TS TS TS TS
T0  T3 T0  TB T0 TS  T7 TS  T0
II TS = T2+T3+T0+T7 T2 T3  
TS TS TS TS TS
T0  T3 T0  TA
TS  T7 TS  T0 T0 
III TS = T3+T4+T0+T7 T3 T4  TS TS
TS TS TS

T0  T5 T0  TB
TS  T7 TS  T0  T0
IV TS = T4+T5+T0+T7 T4 T5  TS TS
TS TS TS

T0  T5 T0  TA
 TS  T7 TS  T0 T0
V TS = T5+T6+T0+T7 T5 T6 TS TS 
TS TS TS

T0 TS  T7 TS  T0 T0  T1 T0  TB
VI TS = T6+T1+T0+T7 T6 T1  
TS TS TS TS TS
Le rapport cyclique T0/TS est calculé comme suit :
T0 T7 TS  TA  TB  1  TA TB 
   1   
TS TS 2.TS 2 TS TS 

CREMMEL Marcel Page 8/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
2.6 Simulation Excel
Le tableur Excel est utilisé pour valider les tables de valeurs des rapports cycliques. Le fichier
"Table_TA_TB_T0.xls" comporte les tables et les formules de calcul décrites précédemment.
On obtient les résultats suivants sur 360° magnétiques :
Les 3 rapports cycliques
1

0,9

0,8

0,7

0,6

0,5

PWMb PWMa PWMc


0,4

0,3

0,2

0,1

0
0 60 120 180 240 300 360

Les 3 tensions inter-phases (relativement à E)


Ua-Ub
1

Uc-Ua Ua-Ub Ub-Uc


0,8

0,6

0,4

0,2

-0,2

-0,4

-0,6

-0,8

-1
0 60 120 180 240 300 360

CREMMEL Marcel Page 9/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
3. Schéma principal
OUTPUT H1 PIN_62
OUTPUT H2 PIN_63
OUTPUT COL1 PIN_103
OUTPUT H3 PIN_64
Simul_Hall Gene_3_SVM OUTPUT SYNC PIN_74
GND
OUTPUT MAGN_POS[7..0] PIN_166
LINE1 PIN_90 INPUT
VCC EN_COD H1 H1 SYNC OUTPUT SECT[2..0]PIN_71 PIN_167
CODA PIN_110 INPUT
VCC CODA H2 H2 POS[7..0] Generateur_PWM PIN_72 PIN_168
CODB PIN_109 INPUT
VCC CODB H3 H3 SECT[2..0] PIN_73 PIN_169
CLK_18M432 M[7..0] PWM1[7..0] PDC1[7..0] PTMR[7..0] PIN_171
EN_2K25 LIM[5..0] PWM2[7..0] PDC2[7..0] TEST
OUTPUT TEST PIN_75 PIN_172
LIMIT OUTPUT PWM1D PIN_48 PIN_173
inst3 CLK_18M432 PWM3[7..0] PDC3[7..0] PWM1D
OUTPUT PWM1U
PIN_174
EN_72K DELAY[5..0] PWM1U PIN_49
LIMIT[5..0]
OUTPUT PWM2D PIN_50
Reg_Niveau inst CLK_18M432 PWM2D
OUTPUT PWM2U PIN_51
NOT CLK_EN PWM2U
OUTPUT PWM3D PIN_53
EN_COD NIV[7..0] PWM3D
inst5 inst11 OUTPUT PWM3U
CODA PWM3U PIN_54
DELAY
CODB OUTPUT TEST2 PIN_78
CLK_18M432 DELAY[5..0] OUTPUT
inst1 TEST1 PIN_76
EN_2K25
inst10
inst4
OUTPUT C L K _ C N A PIN_164

Gene_CLK
PIN_91
CLK_18M432 INPUT
VCC CLK_18M432 EN_2K25
EN_72K
EN_4M608
inst2

Note : le moteur actuellement utilisé n'étant pas équipé de capteurs à effet Hall, on utilise un simulateur
("Simul_Hall") qui produit les 3 signaux H1, H2 et H3 déphasés de 60°. La fréquence est réglable avec
le codeur incrémental et détermine la vitesse de rotation du moteur.

Fonction : le codeur incrémental règle indépendamment la tension appliquée au moteur (quand LINE1
est à "0") et la vitesse de rotation du moteur (quand LINE1 est à "1"). Les signaux PWM1D à PWM3U
pilotent une interface de puissance (voir schéma plus loin) qui produit les 3 tensions inter-phases
sinusoïdales d'alimentation des 3 stators du moteur.
Avec le moteur utilisé (1 paire de pôles), la vitesse de rotation est réglable entre 0 et 1384tr/mn avec
une résolution de 21,97tr/mn.
La consigne de niveau (NV) a une résolution de 8 bits.

Le signal d'horloge CLK_18M432 est produit par l'oscillateur à quartz OSC1 et vaut 18,432MHz.
4. Gene_CLK
Div_32
On cherche à rendre
INPUT OUTPUT
l'ensemble du schéma
CLK_18M432 CLK OUT EN_2K25
VCC
EN
synchrone avec l'horloge
18,432MHz.
inst3 La fonction "Gene_CLK"
OUTPUT EN_72K produit des signaux de
Div_256 validation d'horloge (durée =
1 période 18,432MHz) avec
CLK OUT
une fréquence déterminée en
fonction des besoins :
inst1  EN_2K25 : 2,25KHz
DIV_4
 EN_72K : 72kHz
CLK EN_CLK OUTPUT EN_4M608  EN_4M608 : 4,608MHz

inst

CREMMEL Marcel Page 10/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
4.1 DIV_4
subdesign DIV_4
(
CLK : input;
EN_CLK : output;
)
variable
Q[1..0] : DFF;
begin
Q[].clk=CLK;
Q[].d=Q[].q+1;
EN_CLK=Q[].q==0;
end;

4.2 DIV_256
SUBDESIGN Div_256
(
CLK : INPUT;
OUT : OUTPUT;
)
VARIABLE Q[7..0] : DFF;
BEGIN
Q[].CLK=CLK;
Q[].D=Q[].Q+1;
OUT=Q[].Q==0;
END;

4.3 DIV_32
SUBDESIGN Div_32
(
CLK : INPUT;
EN : input;
OUT : OUTPUT;
)
VARIABLE Q[4..0] : DFFE;
BEGIN
Q[].CLK=CLK;
Q[].ena=EN;
Q[].D=Q[].Q+1;
OUT=(Q[].Q==0)&EN;
END;

5. Simul_Hall
AND2
EN_COD INPUT
VCC

inst4 Anti_rebonds
NOT
CODA INPUT
VCC IN OUT
inst12
EN decod_a_b CPT_UD NCO_H
CLK
A DIR UD POS[6..0] FREQ[6..0] H1 OUTPUT H1
inst3
B CLK CLK SENS CLK H2 OUTPUT H2
Anti_rebonds OUTPUT
H3 H3
NOT
CODB INPUT
VCC IN OUT inst15 inst5 inst
inst13
EN
CLK
inst2
CLK_18M432 INPUT
VCC
EN_2K25 INPUT
VCC

Les signaux CODA et CODB produits par le codeur incrémental passent par des fonctions anti-rebonds
indispensables compte-tenu de la fréquence d'horloge.
Le sens de chaque cran est détecté par la fonction "decod_a_b" :
 DIR indique le sens au moment du  sur CLK : "1" : CW et "0" : CCW

CREMMEL Marcel Page 11/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
Les  sur CLK sont comptés ou décomptés par la fonction CPT_UD :
 POS[6..0] : nombre de crans. Initialisé à 0 au moment de la configuration de l'EPLD.
 SENS : indique le sens du nombre de crans ("0" : CW, "1" : CCW)
La fonction CPT_UD pilote un oscillateur numérique commandé (NCO) qui produit en interne un
signal carré de fréquence proportionnelle à POS[]=FREQ[] :
FCLK_18M432
 FH   FREQ[] . Soit une résolution de 2,19Hz et une fréquence max de 138,4Hz
2 23
Cette fréquence est appliquée à un compteur 3 bits modulo 6 dont les sorties sont décodées pour
produire les 3 signaux H1, H2 et H3 déphasés de 60°.
La fréquence de ces signaux est donc réglable de 0Hz à 23,07Hz avec une résolution de 0,366Hz.
5.1 Anti_rebonds
AND2
OR2
DFFE DFFE
PRN PRN
IN INPUT
D Q D Q OR2 DFFE
VCC inst5
inst4 PRN
D Q OUTPUT OUT
AND2
ENA ENA AND2
CLRN CLRN inst7
inst inst2 ENA
inst3 CLRN
inst6 inst8
EN INPUT
VCC
CLK INPUT NOT
VCC
inst9

Les 2 premières bascules D permettent d'éliminer les effets des rebonds plus courts que 2 périodes
d'horloge validées : soit 2/2,25kHz = 889µS
5.2 Decod_a_b
SUBDESIGN decod_a_b
(
A, B : INPUT;
DIR, CLK : OUTPUT;
)
VARIABLE
DIR_FF : DFF;
BEGIN
DIR_FF.CLK = B;
DIR_FF.D = A;
DIR = DIR_FF.Q;
CLK = A & B;
END;
L'information de direction est échantillonnée sur A au  de B.
Le signal CLK est produit par une fonction ET entre A et B.
5.3 CPT_UD
subdesign CPT_UD
(
UD, CLK : input;
POS[6..0] : output;
SENS : output;
)
variable Q[7..0] : dff;
begin
Q[].clk=CLK;
if UD then Q[].d=Q[].q+1;
else Q[].d=Q[].q-1;
end if;
if Q7.q then POS[6..0]=!Q[6..0];
else POS[6..0]= Q[6..0];
end if;
SENS=Q7.q;
end;
Les  sur CLK sont comptés ou décomptés par la fonction CPT_UD :

CREMMEL Marcel Page 12/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
 POS[6..0] : nombre de crans. Initialisé à 0 au moment de la configuration de l'EPLD.
 SENS : indique le sens du nombre de crans ("0" : CW, "1" : CCW)

5.4 NCO_H
subdesign NCO_H
( FREQ[6..0] : input;
CLK : input;
H1,H2,H3 : output;
)

variable
REG[22..0] : dff;
FREQW[22..0] : node;
QH[2..0] : dff;

begin
FREQW[22..7]=gnd; FREQW[6..0]=FREQ[6..0];
REG[].d = REG[].q + FREQW[];
REG[].clk = CLK;
QH[].clk = REG22.q;
if QH[].q==5 then QH[].d=0;
else QH[].d=QH[].q+1;
end if;
H1=(QH[].q==0) or (QH[].q==1) or (QH[].q==2);
H2=(QH[].q==1) or (QH[].q==2) or (QH[].q==3);
H3=(QH[].q==2) or (QH[].q==3) or (QH[].q==4);
end;
La structure est classique. Le registre et l'additionneur ont une taille de 23 bits pour obtenir la résolution
de réglage voulue.
La sortie REG22.q est utilisée comme signal d'horloge d'un compteur 3 bits modulo 6. Les 3 sorties sont
décodées pour produire les 3 signaux H1, H2 et H3 déphasés de 60°.
6. Reg_Niveau
AND2
EN_COD INPUT
VCC

inst4 Anti_rebonds
NOT
CODA INPUT
VCC IN OUT
inst12
EN decod_a_b Cpt_UD_Niv
CLK up/down
inst3
A DIR updow n
OUTPUT NIV[7..0]
B CLK clock q[7..0]
Anti_rebonds
NOT inst1
CODB INPUT
VCC IN OUT inst15
inst13
EN
CLK
inst2
CLK_18M432 INPUT
VCC
EN_2K25 INPUT
VCC

La structure est similaire à la fonction "Simul_Hall", mais elle ne comporte pas de fonction NCO.
La fonction de comptage des crans diffère aussi; elle ne nécessite pas de commentaires supplémentaires.

CREMMEL Marcel Page 13/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC

7. Gene_3SVM
OUTPUT SYNC
Capteur_Hall OUTPUT POS[7..0]
H1 INPUT OUTPUT SECT[2..0]
VCC H1 SECT[2..0]
H2 INPUT
VCC H2 PULSE_H ROM_TA
H3 INPUT
VCC H3 M_POS[7..0]
address[7..0] q[7..0]
CLK_18M432
EN_72K inst7 Modulation

inst ROM_TB
TA[7..0] TAM[7..0]
address[7..0] q[7..0] TB[7..0] TBM[7..0]
inst8 M[7..0]
inst1
M[7..0] INPUT
VCC

CALC_SVM LIMIT_3PWM

OUTPUT PWM1[7..0]
SECT[2..0] PWM_R[7..0] IN1[7..0] OUT1[7..0]
OUTPUT PWM2[7..0]
TA[7..0] PWM_Y[7..0] IN2[7..0] OUT2[7..0]
OUTPUT PWM3[7..0]
TB[7..0] PWM_B[7..0] IN3[7..0] OUT3[7..0]
LIM[5..0]
inst9
INPUT CLK
LIM[5..0]
VCC
INPUT
EN
CLK_18M432
VCC
EN_72K INPUT
VCC
inst4

La fonction produit 3 signaux numériques SVM codés en Bd sur 8 bits et déphasés de 120°. Ils sont
synchronisés sur les signaux des capteurs à effet Hall : H1, H2 et H3. Leurs niveaux sont réglables avec
les entrées NIV1, NIV2 et NIV3 codées en C2 (-128 à +127).
La structure utilise 2 ROM (taille = 256 octets) contenant les tables TA et TB (voir §2).
Les ROM sont adressées par M_POS[7..0] qui représente la position angulaire du moteur dans un des 6
secteurs. Le codage sur 8 bits donne une résolution de 60/256=0,235° magnétique.
Le secteur actuel est donné par SECT[2..0] qui évolue entre 0 et 5. Cette information est utilisée par la
fonction "CAL_SVM" qui calcule les rapports cycliques permettant de produire la tension
d'alimentation adéquate du moteur.
La fonction "Modulation" multiplie les valeurs TA[] et TB[] (en BN) avec l'indice de modulation M[] et
réalise donc le réglage de niveau. On ne garde que l'octet de poids fort du résultat.
La fonction "LIMIT_PWM" évite d'obtenir les rapports cycliques extrêmes de 0% et 100% et bloquer le
hachage des courants dans le moteur.

CREMMEL Marcel Page 14/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
7.1 Capteur_Hall
Cpt_Sect_SVM
up counter
sclr modulus 6
Anti_rebonds

H1 INPUT
clock
VCC IN OUT OUTPUT SECT[2..0]
q[2..0]
EN clk_en
CLK inst13
inst Pulse_Hall OUTPUT PULSE_H
Anti_rebonds Cpt_Magn_pos
H1 PULSE_0 up counter
H2 INPUT
sclr
VCC IN OUT H2 PULSE_H
EN H3
clock q[7..0] OUTPUT M_POS[7..0]
CLK CLK
inst4 clk_en cout
inst6 cnt_en
Anti_rebonds
inst10
H3 INPUT
IN OUT
VCC NOT
EN OR2
CLK_18M432 INPUT inst11
VCC CLK
inst5 Cpt_Mesure_TH inst12
up counter
sclr
Periode_H
DFF Div_prog_16b
clock down counter
q[15..0] data[15..0]
sload
EN_72K INPUT clock
VCC cnt_en q[15..0] data[15..0]
enable q[15..0]
inst7 cout
inst8 clock
inst9

7.1.1 Anti_rebonds
Fonctions déjà décrites (§5.1)
7.1.2 Pulse_Hall

XOR
DFF
PRN
H1 INPUT
VCC D Q AND2
inst1
NOT OUTPUT PULSE_0
CLRN inst8 inst7
inst

XOR OR3
DFF
PRN OUTPUT PULSE_H
H2 INPUT
VCC D Q
inst4 inst2

CLRN
inst3

XOR
DFF
PRN
H3 INPUT
VCC D Q
CLK INPUT inst6
VCC

CLRN
inst5

Cette fonction détecte les changements d'états de H1, H2 et H3 pour produire :


 sur PULSE_0 : une impulsion de largeur 1/FCLK au  de H1
 sur PULSE_H : une impulsion de largeur 1/FCLK au  ou  de H1, H2 ou H3
Le signal PULSE_0 met à zéro de façon synchrone le compteur de secteurs et réalise donc la
synchronisation 360°" de l'alimentation du moteur.
Le signal PULSE_0 met à zéro de façon synchrone le compteur de position dans un secteur pour
l'initialiser à chaque détection de secteur.

IMPORTANT : on peut améliorer la fonction de synchronisation en codant les signaux H1, H2 et H3


et en affecter le compteur de secteurs à chaque transition. Le plus simple serait de remplacer le
compteur par une machine d'états qui produit 3 signaux similaires à H1, H2 et H3.

CREMMEL Marcel Page 15/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
7.1.3 Cpt_Sect_SVM
Il est incrémenté au début de chaque secteur grâce au signal PULSE_H.
7.1.4 Cpt_Magn_pos
Compteur 8 bits synchrone à raz synchrone.
La sortie COUT permet de bloquer le compteur quand il atteint 255.
Il est incrémenté à un rythme tel que son état évolue entre 0 et une valeur aussi proche que possible de
255 dans un secteur. Le rythme est calculé à la fin de chaque secteur par les fonctions
"Cpt_Mesure_TH", "Periode_H" et "Div_prog_16b".
7.1.5 Cpt_Mesure_TH
Ce compteur est incrémenté au rythme de 72kHz grâce au signal EN_72K.
Il est mis à 0 de façon synchrone avec PULSE_H, donc au début de chaque secteur. Son état juste avant
cette raz est donc proportionnel à la durée TSECT du dernier secteur :
Etat final Cpt_Mesure_TH = 72000.TSECT

Exemples : Vitesse de rotation magnétique TSECT Etat final Cpt_Mesure_TH


66,7 tours/mn 150mS 10800
3333 tours/mn 3mS 216
La vitesse de rotation magnétique doit être comprise entre 11 tr/mn et 7200 tr/mn pour éviter le
dépassement du compteur et obtenir un résultat supérieur à 100 (précision meilleure que 1%).
7.1.6 Periode_H
Sa fonction est simplement de mémoriser le résultat 72000.TSECT au moment adéquat.
7.1.7 Div_prog_16b
Il s'agit d'un décompteur synchrone 16 bits à prépositionnement synchrone. L'horloge est le signal
CLK_18M432 de fréquence 18,432MHz.
La sortie COUT passe à "1" quand le compteur est à 0. Sa fréquence est donc de :
FCLK_18M432 18432000 256
FCOUT   
72000  TSECT  1 72000  TSECT TSECT
Cette fréquence incrémente le compteur "Cpt_Magn_pos" qui est mis à zéro au début de chaque secteur,
donc avec une périodicité de TSECT.
Ainsi, quand le moteur tourne à vitesse constante, le compteur atteint tout juste la valeur 255 à la fin de
chaque secteur, quelle que soit cette vitesse : CQFD.
7.2 ROM_TA
Cette ROM de 256 octets contient la table TA vue au §2.5. Elle est mise à l'échelle :
T   π M_POS7..0 π 
Table TA :  A   256  sin     pour 0  M_POS[]  255
 TS  ROM 3 256 3
Extrait du fichier "Table_TA.mif" (adresse à gauche, donnée à droite) :
WIDTH = 8;
DEPTH = 256;
ADDRESS_RADIX = DEC;
DATA_RADIX = DEC;
CONTENT
BEGIN
0 : 222 ;
1 : 221 ;
2 : 221 ;
3 : 220 ;

252 : 4 ;
253 : 3 ;
254 : 2 ;
255 : 1 ;
END;

CREMMEL Marcel Page 16/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
7.3 ROM_TB
Cette ROM de 256 octets contient la table TB vue au §2.5. Elle est mise à l'échelle :
T   M_POS7..0 π 
Table TB :  B   256  sin   pour 0  M_POS[]  255
 TS  ROM  256 3
Extrait du fichier "Table_TB.mif" (adresse à gauche, donnée à droite) :
WIDTH = 8;
DEPTH = 256;
ADDRESS_RADIX = DEC;
DATA_RADIX = DEC;
CONTENT
BEGIN
0 : 0 ;
1 : 1 ;
2 : 2 ;
3 : 3 ;
4 : 4 ;

250 : 218 ;
251 : 219 ;
252 : 220 ;
253 : 220 ;
254 : 221 ;
255 : 221 ;
END;

7.4 Calc_SVM
Cette fonction effectue les calculs décrits dans le tableau du §2.5 pour obtenir les 3 rapports cycliques
PWMa, PWMb et PWMc. Les calculs dépendent du secteur dans lequel se trouve l'axe magnétique du
moteur; cette information est fournie par SECT[2..0].
Dans le tableau du §2.5, les valeurs des rapports cycliques PWMa, PWMb et PWMc sont comprises
entre 0 et 1. Dans la solution proposée, les rapports cycliques correspondants PWM_R, PWM_Y et
PWM_B sont des entiers positifs codés sur 8 bits, donc de valeurs comprises entre 0 et 255.
subdesign CALC_SVM
(
SECT[2..0]:input;
TA[7..0]:input;
TB[7..0]:input;
PWM_R[7..0]:output;
PWM_Y[7..0]:output;
PWM_B[7..0]:output;
)
variable
T0_x2[7..0]:node;
T0[7..0] :node;
begin
T0_x2[]=255-TA[]-TB[]+1; -- +1 pour éviter les dépassements
T0[6..0]=T0_x2[7..1]; T0[7]=GND;
case SECT[] is
when 0 => PWM_R[]=T0[];
PWM_Y[]=T0[]+TA[];
PWM_B[]=255-T0[];
when 1 => PWM_R[]=T0[]+TB[];
PWM_Y[]=T0[];
PWM_B[]=255-T0[];
when 2 => PWM_R[]=255-T0[];
PWM_Y[]=T0[];
PWM_B[]=T0[]+TA[];
when 3 => PWM_R[]=255-T0[];
PWM_Y[]=T0[]+TB[];
PWM_B[]=T0[];
when 4 => PWM_R[]=T0[]+TA[];

CREMMEL Marcel Page 17/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
PWM_Y[]=255-T0[];
PWM_B[]=T0[];
when 5 => PWM_R[]=T0[];
PWM_Y[]=255-T0[];
PWM_B[]=T0[]+TB[];
end case;
end;

7.5 Modulation
La fonction "Modulation" multiplie les valeurs TA[] et TB[] (en BN) avec l'indice de modulation M[] et
réalise donc le réglage de niveau. On ne garde que l'octet de poids fort du résultat.
Multiply_8x8

TA[7..0] INPUT dataa[7..0]


VCC
result[7..0] OUTPUT TAM[7..0]
datab[7..0] Unsigned
multiplication
inst

Multiply_8x8

TB[7..0] INPUT dataa[7..0]


VCC
result[7..0] OUTPUT TBM[7..0]
datab[7..0] Unsigned
M[7..0] INPUT
VCC multiplication
inst3

7.6 Limit_3PWM
Cette fonction évite d'obtenir les rapports cycliques extrêmes de 0% et 100% et bloquer le hachage des
courants dans le moteur.
subdesign LIMIT_3PWM
(
IN1[7..0]:input;
IN2[7..0]:input;
IN3[7..0]:input;
LIM[5..0]:input;
CLK:input;
EN :input;
OUT1[7..0]:output;
OUT2[7..0]:output;
OUT3[7..0]:output;
)
variable
LIM8[7..0]:node;
OUT1[7..0]:dffe;
OUT2[7..0]:dffe;
OUT3[7..0]:dffe;
begin
LIM8[7..6]=GND; LIM8[5..0]=LIM[5..0];
OUT1[].clk=CLK; OUT1[].ena=EN;
OUT2[].clk=CLK; OUT2[].ena=EN;
OUT3[].clk=CLK; OUT3[].ena=EN;
if IN1[]>255-LIM8[] then OUT1[]=255-LIM8[];
else if IN1[]>=LIM8[] then OUT1[]=IN1[];
else OUT1[]=LIM8[];
end if;
end if;
if IN2[]>255-LIM8[] then OUT2[]=255-LIM8[];
else if IN2[]>=LIM8[] then OUT2[]=IN2[];
else OUT2[]=LIM8[];
end if;
end if;
if IN3[]>255-LIM8[] then OUT3[]=255-LIM8[];
else if IN3[]>=LIM8[] then OUT3[]=IN3[];

CREMMEL Marcel Page 18/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
else OUT3[]=LIM8[];
end if;
end if;
end;
La fonction opère une sorte d'écrêtage sur les 3 entrées :
 Si l'entrée est inférieure à LIM[] alors la sortie vaut LIM[]
 Si l'entrée est supérieure à 255-LIM[] alors la sortie vaut 255-LIM[]
 Dans les autres cas : sortie = entrée
Les sorties sont synchronisées sur l'horloge CLK_18M432 pour éviter l'apparition d'états parasites.
8. Generateur_PWM
UD_Counter
OUTPUT PTMR[7..0]
CLK_PWM PTMR[7..0]
CLK_EN

inst

OUTPUT TEST
Comp_PWM
unsigned compare
Dead_Time
dataa[7..0] OUTPUT PWM1D
PDC1[7..0] INPUT agb COMP1 PWM1D
VCC datab[7..0] OUTPUT PWM1U
CLK_PWM PWM1U
inst8 CLK_EN
DELAY[5..0]

Comp_PWM inst4
unsigned compare
Dead_Time
dataa[7..0] OUTPUT PWM2D
PDC2[7..0] INPUT agb COMP1 PWM1D
VCC datab[7..0] OUTPUT PWM2U
CLK_PWM PWM1U
inst11 CLK_EN
DELAY[5..0]

Comp_PWM inst2
unsigned compare
Dead_Time
dataa[7..0] OUTPUT PWM3D
PDC3[7..0] INPUT agb COMP1 PWM1D
VCC datab[7..0] OUTPUT PWM3U
CLK_PWM PWM1U
inst12 CLK_EN
DELAY[5..0] INPUT
VCC DELAY[5..0]
CLK_18M432 INPUT
VCC
CLK_EN INPUT inst3
VCC

Cette fonction produit les 6 signaux PWM destinés à commander les 6 transistors des 3 bras de
commutateurs de l'interface de puissance. Les rapports cycliques de ces signaux sont déterminés par les
niveaux des signaux numériques PCD1[] à PCD3[].
Le cœur de la structure est le compteur-décompteur "UD_Counter" qui détermine la période des signaux
PWM et la résolution de réglage des rapports cycliques. Elle produit le signal numérique PTMR[] de
forme triangulaire.
Ce signal est comparé aux 3 entrées PCD1[] à PCD3[] par 3 fonctions "Comp_PWM". Les sorties
respectives passent à "1" quand le signal PTMR[] est supérieur à PCDx[].
Ces sorties pourraient piloter directement les commutateurs des 3 bras s'ils étaient parfaits.
Malheureusement les transistors qui les constituent ne commutent pas instantanément et il faut insérer
des temps morts à chaque transition pendant lesquelles les 2 commutateurs du pont sont simultanément
ouverts. On améliore ainsi considérablement le rendement du bras.

CREMMEL Marcel Page 19/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
8.1 UD_Counter
NOT

inst1
Up_Down_Cpt
up/down
updow n
CLK_PWM INPUT
VCC clock OUTPUT PTMR[7..0]
CLK_EN INPUT q[7..0]
VCC clk_en
Comp_Up
inst compare

dataa[7..0]
aeb
datab[]=254 SRFF
PRN
inst12 S Q

Comp_Down R
CLRN
compare inst14

dataa[7..0]
aeb
datab[]=1
inst13

On utilise un compteur-décompteur synchrone dont le mode de fonctionnement est déterminé par l'état
de la bascule RS synchrone :
 état "0" : Up_Down_Cpt compte. La bascule est mise à "1" de façon synchrone quand l'état du
compteur est 254. Celui-ci passe alors à 255 avant de décompter.
 état "1" : Up_Down_Cpt décompte. La bascule est mise à "0" de façon synchrone quand l'état du
compteur est 1. Celui-ci passe alors à 0 avant de compter.
Conclusion : évolution du compteur : 253-254-255-254-253-252- … 3-2-1-0-1-2-3-…254-255-254-…

Note : le signal CLK_EN ne passe à "1" qu'une période sur 4 de CLK_PWM à cause de la fonction
"Div_4" (voir page §4). La fréquence de comptage-décomptage de Up_Down_Cpt est donc de
18,432MHz/4 = 4,608MHz.
La fréquence du signal numérique PTMP[] est donc de 4,608MHz/(254*2)=9071Hz. Les signaux PWM
ont la même fréquence : valeur satisfaisante.
8.2 Comparaisons : relevés expérimentaux

PDC1[] proche de 128

Sortie du 1° comparateur

PTMP[] converti par le CNA de la


carte d'étude

CREMMEL Marcel Page 20/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC

PDC1[] proche de 255

Sortie du 1° comparateur

PTMP[] converti par le CNA de la


carte d'étude

PDC1[] proche de 0

Sortie du 1° comparateur

PTMP[] converti par le CNA de la


carte d'étude

8.3 Dead_Time
Schéma original
NOT AND2 DFFE
PRN
OUTPUT PWM1D
inst6 D Q

inst7
XOR ENA
CLRN
inst9
DFFE
inst1 AND2 DFFE
PRN
COMP1 INPUT PRN
VCC D Q OUTPUT
D Q PWM1U
CLK_PWM INPUT
VCC
CLK_EN INPUT ENA
Dead_Time_Cpt inst3
VCC CLRN down counter ENA
inst11 sload CLRN
DELAY[5..0] INPUT inst10
VCC data[5..0]

q[5..0]
clock
cout
clk_en
cnt_en
inst2
NOT

inst5

CREMMEL Marcel Page 21/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
Schéma de test
OUTPUT SLOAD
OUTPUT COMP1R
OUTPUT D1
NOT AND2 DFFE
PRN OUTPUT PWM1D
inst6 D Q
inst7
XOR ENA
CLRN
inst9
DFFE
inst1 AND2 DFFE
PRN
COMP1 INPUT PRN
VCC D Q OUTPUT
D Q PWM1U
CLK_PWM INPUT
VCC
CLK_EN INPUT ENA
Dead_Time_Cpt inst3
VCC CLRN down counter ENA
inst11 sload CLRN
DELAY[5..0] INPUT inst10
VCC data[5..0] OUTPUT D2
OUTPUT Q[5..0]
q[5..0]
clock OUTPUT COUT
cout
clk_en
cnt_en
inst2
NOT

inst5

Résultats de simulation :

Pour simplifier, on a utilisé une horloge CLK_PWM de 4MHz avec CLK_EN constamment à "1".
Le décompteur "Dead_Time_Cpt" est monté en monostable à déclenchement synchrone. Le
déclenchement est provoqué à chaque transition du signal COMP1 par le signal SLOAD produit par la
1° bascule D et la porte XOR associée.
Le décompteur est prépositionné à la valeur DELAY[] au déclenchement du monostable. La sortie
COUT passe alors à "0" jusqu'à ce que le compteur atteigne l'état 0 : la durée à l'état bas de COUT est
de DELAY[]xPériode_CLKPWM.
Le signal COUT est combiné avec COMP1R pour produire les signaux D1 et D2 conformes au résultat
attendu : temps mort entre les transitions (qd D1 et D2 sont à "0").
Les signaux D1 et D2 sont synchronisés avec l'horloge pour supprimer les "glitchs".
Le temps mort dure DELAY[] périodes d'horloge.

Note : le retard entre COMP1 et les signaux PWM est sans effet car tous les 6 signaux PWM sont
retardés de façon identique.

Attention : la structure ne fonctionne plus si la durée du signal COMP1 est plus courte que le temps
mort désiré.

CREMMEL Marcel Page 22/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
Relevés expérimentaux (DELAY[]=2) :

COMP1

PWM1D

PWM1U

On mesure un temps mort de 435nS, conforme avec la valeur DELAY[] : 2/4,608MHz


Le retard de PWM1D est dû aux bascules D de synchronisation.

COMP1

PWM1D

PWM1U

Résultats conformes.

CREMMEL Marcel Page 23/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC
Une période complète (dans les mêmes conditions) :

PWM1D

PWM1U

PTMR[] converti par le CNA de la


carte d'étude

9. Résultat final (avant interface de puissance)


Les 3 sorties PWM1D à PWM3D de l'EPLD sont appliquées à 3 filtres passe-bas du 1° ordre (R=10K,
C=100nF) de fréquence de coupure Fc=159Hz. On observe ainsi les valeurs moyennes de ces 3 signaux.

Conditions :
LIMIT[]=4
DELAY[]=2
Synchro externe sur  de la sortie
H1
Bleu = PWM3
Rouge = PWM2
Noir = PWM1

La fréquence des 3 phases est


suffisamment basse (1,092Hz) pour
passer le filtre passe-bas sans
atténuation.

Le résultat est conforme !

CREMMEL Marcel Page 24/25 TS électronique - 31/08/06


Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC

Relevés des tensions différentielles:


PWM1-PWM2
PMW3-PWM2
PWM1-PWM3

Sensibilité : 1 V/div

CREMMEL Marcel Page 25/25 TS électronique - 31/08/06

Vous aimerez peut-être aussi