Voilà la partie découpage,
,
la suite pour demain.
-----
Voilà la partie découpage,
,
la suite pour demain.
> C4 est le condensateur de sortie du driver de Mos (cfr datasheet).
ok, je vois l'erreur
Sur le schéma dans la datasheet "CL" représente la charge du driver, càd la capacité de grille du MOS. Ce n'est pas un vrai composant.
> ferrite? ca ressemble à quoi ca?
C'est une inductance dont le noyau est dans un matériau qui dissipe les HF, donc en HF elle se comporte comme une résistance en gros.
http://fr.farnell.com/fair-rite/2508...805/dp/1611983
Très efficace pour absorber les parasites dans les alims, à mettre dans le Vcc. Pour éviter que le driver de MOS pollue l'alim du PIC, on lui met ses capas de découplage locales, mais on connecte le tout au Vcc général via une ferrite. Comme ça les courants HF sont confinés aux capas de découplages du driver et ne passent pas dans la trace de Vcc.
> Voilà la partie découpage,
C'est déjà beaucoup mieux !
- tu n'es pas obligé de te prendre le chou avec un DB9 pour le port série, par exemple tu peux mettre un connecteur HE10 pour circuit imprimé, un câble plat, et un DB9 pour câble plat à l'autre bout, ça t'évite un câble DB9-DB9 volumineux. C'est une suggestion
- si la batterie est déconnectée, la tension de sortie va augmenter jusqu'à ce que quelque chose claque, normalement cela est géré par le uC, mais lorsque tu développes le programme, c'est dommage de cramer des composants si il y a un bug. Tu peux mettre une protection simple genre un comparateur, ou une zener et un transistor qui shunt le signal PWM à la masse en entrée du driver par exemple. À toi de voir. Vérifie aussi si il y a des pullups dans le uC, quel est l'état du PWM au boot, genre si le MOS est passant pendant le boot, ou pas.
- mettre R1 avant l'inductance (et non après comme sur ton schéma) augmentera la précision de la mesure du courant en gardant le mode commun constant. En fait c'est carrément nécessaire (en plus ça simplifie le layout).
- mets la piste bleue sur C16+ du côté "rouge" pour consolider le plan de masse
- le réseau pour mesurer la tension d'entrée peut être placé plus loin pour ne pas gêner le layout de la partie puissance ; si tu le pousses en bas ça permet de mettre L1 à la place, tournée de 90°. En tout cas la capa de filtrage est mieux près du PIC.
- inverse les positions de l'ensemble MOS+driver et de R1/D1 et retourne les 2 capas de droite (le + à gauche). Cela te permettra de sortir la trace de commande du PWM plus facilement et réduit la taille de la boucle.
- relie la source du MOS au plan de masse avec plusieurs via immédiatement à côté des pins du MOS (pour 2A tu peux mettre 4 via par exemple).
- pour le MOS+driver, tu peux les mettre "en ligne" au lieu de côte à côte, et utiliser au choix l'un des 2 drivers dans le chip, le plus pratique pour le layout.
Poste ton fichier eagle, je jetterai un oeil !
watchaw
Je dois prendre quoi comme valeur pour les fair-rite?
ajout des via pour la source du MOS.
faut oublier le premier schéma posté aujourd'hui
ça s'améliore !
fais péter le fichier eagle
schématic.jpgboard.jpg
je les ai envoyés en png. Peut on les envoyer en .sch et .brd???
Ajout des ferrites 0805 dans le VDD du driver et du régulateur.
Ajout du comparateur LM358 sur le shutdown du régulateur 5V.
Seuil fixé à 15,7V.
ajout des pattes d'alimentation du LM358. J'essaye de ne plus en envoyer
board.jpgschématic.jpg
CITEAmppt.zip
voilà voilà
J'ai un peu avancé....
CITEAmppt2.zip
Petite question, je dois attendre tes recommandations là, ou pour toi c'est bon? Je serais content si tu pouvais vérifier le comparateur pour limiter la tension de sortie.
Merci bien.
Je voulais jeter un oeil mais j'ai pas eu le temps ces derniers jours. Peut-être demain...
Le truc avec le comparateur est foireux : le montage ne démarrera pas...
Tu peux simplement mettre une résistance à la sortie PWM du uC et utiliser la sortie du comparateur pour court-circuiter à la masse le PWM quand la tension de sortie dépasse, mettons, 18V.
Je n'arrive pas à déplacer des composants, ça fait trop longtemps que j'ai pas utilisé eagle...
oupss déso, prends ton temps cher confrère!
J'étais en train de regarder en fait, lis mon dernier post
he he, pour une fois que je peux t'apprendre quelque chose, je vais en profiter!
dans le board, tu dois modifier l'échelle. Elle est à 0 pouce.
Bizarrement, à chaque enregistrement avec un polygon sur le board, elle se remet à 0.
Slt!
toujours entrain d'y travailler?
y a tant que ça à modifier?
je poste les fichiers eagle routé. DRC ERC ok.
CITEAMPPT.zip
lâchez vos coms
Bonjour,
je cherche encore de l'aide pour ce foutu montage. Le Hardware fonctionne admirablement bien hormis une consommation de 19mA (µC+max232+perte). Par contre au niveau programmation du pic, ça craint un peu....
je m'explique, j'essayé 2 méthodes:
1) tracking sur la puissance du panneau: Vp*Ip, la régulation est pitoyable et oscille énormément.
2) tracking sur le courant max du panneau en prenant soin de ne pas descendre en dessous de 5,5V, là c'est beaucoup mieux.
Pour donner un exemple (panneau solaire irradié avec une lampe au sodium)/ mesure au multimètre: le regulateur d'origine->300mA presque constant et pour ce régulateur 288mA avec un effondrement, vite corrigé.
Je poste mon programme en C:
Pièce jointe supprimée
Merci pour votre aide ou commentaire,
Dernière modification par JPL ; 15/11/2012 à 17h01.
Pour poster du code dans un message il y a la balise Code (#) dans l'éditeur avancé.
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
Bonjour à tous,
J'ai lu avec beaucoup d'intérêt sur ce post. Je suis nouveau ici...
J'ai justement comme projet de fabriquer un régulateur MPPT pour abaisser des panneaux de 235 W (37V) à un réseau de batteries existant de 12V. Hors j'ai cherché un peu pour de la documentation sur les MPPT, mais à part des réthoriques de vendeur, j'ai rien trouvé de technique et sérieux sur l'architecture et la logique du fonctionnement de ces appareils.
Pourriez-vous orienter mes recherches svp ?
Merci,
Yex2
Re-Bonjour,
Je modifie le post pour le modérateur...
je cherche encore de l'aide pour ce foutu montage. Le Hardware fonctionne admirablement bien hormis une consommation de 19mA (µC+max232+perte). Par contre au niveau programmation du pic, ça craint un peu....
je m'explique, j'essayé 2 méthodes:
1) tracking sur la puissance du panneau: Vp*Ip, la régulation est pitoyable et oscille énormément.
2) tracking sur le courant max du panneau en prenant soin de ne pas descendre en dessous de 5,5V, là c'est beaucoup mieux.
Pour donner un exemple (panneau solaire irradié avec une lampe au sodium)/ mesure au multimètre: le regulateur d'origine->300mA presque constant et pour ce régulateur 288mA avec un effondrement, vite corrigé.
Je poste mon programme en C:
Code:#include "C:\Documents and Settings\Moi\Bureau\PICC\MPPT citea\main.h" #bit godone=0x1F.1 #byte ADCON0=0x1F #byte ADCON1=0x9F #byte ADRESL=0x9E #byte ADRESH=0x1E #define LED pin_b7 #int_TIMER1 TIMER1_isr() { int i; i++; if(i>=30) {output_high(LED); delay_ms(100); output_low(LED); i=0; } } void main() { int1 d=1; int16 PWM=0,t=0,i=0; int16 ADVp=0,SADVp=0,ADVpt=0; int16 ADVb=0,SADVb=0,ADVbt=0; int16 ADI=0,SADI=0,ADIt=0; int16 Pow=0,CompPow=0; int16 ADTs=1100,SADTs=0,ADTst=0; float fADVp=0,fADVb=0,fADI=0,fADTs=0; Set_tris_b( 0b00000000 ); //Pin B0-B7 output setup_adc_ports(ALL_ANALOG); setup_adc(ADC_CLOCK_DIV_32); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_wdt(WDT_2304MS); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); setup_timer_2(T2_DIV_BY_1,62,1); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); setup_ccp1(CCP_PWM); set_pwm1_duty(0); while(1) { //Capture, traitement et envoi de Vpanel START ADCON1=0b10000000; //Activation de l'ADC delay_us(10); ADCON0=0b10000101; //Choix du canal à échantillonner delay_us(10); while(i<3) //Capture de 3 mesures successives { godone=1; while(godone); ADVpt=make16(ADRESH,ADRESL); SADVp=SADVp+ADVpt; //Somme des tensions i++; } ADVp=SADVp/3; //Moyenne effectuée SADVp=0; i=0; if(t==4000) { fADVp=(float)ADVp/131.02; //Conversion en valeur décimale (float) printf("\n\nSTART----------------------------------------"); printf("\n\nPanel voltage : %1.1fV",fADVp); } //Capture, traitement et envoi de Vpanel END //______________________________________________________________________________________________________________ //Capture, traitement et envoi de Ipanel START ADCON0=0b10001101; //Choix du canal delay_us(10); while(i<10) //Capture de 10 mesures successives { godone=1; while(godone); ADIt=make16(ADRESH,ADRESL); SADI=SADI+ADIt; //Somme des courants i++; } ADI=SADI/10; //Moyenne effectuée SADI=0; i=0; if(t==4000) { fADI=(float)ADI/586; printf("\n\nPanel current : %1.3fA",fADI); } //Capture, traitement et envoi de Ipanel END //______________________________________________________________________________________________________________ //Traitement et envoi de Vbatterie START if(t==4000) { fADVb=(float)ADVb/65.51; printf("\n\nAccu voltage : %2.1fV",fADVb); } //Capture, traitement et envoi de Vbatterie END //______________________________________________________________________________________________________________ //Capture, traitement et envoi de Tsensor START if (t==4000) { ADCON0=0b10001001; //Choix du canal delay_us(10); while(i<10) //Capture de 10 mesures successives { godone=1; while(godone); ADTst=make16(ADRESH,ADRESL); SADTs=SADTs+ADTst; //Somme des t° i++; } ADTs=SADTs/10; SADTs=0; i=0; fADTs=(float)ADTs/204.4; //Conversion en valeur décimale fADTs=(fADTs-0.5)/0.01; //Ex: (725mV-500mV)*100=22,5°C printf("\n\nSensor temp : %2.1f°C",fADTs); fADTs=(13.6+(20-(fADTs))*0.03); printf("\n\nAccu voltage max fixed to %2.2fV",fADTs); printf("\n\nEND------------------------------------------"); t=0; //Protection batterie START fADTs=fADTs*65.51; ADTs=(int16)(fADTs+0.5f); //Protection batterie END } //Capture, traitement et envoi de Tsensor END //______________________________________________________________________________________________________________ //Capture batterie, protection no charge //Tracking current Pow=ADI; //routine de comparaison des Pow calculées ADCON0=0b10000001; //Choix du canal delay_us(10); while(i<3) //Capture de 3 mesures successsives { godone=1; while(godone); ADVbt=make16(ADRESH,ADRESL); SADVb=SADVb+ADVbt; i++; } ADVb=SADVb/3; SADVb=0; i=0; if(ADVb>1000||ADVb>ADTs) //Vb>15,26V ou Vb>Tension fct T° {set_pwm1_duty(0);} else{ if(Pow>=CompPow) { switch(d) { case 0: { if(PWM>=1) { PWM=PWM-1; set_pwm1_duty(PWM);} } break; case 1: { if(PWM<230&&ADVp>720) { PWM=PWM+1; set_pwm1_duty(PWM);} } break; } } if(Pow<CompPow) { switch(d) { case 0: { if(PWM<230&&ADVp>720) { PWM=PWM+1; set_pwm1_duty(PWM); } d=1; } break; case 1: { if(PWM>=1) { PWM=PWM-1; set_pwm1_duty(PWM); } d=0; } break; } } } CompPow=Pow; t++; } }
Merci pour votre aide ou commentaire,
Bonjour,
Contrairement à mon projet qui est un MPPT boost, toi tu veux concevoir un MPPT...buck.
C'est exactement le même principe que moi, hormis le fait que tu as un panneau 25 fois plus puissant que le mien....
Je t'envoie un lien très intéressant:
http://forums.futura-sciences.com/el...c-18f4550.html
bat
Merci pour votre aide !!!!
Non sans blague, ça fonctionne maintenant en faisant un tracking sur la puissance.
Si la puissance diminue
-et si la tension augmente: on tire pas assez de courant/incrémentation PWM
-et si la tension diminue: on tire trop de courant/décrémentation PWM
Si la puissance est égale ou augmente
-on incrémente le PWM (en prenant garde dans mon cas de ne pas descendre en dessous de 5,5V pour le régulateur LDO)
Merci pour votre aide,
Oui effectivement c'est un buck, désolé je n'avais pas spécifié. Merci du lien, je vais lire ça avec attention.Bonjour,
Contrairement à mon projet qui est un MPPT boost, toi tu veux concevoir un MPPT...buck.
C'est exactement le même principe que moi, hormis le fait que tu as un panneau 25 fois plus puissant que le mien....
Je t'envoie un lien très intéressant:
http://forums.futura-sciences.com/el...c-18f4550.html
bat
Mais j'ai déjà quelques questions avant même de commencer. Pourquoi ne pas tout simplement faire un convertisseur DC-DC buck et ne pas se casser le coco ? Il me semble que les MPPT ont tous un convertisseur DC-DC buck d'incorporer. Qu'est-ce que le PIC vient ajouter de plus dans le circuit ?
Merci,
Yex2
Dans mon cas, je n'ai pas eu le choix car si je pompais trop de courant sur le panneau, la tension s'effondrait brutalement. Donc un convertisseur DC-DC simple dans mon cas fut un échec. Je devais obligatoirement piloter le MOS.
Si on utilise un µc, c'est pour rechercher justement le MPPT et donc augmenter le rendement.
Une alimentation DC-DC fonctionnera dans ton cas mais avec un rendement plus faible. Voilà voilà.
Dans mon cas, je n'ai pas eu le choix car si je pompais trop de courant sur le panneau, la tension s'effondrait brutalement. Donc un convertisseur DC-DC simple dans mon cas fut un échec. Je devais obligatoirement piloter le MOS.
Si on utilise un µc, c'est pour rechercher justement le MPPT et donc augmenter le rendement.
Une alimentation DC-DC fonctionnera dans ton cas mais avec un rendement plus faible. Voilà voilà.
Donc si je comprends bien, on cherche à exploiter la puissance maximal possible du panneau sans le saigner à blanc. Autrement dit, on évite de demander plus de jus qu'il peut en fournir...
Il doit donc exister une relation entre la tension de sortie et le courant maximal possible pour chaque conditions d'illumination. Si c'est le cas, comment on fait pour savoir ? Est-ce quelques chose de spécifique à chaque manufacturier de panneaux ou il existe une formule générale qui s'applique de façon globale à tous les panneaux ? Je parle ici d'une formule qui nous indiquerait la puissance maximal disponible pour chaque condition de voltage.
Ou est-ce plutôt une comparaison qui est faites sur le courant par exemple ? Ce que je veux dire, c'est est-ce qu'on demande de plus en plus de courant tant et aussi longtemps que le panneau peux en fournir ? Je sais pa si je suis claire ??!?!
Merci d'avance,
Yex2