générateur pwm svm triphasé pour moteur bldc schémas et
Transcription
générateur pwm svm triphasé pour moteur bldc schémas et
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 ) T3 T1 T2 2 2 2 π 2.π m.sin m.sin m.sin TS TS TS 3 3 3 3 3 T3 T2 T4 2 2 2 2 m.sin m.sin m.sin TS TS 3 TS 3 3 3 3 T0 T7 TS T1 T2 TS TS 2.TS T0 T7 TS T2 T3 TS TS 2.TS T0 T7 TS T3 T4 TS TS 2.TS Secteur IV ( 4/3) T4 2 4π m.sin TS 3 3 Secteur V (4/3 5/3) T5 2 5π m.sin TS 3 3 Secteur VI (5/3 2) T6 2 m.sin2 TS 3 T1 2 5 m.sin TS 3 3 T5 T6 2 2 4 m.sin m.sin TS TS 3 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 Secteur I 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 Durées S0 (000) T0/2 S1 (100) T1/2 S2 (110) T2/2 S7 (111) T7 S2 (110) T2/2 S1 (100) T1/2 S0 (000) T0/2 S0 (000) T0/2 S3 (010) T3/2 S2 (110) T2/2 S7 (111) T7 S2 (110) T2/2 S3 (010) T3/2 S0 (000) T0/2 S0 (000) T0/2 S3 (010) T3/2 S4 (011) T4/2 S7 (111) T7 S4 (011) T4/2 S3 (010) T3/2 S0 (000) T0/2 S0 (000) T0/2 S5 (001) T5/2 S4 (011) T4/2 S7 (111) T7 S4 (011) T4/2 S5 (001) T5/2 S0 (000) T0/2 S0 (000) T0/2 S5 (001) T5/2 S6 (101) T6/2 S7 (111) T7 S6 (101) T6/2 S5 (001) T5/2 S0 (000) T0/2 S0 (000) T0/2 S1 (100) T1/2 S6 (101) T6/2 S7 (111) T7 S6 (101) T6/2 S1 (100) T1/2 S0 (000) T0/2 UaN UbN Secteur II UcN Etats Durées UaN UbN Secteur III UcN Etats Durées UaN UbN Secteur IV UcN Etats Durées UaN UbN Secteur V UcN Etats Durées UaN UbN Secteur VI UcN Etats Durées 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 : Sect. UaN PWMa T0 TS UbN PWMb T0 T1 T0 TA TS TS UcN PWMc TS T7 TS T0 TS TS T0 T3 T0 TB TS TS T0 TS TS T7 TS T0 TS TS TS = T3+T4+T0+T7 TS T7 TS T0 T3 T4 TS TS T0 TS TS = T4+T5+T0+T7 TS T7 TS T0 T4 T5 TS TS Période PWM TA TB I TS = T1+T2+T0+T7 T1 T2 II TS = T2+T3+T0+T7 T2 T3 III IV T0 T5 T0 TA T5 T6 TS TS V TS = T5+T6+T0+T7 VI TS = T6+T1+T0+T7 T6 T1 T0 TS T0 T3 T0 TA TS TS T0 T5 T0 TB TS TS T0 TS TS T7 TS T0 TS TS T0 TS TS T7 TS T0 TS TS T0 T1 T0 TB 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 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 -0,2 -0,4 -0,6 -0,8 -1 0 CREMMEL Marcel 60 120 180 Page 9/25 240 TS électronique - 31/08/06 Application maquette d'étude EP10K20 – Générateur SVM triphasé pour moteur BLDC 3. Schéma principal OUTPUT COL1 PIN_103 Simul_Hall GND LINE1 CODA CODB PIN_90 PIN_110 PIN_109 INPUT VCC INPUT VCC INPUT VCC Gene_3_SVM EN_COD H1 H1 CODA H2 H2 CODB H3 H3 SYNC POS[7..0] PDC1[7..0] EN_2K25 LIM[5..0] PWM2[7..0] PDC2[7..0] TEST CLK_18M432 PWM3[7..0] PDC3[7..0] PWM1D DELAY[5..0] PWM1U CLK_18M432 PWM2D CLK_EN PWM2U EN_72K inst Reg_Niveau NOT EN_COD inst5 inst11 PIN_63 H3 PIN_64 OUTPUT SYNC PIN_74 OUTPUT MAGN_POS[7..0] OUTPUT SECT[2..0]PIN_71 SECT[2..0] PWM1[7..0] LIMIT[5..0] PIN_62 H2 OUTPUT PIN_72 PIN_73 M[7..0] inst3 H1 OUTPUT Generateur_PWM CLK_18M432 LIMIT OUTPUT NIV[7..0] PTMR[7..0] PWM3D CODA PWM3U DELAY CODB DELAY[5..0] CLK_18M432 inst1 OUTPUT TEST PIN_75 OUTPUT PWM1D PIN_48 OUTPUT PWM1U PIN_49 OUTPUT PWM2D PIN_50 OUTPUT PWM2U PIN_51 OUTPUT PWM3D PIN_53 OUTPUT PWM3U PIN_54 OUTPUT TEST2 PIN_78 OUTPUT TEST1 PIN_76 OUTPUT C L K _ C N A PIN_164 EN_2K25 inst10 inst4 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 CLK_18M432 INPUT VCC CLK OUT OUTPUT EN_2K25 OUTPUT EN_72K OUTPUT EN_4M608 EN inst3 Div_256 CLK OUT inst1 DIV_4 CLK EN_CLK On cherche à rendre l'ensemble du schéma synchrone avec l'horloge 18,432MHz. La fonction "Gene_CLK" produit des signaux de validation d'horloge (durée = 1 période 18,432MHz) avec une fréquence déterminée en fonction des besoins : EN_2K25 : 2,25KHz EN_72K : 72kHz EN_4M608 : 4,608MHz inst CREMMEL Marcel Page 10/25 TS électronique - 31/08/06 PIN_166 PIN_167 PIN_168 PIN_169 PIN_171 PIN_172 PIN_173 PIN_174 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 EN_COD INPUT VCC CODA INPUT VCC AND2 inst4 NOT inst12 Anti_rebonds IN OUT EN decod_a_b CPT_UD NCO_H CLK inst3 Anti_rebonds CODB INPUT VCC A DIR UD B CLK CLK POS[6..0] SENS FREQ[6..0] H1 OUTPUT H1 CLK H2 OUTPUT H2 H3 OUTPUT H3 NOT inst13 IN OUT inst15 inst5 inst EN CLK inst2 CLK_18M432 EN_2K25 INPUT VCC 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 IN INPUT VCC DFFE PRN D PRN Q D Q inst4 inst5 OR2 PRN D AND2 ENA CLRN inst AND2 ENA CLRN inst2 inst3 EN Q OUTPUT OUT inst7 inst6 INPUT VCC INPUT VCC CLK DFFE ENA CLRN inst8 NOT 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 inst12 IN OUT EN CLK inst3 Anti_rebonds decod_a_b Cpt_UD_Niv up/down A DIR B CLK NOT CODB INPUT VCC inst13 updow n clock q[7..0] OUTPUT NIV[7..0] inst1 IN OUT EN CLK inst15 inst2 CLK_18M432 EN_2K25 INPUT VCC 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 Capteur_Hall H1 H2 H3 INPUT VCC INPUT VCC INPUT VCC H1 H2 H3 CLK_18M432 EN_72K SECT[2..0] PULSE_H M_POS[7..0] address[7..0] q[7..0] TA[7..0] TB[7..0] M[7..0] TAM[7..0] TBM[7..0] inst1 INPUT VCC CALC_SVM LIMIT_3PWM SECT[2..0] PWM_R[7..0] IN1[7..0] OUT1[7..0] OUTPUT PWM1[7..0] TA[7..0] PWM_Y[7..0] IN2[7..0] OUT2[7..0] OUTPUT PWM2[7..0] TB[7..0] PWM_B[7..0] IN3[7..0] OUT3[7..0] OUTPUT PWM3[7..0] LIM[5..0] inst9 EN_72K SECT[2..0] Modulation ROM_TB inst8 CLK_18M432 POS[7..0] OUTPUT q[7..0] inst7 address[7..0] LIM[5..0] SYNC OUTPUT ROM_TA inst M[7..0] OUTPUT CLK INPUT VCC INPUT VCC INPUT VCC EN 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 sclr Anti_rebonds H1 INPUT VCC clock clk_en IN OUT EN CLK inst INPUT VCC q[2..0] H1 H2 H3 CLK IN OUT EN CLK SECT[2..0] OUTPUT PULSE_H OUTPUT M_POS[7..0] Cpt_Magn_pos PULSE_0 PULSE_H up counter sclr clock clk_en cnt_en inst4 Anti_rebonds OUTPUT inst13 Pulse_Hall Anti_rebonds H2 up counter modulus 6 inst6 q[7..0] cout inst10 H3 INPUT VCC CLK_18M432 INPUT VCC IN OUT EN CLK NOT OR2 inst11 inst5 Cpt_Mesure_TH inst12 up counter sclr Periode_H clock EN_72K INPUT VCC Div_prog_16b DFF q[15..0] cnt_en inst7 data[15..0] clock enable inst8 q[15..0] down counter sload data[15..0] clock q[15..0] cout inst9 7.1.1 Anti_rebonds Fonctions déjà décrites (§5.1) 7.1.2 Pulse_Hall XOR DFF H1 INPUT VCC PRN D Q inst1 AND2 NOT CLRN inst inst8 inst7 XOR OR3 OUTPUT PULSE_0 OUTPUT PULSE_H DFF H2 INPUT VCC PRN D Q inst4 inst2 CLRN inst3 XOR DFF H3 CLK INPUT VCC INPUT VCC PRN D Q inst6 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_POS7..0 π Table TA : A 256 sin pour 0 M_POS[] 255 256 3 3 TS ROM 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_POS7..0 π Table TB : B 256 sin pour 0 M_POS[] 255 256 3 TS ROM 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 VCC dataa[7..0] result[7..0] datab[7..0] OUTPUT TAM[7..0] OUTPUT TBM[7..0] Unsigned multiplication inst Multiply_8x8 TB[7..0] INPUT VCC M[7..0] INPUT VCC dataa[7..0] result[7..0] datab[7..0] Unsigned 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 else end if; end if; if IN2[]>255-LIM8[] then OUT2[]=255-LIM8[]; else if IN2[]>=LIM8[] then else end if; end if; if IN3[]>255-LIM8[] then OUT3[]=255-LIM8[]; else if IN3[]>=LIM8[] then CREMMEL Marcel Page 18/25 OUT1[]=IN1[]; OUT1[]=LIM8[]; OUT2[]=IN2[]; OUT2[]=LIM8[]; OUT3[]=IN3[]; 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 CLK_PWM CLK_EN OUTPUT PTMR[7..0] OUTPUT TEST PWM1D PWM1U OUTPUT PWM1D OUTPUT PWM1U PWM1D PWM1U OUTPUT PWM2D OUTPUT PWM2U PWM1D PWM1U OUTPUT PWM3D OUTPUT PWM3U PTMR[7..0] inst Comp_PWM unsigned compare PDC1[7..0] INPUT VCC dataa[7..0] datab[7..0] Dead_Time agb COMP1 CLK_PWM CLK_EN DELAY[5..0] inst8 Comp_PWM unsigned compare PDC2[7..0] INPUT VCC dataa[7..0] datab[7..0] inst4 Dead_Time agb COMP1 CLK_PWM CLK_EN DELAY[5..0] inst11 Comp_PWM unsigned compare PDC3[7..0] INPUT VCC dataa[7..0] datab[7..0] inst2 Dead_Time agb COMP1 CLK_PWM CLK_EN DELAY[5..0] inst12 DELAY[5..0] INPUT VCC CLK_18M432 INPUT VCC INPUT VCC CLK_EN inst3 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 CLK_PWM CLK_EN INPUT VCC INPUT VCC updow n clock clk_en OUTPUT q[7..0] PTMR[7..0] Comp_Up inst compare dataa[7..0] datab[]=254 aeb SRFF PRN inst12 S Comp_Down compare dataa[7..0] datab[]=1 Q R CLRN inst14 aeb 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 D inst6 Q OUTPUT PWM1D Q OUTPUT PWM1U inst7 XOR DFFE COMP1 CLK_PWM CLK_EN DELAY[5..0] INPUT VCC INPUT VCC INPUT VCC INPUT VCC inst1 PRN D ENA CLRN inst9 AND2 DFFE PRN Q D ENA CLRN inst11 Dead_Time_Cpt down counter sload data[5..0] inst3 ENA CLRN inst10 q[5..0] cout clock 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 NOT AND2 SLOAD OUTPUT COMP1R OUTPUT D1 OUTPUT PWM1D OUTPUT PWM1U OUTPUT D2 OUTPUT Q[5..0] OUTPUT COUT DFFE PRN D inst6 OUTPUT Q inst7 XOR DFFE COMP1 CLK_PWM CLK_EN DELAY[5..0] INPUT VCC INPUT VCC INPUT VCC inst1 PRN D ENA CLRN inst9 AND2 DFFE PRN Q D ENA CLRN inst11 INPUT VCC Dead_Time_Cpt down counter sload data[5..0] clock clk_en cnt_en q[5..0] cout Q inst3 ENA CLRN inst10 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