Ce site contient essentiellement des notes de travail. Le contenu est en constante évolution, et loin d'être achevé. (+ d'infos)
La plupart des documentations informatiques sont orientées Debian / Ubuntu.

Modélisme/Hardware/Chargeurs/Junsi iCharger 3010B

De Ordinoscope.net
Sauter à la navigation Sauter à la recherche

Introduction

Junsi iCharger 3010B

Caractéristiques

Input voltage range 4.50 – 38.0VDC
Charge current range 0.05 – 30.0A
Discharge current range 0.05 – 30.0A
Maximum charge power capacity 1000W @ input voltage 23V (500W @ input voltage 12V)
Maximum discharge power capacity 80W
Maximum regenerative discharge power capacity 1000W
Maximum extern discharge power capacity 1200W @ 40V/30A
Current drain for balancing <500mA
Balance accuracy <10mV
Lithium (LiPo/LiIo/LiFe) battery cell count 1-10 series (In non-balance mode, expand LiFe to 12s)
NiCd/NiMH battery cell count 1–25 series
Pb battery cell count 1–18 series (2–36V)
Log Files storage 16Mbit (31 hours
Battery setup memories 10
Intelligent temperature control Yes
PC Connect USB port
Weight 750g
Dimensions (L X W X D) 143X123X46mm 5.63'X4.84'X1.81'

Lecture des données

Conversion avec un arduino

Le port sériel du 3010B est défini à 128'000 bps, une vitesse absolument pas standard (uniquement disponible sur Windows). 9600 pbs seraient largement suffisants, et le sont sur la majorité des chargeur, mais dès que le mot Windows apparaît, quelques développeurs semblent avoir une irrésistible envie de s'égarer hors des standards.

Voici une parade en créant un convertisseur de vitesse avec un Arduino. Le résultat n'est pas absolument parfait, de loin pas. Env. 85% des paquets sont reçus correctement. Les vitesses de transfert en sériel ne sont pas apparues par hasard. Elles correspondent à une division du cycle du processeur, ce qui n'est pas le cas en 128'000 bps.

Les étapes:

  • Ponter un câble UART avant le convertisseur USB
  • Utiliser impérativement un Arduino à 16MHz
  • Modifier la librairie NewSoftSerial

NewSoftSerial.cpp (ajouter la ligne 128000)

#if F_CPU == 16000000

static const DELAY_TABLE PROGMEM table[] = 
{
  //  baud    rxcenter   rxintra    rxstop    tx
  { 128000,   1,         12,        12,       12,    },
  { 115200,   1,         17,        17,       12,    },
  { 57600,    10,        37,        37,       33,    },

N.B. La valeur de "tx" n'a pas été corrigée.


iCharger3010bReader.pde

#include "NewSoftSerial.h"

NewSoftSerial mySerial (2, 3);
String inString = "";

void setup () {
  Serial.begin (115200);
  Serial.println ("setup");

  mySerial.begin (128000);
}

void loop () {
  static int pos = 0;
  static int bad = 0;
  static int badCount = 0;
  static int totalCount = 0;
  float stat;
  char c;
  
  if (mySerial.available ()) {
      c = mySerial.read ();
      if ((c >= '0' && c <= '9') || c == '$' || c == ';') {
        inString += c;
      } else if (c == 0x0D) {
        // ignore
      } else if (c == 0x0A) {
        totalCount++;
        if (bad > 0) {
          badCount++;
          Serial.print ("[BAD] ");
        }
        Serial.println (inString);

        stat = 100.0 - (1.0 / (float) totalCount * (float) badCount * 100.0);
        Serial.print ("Total: ");
        Serial.print (totalCount);
        Serial.print (", bad: ");
        Serial.print (badCount);
        Serial.print (", good: ");
        Serial.print (totalCount - badCount);
        Serial.print (" (");
        Serial.print (stat);
        Serial.println ("%)");

        inString = "";
        bad = 0;
        pos = 0;
      } else {
        bad++;
      }
  }
}

Références