ups 12v attiny

minamonra
Offline
Зарегистрирован: 18.06.2014

Тема на коте тыц.

Плата тут.

Все просто, зарядка - генератор тока, переключение на акк - реле, усложнять не хотел, будет время прикручу какую нибуть 34063 на заряд и ШИМ стаб на выход.

Накорябал примерно так:

01//                           || пин attiny13:         || чего:
02#define  RELAY_PIN      1 // || PCINT1 (6-PB1) ...... || реле
03#define  BAT_PIN        1 // || ADC1   (7-PB2) ...... || напряжение на аккумуляторе
04#define  PWR_PIN        3 // || ADC3   (2-PB3) ...... || напряжение на входе
05#define  CHARGE_PIN     4 // || PCINT4 (3-PB4) ...... || заряжатель
06#define  INDICATOR_PIN  0 // || PCINT0 (5-PB0) ...... || светодио
07#define  INTERVAL  300UL          // время задержки перехода на внешнее питание
08static unsigned long PMillis = 0; // счетчик задержки
09static int  BAT;                  // напряжение на аккумуляторе
10static int  PWR;                  // напряжение на входе
11static byte BATSTATE = 0;         // состояние аккумулятора 0 - при разрядке достиг минимума 10.80, 1 - можно разряжать
12static byte CHARGEST = 1;         // 0 - нужно зарядить, 1 - full (по-умолчанию думаем что заряжен, и ждем 13.22)
13const  int  FULL_BATT    = 675;   // 14.22
14const  int  LOW_BATT     = 512;   // 10.80
15const  int  SUP_BATT     = 629;   // 13.22 напряжение включения добивки акк
16const  int  DONT_BATT    = 530;   // 11.20 не включаемся до этого напряжения на акк после разряда (ждем чтобы подзаридили)
17const  int  LOW_PWR      = 690;   // 14.20 на входе (зарядку включать бесполезно)
18const  int  OUT_PWR      = 640;   // 14.00 уровень напряжения на входе при котором переходим на аккумулятор
19 
20void setup () {
21 pinMode(INDICATOR_PIN, OUTPUT);  //
22 pinMode(RELAY_PIN,     OUTPUT);  //
23 pinMode(BAT_PIN,        INPUT);  //
24 pinMode(PWR_PIN,        INPUT);  //
25 pinMode(CHARGE_PIN,    OUTPUT);  //
26}
27 
28void loop () {
29 BAT = analogRead (BAT_PIN);
30 PWR = analogRead (PWR_PIN);
31 if (BAT > DONT_BATT) BATSTATE = 1;     // если на акк больше 11.00 - можем перейти на акк
32 if (BAT < LOW_BATT ) BATSTATE = 0;     // если на акк меньше 10.80 - акк разряжен
33 if (BAT > FULL_BATT) CHARGEST = 1;     // выкл зарядки
34 if (BAT < SUP_BATT ) CHARGEST = 0;     // вкл зарядки
35 if (PWR < LOW_PWR) PMillis = millis(); // обнуление задержки
36 if (PWR > LOW_PWR) {                   // переход на внешнее питание с задержкой INTERVAL
37    if (millis() - PMillis > INTERVAL) {  
38      PMillis = millis();
39      digitalWrite (RELAY_PIN,  LOW );
40    }
41 }
42 if (PWR < OUT_PWR and BATSTATE == 1) { // если на входе меньше 14 и аккумулятор не разряжен - работаем
43    digitalWrite (RELAY_PIN, HIGH);
44    digitalWrite (CHARGE_PIN, LOW);
45    digitalWrite (INDICATOR_PIN,LOW);
46 }
47 if (PWR < OUT_PWR and BATSTATE == 0) { // на входе пусто и аккумулятор сдох !!!
48    digitalWrite (RELAY_PIN,  LOW );
49 }
50 if (PWR > LOW_PWR and CHARGEST == 1) { // если можем заряжать но акк заряжен
51    digitalWrite (CHARGE_PIN, LOW   );
52    digitalWrite (INDICATOR_PIN,HIGH);
53 }
54 if (PWR > LOW_PWR and CHARGEST == 0) { // заряжаем
55    digitalWrite (CHARGE_PIN, HIGH );
56    digitalWrite (INDICATOR_PIN,LOW);
57 }
58}

Работает.
Может кто код посмотрит, с целью улучшения? (не кодер я).
Или просто мыли какие?

minamonra
Offline
Зарегистрирован: 18.06.2014

Попробую другую схему для зарядки аккумулятора. Кусок её выдернул отсюда.

VD2 и VD3 - смотря какой ток.

minamonra
Offline
Зарегистрирован: 18.06.2014

Попробовал, измерения - отлично. Step-down корявый, - перепробовал несколько индуктивностей, разную частоту, греется слишком сильно, хотя сам по себе step-down не такой уж и холодный, даже на нормальных контроллерах (по крайней мере из тех что пробовал). Ну ещё может что не учёл. Тот же пушпулл на 3525 на двух мосфетах при токах 3-5 ампер холодным у меня получается... а тут 600-800 мА и уже горячо.

Для теста накорябал такое:

 

s_1405695822_1459995_d12333f3c3.jpg

Файлы тут.

 

minamonra
Offline
Зарегистрирован: 18.06.2014

Заменил зарядку на 34063, на столе собрал почти вот такую схему:

s_1405757666_7727135_8bfa982766.gif

Управление с мк шим в напряжение, R9/C1 - фильтр. При включении на 7-ую ногу подается напряжение выключающее 34063. Ток регулируется подачей 0..5 на базу VT1 (0 - макс ток). Максимум для схемы 750-800 мА.

 

barbus
Offline
Зарегистрирован: 06.04.2013

minamonra можете добавить польную схему с даработками на тини13