Compare commits

..

1 Commits

Author SHA1 Message Date
28838d6cc2 changed schematic & code for 5A charge current 2007-11-10 20:58:42 +01:00
5 changed files with 13 additions and 27 deletions

View File

@ -47,5 +47,5 @@ bin: $(PRG).bin
$(OBJCOPY) -j .text -j .data -O binary $< $@
install: text
# uisp -dprog=avr910 -dserial=/dev/ttyS0 -dspeed=115200 -dpart=M8 --erase --upload if=$(PRG).hex
avrdude -p m8 -c butterfly -b 115200 -P /dev/ttyUSB0 -u -e -U flash:w:$(PRG).hex
uisp -dprog=avr910 -dserial=/dev/ttyS0 -dspeed=115200 -dpart=M8 --erase --upload if=$(PRG).hex
# avrdude -p m8 -c butterfly -b 19200 -P /dev/ttyUSB0 -u -e -U flash:w:$(PRG).hex

View File

@ -1,21 +1,16 @@
Der IRF9540 und die BD139/140 sollten auf einer (kleinen) Kühlfläche montiert werden.
Der IRF9540 und die BD139/140 müssen auf einer Kühlfläche montiert werden!
Die Hochlastwiderstände im Equalizer (R10/R11) begrenzen die Ausgleichströme
und sollten 9-11W abkönnen.
Beim Shunt (R21) reichen 2W (für max. 2A Ladestrom).
Die Hochlastwiderstände im Equalizer (R10/R11) und der Shunt (R21/R26)
sollten >= 5W abkönnen
LiPos reagieren *extrem* allegisch auf zu hohe Spannungen, daher die
Spannungsteiler für Ubat (R23/R24) und für den Equalizer (R5, R6, R7)
mit möglichst geringen Toleranzen (0.1%) aufbauen!
Wert für die Induktivität habe ich nicht berechnet. Ich habe "L-PISR 100u" (SMD)
von Reichelt verwendet. (keine Entstördrosseln nehmen!)
Wert für die Induktivität habe ich nicht berechnet.
"RS Bestellnummer 308-8823" sollte passen (100µH / 5A)
Die Referenzdiode LM336-2.5 wird mit dem Spindeltrimmer (kein Poti!)
auf 2.56V abgeglichen.
Als Versorgungsspannung 16-18V verwenden (z.B. Laptop Netzteil/KFZ-Adapter).
Das LCD und der MAX232 können eigentlich entfallen und durch LEDs ersetzt werden.
Hierzu natürlich die Software anpassen. (ggf. kleineren AVR -> Tiny24)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

View File

@ -44,13 +44,12 @@
/*
* power supply:
* - CH0 - voltage with prescaler (12V -> 2V; 15mV -> 2.5mV/bit)
* - CH1 - current with (1A -> 1000mV; 2.5mA -> 2.5mV/bit)
* - CH0 - voltage with prescaler (12V -> 2000mV; 15mV -> 2.5mV/bit)
* - CH1 - current with (5A -> 2500mV; 5mA -> 2.5mV/bit)
* - PWM - high-active output to buckconverter
*/
#define CH0 PORTC0
#define CH1 PORTC1
#define SUMMER PORTB0
#define PWM PORTB1
#define NOP asm volatile ("nop")
@ -61,7 +60,7 @@
#define VOLTAGE_CONNECT 9000
#define VOLTAGE_CHARGE 12450
#define CURRENT_CHARGE 17500
#define CURRENT_CHARGE 49000
#define CURRENT_READY 2000
#define VOLTAGE_REMOVE 1000
@ -194,7 +193,7 @@ static uint16_t current;
ISR(ADC_vect)
{
if (ADMUX & 0x01) {
current = ADCW * 25;
current = ADCW * 50;
ADMUX = CH0;
} else {
@ -224,12 +223,9 @@ ISR(TIMER0_OVF_vect)
lcd_update = 1;
}
static uint16_t beep_timer;
beep_timer = (beep_timer +1) & 0x3FF;
/*
* charge with constant voltage of 12.45V
* and a current limit of 1.6A
* and a current limit of 4.9A
*/
if (mode == MOD_CHARGING) {
if (voltage < (VOLTAGE_CHARGE -25) && current < (CURRENT_CHARGE -500))
@ -247,11 +243,6 @@ ISR(TIMER0_OVF_vect)
TCCR1A &= ~(1<<COM1A1);
}
if (mode == MOD_READY && beep_timer < 0x03)
PORTB &= ~(1<<SUMMER);
else
PORTB |= (1<<SUMMER);
switch (mode) {
case MOD_WAITING:
/* start charging when a voltage > 9V is detected (lipo connected) */
@ -275,7 +266,7 @@ ISR(TIMER0_OVF_vect)
int main(void)
{
DDRB = (1<<CS) | (1<<RS) | (1<<PWM) | (1<<SUMMER);
DDRB = (1<<CS) | (1<<RS) | (1<<PWM);
DDRD = (LCD_DATA_MASK) | (1<<RW);
/* Set baud rate 19200 */