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 $< $@ $(OBJCOPY) -j .text -j .data -O binary $< $@
install: text install: text
# uisp -dprog=avr910 -dserial=/dev/ttyS0 -dspeed=115200 -dpart=M8 --erase --upload if=$(PRG).hex 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 # 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 Die Hochlastwiderstände im Equalizer (R10/R11) und der Shunt (R21/R26)
und sollten 9-11W abkönnen. sollten >= 5W abkönnen
Beim Shunt (R21) reichen 2W (für max. 2A Ladestrom).
LiPos reagieren *extrem* allegisch auf zu hohe Spannungen, daher die LiPos reagieren *extrem* allegisch auf zu hohe Spannungen, daher die
Spannungsteiler für Ubat (R23/R24) und für den Equalizer (R5, R6, R7) Spannungsteiler für Ubat (R23/R24) und für den Equalizer (R5, R6, R7)
mit möglichst geringen Toleranzen (0.1%) aufbauen! mit möglichst geringen Toleranzen (0.1%) aufbauen!
Wert für die Induktivität habe ich nicht berechnet. Ich habe "L-PISR 100u" (SMD) Wert für die Induktivität habe ich nicht berechnet.
von Reichelt verwendet. (keine Entstördrosseln nehmen!) "RS Bestellnummer 308-8823" sollte passen (100µH / 5A)
Die Referenzdiode LM336-2.5 wird mit dem Spindeltrimmer (kein Poti!) Die Referenzdiode LM336-2.5 wird mit dem Spindeltrimmer (kein Poti!)
auf 2.56V abgeglichen. auf 2.56V abgeglichen.
Als Versorgungsspannung 16-18V verwenden (z.B. Laptop Netzteil/KFZ-Adapter). 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: * power supply:
* - CH0 - voltage with prescaler (12V -> 2V; 15mV -> 2.5mV/bit) * - CH0 - voltage with prescaler (12V -> 2000mV; 15mV -> 2.5mV/bit)
* - CH1 - current with (1A -> 1000mV; 2.5mA -> 2.5mV/bit) * - CH1 - current with (5A -> 2500mV; 5mA -> 2.5mV/bit)
* - PWM - high-active output to buckconverter * - PWM - high-active output to buckconverter
*/ */
#define CH0 PORTC0 #define CH0 PORTC0
#define CH1 PORTC1 #define CH1 PORTC1
#define SUMMER PORTB0
#define PWM PORTB1 #define PWM PORTB1
#define NOP asm volatile ("nop") #define NOP asm volatile ("nop")
@ -61,7 +60,7 @@
#define VOLTAGE_CONNECT 9000 #define VOLTAGE_CONNECT 9000
#define VOLTAGE_CHARGE 12450 #define VOLTAGE_CHARGE 12450
#define CURRENT_CHARGE 17500 #define CURRENT_CHARGE 49000
#define CURRENT_READY 2000 #define CURRENT_READY 2000
#define VOLTAGE_REMOVE 1000 #define VOLTAGE_REMOVE 1000
@ -194,7 +193,7 @@ static uint16_t current;
ISR(ADC_vect) ISR(ADC_vect)
{ {
if (ADMUX & 0x01) { if (ADMUX & 0x01) {
current = ADCW * 25; current = ADCW * 50;
ADMUX = CH0; ADMUX = CH0;
} else { } else {
@ -224,12 +223,9 @@ ISR(TIMER0_OVF_vect)
lcd_update = 1; lcd_update = 1;
} }
static uint16_t beep_timer;
beep_timer = (beep_timer +1) & 0x3FF;
/* /*
* charge with constant voltage of 12.45V * 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 (mode == MOD_CHARGING) {
if (voltage < (VOLTAGE_CHARGE -25) && current < (CURRENT_CHARGE -500)) if (voltage < (VOLTAGE_CHARGE -25) && current < (CURRENT_CHARGE -500))
@ -247,11 +243,6 @@ ISR(TIMER0_OVF_vect)
TCCR1A &= ~(1<<COM1A1); TCCR1A &= ~(1<<COM1A1);
} }
if (mode == MOD_READY && beep_timer < 0x03)
PORTB &= ~(1<<SUMMER);
else
PORTB |= (1<<SUMMER);
switch (mode) { switch (mode) {
case MOD_WAITING: case MOD_WAITING:
/* start charging when a voltage > 9V is detected (lipo connected) */ /* start charging when a voltage > 9V is detected (lipo connected) */
@ -275,7 +266,7 @@ ISR(TIMER0_OVF_vect)
int main(void) 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); DDRD = (LCD_DATA_MASK) | (1<<RW);
/* Set baud rate 19200 */ /* Set baud rate 19200 */