Bli medlem i Norsk elbilforening og støtt driften av Elbilforum. Som medlem får du i tillegg startpakke, medlemsfordeler og gode tips om elbil og lading. Du blir med i et fellesskap som jobber for mindre utslipp fra veitrafikken. Medlemskap koster 565 kroner per år. elbil.no/medlemskap

Canbus utlesning av Tesla 70D Cellebank spenning og antall

Startet av sigurdi, onsdag 10. februar 2016, klokken 22:44

« forrige - neste »

ToreS

Sitat fra: sigurdi på søndag 13. mars 2016, klokken 00:21
Holder på å lage en ferdig pakke med due og både tranceiver og beskyttelses krets og eget grafisk grensesnitt for windows, er ikke alle som er vant med å bruke loddebolten og trenger en mer plugg and play løsning.

Og er lurt å endre til 3 tall bak komma siden celle ser veldig balanserte ut med kun to tall bak komma
(og det er de jo også men når du lader til 4.2v så er det mye bedre å vite om de er 4.191 eller 4.199. ;-)


Her er første alfa versjon av trend vinduet.
Man skal kunne velge alt fra batteri temperaturer, turtall, motor temperatur osv og få trendend det på samme graf.
Dermed kan man se at temp på motor går opp, fart går opp, cellespenning går ned osv.

sigurdi

Har du lagt til utlesing av turtall og motor temp. i arduino koden?
Eller gjør du dekoding i labview.

sigurdi

Ja takk begge deler. :-)

Jeg programerer ikke labview men det gjør min bror, når han ikke er opptatt med allt mulig annet.

Ikke helt bestemt om det blir labview etter qt.

Så en så lenge har lagt inn koden i Arduino, så jeg får ut det jeg ønsker for egen brukt.
Jeg har og 100 andre ting å holde på med så før se hva jeg klarer å prioritere.
Er jo morro også og planen er klar på hva det blir til slutt.
Har det meste av kontakter for å lage ferdig kabelsett for tilkobling og salg.
Kombi kabel for ny og gammel diagnose plugg. (Biler produsert etter Sept 2015 har ny plugg og X)
Horten
Model X90D (18.03.17)

ToreS

Har du også lagt til dette i arduino koden?

CAN3, ID 0x0382
● Description: Battery Energy Status
● Length observed: 8 bytes
● Frequency on bus: Approximately 1 Hz
● Example frames: FC 9A EA 69 A9 00 A0 00
○ nominalFullPackEnergy: 76.4 kWh
○ nominalEnergyRemaining: 67.8 kWh
○ expectedEnergyRemaining: 67 kWh
○ idealEnergyRemaining: 67.7 kWh
○ energyBuffer: 4 kWh
○ energyToChargeComplete: 0 kWh
● Value descriptions:
○ nominalFullPackEnergy = (byte0 + ((byte1 & 0x03)<<8)) * 0.1
○ nominalEnergyRemaining = ((byte1>>2) + ((byte2 & 0x0F) * 64)) * 0.1
○ expectedEnergyRemaining = ((byte2>>4) + ((byte3 & 0x3F) * 16)) * 0.1
○ idealEnergyRemaining = ((byte3>>6) + ((byte4 & 0xFF) * 4)) * 0.1
○ energyToChargeComplete = (byte5 + ((byte6 & 0x03)<<8)) * 0.1
○ energyBuffer = ((byte6>>2) + ((byte7 & 0x03) * 64)) * 0.1
○ All formulas result in a value in kWh, resolution 0.1 kWh
○ energyBuffer appears to be the anti­brick buffer. This is NOT a below 0­miles remaining value

Hvis du har det så blir jeg veldig glad hvis du deler koden med meg.
Mvh. Tore

sigurdi

Den er lagt inn og du postet jo nettopp koden, er nesten bare å legge rett inn. ;-)

Full Pack er bare å legge inn direkte mens de andre har jeg ikke hatt tid å verifisere med manuell kalulasjon så der er jeg litt mer usikker om det stemmer på 70D.

Er noen verdier der det ser ut som 70D (ivertfall) har andre kalkulasjoner en 85 og 90.
SOC blir for feil med wk057 formel. ;-(

Så dobbelt sjekk tall osv for å være sikker at det stemmer.

void handle382frame(CAN_FRAME *frame)
//This routine handles CAN interrupts from  Address 0x382 CAN frame
//socUI og SOC Min.   
{     
    nomFullPack=(frame->data.bytes[0]+((frame->data.bytes[1]&0x03)<<8))*0.1;
    nomErem=((frame->data.bytes[1]>>2)+((frame->data.bytes[2]&0x0F)*64))*0.1; 
    expERem=((frame->data.bytes[2])>>4+((frame->data.bytes[3]&0x3F)*16))*0.1;
    idealERem=((frame->data.bytes[3]>>6)+((frame->data.bytes[4]&0xFF)*4))*0.1; 
    etccomp=(frame->data.bytes[5]+((frame->data.bytes[6]&0x3)<<8))*0.1;
    ebuff=((frame->data.bytes[6]>>2)+((frame->data.bytes[7]&0x03)*64))*0.1;

    if(debug)printFrame(frame,0); //If DEBUG variable is 1, print the actual message frame with a time stamp showing the time received.   
}

Horten
Model X90D (18.03.17)

ToreS

Tusen takk!!!
En liten bug:
expERem=((frame->data.bytes[2])>>4+((frame->data.bytes[3]&0x3F)*16))*0.1;
Skal vel være slik:
expERem=((frame->data.bytes[2]>>4)+((frame->data.bytes[3]&0x3F)*16))*0.1;
Hvordan endrer du antall "float" desimaler som blir vist?

sigurdi

Sitat fra: ToreS på torsdag 24. mars 2016, klokken 19:34
Tusen takk!!!
En liten bug:
expERem=((frame->data.bytes[2])>>4+((frame->data.bytes[3]&0x3F)*16))*0.1;
Skal vel være slik:
expERem=((frame->data.bytes[2]>>4)+((frame->data.bytes[3]&0x3F)*16))*0.1;
Hvordan endrer du antall "float" desimaler som blir vist?
Laptoppen med Arduino innstalert har gutungen på ferie og jeg er på jobb med en gammel PC og ser ut som jeg glemte å laste ned software før jeg reiste.
Så er dødfødt å prøve å få det ned ombord her så blir bare svar etter husken og da lurer det seg fort inn både en og to bugger.

Dersom du tenker på visning av batteri data er det bare å endre fra 1.2 til 1.3 i print delen på variablene. Skal stå f1.2 eller 1.2f for å angi at det er floating. 

Dersom du tenker på andre verdier så brukte jeg litt ulikt etter hva og hvor store data jeg skulle ha.

Så unasigned int (positive verdier opp til 4,294,967,295 på due), int (due -2,147,483,648 to 2,147,483,647).

Float har jeg prøvd å ungått siden de ikke er nøyaktige på Arduino over 6 digits, så fungere på små tallrekker.

Eks så er 129.2923 mer en 6 digits og ikke nøyaktig.

double - Mer presis og på Arduino Due, doubles have 8-byte (64 bit) precision.

PS CAN innlesnings delen som ligger i EVTV sitt program er bare klipp og lim fra standard kode og ikke noe serlig å bruke, det ligger endel kode som ikke er i bruk og henviser til et standard script som skal hente ut resten av CAN ID-ene men siden den ikke er satt opp med riktig IDsegment og MASK blir det helt feil. 

Den er begrenset til 7 mailbokser så fordel å sette opp et regneark med HEX og BINÆR koder for de verdiene du ønsker å lage filter på. Dermed kan du lage egne filter med de ID-ene du ønsker.
En mailboks han inneholde mange CAN ID-er og den henter verdien når du spør etter den, derfor det tar et par cykluser før den har hentet inn alle temperaturer.
(Er ikke sikkert BMS sender alle temperaturer på hver cyklus heller, men det er en annen sak)

Slik kan du lage oppsett for å filtrere ut det du ønsker og ikke bruke tid på å lese unødvendige CAN ID-er og verdier.

Et annen alternativ er å kjøre to ulike CAN oppsett med 7 mailbokser og dermed switche mellom den etter hva du ønsker å hente ut.

Et annet alternativ er å bare hente ut CAN ID og Data og ta oversetting i ekstern kode, da har du ID som unik value.

For å få den til å printe CAN-ID ene som HEX i ASCI kan du trykke d i comport info eller bare aktivere det i koden.

Tror ikke jeg får anledning til å se mer på dette før jeg er hjemme igjen om ca 3 uker desverre.
Horten
Model X90D (18.03.17)

© 2024, Norsk elbilforening   |   Personvern, vilkår og informasjonskapsler (cookies)   |   Organisasjonsnummer: 982 352 428 MVA