convertisseur boost avec mppt pour application

publicité
Written by:
Revision/release date:
[email protected]
A, 2015.02.09
Tutoriel n°1
CONVERTISSEUR BOOST AVEC MPPT
POUR APPLICATION PHOTOVOLTAIQUE
Rédigé par :
imperix SA, Rte. de l’Industrie 17, 1950 Sion, Switzerland
Nicolas Cherix <[email protected]>
Points abordés :
– Configuration des entrées analogiques
– Configuration des interruptions
– Configuration de l’échantillonnage
– Utilisation de la ligne de commande
– Mise en place d’une régulation basique
1 INTRODUCTION
Ce tutoriel décrit la procédure à suivre pour contrôler un convertisseur élévateur de tension de
type Boost à l’aide de la BoomBox. L’application envisagée consiste à interfacer un panneau
solaire à une source de tension plus élevée. L’objectif proposé est de soustraire le maximum de
puissance du panneau solaire à disposition.
Le système considéré est représenté à la Figure 1, ses principaux paramètres électriques étant
indiqués dans le Tableau 1 :
L
Upv
Ipv
UDC
Epv S1
Figure 1 : Schéma électrique simplifié du système considéré.
Nom
Valeur
Spécification
Capteur utilisé
# Canal
IPV
UPV
UDC
IDC
fS
L
0-8A
10-25V
100V
0-2A
10kHz
1mH
Courant extrait du panneau solaire
Tension aux bornes du panneau solaire
Tension du bus DC (fixe)
Courant injecté dans le bus DC
Fréquence de commutation
Inductance de lissage
LEM LAH50-P
LEM LV25-P
IX AMC1200
N.A.
N.A.
N.A.
0
1
2
N.A.
N.A.
N.A.
Tableau 1 : Paramètres électriques du système considéré.
EXEMPLE D’APPLICATION
Convertisseur boost avec MPPT pour application photovoltaïque
Concrètement, l’approche proposée consiste à contrôler le courant IPV extrait du panneau
solaire ; la valeur de consigne correspondante étant ensuite définie par un algorithme MPPT afin
de maximiser la puissance extraite. La tension du bus DC est supposée constante.
Une stratégie d’implémentation raisonnable consiste à placer une boucle de réglage rapide sur
le courant IPV dont la valeur de consigne sera mise à jour périodiquement par un algorithme
MPPT exécuté plus sur une base de temps plus longue.
2 MISE EN PLACE DU HARDWARE
Afin de contrôler le convertisseur Boost, un seul signal de commande S1 est nécessaire, qui est
cablé sur le canal PWM #0 (low). Si la conduction inverse dans le transistor est avantageuse, le
signal de commande complémentaire (high) peut également être cablé.
Par ailleurs, trois mesures sont nécessaires afin de constituer la structure maximale de contrôle
correspondant au réglage décrit. Ces mesures sont indiquées dans le Tableau 1. Suivant les choix
de design effectués, il est naturellement possible de se passer de certaines d’entre-elles.
2.a CONFIGURATION DES ENTRÉES ANALOGIQUES
Après avoir connecté les mesures à la BoomBox à l’aide de câbles RJ45, il est nécessaire de
configurer chacun des canaux analogiques utilisés. La procédure à suivre est la suivante :
1) Sélectionner le menu « analog inputs » sur le frontpanel.
2) Sélectionner un des canaux de mesure à configurer 0 (IPV), 1 (UPV) ou 2 (UDC)
3) En fonction du type de capteur utilisé, choisir entre :
a) L’entrée single-ended, basse impédance (100 Ω). Ce choix est recommandé avec la
plupart des capteurs de type LEM.
b) L’entrée differential, haute impédance (3kΩ). Ce choix est recommandé dans la plupart
des autres cas. Attention, il ne s’agit pas d’une entrée isolée galvaniquement.
4) Choisir les gains permettant d’optimiser l’exploitation de la pleine échelle du convertisseur
AD [-10V ; +10V]. Les valeurs retenues sont ici de 4 (IPV), 8 (UPV) ou 8 (UDC)
5) Activer ou désactiver le pré-filtrage sur chaque mesure. On choisit ici de le désactiver et de
privilégier un échantillonnage parfaitement synchrone des valeurs mesurées.
6) Le cas échéant, régler la fréquence de coupure. Cette dernière est ici sans importance
puisque le filtre est désactivé.
7) Régler les seuils de sécurité à des valeurs sûres pour l’utilisateur et l’application. Ces valeurs
sont considérées en tension à l’entrée du convertisseur AD. Les limites proposées sont indiquées dans le Tableau 2. Elles tiennent compte de la sensibilité des capteurs utilisés, dont les
plus courants sont décrits dans le Tableau 3
8) Activer les sécurités.
9) Sauvegarder les paramètres configurés et répéter l’opération pour les autres canaux.
Nom
Limite max.
Limite min.
Plage de courant capteur
Limites Boombox
# Canal
IPV
UPV
UDC
10A
25V
120V
-2A
-5V
-5V
[-1mA ; 5mA]
[-0.27mA ; 1.33mA]
[-0.27mA ; 6.38mA]
[-0.4V ; 2.0V]
[-0.2V ; 1.1V]
[-0.2V ; 5.1V]
0
1
2
Tableau 2 : Seuils de sécurité programmés sur la Boombox.
2
EXEMPLE D’APPLICATION
Convertisseur boost avec MPPT pour application photovoltaïque
Capteur
Type de sortie
Sensibilité nominale
Précision typ. (non calib.)
LEM - LV25-P
LEM - LAH50-P
LEM - LAH50-NP/SP1
LEM - LA25-NP
IX - AMC1200
IX - ACS709
Courant, single-ended
Courant, single-ended
Courant, single-ended
Courant, single-ended
Tension, balanced diff.
Tension, balanced diff.
250 / RIN [V/V]
50 [mV/A]
100 [mV/A]
100 [mV/A]
5.4 [mV/V]
90 [mV/A]
±1%
±0.25% @25°C
±0.25% @25°C
±0.5%
±1.8%
±5%
Tableau 3 : Paramètres des capteurs les plus couramment utilisés avec la BoomBox.
3 CONFIGURATION DU SOFTWARE
La configuration logicielle de la BoomBox s’effectue par l’appel de plusieurs routines ad-hoc
présentées ci-après. Ces routines sont typiquement appelées lors de l’initialisation de
l’application, c'est-à-dire au démarrage du code de la BoomBox, dans la fonction UserInit().
3.a CONFIGURATION DES PWMS
Chaque paire de signaux PWM complémentaires possède son propre modulateur PWM qui peut
être calé sur n’importe lequel des 4 générateurs de fréquence disponibles dans la BoomBox.
Ainsi, la configuration d’un modulateur PWM se fait en deux étapes principales :
 Configuration du générateur de fréquence
Le code suivant permet de configurer le générateur de fréquence #3 avec une période définie
par SWITCHING_PERIOD (ici 100μs). En fait, le second argument de la fonction est lié au nombre
de coups d’horloge correspondants sur une base de temps de 30Mhz. SWITCHING_PERIOD et
FPGA_CLK_PERIOD sont des constantes de précompilation (#define) définies dans user.h.
SetFreqGenPeriod(3, (int)(SWITCHING_PERIOD/FPGA_CLK_PERIOD));
 Configuration du modulateur PWM
La ligne suivante permet d’utiliser le générateur de fréquence #3 c ci-dessus sur le canal PWM #0.
Elle sélectionne également une porteuse de type dent de scie (SAWTOOTH) pour le modulateur
correspondant, ainsi qu’un temps d’anti-chevauchement entre signaux complémentaires 400ns.
Le dernier argument est également défini en nombre de coups d’horloge à 30Mhz.
ConfigPWMChannel(0, 3, SAWTOOTH, (int)(400e-9/FPGA_CLK_PERIOD))
L’instruction suivante permet de configurer le canal PWM #0 comme actif. Cela signifie que dès
lors que les sorties PWM de la BoomBox seront activées (la commande enable est passée dans la
console), les signaux PWM seront directement produits. Dans des applications plus complexes
ou multi-convertisseurs, cette option permet d’activer sélectivement certaines sorties PWM
indépendamment du blocage/déblocage (enable/disable) global de l’ensemble des canaux.
ActivatePWMChannel(0);
// Activate the PWM #0 channel
La ligne suivante permet d’imposer une phase relative de 0 degrés sur le canal PWM #0 par
rapport à l’horloge sélectionnée pour ce canal (la source #3). A noter qu’il s’agit ici de la valeur
3
EXEMPLE D’APPLICATION
Convertisseur boost avec MPPT pour application photovoltaïque
par défaut et que ce paramètre est surtout utile pour décaler les porteuses dans un système
polyphasé. L’appel de fonction suivant pourrait donc être omis ici.
SetPWMPhase(0, 0.0);
// 0.0 degrees between FG #3 and PWM #0
3.b CONFIGURATION DE LA CONVERSION ANALOGIQUE-NUMERIQUE
Afin d’obtenir des valeurs directement utilisables pour chacune des entrées analogiques, il est
nécessaire de définir les paramètres de conversion analogique-numérique. Pour ce faire, il suffit
d’invoquer la fonction SetADCAdjustements() et de lui fournir comme paramètres la sensibilité et
l’offset désirés. Ainsi, à la lecture d’un canal analogique, la routine GetADC() retourne directement
un float possédant le sens physique adéquat selon l’équation :
y  ax  b
où y est la valeur retournée, x la valeur brute issue du convertisseur AD ainsi que a et b la
sensibilité et l’offset configurés par SetADCAdjustments(), respectivement. La sensibilité a de la
chaine de conversion complète peut être déterminée à partir des paramètres des capteurs
utilisés selon l’équation :
1
32768
 s  GFE 
a
10
où s est la sensibilité du capteur utilisé et GFE est le gain programmé sur l’étage d’entrée
analogique de la BoomBox. Dans l’exemple proposé, les paramètres à utiliser sont les suivants :
SetADCAdjustments(0, 6.10e-3/4, 0.0);
SetADCAdjustments(1, 57.4e-3/8, 0.0);
SetADCAdjustments(2, 113e-3/8, 0.0);
// Nominal sensitivity and x4 gain (Ipv)
// Nominal sensitivity and x8 gain (Upv)
// Nominal sensitivity and x8 gain (Udc)
La configuration de l’échantillonnage permet de définir à quel instant les mesures doivent être
prises. Pour l’application proposée, l’échantillonnage peut avantageusement se faire au milieu de
la période de commutation, soit à la valeur moyenne de l’ondulation de courant. Pour ce faire, le
l’échantillonnage est basé sur le générateur de fréquence #3 avec un déphasage de 180°.
L’instruction correspondante est la suivante :
ConfigSampling(3, 0.5);
// Phase of 180° between FG #3 and sampling
3.c CONFIGURATION DES INTERRUPTIONS
Comme suggéré plus tôt, il est proposé de configurer deux interruptions :
 Interruption rapide
Une interruption rapide est dédiée à l’exécution du régulateur de courant. Avec la ligne suivante,
l’interruption externe #1 (issue de la FPGA) est configurée afin d’utiliser comme routine de
service la fonction UserInterrupt1(). L’événement déclencheur est défini comme étant de
générateur de fréquence #3 (qui est la base de temps utilisée dans l’unique modulateur
configuré). La phase par rapport à cette horloge est choisie à 0 degrés (l’interruption est
déclenché exactement au début de la période PWM) et aucun postscaling n’est utilisé (chaque
flanc d’horloge génère une interruption).
RegisterExt1Interrupt(&UserInterrupt1, 3, 0.0, 0);
4
EXEMPLE D’APPLICATION
Convertisseur boost avec MPPT pour application photovoltaïque
 Interruption lente
Une seconde interruption plus lente exécutant l’algorithme MPPT. Avec la ligne suivante, une
interruption plus lente est configurée en utilisant le timer interne et en le configurant de manière
à utiliser UserInterrupt2() comme routine de service. La période choisie est de configuré avec une
période de 10’000us.
RegisterTimerInterrupt(&UserInterrupt2, 10000);
4 MISE EN PLACE DE L’APPLICATION
Dans l’exemple proposé ici, la quantité de code correspondant à l’application est très réduite.
Pour cette raison, l’ensemble du code peut être directement rédigée dans les fichiers User.c/.h
4.a DÉFINITION DE LA MACHINE D’ÉTAT DE L’APPLICATION
Au vu de la simplicité de cet exemple d’application, aucune machine d’état n’est mise en place.
C’est pourquoi le canal PWM #0 est directement activé lors de l’initialisation. Ainsi, dès le
démarrage de la BoomBox, le code présent dans les deux interruptions sera directement
exécuté. En revanche, les signaux PWM seront physiquement bloqués tant que la commande
enable n’a pas été passée dans la console.
4.b CONFIGURATION ET EXÉCUTION DU RÉGULATEUR DE COURANT
De nombreuses routines utiles à la mise en place d’applications d’électronique de puissance sont
disponibles dans le dossier API. C’est notamment le cas en ce qui concerne divers types de
régulateurs. Par exemple, la mise en place du régulateur de courant suggéré dans cet exemple
d’application se déroule en deux étapes :
 Création et configuration
Cette étape doit se dérouler à l’initialisation (dans UserInit()). Il s’agit de créer un pseudo-objet
correspondant ainsi que de le configurer. Les lignes de code suivantes sont nécessaires :
PIDController Ipv_reg;
ConfigPIDController(&Ipv_reg, Kp, Ki, Kd, 15, -15, SAMPLING_PERIOD, 10);
La définition exacte du prototype de cette fonction se trouve dans le fichier API/controllers.h.
A noter que la variable Ipv_reg est inévitablement une variable globale qu’il convient souvent
d’instancier en début de fichier user.c (ou d’une autre pseudo-classe contenant les mécanismes
de réglage).
 Execution
Cette étape consiste à executer de manière répétitive le régulateur (à fréquence d’interruption
fixe). Dans l’application présente, l’invocation du régulateur se déroule comme suit :
Epv = Upv - RunPIController(&Ipv_reg, Ipv_ref - Ipv);
5
EXEMPLE D’APPLICATION
Convertisseur boost avec MPPT pour application photovoltaïque
A noter que plusieurs variantes d’exécution (P, PI, I, PID) sont disponibles à partir d’un même
pseudo-objet. Autrement dit, l’objet et la fonction de configuration sont les mêmes quel que soit
la variante de régulateur employée.
4.c DÉFINITION DES COMMANDES OFFERTES À L’UTILISATEUR
L’accès en ligne de commande offert par la BoomBox permet à l’utilisateur de passer des
commandes indépendamment de l’interface de debug présente dans Code Composer Studio.
En plus du blocage/déblocage de la BoomBox (commandes enable/disable), de nombreuses
fonction peuvent être définies librement par l’utilisateur. La définition des actions accessibles par
la ligne de commande s’effectue dans le fichier cli_commands.c.
Dans le cas présent, les commandes déjà existantes peuvent être typiquement complétées par :
a) setmppt, qui doit permettre d’activer ou de désactiver le MPPT (la commande setmppt 0
vise à le désactiver, alors que la commande setmppt 1 doit l’activer.
b) setipv, qui doit permettre de définir la valeur de consigne pour le courant IPV (cela suppose que le MPPT soit inactif).
Concrètement, la configuration de ces commandes se déroule comme suit :
1) Prototyper les fonctions effectueront les actions choisies et seront invoquées par la ligne de
commande. Dans le cas présent, il s’agit des prototypes suivants :
void SetMPPT(unsigned int argc, char *argv[]);
void SetIpv(unsigned int argc, char *argv[]);
2) Associer les commandes avec les fonctions correspondantes, c'est-à-dire « inscrire » les
fonctions définies ci-dessus parmi celles accessibles par ligne de commande. Pour ce faire, il
est nécessaire d’ajouter dans la fonction LoadCLIUserFunctions() les lignes suivantes :
fs_mkcmd_user("setmppt", SetMPPT);
fs_mkcmd_user("setipv", SetIpv);
3) Définir le contenu exact des fonctions, c'est-à-dire les actions qu’elles effectuent. Un
exemple est donné ci-après :
void SetIpv(unsigned int argc, char *argv[]){
if (*argv[1] == '?'){
printf("\nSet the PV current value (Ipv).");
printf("\nExample : setIpv 1.2");
return;
}
Ipv_ref = atof(argv[1]);;
}
void SetMPPT(unsigned int argc, char *argv[]){
if (*argv[1] == '?'){
printf("\nSet the MPPT state. (1 to activate and 0 to deactivate)");
printf("\nExample : setMPPT 1");
return;
}
enable_MPPT = atoi(argv[1]);;
}
6
EXEMPLE D’APPLICATION
Convertisseur boost avec MPPT pour application photovoltaïque
Une fois définies, ces actions deviennent disponibles dans le répertoire virtuel « user » de la
Boombox. Elles peuvent ainsi être invoquées selon l’exemple suivant :
user@boombox / > user
user@boombox /user > enable
user@boombox /user > setipv 3.0
user@boombox /user > setmppt 1
user@boombox /user > disable
4.d DÉROULEMENT DE L’INTERRUPTION RAPIDE
La fonction UserInterrupt1() débute logiquement par l’acquisition des mesures à l’aide de la
fonction GetADC(). L’instant d’échantillonnage exact correspond à celui configuré plus tôt au
travers de la fonction ConfigSampling(). Cela correspond alors à :
Upv = GetADC(1);
Ipv = -GetADC(0);
Udc = GetADC(2);
// Voltage on the PV panel
// PV panel current (sensor is positive outbound)
// DC bus voltage
Après l’exécution des tâches de réglage, la mise à jour des paramètres de modulation se fait au
moyen des deux lignes présentées ci-après. Le nouveau rapport cycles est appliqué au canal
PWM 0 et ces informations sont transmises au modulateur proprement dit, situé dans la FPGA :
SetPWMDutyCycle(0, Epv/Udc);
UpdatePWMData();
// Refresh the duty-cycle of PWM #0
// Send the new PWM parameters to the FPGA
4.e DÉROULEMENT DE L’INTERRUPTION LENTE
Afin d’exploiter en permanence le panneau solaire en un point de fonctionnement optimal d’un
point de vue de la puissance qui en est extraite, il est nécessaire d’ajuster en permanence le
point de fonctionnement le long de la caractéristique courant-tension du panneau. Un exemple
de caractéristique est montré à la Figure 2 :
Figure 2 : Caractéristique courant-tension typique d’un panneau photovoltaïque (en rouge) et profil équivalent de la
puissance extraite (en bleu).
Une technique simple et efficace permettant d’ajuster en permanence le point de fonctionnement au sommet de la caractéristique de puissance consiste à perturber légèrement le point de
fonctionnement actuel et à observer l’impact résultant sur la puissance extraite (approche type
perturb &observe). Un exemple d’algorithme est décrit dans UserInterrupt2().
7
Téléchargement