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