Forum Replies Created

Viewing 20 posts - 1 through 20 (of 39 total)
  • Author
    Posts
  • #16424
    ArturasL
    Participant

    Parduotas.

    #8743
    ArturasL
    Participant
    #8467
    ArturasL
    Participant

    Turiu dar viena klausima. Ar galima BMS jungti nuosekliai? Ta prasme jei turiu 3 vienetus po 4S. Sujungus nuosekliai gautusi tarsi 12s?

    #8466
    ArturasL
    Participant

    Aciu, Sarunai,

    #8464
    ArturasL
    Participant

    Ok. Aciu. :)
    Renkuosi is dvieju bms gal dar galetm patarti kuris is ju butu tinkamesnis. Baterijos lifepo4 3.6v

    http://www.ebay.com/itm/261387892080?ssPageName=STRK:MESELX:IT&_trksid=p3984.m1558.l2649#ht_4023wt_1360

    http://www.ebay.com/itm/36V-30A-LiFePo4-Battery-BMS-LFP-PCM-SMT-System-12S-12x-3-2V-eBike-Battery-12x-3V-/321048904700?pt=US_Rechargeable_Batteries&hash=item4ac00183fc

    Ar sie bms veiktu su regeneracija, nes buvau rades tokiu kur rase, kad regeneracija sugadintu ju bms?

    #8462
    ArturasL
    Participant

    O del pako jungimo 12s6p prie bms, tai jungemos 6 celes lygegreciai ir laikoma kaip viena cele? Ar kiekviena cele (72 vienetus) turi savo ackira jungima?

    #8460
    ArturasL
    Participant

    O kaip kinai daro… Jie buna parduoda pakus is 18650 celiu. Pvz.: 12s6p LiFepo4. Ten jokio bms nera, tik pridedas pakroviklis ant kurio parasyta 42.5v.

    Ar su tokiom baterijom geriau elgtis taip: sujunti lygegreciai 6 celes ir gauti 12 tokiu bloku. Ir juos tada prijungent prie BMS 12s?

    #8454
    ArturasL
    Participant

    Sveiki,

    Gal galetumet paaiskinti kap vyksta pako krovimas? Tarkim jeigu nusiperku maitbloki Mean Well. Nustatau reikiama itampa. Prijungiu prie bateriju pako. Kiek suprantu celes pasiims kiek joms reikes, kol itampa pako netaps lygi maitblokio. Po to celes tiesiog nustos siurbti srove ar visgi reikalinga dar kazkokia shema kuri atjungtu maitbloki?

    #5959
    ArturasL
    Participant

    Atsirado siek tiek laisvo laiko. Prisedau prie holo daviklio. Aciu Jonai uz formules, jos padejo suprasti daviklio esme. Zodziu prie 5A ir 5v maitynimo, mikrovaldiklis izduoda mazdaug max reiksme 701, o i priesinga puse max 323. Tai reiskia, kad 5 amperams atvaizduoti i viena puse mikrovaldiklis turi 701 – 512 = 189 dalis. I kita 323 – 512 = -189. 

    Parsiau funkcija kuri matuoja srove atsizvelgiant i mikrovaldiklio itampa. Isbandziau, veikia mazdaug su 0.1v paklaida (dar nesukalibruota visa sistema). Stai kodas: 

     


     //lcd start
    #include "U8glib.h"
    U8GLIB_64128N u8g(13, 11, 10, 9, 8); //SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
    //lcd end
     //hall config start
    int hallSensorPin = 5;
    int hallCountAverageQuantity = 255;
    int hallMaxValueMAmps = 5000;
    //float hallVccMV = 5000;
    float hallVccMV;
    float hallSensitivityMV = 185;
    int hallSensorCalibration = 2;
    //hall config end
     //hall variables start
    int hallSensorValue;
    int hallSensorValuesAverage;
    long hallTotal;
    //hall variables end
     //
    long readVcc() {
    long result;
    // Read 1.1V reference against AVcc
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
    delay(2); // Wait for Vref to settle
    ADCSRA |= _BV(ADSC); // Convert
    while (bit_is_set(ADCSRA,ADSC));
    result = ADCL;
    result |= ADCH<<8;
    result = 1126400L / result; // Back-calculate AVcc in mV
    return result;
    }
    //
     //hall function start
    float hallValueAmps() {
      hallVccMV = readVcc();
    float hallValueInAmps = 0.000;
      //hall sensor values average start
    hallTotal = 0;
    for(int i = 0; i <= hallCountAverageQuantity; i++) {
    hallSensorValue = analogRead(hallSensorPin);
    hallTotal = hallTotal + hallSensorValue;
    }
    hallSensorValuesAverage = hallTotal / hallCountAverageQuantity + hallSensorCalibration;
    //hall sensor values average end
      hallValueInAmps = (hallSensorValuesAverage - 512) * (hallMaxValueMAmps / (1024/hallVccMV * hallMaxValueMAmps/1000 * hallSensitivityMV)) / 1000;
      return hallValueInAmps;
    }
    //hall function end
     void setup(void) {
     }
     void loop(void) {
      //lcd start
    u8g.firstPage();
    do {
      u8g.setFont(u8g_font_5x8);
    u8g.setPrintPos(30, 30);
    u8g.print(hallValueAmps(), 3);
      } while( u8g.nextPage() );
    //lcd end
      //delay(1000);
     }

     

    Turiu klausima. Jei as matuoju mikrovaldiklio itampa Saruno rekomenduotu budu ar as galiu tuo paciu mikrovaldukliu papildomai matuoti itampa su itampos dalikliu? Nes siuo atveju VREF kintantis.

    #5955
    ArturasL
    Participant

    Pajungiau 5A sensoriu ACS712. Gauti duomenys plaukioja mazdaug 507 iki 515. Parasiau funkcija, kuri paskaiciuotu vidurki is 256 reiksmiu. Duomenys gavosi mazdaug stabilus 512-513.  

    Pajungiau 1.5A apkrova duomenys pasislinko mazdaug iki 450. Pakeiciau matavimo galus vietomis. Reiksme gavau mazdaug 550. 

    Kazkaip nesinori aklai kopijuoti formules. Norisi suprasti ka skaiciuoju. Paemus tokia situacikja kaip dabar, jei daviklio reiksme butu 1023 arba 0, tai tikrai ne 5 amperai. Kazkas netaip arba as kazko dar nesuprantu. Ir ka reiskia dokumentacijoje daviklio jautrumas 185mV/A?

    #5949
    ArturasL
    Participant

    Agniau, del Allegro sensoriaus, kiek suprantu, reiksme priklauso ir nuo sensoriui paduotos itampos. Gal tau pades si nuoroda: http://forum.arduino.cc/index.php?PHPSESSID=q7l4uloqsj4pjb0q1o188bf8o6&topic=133144.0  

     

    Ryt pabandysiu parasyti funkcija daviklio parodymu konvertavimui i amperus. Kazkur turiu 5A sensoriu, bus proga paeksperimentuoti.  

     

    Pries Jono paaiskinima vis galvojau kaip tas sensorius gali isduoti minusi reiksme, kai lyg mikrovaldiklio analogine dalis isduota nuo 0 iki 1024. Dabar aisku :)  

     

    Galvoju kuri man pirkti – Allegro sensoriu ar ACS758LCB-050B-PFF-T ar ACS756KCA-050B-PFF-T. Kiek ziuriu dokumentacija, niekaip nesuprantu kuo jie skiriasi, iskirus tik, kad ACS758 platesnis temperaturos veikimo diapazonas.  

     

    u8g.print kaip suklijuoti skirtingus kintamuosius isprendziau taip:

     

    String countToString = String(count);
    u8g.print(countToString + "km");

     

    #5944
    ArturasL
    Participant

    Agniau, paziurejau schema kur pasarinai. Ten kiek supratau matuoja itampa su itampos dalikliu viso pako. Dar demesys krito i holo sensoriu. Kiek supratau is jo duomenys bus gaunami analoginiu budu :) Tai reiktu dabar tiksliai nustatyti kur ir kokie pas tave bus sensoriai ir kokiais duomenimis galima bus operuoti. 

    Nusiziurejau savo dviraciui holo sensoriu: http://www.ebay.com/itm/50A-100A-150A-200A-Bi-Uni-AC-DC-Current-Sensor-Module-arduino-compatible-/111040360152?pt=LH_DefaultDomain_0&var=&hash=item19da856ed8 

    Tik nezinau koki geriau butu imti Bi-Directional ar Uni-Directional ir ar apskritai vertas demesio sis sensorius? 

    Ir dar plokstes stilius kazkoks idomus. Gal (kas zinos ar) yra kazkokia programa ar standartai tokio stiliaus plokstei pasipaisyti?

    #5942
    ArturasL
    Participant

    Visai nieko tas didelis sriftas atrodo. Man patinka :)  

    Dabar brandinu ideja kaip pamatuoti kiekvienos celes itampa ir atvaizduoti ja ekranelyje. Netrukus bandysiu braizytis schema… Reiks dar forumieciu pagalbos…

    #5940
    ArturasL
    Participant

    Patobulinau koda, plius dadejau animacijos. Video idet negaliu, nes pas mane labai letas internetas. Praktiskai beliko tik sensoriu apdorotus duomenis sudeti ir gatavas matuoklis. :) Gal kartais kas zinote, kaip U8GLIB atvaizduoti teksta plius kintamojo duomenis. Kai darau u8g.print(number + “km”); hieroglifus meto. 

    Naujas kodas:  

     


     //lcd
    #include "U8glib.h"
    U8GLIB_64128N u8g(13, 11, 10, 9, 8); //SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
    //lcd
     int count;
    int leftColumnLevel = 0;
    int leftCenterNumber = 0;
    int rightColumnLevel = 0;
     //lcdLeftColumn function start
    void lcdLeftColumn(void) {
      leftColumnLevel = map(count, 0, 255, 50, 0);
      //
    u8g.drawBox(0,5,11,54);
    if(leftColumnLevel != 0){
    u8g.setColorIndex(0);
    //min 1, max 50
    u8g.drawBox(2,7,7,leftColumnLevel);
    u8g.setColorIndex(1);
    }
    //
      u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(13, 12);
    u8g.print("F");
      //
    u8g.setFont(u8g_font_5x8);
    u8g.setPrintPos(13, 35);
    u8g.print(count);
    //
      u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(13, 59);
    u8g.print("E");
    }
    //lcdLeftColumn function end
    //lcdCenterColumn function start
    void lcdCenterColumn(void) {
      leftCenterNumber = constrain(count, 0, 99);
      u8g.setFont(u8g_font_fub35n);
    if(leftCenterNumber < 10){
    u8g.setPrintPos(51, 50);
    }
    else{
    u8g.setPrintPos(38, 50);
    }
      u8g.print(leftCenterNumber);
    }
    //lcdCenterColumn function end
    //lcdRightColumn function start
    void lcdRightColumn(void) {
    //
    u8g.drawFrame(117,5,11,54);
    u8g.drawFrame(118,6,9,52);
      rightColumnLevel = map(count, 0, 255, 7, 55);
    //min 7 max 55
    u8g.drawBox(119,rightColumnLevel,7,2);
    //
      u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(110, 12);
    u8g.print("D");
      u8g.setFont(u8g_font_5x8);
    u8g.setPrintPos(101, 35);
    u8g.print(count);
      u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(110, 59);
    u8g.print("R");
    }
    //lcdRightColumn function end
     void setup(void) {
    count = 0;
    }
     void loop(void) {
      //lcd
    u8g.firstPage();
    do {
      //lcdLeftColumn start
    lcdLeftColumn();
    //lcdLeftColumn end
    //lcdCenterColumn start
    lcdCenterColumn();
    //lcdCenterColumn end
    //lcdRightColumn start
    lcdRightColumn();
    //lcdRightColumn end
      } while( u8g.nextPage() );
    //lcd
      if(count == 0){
    delay(1000);
    }
    if(count == 255){
    count = 0;
    delay(1000);
    }
    else{
    count = count + 1;
    }
      delay(100);
     }

     

     

    Atvaizdavimo greiti, milesekundemis, galima keisti su delay(100) (kodo gale). Ji istrinus greitis bus maksimalus.

    #5938
    ArturasL
    Participant

    Na, nezinau ar gera mintis kiekviena karta duomenis saugoti eeprom. Ten ribotas irasymu skaicius. Likutine baterijos WH, manau, galima butu paskaiciuoti iskarto. Is bendros baterijos WH minus kas kiekviena sekunde suvartojamo WH (tai yra baterijos itampa * holo daviklis amperais / 3600). O likusi atstuma kaip skaiciuoti dar reik pagalvoti :) Nors gal cia kazkur nusigrybavau… :)

    #5936
    ArturasL
    Participant

    Agniau, as irgi tik mokausi :) Butu puiku, jei kas gerai mokantis programuoti, paziurejes mano koda, pasakytu ka galima butu geriau padaryti :) Pas mane nera tokio stabdymo su lcd. Pajungtas jis per i2c. Stai kodas:  

     

    //lcd
    #include "U8glib.h"
    U8GLIB_64128N u8g(13, 11, 10, 9, 8); //SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
    //lcd 
    int count; 
    //lcdLeftColumn function start
    void lcdLeftColumn(void) {
    //
    u8g.drawBox(0,5,11,54);
    u8g.setColorIndex(0);
    u8g.drawBox(1,6,9,33);
    u8g.setColorIndex(1);
    // 
    u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(13, 12);
    u8g.print("F"); 
    u8g.setFont(u8g_font_5x8);
    u8g.setPrintPos(13, 35);
    u8g.print("25km"); 
    u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(13, 59);
    u8g.print("E");
    }
    //lcdLeftColumn function end
    //lcdCenterColumn function start
    void lcdCenterColumn(void) { 
    u8g.setFont(u8g_font_fub35n);
    u8g.setPrintPos(38, 50);
    u8g.print(count);
    }
    //lcdCenterColumn function end
    //lcdRightColumn function start
    void lcdRightColumn(void) {
    //
    u8g.drawFrame(117,5,11,54);
    u8g.drawBox(118,30,9,2);
    // 
    u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(110, 12);
    u8g.print("D"); 
    u8g.setFont(u8g_font_5x8);
    u8g.setPrintPos(101, 35);
    u8g.print("41A"); 
    u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(110, 59);
    u8g.print("R");
    }
    //lcdRightColumn function end 
    void setup(void) {
    count = 10;

    void loop(void) { 
    count = count + 1;
    if(count == 99){
    count = 10;

    //lcd
    u8g.firstPage();
    do { 
    //lcdLeftColumn start
    lcdLeftColumn();
    //lcdLeftColumn end
    //lcdCenterColumn start
    lcdCenterColumn();
    //lcdCenterColumn end
    //lcdRightColumn start
    lcdRightColumn();
    //lcdRightColumn end 
    } while( u8g.nextPage() );
    //lcd 
    //atvaizdavimo greitis ms
    delay(500); 

     

    O del likusio nuvaziuoti atstumo, jis, manau, priklausytu nuo akumuliatoriaus pako itampos, bendros talpos ir vaziavimo greicio. Ir kiek liko nuvaziuoti butu sokinejantis dytis, nes priklauso nuo vaziavimo greicio :)

    #5934
    ArturasL
    Participant

    StAAOkQ.jpg 

    Pabandziau padaryti likusi grafika :) Galeciau pabandyti parasyti funkcijas, kurios keistu sonuose esancius stulpelius pagal davikliu duomenis. Reiktu, kad tik parasytum min ir max stulpeliu reiksmes.  

    #5931
    ArturasL
    Participant

    Aciu Sarunui ir Jonui uz atsakymus. Jei kam reikes pamatuoti itampa arduino is kurios maitinasi pats mikrovaldiklis galit naudoti sita koda, patikrinta ir veikia:  

     

    long readVcc() {
    long result;
    // Read 1.1V reference against AVcc
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
    delay(2); // Wait for Vref to settle
    ADCSRA |= _BV(ADSC); // Convert
    while (bit_is_set(ADCSRA,ADSC));
    result = ADCL;
    result |= ADCH<<8;
    result = 1126400L / result; // Back-calculate AVcc in mV
    return result;

    void setup() {
    Serial.begin(9600);

    void loop() {
    Serial.println( readVcc(), DEC );
    delay(1000);

     

    Ten kur 1126400L pasikoreguokite pagal jusu mikrovaldiklio atramine itampa.

    #5929
    ArturasL
    Participant

    Sarunai, tavo pasiulytas matavimo budas kaip cia: http://www.rlocman.ru/shem/schematics.html?di=73220

     

    Kiek patikimas toks matavimo budas? Kazkur skaiciau, kad mikrovaldiklio vidine atramine itampa kazkiek plaukiojanti yra.

    O energijos suvartojimo atzvilgiu, turbut butu maziausia.

    #5925
    ArturasL
    Participant

    Pasipaisiau shema paemes arduino micro leonardo: http://i.imgur.com/j2TQTVy.jpg 

     

    Jei noreciau pamatuoti mikrovaldiklio saltinio itampa, ar pakanka sios shemos? Ar reikia mikrovaldiklio analogine kojele kabinti prie maitinimo pliuso. Siuo atveju atramine itampa butu naudojama vidine 1.1v.  

     

    Dar keli klausimai:

    Kokie privalumai/trukumai kai atramine itampa yra vidine/isorine?

    Ar reikalingas kondencatorius c10 prie maitinimo? Ar jis neiskrovines be reikalo baterijos?

    AREF, kai naudojama vidine atramine itampa, turi buti prie nieko neprijungtas?

    Ka daro kojele Vbus, uvcc, ucap, pe2?

    Jei noreciau tiktai matuoti baterijos itampa, koks butu optimaliausias mikrovaldiklio veikimo daznis?

Viewing 20 posts - 1 through 20 (of 39 total)