Jumping Jack Flash weblog

Hacking Icaro – il motor controller o centralina

Posted in minicar elettriche by jumpjack on 12 giugno 2019

Premessa

La mia Greengo/Zhidou/Xindayang Icaro modello A1 monta un motor controller della Kelly di tipo KHB72701C, alimentata dai 12V della batteria di servizio e dai 72V della batteria di trazione, che regge 350A continui e 700A di picco (max un minuto).

Considerando un’alimentazione di 72V nominali (che arriva anche a 80V reali a batteria piena), queste correnti corrispondono a 25-28kW continui e 50-56 kW di picco, a fronte dei 6 kW continui assorbiti dal motore della A1 (8 kW di picco nominalmente, che io ho portato a 12 kW riprogrammando il controller).

 

La comunicazione seriale

Oggi finalmente sono riuscito ad avere dalla Kelly un’informazione davvero preziosa: il protocollo di comunicazione tramite porta seriale RS232!

Normalmente usavo la porta seriale per riprogrammare i vari parametri (corrente massima, velocità massima, frenata rigenerativa), tramite l’apposito SW gratuito della Kelly, ma con queste nuove informazioni diventa ora anche possibile leggere una bella quantità di dati:

  1. current physical switch input status
  2. the current Hall sensor “A” signal status
  3. the current Hall sensor “B” signal status
  4. the current Hall sensor “C” signal status
  5. Copying flash data to ram before flash data reading operation
  6. controller’s model no
  7. controller’s SW version (BCD format)
  8. controller’s Throttle low-end dead zone
  9. controller’s Throttle high-end dead zone
  10. controller’s Brake low-end dead zone
  11. controller’s Brake high-end dead zone

E poi i livelli di questi valori analogici:

Gruppo 1 (comando ETS_A2D_BATCH_READ)

0. Brake (posizione pedale freno)

  1. TPS (posizione pedale acceleratore)
  2. Motor temperature
  3. Control power
  4. Vs (tensione di riferimento di 5V dei sensori di hall)
  5. B+ (tensione batteria di trazione)
  6. Controller’s temperature
  7. Ia
  8. Ib
  9. Ic
  10. Va
  11. Vb
  12. Vc
  13. H_Temperature
  14. V+ (tensione alimentazione motor controller – 12V nominali)
  15. L_Temperature

 

Gruppo 2 (Comando ETS_MONITOR):

0. n/a

  1. n/a
  2. Controller’s temperature in gradi Celsius
  3. B+ (tensione batteria di trazione)
  4. TPSx (?)
  5. BRAKEx (?)
  6. n/a
  7. I (phase current)
  8. zero current (?)

E infine:

  • 9. MSB of controller’s error state
  • 10. LSB of controller’s error state
  • 11. MSB of mechanical speed in RPM
  • 12. LSB of mechanical speed in RPM

La numerazione è quella della stringa di risposta del controller.

I codici di errore

La codifica dei codici di errore è piuttosto complicata, e si basa su questa tabella:

data[9]M 7 6 5 4 3 2 1 0 data[9]L
0x44 0x43 0x42 0x41 0x34 0x33 0x32 0x31
data[10]M 7 6 5 4 3 2 1 0 data[10]L
0x24 0x23 0x22 0x21 0x14 0x13 0x12 0x11

La sua interpretazione è parecchio complicata, ho provato a semplificarla, innanzitutto affiancando le due sotto-tabelle relative a data[9] e data[10], che sono MSB e LSB della word, risultando così questa tabella:

Le istruzioni dicono “if(data[9] << 8) | data[10]=0x4008,The corresponding error code is 0x43and 0x14.”.

Cioè, “se il numero che si ottiene affiancando data[9] e data[10] come nella tabella qui sopra è uguale a 0x4008, vuol dire che il codice di errore è ‘0x43 e 0x14′

Questo perchè 0x4008 si può scomporre in 4 – 0 – 0 – 8, che in binario diventa 0100 – 0000 – 0000 – 1000, e mettendo questa fila di 1 e 0 sotto la tabella, si ottiene che bisogna considerare le sole caselle in coincidenza degli 1, ottenendo quindi appunto 0x43 e 0x14.

Al momento però non dispongo ancora di una tabella che dica cosa significhino questi numeri, vedrò se riesco a farmela dare.

Intanto però ecco un’altra tabella, che riassume tutti i comandi elencati nella nota tecnica che mi hanno mandato:

 

La tabella sopra descrive il formato della stringa di comando da inviare sulla seriale, quella sotto la risposta ricevuta.

A me pare che le caselle rosse siano sbagliate, perchè dicono che il comando dovrebbe essere lungo un byte ma io ne vedo 2, quindi dovrò chiedere chiarimenti… anche se al momento lo stato dei sensori di hall è decisamente la cosa che mi interessa di meno.

Le ultime due righe della tabella sotto, anche se si leggono poco, contengono i dati descritti estesamente a inizio articolo.

Adesso devo “solo” o trovare un programma per leggere/scrivere dati grezzi sulla seriale,… o scrivermelo.

La documentazione

Cercando su google il titolo del documento che la Kelly mi ha mandato ho trovato due link utili:

C’è poi anche la risposta a un mio vecchio post su Endlesssphere, che suggerisce che le Kelly aderiscano allo standard SAE J1939-21 , che permetterebbe di leggere questi dati:

[*]The running direction
[*]The high and low speed
[*]Mode selection
[*]Speed low byte (motor rpm)
[*]Speed high byte (motor rpm)
[*]Low power consumption mode
[*]Subtotal mileage. low byte
[*]Subtotal mileage. high byte
[*]Fault code
[*]DC voltage- low byte
[*]DC voltage – high byte
[*]Motor current- low byte
[*]Motor current – high byte

Questo potrebbe essere un dispositivo utile per collegarsi al CANBUS, tramite PC o tramite Arduino:

https://www.cooking-hacks.com/documentation/tutorials/can-bus-module-shield-tutorial-for-arduino-raspberry-pi-intel-galileo

 

Hacking Icaro: centralina GSM/GPS – puntata 1 (3/3/2019)

Posted in hacking, hardware, minicar elettriche by jumpjack on 10 marzo 2019

L’anno scorso ho provato a smontare ed esaminare la centralina GPS/GSM che rende(va) la Icaro (o meglio i.car.0) una “interconnected car”, inviando a una centrale di monitoraggio remoto decine e decine di telemetrie, come descritto in questo thread:

https://www.forumelettrico.it/forum/centralina-gsm-gps-t2437.html

Alcune foto della centralina.

Qui si vede il contenitore dell SIM card e un connettore a pettine a 12 pin:

Questo è il modulo GPS, un “GA71 V4.0 SiRF star III” a 20 canali:

 

Alcune marcature utili per l’identificazione:

Visione d’insieme; in alto la batteria-tampone ricaricabile al NiMH da 3.6V:

Questi pin, apparentemente interessanti… si sono rivelati completamente muti e inutili:

 

 

Quelli che invece si sono rivelati molto interessanti sono quelli dello strip maschio a 12 pin: collegandolo a un adattatore TTL/seriale per il PC, sono riuscito a dare una sniffata, scoprendo questo:

Per il momento non sono riuscito ad agganciare la rete, nemmeno togliendo la SIM originale e mettendo la mia, ma farò ovviamente altre prove.

Probabilmente, infatti, solo una volta che la scheda riesce ad agganciare la rete fa un tentativo di agganciarsi ai server remoti che un tempo leggevano queste telemetrie; bisogna vedere poi:

  • se la scheda aspetta una risposta dal server prima di inviare dati, o se li invia “a fondo perduto”
  • se è possibile riprogrammare a mano l’indirizzo a cui la scheda tenta di collegarsi
  • varie ed eventuali

Comandi AT:

Diario elettrico Greengo Icaro – 10 Febbraio 2019: dal meccanico

Posted in minicar elettriche by jumpjack on 10 febbraio 2019

Mi sono accorto adesso che nel blog ho registrato la data di ritiro dell’auto ma non la data di consegna al meccanico… Non mi sono segnato la data precisa, comunque era di sicuro tra l’1 e il 10 febbraio.

La riconsegna è avvenuta il 30 maggio, dopo sostituzione di BMS e batteria da 12V (1.300,00 euro in tutto)

Inoltre non ho nemmeno scritto chi è che fa assistenza alle Icaro a Roma… e oggi che volevo portarla dall’ “altro tizio” non riuscivo a ripescare l’indirizzo…

Alla fine l’ho ritrovato:

Moreschini Motors –  Via di Settebagni, 302, 00139 La Cinquina – Bufalotta RM – 06 8713 4344

Qui fanno solo interventi di tipo meccanico, non hanno SW e HW di diagnostica. Al massimo possono “ricondizionare la batteria”: dicono che la fanno scaricare e ricaricare lentamente, in 20 giorni, in modo da equilibrarla.

 

L’altro punto di assistenza è in centro:

Energeko – Via Gregorio VII, 163 (zona San Pietro)

Qui hanno anche il SW e l’HW per fare la diagnostica delle batterie cella per cella.

 

Fuori Roma per l’assistenza si può andare a Livorno, Modena e a  Milano , ma non ho indirizzi precisi.

A Livorno c’è proprio la casa madre C.S.  Group, proprietaria del marchio Sharen’go e dell’ormai defunto marchio Greengo, ma non so dove sia l’officina.

A Modena c’è la GLCar:

G.L CAR di Gianferrari & C. snc – Via Felice Cavallotti, 29 – Formigine (MO) 41043

Tel. 059 573858 – Fax 059 5772196

 

Per Milano non so niente di preciso.

 

Diario elettrico GreenGo Icaro – La manopola del volume

Posted in Diario elettrico GreenGo Icaro, hacking, hardware, minicar elettriche, Uncategorized by jumpjack on 26 gennaio 2019

Primo prototipo: gennaio 2019

Ho finalmente applicato una nuova modifica per migliorare la sicurezza dell’auto: lo spostamento dei comandi dell’autoradio.

In origine la manopola di accensione e del volume si trova tra i pulsanti del cambio; il che vuol dire che si rischia di mettere in folle mentre si guida, tentando di alzare il volume… Un’assurdità.

Così ho comprato un encoder per pochi euro, una manopola per ancora meno euro, ci ho attaccato 4 fili et voila. 🙂

In questa foto apparentemente non si vede niente… ma solo perchè la modifica è molto pulita: semplicemente, al posto della terza manopola, che nel mio modello A1 è finta perchè non è presente l’aria condizionata, ho messo una manopola vera, che dietro è collegata a un encoder con interruttore, avvitato a una tavoletta di compensato che a sua volta è avvitata al cruscotto:

Poi basta allungare i fili che normalmente vanno alla manopola originale, e farli arrivare invece a questa…

Spiegazione morsetti dell’encoder: http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/keyes-ky-040-arduino-rotary-encoder-user-manual/

Fin qui si tratta del primo prototipo, realizzato a gennaio; funzionava abbastanza  bene, ma con due difetti minori:

  1. La manopola era un po’ “ballerina”, perchè il perno del decoder era troppo corto per spuntare dalla plastica, quindi ho dovuto fargli una prolunga stampata in 3d, che non è molto precisa, quindi la manopola ha un po’ di gioco.
  2. Per qualche strano motivo, in certe situazioni imprecisate quando alzo il volume, si sente un “bip” e il tablet cambia schermata! Altre volte la radio inizia ad aumentare di volume in modo incontrollabile senza che io tocchi niente.

Il secondo problema mi ha costretto ad aspettare “tempi migliori” prima di pubblicare ufficialmente questo post, per aver tempo di individuare il problema. Poi l’auto è stata in officina per 3 mesi e mezzo… e tra una cosa e l’altra siamo arrivati a giugno.

Versione 2: giugno 2019

In base a quanto descritto nel punto due qui sopra, ho pensato che ci fosse un problema di falso contatto, che in termini elettronici si traduce in resistenza spuria. Ma in teoria un encoder non dovrebbe contenere nessuna resistenza, essendo composto semplicemente di 3 interruttori: due che servono a determinare il verso di rotazione, e un terzo è collegato alla pressione dell’alberino rotante. Comunque ho deciso di fare alcune prove collegando resistenze di valori diversi ai PIN a cui è collegato l’encoder, iniziando dal quello collegato all’interruttore a pressione, e in effetti ho avuto conferma dei miei sospetti. Ecco infatti la lista degli effetti che ho rilevato sul tablet collegando ai due PIN diversi valori di resistenza; tutti i valori sono espressi in kOhm:

  1. 0-0.3 (0-300 ohm): on/off
  2. 0.5-0.9 (500-900 ohm): Home page
  3. 1.9-2.0: Radio giù
  4. 2.0-3.9: Radio su
  5. 3.5-4.5: Cambio banda AM/FM
  6. 4.8-6.5: modalità (musica, film, aux)
  7. 6.8-8.4:  mute
  8. 8.4-17: funzioni non chiare
  9. 17-20: volume su
  10. 22-28: volume giù
  11. 40-70: Navigatore
  12. 100: Telefono

Ovviamente non si tratta di valori precisi ma di intervalli di valori, all’interno dei quali deve cadere la resistenza di valore standard che si utilizza. I valori sono i seguenti:

In base a questa tabella, i valori da usare per attivare le funzioni sopra descritte sono:

  1. On/off: nessuna resistenza
  2. Home page: 560/680/820 ohm
  3. Radio giù: 1.8 K
  4. Radio su: 2.2 K
  5. Cambio banda AM/FM: 3.9 K
  6. Modalità (musica, film, aux): 5.6 K
  7. Mute: 8.2 K
  8. 8.4-17: funzioni non chiare
  9. Volume su: 15 K
  10. Volume giù: 22/27 K
  11. Navigatore: 47/56/68 K
  12. Telefono: 100 K

Sono poi andato a esaminare più da vicino l’encoder e mi sono accorto di una grossa svista: non si tratta di un encoder semplice; è invece collegato ad alcune resistenze di polarizzazione da 1 kOhm:

Quindi erano queste che probabilmente facevano scattare in certe posizioni della manopola le funzioni del tablet; così ho rimosso del tutto l’encoder dal suo PCB e l’ho collegato direttamente al tablet. Per predisporre il lavoro a modifiche successive ho collegato, piuttosto che dei fili volanti, una serie di morsetti; al tablet ho collegato un morsetto femmina a 4 pin, in modo che sia più facile fare le prove successive con resistenze provvisorie volanti; ho poi collegato un morsetto maschio all’encoder, dopodichè ho praticato dei fori negli spazi vuoti della pulsantiera degli specchietti, per implementare le nuove funzioni:

 

 

Come connettori ho usato quelli che ho imparato a conoscere sull’Ecojumbo: impermeabili e a prova di  disconnessione, grazie  a un  sistema  di  aggancio  a molla:

Ho collocato i due nuovi pulsanti in una zona libera della pulsantiera degli specchietti:


I due pulsanti rossi servono ad alzare ed abbassare la frequenza di sintonia; il pulsante quadrato nero al momento, giusto per prova, attiva il navigatore, che però non è molto utile se lo schermo non funziona perchè non posso impostare la destinazione; vorrei invece fare in modo che attivasse direttamente la telecamera di retromarcia che ho installato e che normalmente richiede diversi clicchi sul touch screen per essere attivata. Se invece potessi attivarla al volo con un pulsante sarebbe molto più comodo.

La manopola questa volta l’ho fissata in modo diverso e più stabile: usando un piastrino di plexglass abbastanza sottile da entrare nell’incavo della plastica, rendendo così non necessaria la prolunga stampata in 3d; per tenerlo in posizione ho aggiunto due viti. Il lavoro resta comunque abbastanza pulito:


“Pulito” finchè non metto i fili; una volta saldati al decoder, la faccenda si fa più complessa…

 

Sul tablet c’è anche una schermata che permetterebbe di assegnare delle funzioni ai pulsanti al volante… anche se di pulsanti al volante nella Icaro non ce ne sono. Comunque la schermata del tablet è questa:

Come si vede, molte delle funzioni che ho scoperto sono proprio elencate in questa schermata; purtroppo aggiungere dei pulsanti al volante non è possibile perché l’unico filo che arriva dentro al volante è quello del clacson, e per portare altri fili l’unico modo sarebbe usare un particolare interruttore a strisciamento che permette al volante di girare senza interrompere i contatti; c’è già un meccanismo di questo tipo sulla Icaro, ma soltanto uno dei 5 pin è popolato, e aggiungere nuovi fili sarebbe un lavorone perché dovrei smontare lo sterzo e quindi non se ne parla. Però Se riesco effettivamente a trovare altre funzioni attivabili senza touchscreen potrei comunque realizzare un tastierino esterno per attivarle.

 

Di seguito  le altre foto che ho fatto lavorando al progetto:

 

Diario elettrico GreenGo Icaro: più velocità

Posted in minicar elettriche by jumpjack on 1 aprile 2018

La mia Icaro “A1” 6kW è venduta per 65 km/h, ne segna 60 sul cruscotto e ne fa 55 di GPS.
Sto cercando di capire se questa velocità può essere aumentata; per il momento ho scoperto che il limite non dipende dalla centralina Kelly KHB72701, perchè all’acquisto era già tarata su massima velocità del motore e massima corrente dalla batteria e al motore.

Adesso sto cercando di fare due cose:
– trovare un modo per conoscere gli RPM del motore in tempo reale
– capire se anche il BMS impone limiti su tensione e/o corrente


Un po’ di teoria

La velocità di un motore elettrico è proporzionale alla tensione ad esso applicata, in base a una costante Kv che dipende da come è costruito il motore stesso, e che quindi non può essere variata. Quindi la velocità massima di un motore è:
V = Kt * G
Con G = Giri al minuto, epsressi in RPM

Un motore funziona sempre in modo duale: gira se gli si invia una corrente, produce una corrente se fatto girare a mano. Purtroppo, questa seconda cosa la fa sempre… anche mentre riceve corrente che lo fa girare! Mentre gira, infatti, produce una Forza Contro Elettro Motrice (f.c.e.m), cioè una tensione, che si oppone alla tensione che gli viene fornita; quando la f.c.e.m., che è =0 a motore fermo, diventa uguale alla V fornita, il motore smette di accelerare, cioè raggiunge la sua velocità massima intrinseca.

Questo valore viene indicato sul datasheet come “rated speed” o “maximum speed” (in realtà devo ancora capire bene quale delle due…).

Ora, c’è questo problema:

Sono dati che ho raccolto faticosamente in giro per siti cinesi.
La penultima riga è quella che ci interessa: si vede che i motori usati nelle varie versioni di Icaro/Zhidou si sono evoluti negli anni, passando dai primissimi installati sulla versione al piombo, da 3100/3600 RPM, ai più recenti montati sulla ZD D2 da 15 kW, con 4200/5000 rpm.
Nella riga in alto, “Maximum speed”, si vede come anche la velocità massima è progredita di pari passo nei vari modelli; riporto nella lista qui sotto i km/h, gli rpm e il rapporto kmh/rpm:

ZD311D (piombo): 45/3100/0.014
ZD311B (piombo): 50/3000/0.017
ZD311A/Icaro_A1: 60/3000/0.020
E20/H1: 80/4200/0.019
ZD D1/D2/D2S: 85/4200/0.020

Questo rapporto potrebbe forse coincidere, o essere proporzionale, con il “rapporto al ponte” o “rapporto di trasmissione”, cioè il rapporto dell’unica “marcia” della icaro; nei primi tre modelli è andato aumentando (probabilmente stavano ancora “facendo esperimenti”), poi si è stabilizzato su 0.020 (probabilmente la E20/H1 era limitata elettronicamente per non eccedere gli 80 km/h di legge, decaduti e passati a 90 nel 2016 con la nuova normativa).

Ecco invece una tabella che elenca i motori di quello che potrebbe essere il fornitore: anche se non è possibile leggere etichette o datasheet sul sito, questa immagine li tradisce perchè è il VMS montato sulla mia ICaro!

In quella tabella, gli rpm nominali e massimi dei motori sono:

  • 4/8kW: 3100/3600
  • 5/10kW: 3000/3500
  • 6/12kW: 3000/3600
    9/18kW: 5000/5700
  • 15/35kW: 5000/7000 (motore da 96V invece che 72)
  • 15/30kW: 5200/7200 (motore da 114V invece che 72)

Quelli delle varie icaro sono:

  • ZD311D – 4/8kW: 3100/3600
  • Z301B – 5/10kW: 3000/3500
  • ZD311A – 6/12kW: 3000/3600
  • E20/H1/D1 – 9/18kW: 5000/5700
  • D2/D2S – 15/30kW: 4200/5000 (batteria da 144V invece che 72)

Le motorizzazioni a 72V sono cioè esattamente identiche nella mia tabella e in quella del fornitore, che quindi sembrerebbe proprio essere confermato.


Osservazioni pratiche

Durante i miei viaggi ho notato una cosa: in pianura il tachimetro non va mai di neanche mezzo mm oltre i 60 km/h, ma in discese ripide, con l’acceleratore a tavoletta, sono arrivato anche a 75. Solo che, appunto con l’acceleratore a tavoletta… si innesca la rigenerazione in frenata! E la tensione di batteria sale fino a 80V, contro i 74-75 in pianura. Questo sembra voler dire che a 70-75 km/h la velocità del motore supera quella che la tensione di batteria può indurgli, quindi la f.c.e.m. supera la V, e quindi il comportamento da generatore prevale su quello da motore.


Conclusioni ipotetiche

Quanto sopra potrebbe significare che attualmente la mia Icaro è configurata non solo elettronicamente, ma anche meccanicamente per non poter fisicamente andare più veloce.

Ci sarebbero quindi tre modi per andare più veloce:

  1. Aumentare la tensione che arriva al motore
  2. Cambiare il rapporto al ponte
  3. Cambiare motore
  • Il primo modo è purtroppo impensabile, perchè tutta l’elettronica di bordo è tarata su un massimo di 90V, che lasciano solo 3,6 V di margine rispetto agli 86,4V che la batteria raggiunge probabilmente durante la ricarica (3.65V/cella), per poi scendere a 80 quando la batteria è bilanciata e pronta; c’è una remota speranza che il BMS forzi la batteria a non arrivare nemmeno a 80V, perchè leggo questo valore solo durante la frenata rigenerativa, però non sono ancora riuscito ad accedere al BMS.
  • Il secondo modo sarebbe fattibile: la GLCar di Modena fornisce un kit di modifica da inserire nel differenziale, che cambia il rapporto al ponte permettendo di raggiungere i 75 km/h di GPS; costa 550E + IVA
  • Il terzo modo non è ancora chiaro se sia fattibile: pare che lo sia sicuramente sui modelli “A1+”, mentre “forse sì forse no” sui modelli “A1”, che non tollererebbero l’albero più lungo del motore da 9kW (mentre sulle A1+ avrebbero già in fabbrica adattato il differenziale per ospitare il nuovo albero motore). Se fosse fattibile, diventerebbe possibile portare la velocità agli 85 km/h della D1, ancora compatibili con l’omologazione L7e della Icaro (max 90 km/h). Però il numero del motore è riportato sulla carta di circolazione. E poi temo che il motore da 9 kW costi più di 1000 euro, a cui andrebbero aggiunti differenziale, manodopera e spedizione a Modena…. Immagino si arrivi a 2000 euro e rotti… che corrisponderebbero a 20.000 km percorsi in elettrico (2000 euro di benzina in meno), contro i 5500 necessari per il kit del differenziale, 5500 km che potrei  fare in meno di un anno. 🙂  Vedremo…

RPM da recuperare

C’è un’ultima faccenda: la “rated speed” e la “maximum speed”: devo capire se a 60 km/h il motore gira a “rated speed” o a “maximum speed”, perchè se  fosse il primo caso, forse con la fantomatica funzione “boost”, attivabile sulla centralina aggiungendo un pulsante, potrei recuperare quei 500 RPM che “mi mancano”. Per capirlo devo riuscire ad accedere al computer di bordo (ECU o VMS che sia), forse tramite OBD, forse tramite Arduino+CANbus shield, chissà.