INSTITUT UNIVERSITAIRE DE TECHNOLOGIE DE L’AISNE DEPARTEMENT GENIE MECANIQUE DEPARTEMENT GENIE ELECTRIQUE ET INFORMATIQUE INDUSTRIELLE 13, Avenue François Mitterrand, 02880 CUFFIES SOISSONS : 03 23 76 40 10 : 03 23 76 40 15 [email protected] Courbe des batteries sur PC Sebastien butt Gauthier Duhaunoy Enseignant : Sivert Arnaud SOMMAIRE : 1 – Introduction........................................................................................................ 1 2- Cahier des charges du chargeur avec équilibreur..................................3 3 - Gestion de l'afficheur et du chargeur avec 4 Bouton poussoirs........4 4 - Arrêt de la charge...............................................................................5 5 - Algorithme de premier niveau...........................................................5 6 - Equilibreur et BMS...........................................................................6 7 - Testeur d’accumulateur.....................................................................6 8 - Schéma de simulation.......................................................................7 9- Liste d’entre sortie du micro-contrôleur 18F6520............................8 10 - Liste d’entre sortie du micro-contrôleur 16F877...........................9 11 - Schéma d’implantation............................................................................10 12 - Schéma de la carte micro 18F6520....................................................10 13 - Schéma de la carte afficheur, bouton pousoir, buzzer et leds..11 14 - Schéma équilibreur, hacheur et mesure de tension.....................12 15 - Schéma Isis et Typon de la carte réalisé...........................................14 16 – Programmation..........................................................................................18 17 – Conclusion....................................................................................................26 1- Introduction Les chargeurs rapides pour batterie Li-po dans le commerce sont rares et cher. Les plus puissants chargent à : - 360W,12 éléments à 8A de marque Hyperion en 12/2009 à 150 €+50 € équilibreur 0,3A 3000W, 20 éléments 87,6V/35A Zivan 1014 €, pas d’équilibreur Le premier est un très bon chargeur pour le modélisme donc pour des batteries de faible capacité énergétique. Ces chargeurs sont très chers pour les vendeurs de vélo où de scooters électriques. Pourtant, ils permettent une durée de vie beaucoup plus importante des batteries. Pourtant, le prix des batteries en 2010 correspond à 30% où 40% du prix d’un véhicule électrique. Les batteries Li-po ont une tension qui varient de 3,5V à 4,2V en fonction de leur charge. On peut les charger à la valeur du courant correspondant à leurs capacités énergétique à 1C voir 2C. Donc pour une 15A.H, on peut les charger à 15A voir 30A. Mais, on peut les décharger en général à 3C jusqu'à 20C donc à 45A à 300A. Notre chargeur a pour but de charger les batteries pour le karting. Pour faire un accumulateur 72V/ 60A.H, le bilan prix, poids, en 2010 est le suivant : Nbr élément série et // 18serie,12// 75 à 64 V Prix et poids/élé m 15 € 0.21 kg Poids et nbr Prix pour 72V/60A.H élément total Lipo 3,6 V à 4,2V Li po 11C 4,2V à 3,6V Lithium 3C 4.1V à 3,5V Plomb 20C 14V à 11V 18 series 183 Euros 183 2serie,4// 55 € 0,5 kg 1654 €*6 4400 € LiFePO4 3C 20 series Marque Type et tension polyquest 5.8A.H /3,6V/0.21 kg KOKAM Li po 25C 4,2V à 3,6V e-solex 15A.H 550 €/36V/5kg Lifebatt 10A.H 72V/12,6 kg OPTIMA 35A.H 12V/18 kg Thunder Sky 60 A.H 20 serie,6// 80Và 68V 6 series 180 € H*l*L Fiabilité/20 15 €*18*12 0.2kg*18*12= 3240 € 43,2 kg, 192el 18/20, 2009 9924 € 1080 € 5kg*2*4= 40 kg 12,6kg*6= 76 kg 108 kg 18/20, 2009 18/20, 2009 15/20, 2003 90 €*20 2,3 kg 1800 € 50 kg 16/20, 2010 Remarque : Mettre des éléments en // peut occasionner la destruction des autres éléments qui sont placés en //, donc on diminue la fiabilité de l’accu (voir dossier vélo électrique de l’I.U.T Aisne 2010). Sinon, il est possible de mettre des diodes mais la charge est difficile. On peut voir sur la figure suivante un accu avec des éléments en //. Fig 1 : Un accumulateur avec des éléments série et parallèle, On ne peut dissocier chargeur, accumulateur et Batterie Management Sécurité « BMS ». Les BMS intégrés aux accumulateurs ne sont pas nécessaires car le courant est déjà limite par le contrôleur moteur. Par contre, il ne faut pas avoir de renvoie d’énergie lorsque la batterie est pleinement chargée, mais la aussi le contrôleur peut être piloté. Certains chargeurs arrêtent la charge des qu’un des éléments atteint sa tension de seuil max donc à peu prés à 85 % de sa capacité maximale (chargeur Zivan 87,6V/35A 1014 € avec arrêt du chargeur Batterie Protection Module Lifebatt à 655 €). La charge dure 2 heures pour une 60A.H . S’il ya une grosse dissymétrie entre les batteries, il faut recharger avec un chargeur qui a un BMS intégré comme l’Hyperion (voir dossier vélo électrique de l’I.U.T Aisne 2010, chargeur tous types de 1 à 12 éléments max (~48V) 8A 150 euros). La charge dure dans ce cas 8 heures en cas de dissymétrie profonde car l’équilibreur est 0,3 A seulement. En conclusion, pour remplacer les batteries au plomb donc diminuer le poids et le volume par 2 d’un véhicule électrique, le prix en 2010 est multiplié par 3 par rapport aux batteries plomb, mais l’autonomie est multipliée par 2. De plus, Les chargeurs et les BMP sont relativement chers. On choisira 24 éléments de batterie Thundersky de 90A.H à 100 € (3Kg). On peut les charger à 3C donc avec un courant de 270A (19440W, sur une prise secteur triphasée 400V, cela demande un courant de 56A). On se limitera à une prise secteur monophasé de 25A (5500W), donc un courant de charge maximum de 57A/96V ou 76A/72V. Suite à la réalisation des chargeurs de batteries au plomb 12V/20A en numérique et 80A en analogique ; nous avons réalisé un chargeur lipo de 4V à 96V/20A avec équilibreur à 4A - Charger sans équilibreur Un Batterie Module Protection (BMP) 24 éléments (96V) avec 16F877 qui coupera l’alimentation du chargeur analogique 20A des que la tension d’un élément aura atteint sa tension de seuil. Le chargeur visualisera grâce aux BMP, la tension de tous les éléments ainsi que le courant de l’accu sur afficheur LCD et sur PC par liaison USB. En option, une protection en température sera utilisée grâce à un thermo rupteur normalement fermé et mise en série sur chaque élément. Cette sécurité pourra être coupée lors d’une charge du véhicule en plein soleil. - Charger avec équilibreur Un équilibreur à 4A avec résistance en parallèle sur les batteries (voir le paragraphe 5) sera utilisé pour mettre tous les éléments à la même tension de seuil. 2 2 - Cahier des charges du chargeur avec équilibreur Pour charger des batteries il faut les charger à courant constant. Puis, dès qu'une batterie a atteint sa tension de seuil, le courant diminue pour que la tension de seuil d’un element ne soit jamais dépassé. Donc la charge se fait à tension constante. Il y a 24 éléments à charger et le 18F6520 n'a que 10 convertisseurs analogique. Donc, 3 Multiplexeurs (8 vers 1) seront utilisés pour pouvoir mesurer la tension de chaque élément. La mesure se fera en 16 bits pour avoir une bonne précision de la mesure de la tension de chaque élément. La tension des 24 éléments est de 4V pour le premier élément donc à 96V pour le dernier. Le pont diviseur « Mtension 24 » diminue cette tension 96V à 4V, la précision de la mesure est donc en 16 bit de 76µV donc ramené à 96V, la précision est de 1,8mV. Le courant de charge, type de batterie (Li-po, Li-ion, Li-Fer) seront paramétrables. Le nombre d'éléments à charger sera réglable de 1 à 24 éléments. Avant de charger les batteries, le chargeur devra tester le nombre d’éléments et d’accepter la charge. Par l’intermédiaire d’une RS232, Un PC permettra de mémoriser les mesures toutes les secondes et de les afficher. Les mesures sont : − Courant de charge des batteries − les 24 tensions de chaque élément − le calcul de la capacité énergétique − la température des éléments (24 sondes de température LM 35 boitier TO 220 multiplexés seront placé sur les batteries pour sécurisé la charge et connaitre la température de chacune sinon 24 des thermo rupteurs seront placés en séries) − la capacité énergétique en fonction du temps tension d’alimentation du chargeur courant d’alimentation du chargeur La tension et le courant d’alimentation devront être mesuré et paramétrable pour limiter le courant de charge de la batterie en fonction de la puissance maximale que peut fournir l’alimentation. Dans un premier temps, nous chargerons avec un courant de 20A, à partir de quatre alimentations secteur continu de 220V/( 24V/20A). DEVIS : Alimentation secteur continu 220V/ (24V/20A) µC 16F877 Afficheur plus B.P 3 MUX 4051 1 bobine 1 transistor + opto 1 capteur mesure courant LEM 24 thermo rupteur Total : 50 euros*4 15 euros 20 euros 10 euros 25 euros 90 euros 270 € Il est facile de transformer le chargeur pour passer de 20A à 40A. En plaçant 8 alimentations 12V/40A. 3 3- Gestion de l'afficheur et du chargeur avec 4 Bouton poussoirs On utilisera un afficheur LCD 4 lignes, 20 caractères ou 2 lignes 20 caractères. Arrêt de la charge au bout d'un certain temps max ou si la capacité énergétique est trop grande. Pour voir si un élément est défectueux ou fortement déséquilibrer, il est important de connaître la tension de chaque élément. 4 Le prochain appuie sur Select font défile les tensions, puis revient sur la charge 4- Arrêt de la charge L’Arrêt de la charge se fera à partir de 3 paramètres : au bout d'un certain temps max si la capacité énergétique est dépassée si la tension d’un élément a atteint sa tension de seuil lorsque le courant est a 4A (li-po=4.2V, li-ion=4.1V, li-fer=4V) information des thermo rupteurs si 0V, alors arrêt de la charge car un élément a atteint 45°C+4°C. 5 - Algorithme de premier niveau *Une interruption se fera toute les 10 ms − − − Le courant sera mesurée toutes les 20ms. La tension de chaque éléments sera effectué touts les 80ms. (3 Mux de 8 vers 1) La régulation se fera toutes les 80ms. La tension sera filtrée analogiquement mais aussi numériquement tous les 80ms. UBFiltre = (UB n + UB n-1 + UB n-2 + UB n-3) / 4 Le courant sera filtré analogiquement mais numériquement tous les 80ms InFiltre=( In + In-1 + I n-2 + In-3 ) / 4 *Le main La PWM se fera en 10 bits (0 à 1024) avec une fréquence à 20Khz. L'affichage tension et courant se fera toutes les 160ms sinon la valeur évolue trop vite à l'afficheur. 5 6 - Equilibreur et BMS L’équilibreur permet d'avoir les batteries chargées à 100%. En effet, lorsqu'il n'y a pas d'équilibreur, il y a arrêt de la charge dés qu'un élément a atteint sa tension de seuil. Comme chaque élément est différent, les autres éléments ne sont pas chargés à 100%, et un déséquilibre s’accroit en fonction du nombre de décharge et charge. Pour équilibrer les batteries, il ya plusieurs solutions : 1° Recharger chaque élément de façon indépendante (c’est la meilleur solution mais il faudrait un hacheur par élément ce qui reviendrait bien trop cher) 2° Décharger chaque élément de façon indépendante jusqu'à une certaine tension puis recharger tous les éléments en série 3° Recharger tous les éléments en série, puis dés que la tension de seuil de l'élément est atteint, alors dévier le courant dans une résistance comme sur la figure suivante: Fig équilibreur à résistance avec élément li-po tension de seuil 4.2V On peut voir sur la figure précédente que l'élément 2 et 4 ont atteint leur tension de seuil avec un courant de 4A, donc son chargé à 100%. Mais la charge continu dans les autres éléments, donc le courant est dévié dans une résistance par l'intermédiaire de deux relais ou transistor T2 et T4 (TIP 122). On veut un équilibrage à 4A. Les résistances auront pour valeur R= (Alim – Vce) / I = (4,2 – 0,4) / 4 = 1ohm/16W. Lorsque tous les éléments auront atteint 4,2V alors le chargeur s'arrête car tous les éléments sont à 100%. L'inconvénient de cet équilibrage est la puissance perdu dans chaque résistance qui est importante (d’où une ventilation). Mais, Il est possible de faire un équilibrage toutes les 10 charges, alors certains éléments seront chargées entre 90% et 99% en fonction du déséquilibre et il n'y aura qu'un élément qui sera chargé à 100%. Ces résistances permettent aussi d’utiliser la deuxième solution et de tester la capacité énergétique de la batterie. 7 - Testeur d’accumulateur Lorsque les éléments ont effectué un certain nombre de cycle de charge et décharge : soit qu’un élément se met en court circuit (facile à diagnostiquer) et l’élément gonfle. soit la tension de seuil est correcte mais la capacité énergétique est bien plus faible que celle prévue (le diagnostique se fait car le ou les éléments qui ne tiennent pas la charge. L’élément a une tension beaucoup plus faible après décharge. Si la charge à une instrumentation, on peut savoir l’autonomie de l’accu) Par contre, si l’accumulateur n’a pas d’instrumentation, il faut décharger l’accu, et mesurer la capacité énergétique. Les résistances précédentes peuvent réaliser cette décharge à 4 A et connaitre précisément la capacité énergétique de chaque élément 6 8 - Schéma de simulation Schéma de simulation permet de tester le programme du microcontrôleur avec ISIS 7.4. Les composant présent sont tous actif (model spice) mais ne correspondent pas au schéma d’implantation. Ce schéma permet de comprendre facilement le fonctionnement du système Fig Schéma de simulation du hacheur et mesure de chaque élément R127 R125 R123 R44 R122 R121 R120 R119 R117 R55 R59 R114 R62 R112 R110 R109 R68 R107 R106 R104 R103 R76 R78 0R 0R 33R 0R 0R 20R 160R 200R 0R 0R 200R 20R 300R 43R 0R 0R 82R 160R 62R 0R 0R 20R 0R R126 R124 R18 R43 R47 R49 R51 R118 R116 R54 R57 R113 R61 R111 R74 R108 R67 R70 R105 R73 R102 R77 R100 50k 0R 33k 1k 0R 620R 1k1 300R 100R 0R 620R 100R 470R 300R 470R 43R 200R 300R 100R 300R 62R 200R 43R R16 R17 R45 R42 R46 R48 R50 R52 R115 R53 R56 R58 R60 R63 R64 R66 R65 R69 R71 R72 R101 R75 300R 24k 8k2 8k2 6k8 Mtension1 50k 50k Mtension2 Mtension3 Mtension4 20k Mtension5 Mtension6 16k 13k Mtension7 Mtension8 12k Mtension9 11k 10k Mtension10 Mtension11 Mtension12 Mtension13 Mtension14 6k8 Mtension15 6k2 Mtension16 6k2 Mtension17 5k6 Mtension18 5k1 Mtension19 5k1 4k7 Mtension20 4k7 Mtension21 Mtension22 4k3 R79 4k3 Mtension23 Mtension24 R11 R14 R15 R80 R81 R82 R83 R84 R85 R86 R87 R88 R89 R90 R91 R92 R93 R94 R95 R96 R97 R98 R99 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V 4V BAT8 BAT9 BAT10 BAT11 BAT12 BAT13 BAT14 BAT15 BA16 BAT17 BAT18 BAT19 BAT20 BAT21 BAT22 BAT23 BAT24 Fig Schéma de simulation de la mesure de tension de chaque élément 7 U24 U23 U22 U21 U20 U19 U18 U17 U16 U15 U1 U14 BAT7 U13 BAT6 U12 BAT5 U11 BAT4 U10 BAT3 U9 BAT2 U8 BAT1 U6 4V U5 4V U4 4V U3 4V U2 4V U1 4V U7 U24 4V 9 - Liste d’entre sortie du micro-contrôleur 18F6520 : Entrées : Sorties : Inutilisées Port 0 1 A B E F G 3 4 5 CAN ( mesure tension ) CAN ( mesure tension ) Carte afficheur LED D1 et D2 Buzzer PWM ( hacheur abaisseur ) C D 2 Carte afficheur ( LCD ) 6 7 N/A Réservées Sélection MUX ( mesure tension ) Carte afficheur Carte afficheur ( LCD ) Communications avec le PIC 16F877 Entrées analogiques mesure température Réservées Réservées N/A 8 10 - Liste d’entre sortie du micro-contrôleur 16F877 : Entrées : Sorties : Inutilisées Port 0 1 A 2 3 6 7 N/A Relais 1 à 8 Commande du 18F6520 D E 5 Relais 17 à 22 B C 4 Relais 9 à 16 Relais 23 à 24 N/A Fig Schéma de simulation de l’équilibreur à résistance et déchargeur de chaque élément (Démultiplexeur et relais 5A avec résistance d’équilibrage 1Ω/16W) 9 11 - Schéma d’implantation Nous avons 4 cartes : - carte micro micro 18F6520 - cartes micro 16F877 - carte afficheur LCD et bouton - la carte équilibreur, hacheur et mesure tension de chaque élément et courant. La mesure de tension des batteries est effectuée par un pont diviseur. Avec une résistance de 100KΩ (82KΩ et 18KΩ en série), La résistance de 18KΩ est dans le fil au départ de chaque élément pour éviter tout court circuit du faisceau électrique (vibration et frottement d’un vehicule). 24 thermo rupteur normalement fermé pour les températures inferieurs à 45°C +4°C à réinitialisation manuel seront mise en série sur chaque élément code Farnel 732-503 et protégera chaque élément. Une info sur l’état des thermo rupteurs sera indiquée au chargeur pour arrêter la charge. Cette sécurité pourra être coupée lors d’utilisation du vehicule en plein soleil. C’est pour cela que l’on a pris des thermo rupteurs à réinitialisation manuel car les autres ont une hysteris trop importante. 12 - Schéma de la carte micro 18F6520 Cette carte micro a été réalisée pour être utilisé pour de nombreuses applications. Le micro a un bootloader et il est possible de la programmer avec un petit programme downloader par l’intermédiaire d’un câble USB, RS232. Sinon, il est possible d’utiliser le pic flash. VDD VDD VDD C16 1 1 + 1 + 10µF + C24 C19 10ùF C9 2 1 2 + 2 10µF PORT F VSS PORT A VSS 1 2 3 4 5 6 7 8 9 10 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0 2 10µF 1 2 3 4 5 6 7 8 9 10 out_inclin_analog RA3 RA2 RA1 RA0 RA5 CCP PORT B VSS PORT RF PORT RA et AVdd avec AVss VDD CCP1 CCP2 CCP3 CCP4 1 2 3 4 5 6 7 8 9 10 PGD PGC n_u_30 n_u_31 n_u_32 n_u_33 n_u_34 n_u_35 VDD 1 2 3 4 5 6 CONN-H6 PORT RB 27 28 21 22 23 24 RA3 RA2 RA1 RA0 CONN-H10 CCP4 RXD_DEBUG_2 TXD_DEBUG_2 CCP3 PORT RE Alim conv. A/N VDD 19 D5 R1 10k 7 15pF 1N4148 Inter prog. 2 1 BP RESET1 + + 2 BP1 2 1 2 3 4 5 6 7 8 9 10 C2 C3 15pF 10µF PORT D VSS RG4/CCP5 RG3/CCP4 RG2/RX2/DT2 RG1/TX2/CK2 RG0/CCP3 AVdd AVss RC7/RX1/DT1 RC6/TX1/CK1 RC5/SDO RC4/SDI/SDA RC3/SCK/SCL RC2/CCP1 RC1/T1OSI/CCP2 RC0/T1OSO/T13CKI X1 4 MHz Oscillateur 39 RB7/KBI3/PGD RB6/KBI2/PGC RB5/KBI1/PGM RB4/KBI0 Osc2/CLKO/RA6 RB3/INT3 RB2/INT2 RB1/INT1 Osc1/CLKI RB0/INT0 MCLR/Vpp inclinometre 32 31 36 35 34 33 29 30 1uF MAX232 1 1uF 3 4 C11 5 1uF 11 RC7 RC6 RC5 RC4 RC3 CCP1 CCP2 RC0 37 42 43 44 45 46 47 48 C12 U3 C10 D7 D6 D5 D4 D3 D2 D1 D0 10 TXD_DEBUG_2 12 9 RXD_DEBUG_2 C1+ V+ (+10V) PGD PGC n_u_30 n_u_31 n_u_32 n_u_33 n_u_34 n_u_35 VDD 2 C1-- C14 C2+ V-- (-10V) 6 C2-- 1uF T1 IN (TTL) T1 OUT (232) T2 IN (TTL) T2 OUT (232) R1 OUT (TTL) R1 IN (232) R2 OUT (TTL) R2 IN (232) VSS 14 M1 7 1 2 3 4 13 8 C13 MODULAR JACK 4C VSS 100nF M3 1 2 3 4 VSS +12V VSS MODULAR JACK 4C U2 1N4001 D2 1 100uF 1 C7 2 VSS BORNIER_2 C6 CIRCUIT ALIMENTATION VDD 7805 B1 100nF VI VO R2 3 + C17 470 C8 100nF 22µF D3 CMS DIODE-LED VSS PORT RD Afficheur_LCD 49 50 51 52 53 54 55 58 18F6X20 VDD=VCC VSS=GND 1 D0 D1 D2 D3 D4 D5 D6 D7 C1 40 C5 10µF RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RD3/PSP3 RD2/PSP2 RD1/PSP1 RD0/PSP0 VSS RESET_Prog 1N4148 D1 1 20 VDD VDD 8 6 5 4 3 RA5/AN4/LVDin RA4/T0CKI RA3/AN3/Vref+ RA2/AN2/VrefRA1/AN1 RA0/AN0 Gnd D4 VDD 15 RC0 CMS 1 2 3 4 5 6 7 8 9 10 RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0 Vcc RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0 59 60 61 62 63 64 1 2 16 PORT E VSS 1 2 3 4 5 6 7 8 9 10 RE7/CCP2 RE6 RE5 RE4 RE3 RE2/CS RE1/WR RE0/RD 1 PORT C RC7 RC6 RC5 RC4 RC3 RF7/SS RF6/AN11 RF5/AN10/CVref RF4/AN9 RF3/AN8 RF2/AN7/C1out RF1/AN6/C2out RF0/AN5 2 2 2 R3 470 VSS 11 12 13 14 15 16 17 18 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0 RA5 10µF GND 1 10µF U1 C4 2 + C15 + 1 VDD PICC FLASH Prog 5 4 3 2 1 VDD PGC PGD RESET_prog CONN-H5 Carte 18F6520 classique : Sivert.A 12/10/2010 Version 2.0 10 Top copper et Top silk Bottom copper et Bottom silk 13 - Schéma de la carte afficheur, bouton pousoir, buzzer et leds A B C D E F G H mettre coté soudure pour ne pas gener lors de la fixation de la carte dans le boitier +5V J4.1 Connecteur PORT B 0 J K J1 CONN-DIL10 +5V VDD J1(1) ventillateur du transistor 1 2 3 4 5 6 7 8 9 10 bornier à vis RL1 D2 1 CONN-H3 12V 1 2 3 1N4001 C1 RB0 RB1 RB2 RB3 RB4 RB5 RB6 1uF Q1 RB7R11 TIP122 +88.8 10k 2 +5V +5V +5V R12 100k VDD R4 R5 10k 10k 10k 1 BP1 BP2 BP RESET1 BP RESET1 R13 330 330 100 2 R10 330 BUZ D5 D4 R20 RB3 RB2 D6 DIODE-LED DIODE-LED DIODE-LED BUZZER 100k 3 R7 C2 100k IN RD3 2 1 P20 C21 22k 4.7uF R8 C3 100k 1uF GND R9 100k 1uF C4 1uF GND 1 BP4 C20 BP RESET1 2 R6 RB1 7 BP3 R2 LCD_AFF 6 1 1 RB0 R3 2 contrasme VDD CONN-H10 RB6 E RW RS D7 D6 D5 D4 D3 D2 D1 D0 E RW RS Vc VDD VSS RB5 IN RD3 RW RS E 14 13 12 11 10 9 8 7 6 5 4 3 2 1 RB4 10 9 8 7 6 5 4 3 2 1 4 5 afficheur LCD Connecteur PORT D mettre coté soudure J2 LCD 3 BP RESET1 1µf 2 8 FILE NAME: bouton afficheur.DSN DESIGN TITLE: 07/08/2009 C:\arnaud1\alimentation 10\alimentation V3\bouton afficheur.DSN PATH: C:\arnaud1\alimentation 10\alimentation V3\bouton 1 of 1afficheur.DSN DATE: PAGE: 9 BY: A B C D E F G REV: H J TIME: 05:04:29 K afficheur+bouton 2009/2010 Echelle : 1 A.Sivert Carte : alimentation 10A I.U.T GEII de Soissons 14 - Schéma équilibreur, hacheur et mesure de tension J21 F2 Connecteur PORT C 2 J3.1 PIN +96 Ualim2 1 5A J3 CONN-DIL10 BORNIER2 1 2 C8 +0 V2 1 2 3 4 5 6 7 8 9 10 VDD 1uF/30V JL2 JL2B PIN PIN1 JS22 R5 R004 18k 470n 18k R2 U1 8 120 6 R010 D22 U1 U2 C2 MBR1535 2 100uF/20V D2 R009 LED 5 Q2 HPCL 3020 FDU8880 TO251 J22 C6 PIN 470n +0 V2 C5 10n R013 R050 220k 200k AN5 U2:B 4 R09 +5V 4 1 2 3 4 +5V J2 100k VDD U2:A 2 6 1 R7 CONN-H4 3 R1 R6 100k 100k 7 5 8 100k LM358 8 GND R8 C4 LM358 220k 10n GND GND Le hacheur et mesure courant 96V/20A 12 680 D3 JS21 1 3 3 5.6K 1 330 GND R007 MBR1535 3 b17 microcontroleur U24 10mH 2 1uF GND PIN L2 2 C3 RC6 RC7 CCP1 C40 U4 Mtension17 Mtension18 Mtension19 Mtension20 Mtension21 Mtension22 Mtension23 Mtension24 13 14 15 12 1 5 2 4 A B C 11 10 9 6 X0 X1 X2 X3 X4 X5 X6 X7 3 X J1 PORT A AN2 AN1 1 2 3 4 5 6 7 8 9 10 AN2 McourantU1 U24 A B C INH J1 PORT B 1 2 3 4 5 6 7 8 9 10 BUZZER SELECT DEC INC CONN-SIL10 J1 PORT C 1 2 3 4 5 6 7 8 9 10 A B C CCP1 CONN-SIL10 J1 PORT E 1 2 3 4 5 6 7 8 9 10 RE6 RE5 RE4 RE3 RE2 RE1 RE0 CONN-SIL10 CONN-SIL10 74HCT4051 U002 Mtension9 Mtension10 Mtension11 Mtension12 Mtension13 Mtension14 Mtension15 Mtension16 13 14 15 12 1 5 2 4 A B C 11 10 9 6 J1 PORT G J1 PORT F X0 X1 X2 X3 X4 X5 X6 X7 X 3 AN1 Mtemperature4 Mtemperature3 Mtemperature2 Mtemperature1 A B C INH 1 2 3 4 5 6 7 8 9 10 tx2 rx2 1 2 3 4 5 6 7 8 9 10 J1 PORT D 1 2 3 4 5 6 7 8 9 10 D7 D6 D5 D4 D2 D1 D0 CONN-SIL10 CONN-SIL10 CONN-SIL10 74HCT4051 U3 Mtension1 Mtension2 Mtension3 Mtension4 Mtension5 Mtension6 Mtension7 Mtension8 13 14 15 12 1 5 2 4 A B C 11 10 9 6 X0 X1 X2 X3 X4 X5 X6 X7 X 3 +88.8 Volts A B C INH Vss 74HCT4051 Les multiplexeurs et connecteurs pour la carte microcontrôleurs R127 R125 R123 R44 R122 R121 R120 R119 R117 R55 R59 R114 R62 R112 R110 R109 R68 R107 R106 R104 R103 R76 R78 0R 0R 33R 0R 0R 20R 160R 200R 0R 0R 200R 20R 300R 43R 0R 0R 82R 160R 62R 0R 0R 20R 0R R126 R124 R18 R43 R47 R49 R51 R118 R116 R54 R57 R113 R61 R111 R74 R108 R67 R70 R105 R73 R102 R77 R100 50k 0R 33k 1k 0R 620R 1k1 300R 100R 0R 620R 100R 470R 300R 470R 43R 200R 300R 100R 300R 62R 200R 43R R16 R17 R45 R42 R46 R48 R50 R52 R115 R53 R56 R58 R60 R63 R64 R66 R65 R69 R71 R72 R101 R75 300R 24k 8k2 8k2 6k8 Mtension1 50k Mtension2 50k Mtension3 Mtension4 20k Mtension5 Mtension6 16k Mtension7 13k 12k Mtension8 Mtension9 11k 10k Mtension10 Mtension11 Mtension12 Mtension13 Mtension14 6k8 Mtension15 6k2 Mtension16 6k2 Mtension17 5k6 Mtension18 5k1 Mtension19 5k1 4k7 Mtension20 Mtension21 4k7 Mtension22 4k3 Mtension23 R79 4k3 Mtension24 R11 R14 R15 R80 R81 R82 R83 R84 R85 R86 R87 R88 R89 R90 R91 R92 R93 R94 R95 R96 R97 R98 R99 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k 100k J20 J10 J5 J1 PIN PIN 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 PIN PIN J4 U1 PIN Fig : connecteur JST pour la mesure de la tension de chaque élément et les ponts diviseurs de tension 13 15 - Schéma Isis et Typon de la carte réalisé 14 15 16 17 16 – Programmation #include "chargeur6520.h" #include <LCD.C> unsigned int16 tension_1,Mtension_1; unsigned int16 tension_2,Mtension_2; unsigned int16 tension_3,Mtension_3; unsigned int16 tension_4,Mtension_4; unsigned int16 tension_5,Mtension_5; unsigned int16 tension_6,Mtension_6; unsigned int16 tension_7,Mtension_7; unsigned int16 tension_8,Mtension_8; unsigned int16 tension_9,Mtension_9; unsigned int16 tension_10,Mtension_10; unsigned int16 tension_11,Mtension_11; unsigned int16 tension_12,Mtension_12; unsigned int16 tension_13,Mtension_13; unsigned int16 tension_14,Mtension_14; unsigned int16 tension_15,Mtension_15; unsigned int16 tension_16,Mtension_16; unsigned int16 tension_17,Mtension_17; unsigned int16 tension_18,Mtension_18; unsigned int16 tension_19,Mtension_19; unsigned int16 tension_20,Mtension_20; unsigned int16 tension_21,Mtension_21; unsigned int16 tension_22,Mtension_22; unsigned int16 tension_23,Mtension_23; unsigned int16 tension_24,Mtension_24; unsigned int16 temps_mesure_tension; // compteur pour la mesure tension. unsigned int16 temps_mesure_courant; // compteur pour la mesure courant. unsigned int16 temps_regulation; // compteur pour la régulation. unsigned int16 McourantU1; //Mesure courant unsigned int16 Mcourant; //Vraie valeure après calcule unsigned int8 Iconsigne,Tconsigne; //Courant de consigne //unsigned int16 U24; //tension totale des 24 éléments unsigned int16 alpha; // rapport de la pwm ! unsigned int8 charge,choix,select; unsigned int8 N; void fonction_equilibreur() { if ( tension_1 >= 55000 ) printf("01"); if ( tension_2 >= 55000 ) printf("02"); if ( tension_3 >= 55000 ) printf("03"); if ( tension_4 >= 55000 ) printf("04"); // 55000 = 4.2 V 18 if ( tension_5 >= 55000 ) printf("05"); if ( tension_6 >= 55000 ) printf("06"); if ( tension_7 >= 55000 ) printf("07"); if ( tension_8 >= 55000 ) printf("08"); if ( tension_9 >= 55000 ) printf("09"); if ( tension_10 >= 55000 ) printf("10"); if ( tension_11 >= 55000 ) printf("11"); if ( tension_12 >= 55000 ) printf("12"); if ( tension_13 >= 55000 ) printf("13"); if ( tension_14 >= 55000 ) printf("14"); if ( tension_15 >= 55000 ) printf("15"); if ( tension_16 >= 55000 ) printf("16"); if ( tension_17 >= 55000 ) printf("17"); if ( tension_18 >= 55000 ) printf("18"); if ( tension_19 >= 55000 ) printf("19"); if ( tension_20 >= 55000 ) printf("20"); if ( tension_21 >= 55000 ) printf("21"); if ( tension_22 >= 55000 ) printf("22"); if ( tension_23 >= 55000 ) printf("23"); if ( tension_24 >= 55000 ) printf("24"); } void fonction_regulation() { if (Mcourant>=(Iconsigne=+3)) { if (Mcourant==Iconsigne) ; else alpha=alpha--; } if (Mcourant<Iconsigne+3) alpha++; set_pwm1_duty(alpha); } void fonction_mesure_courant() { set_adc_channel (3); delay_us(20); Mcourantu1=read_adc(ADC_START_AND_READ); Mcourant=Mcourantu1/0.48; } //gros problème de calcule ici ! void fonction_mesure_tension() { output_low(PIN_C3);output_low(PIN_C4);output_low(PIN_C5); set_adc_channel (0); delay_us(20); 19 Mtension_1=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_9=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_17=read_adc(ADC_START_AND_READ); output_high(PIN_C3);output_low(PIN_C4);output_low(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_2=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_10=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_18=read_adc(ADC_START_AND_READ); output_low(PIN_C3);output_high(PIN_C4);output_low(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_3=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_11=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_19=read_adc(ADC_START_AND_READ); output_high(PIN_C3);output_high(PIN_C4);output_low(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_4=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_12=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_20=read_adc(ADC_START_AND_READ); output_low(PIN_C3);output_low(PIN_C4);output_high(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_5=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_13=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_21=read_adc(ADC_START_AND_READ); 20 output_high(PIN_C3);output_low(PIN_C4);output_high(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_6=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_14=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_22=read_adc(ADC_START_AND_READ); output_low(PIN_C3);output_high(PIN_C4);output_high(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_7=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_15=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_23=read_adc(ADC_START_AND_READ); output_high(PIN_C3);output_high(PIN_C4);output_high(PIN_C5); set_adc_channel (0); delay_us(20); Mtension_8=read_adc(ADC_START_AND_READ); set_adc_channel (1); delay_us(20); Mtension_16=read_adc(ADC_START_AND_READ); set_adc_channel (2); delay_us(20); Mtension_24=read_adc(ADC_START_AND_READ); } void fonction_calcule_tension() { tension_1 = Mtension_1; tension_2 = Mtension_2*2 - Mtension_1 ; tension_3 = Mtension_3*3 - Mtension_2*2 ; tension_4 = Mtension_4*4 - Mtension_3*3 ; tension_5 = Mtension_5*5 - Mtension_4*4 ; tension_6 = Mtension_6*6 - Mtension_5*5 ; tension_7 = Mtension_7*7 - Mtension_6*6 ; tension_8 = Mtension_8*8 - Mtension_7*7 ; tension_9 = Mtension_9*9 - Mtension_8*8 ; tension_10 = Mtension_10*10 - Mtension_9*9 ; tension_11 = Mtension_11*11 - Mtension_10*10; tension_12 = Mtension_12*12 - Mtension_11*11; tension_13 = Mtension_13*13 - Mtension_12*12; 21 tension_14 = Mtension_14*14 - Mtension_13*13; tension_15 = Mtension_15*15 - Mtension_14*14; tension_16 = Mtension_16*16 - Mtension_15*15; tension_17 = Mtension_17*17 - Mtension_16*16; tension_18 = Mtension_18*18 - Mtension_17*17; tension_19 = Mtension_19*19 - Mtension_18*18; tension_20 = Mtension_20*20 - Mtension_19*19; tension_21 = Mtension_21*21 - Mtension_20*20; tension_22 = Mtension_22*22 - Mtension_21*21; tension_23 = Mtension_23*23 - Mtension_22*22; tension_24 = Mtension_24*24 - Mtension_23*23; } void fonction_affiche_tension(unsigned int16 var) { unsigned int8 a,b; a=0; b=0; while( var >= 13095 ) { var=var-13095; a++; } while ( var >= 1310 ) { var=var-1310; b++; } printf(lcd_putc,"%u",a); lcd_putc(","); printf(lcd_putc,"%u",b); } #int_TIMER0 TIMER0_isr() { set_timer0(60500); //resolution 0.2µs overflow 13.1ms ( 16 bit) 13.11=12.1ms 12.1ms/0.2µ => initialisation à 605500 if (temps_mesure_tension==80)temps_mesure_tension=0; if (temps_mesure_courant==20)temps_mesure_courant=0; if (temps_regulation=20)temps_regulation=0; temps_regulation++; temps_mesure_tension++; temps_mesure_courant++; } 22 void main() { lcd_init(); setup_adc_ports(AN0_TO_AN8|VSS_VDD); setup_adc(ADC_CLOCK_INTERNAL); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_1,249,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_timer_4(T4_DISABLED,0,1); setup_ccp1(CCP_PWM); set_pwm1_duty(0); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); lcd_init(); enable_interrupts(int_TIMER0); //desactiver par la suite, on l'activera quand on s'en servira ! ne pas oublier d'initialiser à 15500( 10ms) enable_interrupts(GLOBAL); //Setup_Oscillator parameter not selected from Intr Oscillator Config tab charge=0; choix=0; select=0; N=0; Mtension_24=45000; //fonction_mesure_tension() while(1) { while( charge==0) { lcd_gotoxy(1,1); lcd_putc("N="); delay_ms(50); lcd_gotoxy(6,1); lcd_putc("IC="); delay_ms(50); lcd_gotoxy(12,1); lcd_putc("A"); delay_ms(50); lcd_gotoxy(14,1); lcd_putc("T="); delay_ms(50); lcd_gotoxy(19,1); lcd_putc("m"); delay_ms(50); 23 lcd_gotoxy(1,2); lcd_putc("U="); delay_ms(50); fonction_affiche_tension(Mtension_24); lcd_putc("V"); delay_ms(50); lcd_gotoxy(8,2); lcd_putc("C=90AH"); delay_ms(50); lcd_gotoxy(16,2); lcd_putc("IN"); delay_ms(50); while(choix==0) { lcd_gotoxy(1,1); lcd_putc(" "); delay_ms(50); lcd_gotoxy(1,1); lcd_putc("N="); delay_ms(50); if( input(Pin_B1)==1) select=1; if( input(Pin_B2)==1) choix=3; if( input(Pin_B3)==1) choix++; while (select==1) { lcd_gotoxy(3,1); lcd_putc(" "); delay_ms(100); lcd_gotoxy(3,1); printf(lcd_putc,"%02u",N); delay_ms(100); if ( N<24 ) if( input(Pin_B3)==1) N++; if ( N>0 ) if( input(Pin_B2)==1) N--; if( input(Pin_B1)==1) { select=0; choix=1;} } } while(choix==1) { lcd_gotoxy(6,1); lcd_putc(" "); delay_ms(50); lcd_gotoxy(6,1); lcd_putc("IC="); delay_ms(50); if( input(Pin_B1)==1) select=1; if( input(Pin_B2)==1) choix--; 24 if( input(Pin_B3)==1) choix++; while (select==1) { lcd_gotoxy(9,1); lcd_putc(" "); delay_ms(100); lcd_gotoxy(9,1); printf(lcd_putc,"%02u",Iconsigne); delay_ms(100); if ( Iconsigne<99 ) if( input(Pin_B3)==1) Iconsigne++; if ( Iconsigne>0 ) if( input(Pin_B2)==1) Iconsigne--; if( input(Pin_B1)==1) { select=0; choix=2;} } } while(choix==2) { lcd_gotoxy(14,1); lcd_putc(" "); delay_ms(50); lcd_gotoxy(14,1); lcd_putc("T="); delay_ms(50); if( input(Pin_B1)==1) select=1; if( input(Pin_B2)==1) choix--; if( input(Pin_B3)==1) choix++; while (select==1) { lcd_gotoxy(16,1); lcd_putc(" "); delay_ms(100); lcd_gotoxy(16,1); printf(lcd_putc,"%02u",Tconsigne); delay_ms(100); if ( Iconsigne<120 ) if( input(Pin_B3)==1) Tconsigne++; if ( Iconsigne>0 ) if( input(Pin_B2)==1) Tconsigne--; if( input(Pin_B1)==1) { select=0; choix=3;} } } while(choix==3) { lcd_gotoxy(16,2); lcd_putc(" "); delay_ms(50); lcd_gotoxy(16,2); lcd_putc("IN"); delay_ms(50); if( input(Pin_B2)==1) choix--; 25 if( input(Pin_B3)==1) choix++; if( input(Pin_D3)==1)if( N>0) if( Mtension_24>N*39000) if (Iconsigne>0) if (Tconsigne>0) {charge=1; choix=4;} } } while(charge=1) { lcd_gotoxy(1,1); lcd_putc("Mise en charge"); } } } 17 - Conclusion Ce projet, nous a permis d'avoir une approche plus pratique et concrète de l'électrotechnique et électronique (hacheur, cartes...) et même dans le domaine de l'informatique industriel (adaptation d'un programme à un projet concret). Nous aurions aimé pouvoir finaliser ce projet mais l'impossibilité de simulation dût au logiciel (simulation de la PWM peut fiable sous isis) et le manque de temps pour la réalisation des cartes dût aux différentes contraintes ne nous l'a pas permis. Nous avons eut du mal à travailler en équipe car nous n’avons pas assez communiqué entre nous. Donc on a du refaire le typon 4 fois. Nous avons tous soudés et tester le programme en réel. Il nous manque à faire le câblage entre les différentes cartes. Nous avons du realiser un cablage d’un equilibreur au dernier moment de batterie lipo 90A.H avec des alimentations de PC 5V/10A. Nous tenons à remercier Mr.Sivert pour l'aide qu'il nous a apporté. 26 18