| | | | | | | PinoTux
| Inviato il: 29/5/2012,12:58
|
Spero che questa discussione prosegua.... release varie permettendo!
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | Luca450Mhz
| Inviato il: 29/5/2012,13:06
|
Ma è un modo di invogliare qualche volontario, oppure qualcosa nelle pentole di Bolle, bolle già?! e scusate il gioco di parole...
--------------- Pannelli: 6975 Wp (poli e mono). Inverter UPS PSW7 6kW 48V toroidale con switch comandato dal mio sistema di domotica (RaspberryPi + vari Wemos D1 Mini - ESP8266). Regolatore di carica: Mpp Solar PCM8048. Batterie: 24 elementi trazione pesante 315Ah C5 48V.
| | | | jumpy75
| Inviato il: 29/5/2012,13:07
|
Sicuramente sarà molto interessante e seguita da un bel po' di persone...
| | | | marpad65
| Inviato il: 12/6/2012,09:50
|
Ciao Bolle,
Purtroppo la mia ignoranza non ha limite!!
Ho provato ad usare il PWM2 e PWM3 come indicato nel manuale ma aime non ci sono riuscito.
Ti posto questo codice creato tempo fa, originariamente è molto piu vasto quindi non fare caso a riferimenti non utilizzati.
Quando hai tempo, me lo puoi modificare come se fosse il PWM2 e il 3.
10 REM 20 PRAGMA EXTERNAL_EEPROM 30 CADS=3 40 ' 50 CONSTANT V_CAR_MANT = 544 '13.6 / 27.2 / 54.4 60 CONSTANT V_CAR_FONDO = 568 '14.2 / 28.4 / 56.8 70 CONSTANT A_CAR_MANT = 65 ' 6A = 1/21 DI 130Ah 80 CONSTANT A_CAR_FONDO = 130 '13A = 1/10 DI 130Ah
125 SETIO=&H100FF 142 GRPILOTAV=V_CAR_FONDO 143 GRPILOTAA=A_CAR_FONDO
165 PWMFQ1=7 '------------------------------- imposto la frequenza di oscillazione 170 VPWM=12 175 LCDCLEAR
210 GOSUB :LEGGIDATI 219 '-------------------------- 220 GOSUB :PWM 229 '--------------------------
290 GOTO 210
300 :LEGGIDATI 305 VB1=CADS1*600/1023 320 AB1=((CADS2-511)*600/1024) 340 AP=((CADS3-511)*600/1024) 400 RETURN
500 :PWM 520 IF AB1>GRPILOTAA THEN 562 ELSE 550 '- verifico la CORRENTE di carica 550 IF VB1<>GRPILOTAV THEN 560 ELSE 599 '- verifico la tensione della batteria 560 IF VB1>GRPILOTAV THEN 562 ELSE 580 '- la tensione della batteria > Sp 562 IF VPWM=100 THEN 599 ELSE 564 564 VPWM++ 566 PWMDC1=VPWM 570 GOTO 599 580 IF VB1<grpilotav THEN 582 ELSE 599 '- la tensione della batteria < Sp 582 IF VPWM=0 THEN 599 ELSE 584 584 VPWM-- 586 PWMDC1=VPWM 599 lcdpos=1 600 lcdwrite = % &VPWM 601 lcdpos=65 602 lcdwrite = VB1= & VB1 & " " & "AB1= " & AB1 603 RETURN
grazie
| | | | NonSoloBolleDiAcqua
| Inviato il: 12/6/2012,10:13
|
Ok, ma cerca di spiegare cosa vuoi fare...cercando di mettere più informazioni possibili: I/O utilizzati ( a cosa servono o cosa devono fare) , periferiche utilizzate (DISPLAY ...) in modo che anche i non esperti capiscano. Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | NonSoloBolleDiAcqua
| Inviato il: 12/6/2012,14:38
|
Ma non funge nel debug oppure non funge sul PPTEA? Non ho capito il problema. Altra cosa posta tutto il codice...così capisco tutto...almeno ci provo Il codice è ottimo, si capisce per bene, ma un consiglio ...ma solo a livello visivo/cognitivo ...per rendere il codice leggibile soprattutto agli altri è utile lasciare i dati 'importanti' visibili ad occhio...faccio un esempio sulle tue linee di codice 50 e 60...è meglio lasciare i valori di tensione modificabili 'al volo' che valori oscici alla comprensione...un ulteriore passo è definire in testa anche il 13.6 e il 14.2 in modo da poterli avere bene sotto occhio...
CODICE 40 CONSTANT FATT_PROP_V = 40 50 CONSTANT V_CAR_MANT = 13.6*FATT_PROP_V '-------------> 544 ->13.6 60 CONSTANT V_CAR_FONDO = 14.2*FATT_PROP_V '-------------> 568 -> 14.2 Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | marpad65
| Inviato il: 12/6/2012,16:45
|
CITAZIONE (NonSoloBolleDiAcqua @ 12/6/2012, 15:38) Ma non funge nel debug oppure non funge sul PPTEA? Non ho capito il problema. No, No funziona bene, sicuramente da migliorare ma funziona. Considera che questo è un prototipo in funzione da 8 giorni, e per il momento ... tocco ferro!!. è stato scritto con la versione 2.15 ed ora lo vorrei aggiornare con la ver. attuale per ampliarlo e snellirlo un po. Le I/O utilizzate sono quelle di default per il PWM1
Quello che ti chiedo è di utilizzare questa base di codice come esempio, impostandolo come se fosse il PWM2 o il PWM3.
Se qualcuno ha voglia di ridere pubblico il prototipo, come base è un po contorta ma può far nascere qualche altra idea
| | | | marpad65
| Inviato il: 12/6/2012,17:03
|
CITAZIONE (NonSoloBolleDiAcqua @ 12/6/2012, 15:38) Ma non funge nel debug oppure non funge sul PPTEA? Non ho capito il problema. Altra cosa posta tutto il codice...così capisco tutto...almeno ci provo Il codice è ottimo, si capisce per bene, ma un consiglio ...ma solo a livello visivo/cognitivo ...per rendere il codice leggibile soprattutto agli altri è utile lasciare i dati 'importanti' visibili ad occhio...faccio un esempio sulle tue linee di codice 50 e 60...è meglio lasciare i valori di tensione modificabili 'al volo' che valori oscici alla comprensione...un ulteriore passo è definire in testa anche il 13.6 e il 14.2 in modo da poterli avere bene sotto occhio... CODICE 40 CONSTANT FATT_PROP_V = 40 50 CONSTANT V_CAR_MANT = 13.6*FATT_PROP_V '-------------> 544 ->13.6 60 CONSTANT V_CAR_FONDO = 14.2*FATT_PROP_V '-------------> 568 -> 14.2 Ciao Bolle Come vedi (per non perdersi dietro alle virgole) i valori calcolati sono interi per facilitare la lettura ed evitare il rincorrersi del set-point. Il mio progetto è per un impianto a 48V quindi la tensione di sp del PWM è 56,8V(568) modificabile per impianti a 24 o 12 Volt. Il fondo scala di lettura è di 60V(600) impostabile a 30 o 15 Volt Come già detto è un prototipo ... per le descrizioni aspettavo di farlo più avanti
Marco
| | | | NonSoloBolleDiAcqua
| Inviato il: 12/6/2012,17:06
|
CITAZIONE (marpad65 @ 12/6/2012, 17:45) Se qualcuno ha voglia di ridere pubblico il prototipo.... Questo circuito interessa molto al forum...se lo hai testato e va bene...vuol dire che hai fatto un bel lavoro: .Se qualcuno ride lo prendiamo a calci...ma non mi sembra che il tuo codice faccia ridere...tutt'altro. Se vuoi posta il circuito con i componenti che hai utilizzato...tutti potremo trarre spunto e/o darti consigli. BRAVO! Ciao Bolle PS:Ti conviene aggiornare la versione...anche se è in perenne evoluzione...ma ora entriamo nella parte di calma.
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | NonSoloBolleDiAcqua
| Inviato il: 12/6/2012,19:34
|
Penso sia giunto il momento di passare agli schemi a blocchi...sono un modo, soprattutto per chi inizia e non ha molta esperienza, per focalizzare il flusso del software...piano piano...faremo anche questo. Iniziamo a discutere il sw che ha realizzato marpad. Nonostante pensi sia contorto, non lo è affatto. Il suo codice è suddiviso in blocchi: 1.Blocco di dichiarazione e di inizializzazione (linee 10-175) 2.Programma principale (chiuso in un loop infinito che chiama soubroutine linee 210-290) 3.Due soubroutine (PWM, LEGGIDATI linee 500-603) Inoltre ha dato un nome sensato alle variabili/costanti...di fatto ha realizzato un sw impeccabile!!! In questo modo abbiamo descritto l'architettura del SW...vediamo poi di descrivere cosa fa.
Passiamo ad utilizzare il PWM2 invece che il PWM1...per utilizzare il PWM2 (anche per liberare il timer che può far comodo) , possiamo commentare la linea 165, la linea 566 deve diventare PWMDC2=VPWM e linea 586 deve diventare PWMDC2=VPWM. L'uscita del PWM2 deve essere preso sul pin 27 anzichè 28...tutto qua. Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | NonSoloBolleDiAcqua
| Inviato il: 13/6/2012,06:49
|
Passiamo ad analizzare le due subroutine: 1. LEGGIDATI: Legge la tensione della batteria e la corrente di carica/scarica.
2.PWM Confronta la tensione di batteria e la corrente con dei valori...ma alcuni controlli mi sembrano non congruenti...forse occorre aspettare che posti il codice completo...non ci sono controlli sulla tensione di mantenimento etc...
Cmq un buon regolatore di carica necessita anche di un sensore di temperatura...che in questo codice non vedo...ma attendiamo il resto...oppure proviamoci noi a tirare giù un programma. Inoltre un buon regolatore gestisce anche il carico...cioè non solo si deve caricare la batteria ma si deve anche prevedere se un carico può essere agganciato alla batteria oppure no. Un saluto Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | NonSoloBolleDiAcqua
| Inviato il: 13/6/2012,07:23
|
Questo è lo schema del regolatore.
Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | marpad65
| Inviato il: 13/6/2012,08:16
|
Buongiorno Bolle,
Visto che stai avanzando a passi lunghi e ben distesi ti posto il codice. Avrei voluto sistemarlo un po prima di pubblicarlo.
Piccola descrizione delle funzioni.
Fase di carica: -visualizzazione tensione batteria -visualizzazione corrente batteria -visualizzazione potenza istantanea pannelli - regolazione PWM --regolazione con set-ppint in tensione, carica di fondo --regolazione con sp in corrente, carica di fondo --regolazione con sp in tensione, carica di mantenimento --regolazione con sp in corrente, carica di mantenimento --passaggio automatico tipo di carica
Fase scarica -visualizzazione in % stato batteria
Punti di prelievo dei dati -tensione, ai poli del pacco batterie -corrente, al negativo dei pannelli -corrente, al positivo della batteria(riconosce se la batteria è in carica o scarica. Sensore All)
-"NON RILEVA LA TEMPERATURE"
ho creato il codice per misurare la capacità accumulata ma le variabili sono finite, studierò qualcos'altro
In fase di simulazione non accetta il cads5 < a 0 (corrente pannelli)
10 REM 20 PRAGMA EXTERNAL_EEPROM 30 CADS=5 40 ' 50 CONSTANT V_CAR_MANT = 544 '13.6 / 27.2 / 54.4 60 CONSTANT V_CAR_FONDO = 568 '14.2 / 28.4 / 56.8 70 CONSTANT A_CAR_MANT = 65 ' 6A = 1/21 DI 130Ah 80 CONSTANT A_CAR_FONDO = 130 '13A = 1/10 DI 130Ah 85 CONSTANT M=0 87 CONSTANT F=1
125 SETIO=&H100FF 142 GRPILOTAV=V_CAR_FONDO 143 GRPILOTAA=A_CAR_FONDO 145 PWMIO1=&HC000'------------------------ led indicativo funzionamento PWM 150 WAITS 2 165 PWMFQ1=7 '------------------------------- imposto la frequenza di oscillazione 170 VPWM=12'--------------------------------- D.C. indicativo per non partire da zero 171 TWp=1'-------------------------------------% tot Watt-Picco memorizza il picco + alto e confronta con l'instantaneo 173 FASECARICA=F---------------------------- avviamento in fase carica di fondo 175 LCDCLEAR
210 GOSUB :LEGGIDATI 219 '-------------------------- 220 GOSUB :PWM 229 '-------------------------- 230 ' 231 IF DP<>1 THEN 233 ELSE 271 233 GOSUB :VISDATIB1 235 DP++ 236 GOTO 210 239 '--------------------------
260 ' 271 IF DVC<>5 THEN 275 ELSE 272 272 CLR DVC 273 GOSUB :VERCARICA 274 GOTO 283 275 DVC++ 279 '-------------------------- 283 CLR DP' 290 GOTO 210
300 :LEGGIDATI 305 VB1=CADS1*600/1023 310 'VB2=CADS2*600/1023 320 AB1=((CADS3-511)*600/1024) 330 'AB2=((CADS4-511)*600/1024) 340 AP=((CADS5-511)*600/1024) 400 RETURN
500 :PWM'------------------------------------------------regolazione PWM 520 IF AB1>GRPILOTAA THEN 562 ELSE 550 '- verifico la CORRENTE di carica 550 IF VB1<>GRPILOTAV THEN 560 ELSE 599 '- verifico la tensione della batteria 560 IF VB1>GRPILOTAV THEN 562 ELSE 580 '- la tensione della batteria > Sp 562 IF VPWM=100 THEN 599 ELSE 564 564 VPWM++ 566 PWMDC1=VPWM 570 GOTO 599 580 IF VB1<grpilotav THEN 582 ELSE 599 '- la tensione della batteria < Sp 582 IF VPWM=0 THEN 599 ELSE 584 584 VPWM-- 586 PWMDC1=VPWM 599 RETURN
3000 :VISDATIB1'------------------------------visualiza i dati batteria e la D.C in stato di carica 3001 IF AB1<0 THEN 3002 ELSE 3010 3002 GOSUB :PERCBATTERIA 3003 GOTO 3510 3010 LCDPOS=1 3013 VPWM2=VPWM*10.0 3015 LCDWRITE=PWM D.C. %= & LEFT(VPWM2&"",3) 3020 ' 3025 ' 3030 ' 3510 LCDPOS=65 3515 Wp=LEFT(((VP*AP))&"",5) 3516 'WpV=VB1*AP
3530 ' 3533 VISVB1=LEFT((VB1/1.0)&"",5) 3535 LCDWRITE=BATTERIA V=&VISVB1 3540 LCDPOS=21 3543 VISAB1=LEFT(((AB1/1.0))&"",5) 3545 LCDWRITE=BATTERIA A=&VISAB1 3550 GOTO :PRESTAZIONIIMPIANTO 3900 RETURN
4000 :VERCARICA'---------------------------------------verifica se passare a carica di fondo o mantenimento 4005 IF FASECARICA=F THEN 4010 ELSE 4080 4010 IF VB1=V_CAR_FONDO THEN 4020 ELSE 4080 4020 CVC++ 4030 IF CVC>=2 THEN 4040 ELSE 4900 4040 GRPILOTAA=A_CAR_MANT 4050 GRPILOTAV=V_CAR_MANT 4055 FASECARICA=M 4060 CVC=0 4070 GOTO 4900 4080 IF VB1<520 THEN 4090 ELSE 4900 4090 CVC++ 4100 IF CVC=2 THEN 4110 ELSE 4900 4110 GRPILOTAA=A_CAR_FONDO 4120 GRPILOTAV=V_CAR_FONDO 4125 FASECARICA=F 4130 CVC=0 4900 RETURN
5000 :PRESTAZIONIIMPIANTO'-----------------------------indica la potenza del pannello con scorrimento dei dati 5005 IF START=1 THEN 5057 5010 CLR C,D 5015 D=20 5020 WpV=LEFT((VB1*AP)/10.0&"",3) 5025 ' 5030 IF WpV>TWp THEN 5035 ELSE 5040 5035 TWp = WpV 5040 PERCWp=LEFT(WpV/(TWp/100)&"",4) 5042 STR1="PANNELLO Wpp= " & WpV & " <-> "'----------------22 caratteri 5052 STR2="RESA PANNELLO % " &PERCWp & " <-> "'------------25 caratteri 5054 ' 5055 Z=STR1&STR2 5057 LCDPOS=85 5059 C++ 5061 b=MID(z,C,D) 5065 LCDWRITE=b 5068 IF C=47 THEN 5078 5070 IF C>27 THEN 5071 ELSE 5072 5071 D-- 5072 SET START 5073 RETURN'GOTO 5057 5078 CLR START 5900 RETURN
6000 :PERCBATTERIA'-------------------------------------------% stato della batteria visibile in stato di scarica 6010 IF VB1>=516 THEN 6015 ELSE 6020'99 12.91 11 6015 PERCB1=99 6016 GOTO 6120 6020 IF VB1>=512 THEN 6025 ELSE 6030'90 12.80 14 6025 PERCB1=90 6026 GOTO 6120 6030 IF VB1>=504 THEN 6035 ELSE 6040'80 12.66 14 6035 PERCB1=80 6036 GOTO 6120 6040 IF VB1>=500 THEN 6045 ELSE 6050'70 12.52 14 6045 PERCB1=70 6046 GOTO 6120 6050 IF VB1>=492 THEN 6055 ELSE 6060'60 12.38 16 6055 PERCB1=60 6056 GOTO 6120 6060 IF VB1>=488 THEN 6065 ELSE 6070'50 12.22 16 6065 PERCB1=50 6066 GOTO 6120 6070 IF VB1>=480 THEN 6075 ELSE 6080'40 12.06 16 6075 PERCB1=40 6076 GOTO 6120 6080 IF VB1>=476 THEN 6085 ELSE 6090'30 11.90 20 6085 PERCB1=30 6086 GOTO 6120 6090 IF VB1>=468 THEN 6095 ELSE 6100'20 11.70 28 6095 PERCB1=20 6096 GOTO 6120 6100 IF VB1>=448 THEN 6105 ELSE 6115'10 11.42 0 6105 PERCB1=10 6106 GOTO 6120 6110 ' 6115 PERCB1=00 6120 LCDPOS=1 6124 PERCB1=LEFT((PERCB1)&"",2) 6125 LCDWRITE="PERC.BATT. "&PERCB1&" %" 6900 RETURN
ho provato come da te descritto ma in simulazione non visualizzo niente Cosa dicevi a proposito della riga 165?????
Marco
Modificato da marpad65 - 14/6/2012, 00:00
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|