Jumping Jack Flash weblog

Diario elettrico Ecojumbo 5000 – 15 marzo 2016: messa a punto centralina

Posted in Diario elettrico Ecojumbo 5000 by jumpjack on 17 marzo 2016

Passata la prima settimana di prove su strada, ho deciso di mettere mano alla centralina per mettere un po’ a punto le prestazioni: al momento, con questi settaggi, partendo da fermo con l’acceleratore a tavoletta vengo quasi disarcionato dallo scooter e la tensione di batteria scende paurosamente, quindi non è decisamente l’ideale… La velocità massima è di 82 km/h, e l’acceleratore, quand’è al minimo,non sempre viene letto correttamente dalla centralina. Questo perchè  applicando 3,75V , a riposo ottengo 0,88V (23,4%) e al massimo 2,95V (78,6%), mentre la centralina è impostata su  20% di minimo e 80% di massimo, valori troppo risicati (scelti infatti del tutto a caso…):

Configurazione acceleratore Ecojumbo su centralina Kelly KEB72801

Acceleratore Ecojumbo su centralina Kelly KEB72801 – configurazione 1 (prima del 15/3/2016) [schermata 1]

Ho scelto quindi questa nuova configurazione:

kelly-001-dopo2

L’acceleratore viene cioè “letto” come “zero” solo se è minore del 25%; la cosa è importante perchè c’è un’altra opzione sulla centralina che impedisce completamente di partire se all’accensione della centralina stessa l’acceleratore non risulta a zero (per motivi di sicurezza), dando l’errore (2,4) (schermata 2):

kelly-002-prima

Sicurezza acceleratore su centralina Kelly KEB 72801 – Configurazione 1 (pre 16/3/2016)  [schermata 2]

E’ l’opzione “Power on High Pedal disable” (che si leggerebbe meglio se scritta “Power-on high-pedal disable”, o meglio ancora “Disable if high-pedal detected at power-on”), perchè nella centralina l’acceleratore è chiamato “pedal” oltre che “throttle”.

Già che ci siamo, spieghiamo anche la seconda opzione, “Releasing Brake High Pedal Disable”: significa che se, quando si rilascia il freno, l’acceleratore non è a zero, il motore non parte.( Non so se dipende da questo il fatto che tirando il freno NON viene escluso il motore MA viene escluso se tiro indietro il pulsante sopra all’acceleratore: pensavo fossero sulla stessa linea di sicurezza, ma evidentemente non è così… o forse dànno due diversi livelli di tensione, non so… dovrò fare delle misure. )

“Si dice”, infatti, che su uno scooter elettrico sia obbligatorio disabilitare il motore a freni tirati. Non sono però mai riuscito a trovare la normativa che impone quest’obbligo. Forse dovrei cercare su una generica/fantomatica normativa sugli azionamenti elettrici in continua… ma io che ne so?!?

In questa stessa schermata, che riporto di nuovo per comodità per chi arriva a questo punto della pagina solo col FIND (CTRL+F)….,  si vede la tensione di “taglio sottosoglia” (Low Voltage Cutoff – LVC): in via estremamente prudenziale l’avevo inizialmente impostata a 60V:

kelly-002-prima

Tensione di sottosoglia per centralina Kelly KEB72801 – configurazione 1 [schermata 2]

La nota dice che le tensioni effettive di stacco e riattacco sono 60*1,1 (cioè 60 +10%) e 60*0,05 (cioè 60 +5%), cioè 66  e 63V; in questi giorni, tornando a casa dopo 20 km percorsi, era sui 64,5 , e ovviamente scendeva anche di più durante le accelerazioni. Però la nota mi sembra anche confusionaria: dice che la corrente viene tolta a 66V e riattaccata a 63… ma non ha senso! Semmai dovrebbe essere tolta a 63 e, quando poi la tensione risale a 66 perchè si è rilasciato l’acceleratore, essere riattaccata! Invece a me si staccava “a tensione indefinita dopo un tempo indefinito” (a volte sono stato anche a 58 per qualche secondo, e non ha staccato, mentre altre volte, in corsa, quando non riuscivo a leggere la tensione, staccava…), ma si è sempre riattaccata, benchè i 66V la batteria li raggiunga solo quando è completamente piena…

Mah. La morale della favola è che devo installare il voltmetro sul manubrio invece che sul “serbatoio”, dove non riesco a leggerlo in movimento quando ho il grembiule antivento… :-/

Comunque sia, ora ho impostato la soglia di LVC a 53V, che significa  55.65V e 58.3V:

Tensione di sottosoglia per centralina Kelly KEB72801 - configurazione 2 [schermata 2]

Tensione di sottosoglia per centralina Kelly KEB72801 – configurazione 2 [schermata 2]

 55.65V significa 2.78V/cella, mentre 58.3V significa 2.915V/cella (rispetto agli esagerati 3V di prima…). “Si dice”  che le LiFePO4 possano arrivare fino a 2.5V senza danneggiarsi, ma non vedo il motivo di stressarle tanto. Comunque, vedrò quanta autonomia riesco a raggiungere così. Sono anche finalmente riuscire a trovare una pinza amperometrica da 1000A DC e con uscita in tensione, quindi potrò finalmente tarare il powermeter comprato anni fa e mai utilizzato perchè starato.

La tensione di soprasoglia l’ho impostata a 74V rispetto ai 73V di tensione massima di ricarica, ma in realtà quando le batterie sono in ricarica sono staccate dallo scooter, quindi al momento questo valore è irrilevante. Devo ancora studiare un modo per ricaricare le batterie senza staccarle dallo scooter, perchè hanno un unico connettore sia per scarica che per ricarica, e devo capire se andando a ricaricarle mentre sono collegate vado anche a buttare corrente nelle varie utenze dello scooter  o no, e se devo aggiungere un interruttore che dovrei staccare ogni volta che ricarico… boh… Sono abituato a uno scooter con batterie estraibili, che dovevo per forza di cose ogni volta staccare dallo scooter pe ricaricare; ora che sono fisse nello scooter non so bene come gestirle…

Ma torniamo ora alla schermata 1, perchè è qui che si impostano, oltre alle tensioni dell’acceleratore, anche le correnti del motore e della batteria; questa era la prima mappatura:

Configurazione acceleratore Ecojumbo su centralina Kelly KEB72801

Configurazione acceleratore Ecojumbo su centralina Kelly KEB72801 – configurazione 1

Inizialmente avevo cioè impostato che la centralina prelevasse dalle batterie il 50% della corrente massima (50% di 140A, cioè 70A/4.6kW), e inviasse al motore l’80% (112A/7.4kW); però tirare fuori 70A da una batteria composta da due batterie da 18Ah significa estrarre da ciascuna 35A/2C, che è un po’ tanto; nella settimana di prove ho appurato che è anche inutile, e pure un po’ pericoloso, perchè così lo scooter ha un’accelerazione sconsiderata, al punto che se parto con l’acceleratore a tavoletta rischio di essere disarcionato!!! A me basta arrivare da 0 a 50 in 3 o 4  secondi, non in mezzo secondo! Quindi nella nuova mappatura ho impostato la corrente a 30% (42A/2.8kw, cioè poco più di 1C a batteria), molto più ragionevole, e 70% (98A/6.5kW) al motore:

 

kelly-001-dopo

Corrente di batteria – configurazione 2: 30% di 140A(=42A, 21A/batteria,  1.3C, 2.7 kW totali, max 70 km/h)

Infatti adesso il voltmetro dell’Ecojumbo non scende più di 2.5 tacche  su 3 quando accelero a fondo, ma solo di mezza tacca su 3 (non ho ancora verificato a quali valori effettivi corrisponde), ma l’accelerazione in partenza è ancora ottima, permettendomi di liberare gli incroci con la dovuta prontezza.

Come si nota, la corrente che va al motore è regolabile indipendentemente da quella estratta dalla batteria: questa “magia” (realizzata, credo,  da un DC/DC converter, che “trasforma” la tensione in corrente) è fondamentale per batterie sottodimensionate come le mie, perchè così posso preservarle senza dover rinunciare alle ottime prestazioni dell’ecojumbo. La conversione da tensione a corrente, infatti, fa sì che i “miseri” 42A/2.7kW prelevati dalla batteria diventino 98A quando vanno al motore; immagino che questo significhi che al motore non arrivano più i 66V della batteria, ma qualcosa in meno; ma tanto la tensione massima stabilisce solo qual è la velocità massima del motore… che ovviamente in partenza è minima, quindi in partenza serve poca tensione; serve invece molta corrente, perchè dalla corrente dipende l’accelerazione; si tratta quindi di “ridistribuire” opportunamente tra corrente e tensione la poca potenza disponibile proveniente dalle batterie: con 42A e 66V si hanno 2,8 kW; per avere 2,5 kW a 98A significa che la tensione scende a 28V, cioè che lo scooter può arrivare al massimo a 30-35 km/h. Ma stiamo per l’appunto parlando di “partenza” , “corrente di picco” e “accelerazione di picco”, quindi non è un problema: una volta partito lo scooter, la corrente cala drasticamente, per andare pian piano a risalire man mano che aumenta la velocità.

In teoria, per arrivare a 90 km/h dovrebbero servire oltre 6000W (anche se non ho dati certi su Frontal Area e Cx dello scooter, potrebbero essere 0.8 come 0.7 o 0.9…), nel qual caso con 2.8 kW potrei arrivare al massimo a 70 km/h…. che per l’appunto è la velocità che ho registrato nei test! Un po’ bassina, vorrei arrivare almeno a 80, ma sempre senza stressare le batterie; però secondo quella tabella servono 4.9 kW…. non so se ci riesco, prendendo dalla batteria solo 2.7kW! Lo vedo un po’ impossibile! Mi sa che dovrò per forza aspettare di installare una TERZA batteria per arrivare almeno a 54Ah, che significherebbe avere almeno 60A/3.9 kW continui disponibili. Solo che avevo intenzione di comprarla dopo aver fatto abbastanza km elettrici da equivalere i suoi 800 euro in benzina, ma l’acquisto della centralina nova mi è già costato… 6000 km di benzina! Dovrò farmi un po’ di conti.

Tutti gli altri settaggi, per ora, non li ho toccati; il regen non lo uso perchè sarebbe troppo complicato gestirlo con due batterie in parallelo.

kelly-003-prima kelly-004-prima kelly-005-prima

Schema elettrico caricabatterie li-ion Kingpan (forse)

Posted in batterie, scooter elettrici by jumpjack on 23 Mag 2014

Attenzione! L’articolo è stato rivisto e corretto più volte dopo la prima pubblicazione.

Sono riuscito a trovare lo schema elettrico di un CB che probabilmente è come il mio, almeno in linea di massima, anche se questo è da 36V e il mio da 60:

 

EBike-LiFePO4-Lithium-Ion-36V-8A-battery-charger-with-TL494-circuit

(more…)

Controllare display 5110 mediante scheda Pinguino PIC32 MICRO

Posted in hardware by jumpjack on 16 marzo 2013

Nuovo, piccolo passo verso il completamento del logger di energia per scooter e pannelli fotovoltaici: finalmente il listato dimostrativo per Arduino di utilizzo del display 5110 funziona!
Adesso posso aggiungere finalmente al mio logger la visualizzazione in tempo reale dei dati registrati, in modo da poterlo tarare facilmente.

// LCD_5110_test for Pinguino PIC32 MICRO.
// Sample program to drive 5110 LCD display (Philips PCD8544 based).
// Display works at 3,3V, so no need for voltage regulators on Pinguino PIC32 Micro.
// Directly copied from Arduino site: http://playground.arduino.cc/Code/PCD8544
// Added shift_out procedure (copied from Arduino IDE source).
//
// Jumpjack march 2013

#define PIN_SCE 13 // CON2-03
#define PIN_RESET 12 // CON2-04
#define PIN_DC 11 // CON2-05
#define PIN_SDIN 10 // CON2-06
#define PIN_SCLK 9 // CON2-07
#define PIN_LED 8 // CON2-08 (Backlight, optional)

#define LCD_C LOW
#define LCD_D HIGH

#define LCD_X 84
#define LCD_Y 48

#define LSBFIRST 0
#define MSBFIRST 1

static const byte ASCII[][5] =
{
{0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥
,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ←
,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f →
};

void LcdCharacter(char character)
{
int index=0;
LcdWrite(LCD_D, 0x00);
for ( index = 0; index < 5; index++)
{
LcdWrite(LCD_D, ASCII[character - 0x20][index]);
}
LcdWrite(LCD_D, 0x00);
}

void LcdClear(void)
{
int index=0;
for ( index = 0; index < LCD_X * LCD_Y / 8; index++)
{
LcdWrite(LCD_D, 0x00);
}
}

void LcdInitialise(void)
{
pinMode(PIN_SCE, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_DC, OUTPUT);
pinMode(PIN_SDIN, OUTPUT);
pinMode(PIN_SCLK, OUTPUT);
pinMode(8,OUTPUT); //backlight
digitalWrite(PIN_RESET, LOW);
digitalWrite(PIN_RESET, HIGH);
LcdWrite(LCD_C, 0x21 ); // LCD Extended Commands.
LcdWrite(LCD_C, 0xB1 ); // Set LCD Vop (Contrast).
LcdWrite(LCD_C, 0x04 ); // Set Temp coefficent. //0x04
LcdWrite(LCD_C, 0x14 ); // LCD bias mode 1:48. //0x13
LcdWrite(LCD_C, 0x0C ); // LCD in normal mode.
LcdWrite(LCD_C, 0x20 );
LcdWrite(LCD_C, 0x0C );
}

void LcdString(char *characters)
{
while (*characters)
{
LcdCharacter(*characters++);
}
}

void LcdWrite(byte dc, byte data)
{
digitalWrite(PIN_DC, dc);
digitalWrite(PIN_SCE, LOW);
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
digitalWrite(PIN_SCE, HIGH);
}

void setup(void)
{
LcdInitialise();
LcdClear();
LcdString("Hello World!");
delay(1000);
digitalWrite(8,LOW);
}

void loop(void)
{
toggle(PIN_LED);
delay(1000);
}

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
uint8_t i;

for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));

digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}

Sempre parlando di logger, ho scoperto che esistono semplici contatori di kWh per la corrente di casa, da installare nel quadro elettrico, che fanno lampeggiare un led ogni tot kWh (come il contatore ufficiale ENEL), e che costano 20 euro invece che 200 come quelli che conoscevo io…
Questo significa che costruire un logger Arduino/Pinguino per la corrente dicasa diventa un po’ più semplice, perchè non serve più un sensore di corrente, ma basta una fotoresistenza, più un partitore 1:100 per la tensione (comunque necessario solo per misure molto precise della potenza e/o per misurare anche il cosFi).
Appena mi danno l’indirizzo lo compro e inizio a fare le prove.