Например TDA7294

Форум РадиоКот • Просмотр темы - Контроллер лития 4S
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 19:38:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Контроллер лития 4S
СообщениеДобавлено: Чт сен 01, 2016 15:31:42 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 14:29:06
Сообщений: 129
Откуда: Ukraine
Рейтинг сообщения: 2
Здраствуйте! Такая ситуация, спаял себе парочку аккумуляторов 4S6P для замени свинца в выездах на природу так как вес поменьше, да и служат подольше.
З зарядкой проблем нет - заряжаю Turnigy Acuccel 80W или раздельными зарядками, но вот как-то хотелось защитится от переразряда так как не любит литий разряда меньше 3 вольт.
Хотел купить готовый контролер без балансира и не париться, но увы - повсюду нижний порог 2,75 -2,5 вольт, в реальности еще меньше.
Готовых проектов по контроллеру 4s или других под переделку в гугле не встречал. Так как опыт небольшой есть по Arduino решил сделать самому, прога писалась в среде Arduino,
компилировалась в hex и моделировалась в протеусе, но что то протеус не хочет считать напряжения, значения АЦП выводит нормально
(в архиве проект протеуса с LCD куда выводил все данные по очереди, и проект для LCD - _1111), а результат формулы не считает.
В железе пока не собирал хочу отладить программно, да и пока едут LP 2950- 5.0 вольта.
Все что нужно от контроллера отключать нагрузку при перезаряде, переразряде и превышение тока, с малым энергопотреблением.
Буду рад любой помощи, замечаниям и доработкам. Заранее спасибо.


Вложения:
disprotecktion.zip [649.98 KiB]
Скачиваний: 186
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Контроллер лития 4S
СообщениеДобавлено: Вс окт 30, 2016 19:05:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 14:29:06
Сообщений: 129
Откуда: Ukraine
Рейтинг сообщения: 0
Внес изменения в код, заработало в симуляторе, код под спойлером
Спойлерfloat Upin1=0.0;
float Upin2=0.0;
float Upin3=0.0;
float Upin4=0.0;
float Ipin=0.0;
float U1=0.0;
float U2=0.0;
float U3=0.0;
float U4=0.0;
void setup() {
pinMode(0,INPUT);
pinMode(1,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(9,HIGH);//пин заряда
digitalWrite(10,HIGH);// соответствие пину 8 в протеусе - пин разряда (8 пин =пину 10)
}

void loop() {
//делаем замер напряжения падения на транзисторах пин PA4
Ipin=analogRead(4);
Ipin=(Ipin*5)/1023.0;
//делаем замер напряжения на входах
Upin1=analogRead(0);
Upin1=(Upin1*5)/1023;//вход PA0
Upin2=analogRead(1);
Upin2=(Upin2*5)/1023;//вход PА1
Upin3=analogRead(2);
Upin3=(Upin3*5)/1023.0;//вход PA2
Upin4=analogRead(3);
Upin4=(Upin4*5)/1023.0;//вход PA3
//вычисляем напряжение на аккумуляторах
U1=Upin1/(51/78.00);
U2=Upin2/(51/171.00);
U3=Upin3/(51/251.00);
U4=Upin4/(51/351.00);
if (U4>U3)
{
U4=U4-U3;
}
if (U3>U2)
{
U3=U3-U2;
}
if (U2>U1)
{
U2=U2-U1;
}
//защита от переразряда
if ((U1<3)||(U2<3)||(U3<3)||(U4<3))
{
digitalWrite(10, LOW);
}
else
{
digitalWrite(10, HIGH);
}
//защита от перезаряда
if ((U1>4.2)||(U2>4.2)||(U3>4.2)||(U4>4.2))
{
digitalWrite(9, LOW);
}
//защита от КЗ
// if (Ipin>4)
// {
// digitalWrite(9, LOW);
// digitalWrite(10, LOW);
// }
}

Архив с измененним проектом. В планах доделать защиту по току (измерениє падения на транзисторах) ну и снизить потребления режимом сна.


Вложения:
disprotecktion.zip [394.67 KiB]
Скачиваний: 137
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Контроллер лития 4S
СообщениеДобавлено: Вс дек 18, 2016 18:41:23 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 14:29:06
Сообщений: 129
Откуда: Ukraine
Рейтинг сообщения: 2
Код для CV AVR
Спойлер#include <tiny44.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
//#define discharge PINB.0
//#define charge PINB.1
#define charge_on PORTB.1=1;//включить реле
#define charge_off PORTB.1=0;//отключить реле
#define discharge_on PORTB.0=1;//включить реле
#define discharge_off PORTB.0=0;//отключить реле



unsigned int read_adc(unsigned char adc_input) // функция замера напряжения
{
ADMUX=(adc_input & 0x3f) | ADC_VREF_TYPE;
delay_us(10); // задержка для стабилизации напряжения
ADCSRA|=0x40; // включаєм АЦП
while ((ADCSRA & 0x10)==0); // Ждем завершения работи АЦП
ADCSRA|=0x10;
return ADCW;
}

unsigned short int Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2 ,U3, U4; // глобальниє переменнниє


void main(void)
{
// локальниє переменниє
Upin1=0; Upin2=0; Upin3=0; Upin4=0; Ipin=0; U1=0; U2=0; U3=0; U4=0;


// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization Func3=In Func2=Out Func1=Out Func0=Out State3=T State2=0 State1=0 State0=0
//PORTB=0x00;
PORTB=0x03;
DDRB=0x07;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization, ADC Clock: 125,000 kHz ,ADC Bipolar Input Mode: Off, ADC Auto Trigger Source: ADC Stopped
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On, ADC4: On, ADC5: On, ADC6: On, ADC7: On
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
ADCSRB&=0x6F;

while (1)
{
Upin1=read_adc(0);
Upin2=read_adc(1);
Upin3=read_adc(2);
Upin4=read_adc(3);
Ipin=read_adc(4);
//вычисляем напряжение на аккумуляторах
U1=Upin1*1.5294118*0.0048876*1000; // 1/(51/78)* 5/1023
U2=Upin2*3.3529412*0.0048876*1000;// 1/(51/171) * 5/1023
U3=Upin3*4.9215686*0.0048876*1000; // 1/(51/251) * 5/1023
U4=Upin4*6.8823529*0.0048876*1000; // 1/(51/351) * 5/1023
if (U4>U3)
{
U4=U4-U3;
}
if (U3>U2)
{
U3=U3-U2;
}
if (U2>U1)
{
U2=U2-U1;
}
//защита от переразряда
if ((U1<3000)||(U2<3000)||(U3<3000)||(U4<3000))
{
discharge_off;
}
else
{
discharge_on;
}
//защита от перезаряда
if ((U1>4200)||(U2>4200)||(U3>4200)||(U4>4200))
{
charge_off;
}
//защита от КЗ
// if (Ipin>4)
// {
// discharge_off;
// charge_off;
// }
}
}

Осталось добавить сон. Но думаю сколько ставить сек в режим сна.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Контроллер лития 4S
СообщениеДобавлено: Вс фев 05, 2017 15:06:44 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 14:29:06
Сообщений: 129
Откуда: Ukraine
Рейтинг сообщения: 0
Не смог осилить все тонкостей этих энергосберегающих режимов, точней пробуждения из них. Кое как заставил работать режим Sleep, но тут подсказали что можно перейти на пониженную частоту 128 KHz и не заморачиваться, потребления в таком режиме по даташиту не больше 0,15 + 0,10- 0,15 делители -максимум 0,3 мА что подходит вполне.
Код для CV AVR
Спойлер#include <tiny44.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
#define charge_on PORTB.1=1;//включить пин заряда
#define charge_off PORTB.1=0;//отключить пин заряда
#define discharge_on PORTB.0=1;//включить пин разряда
#define discharge_off PORTB.0=0;//отключить пин разряда

unsigned int read_adc(unsigned char adc_input) // функция замера напряжения
{
ADMUX=(adc_input & 0x3f) | ADC_VREF_TYPE;
delay_us(12); // задержка для стабилизации напряжения
ADCSRA|=0x40; // включаєм АЦП
while ((ADCSRA & 0x10)==0); // Ждем завершения работи АЦП
ADCSRA|=0x10;
return ADCW;
}
// глобальниє переменнниє
unsigned short int Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2 ,U3, U4;
float U1_Corr,U2_Corr,U3_Corr,U4_Corr;

void main(void)
{
// локальниє переменниє
Upin1=0; Upin2=0; Upin3=0; Upin4=0; Ipin=0; U1=0; U2=0; U3=0; U4=0;


// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;


// Port B initialization Func3=In Func2=Out Func1=Out Func0=Out State3=T State2=0 State1=0 State0=0
//PORTB=0x03;
//DDRB=0x07;
PORTB=0x00;
DDRB=0x0F;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization, ADC Clock: 125,000 kHz ,ADC Bipolar Input Mode: Off, ADC Auto Trigger Source: ADC Stopped
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On, ADC4: On, ADC5: On, ADC6: On, ADC7: On
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
ADCSRB&=0x6F;

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/128k
// Watchdog Timer interrupt: On
#pragma optsize-
#asm("wdr")
WDTCSR=0x1E;
WDTCSR=0x0E;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

while (1)
{
Upin1=read_adc(0);
Upin2=read_adc(1);
Upin3=read_adc(2);
Upin4=read_adc(3);
Ipin=read_adc(4);

//вычисляем напряжение на аккумуляторах
U1=Upin1*1.5*0.0048876*1000; // 1/(20/30)* 5/1023
U2=Upin2*3.35*0.0048876*1000;// 1/(20/67) * 5/1023
U3=Upin3*4.75*0.0048876*1000; // 1/(20/95) * 5/1023
U4=Upin4*7*0.0048876*1000; // 1/(20/140) * 5/1023

U1_Corr=0; //КАЛИБРОВОЧНЫЕ ЗНАЧЕНИЯ
U2_Corr=0; //ВЫЧИТАЮТСЯ ИЗ РЕЗУЛЬТАТОВ ИЗМЕРЕНИЯ
U3_Corr=0; //ПРИ ИСПОЛЬЗОВАНИИ 0.1% РЕЗИСТОРОМ МОЖНО ОСТАВИТЬ
U4_Corr=0; //РАВНЫМИ 0

//ВЫЧИСЛЕНИЕ НАПРЯЖЕНИЙ КАЖДОЙ ЯЧЕЙКИ:
//U4=U4-U3
if (U4>U3)
{
U4=U4-U3;
if (U4>U4_Corr)
U4=U4-U4_Corr;
}
else
U4=0;

//U3=U3-U2
if (U3>U2)
{
U3=U3-U2;
if (U3>U3_Corr)
U3=U3-U3_Corr;
}
else
U3=0;

//U2=U2-U1
if (U2>U1)
{
U2=U2-U1;
if (U2>U2_Corr)
U2=U2-U2_Corr;
}
else
U2=0;

if (U1>U1_Corr)
U1=U1-U1_Corr;
else
U1=0;

//защита от переразряда
if ((U1<3000)||(U2<3000)||(U3<3000)||(U4<3000))
{
discharge_off;
}
else
{
discharge_on;
}
//защита от перезаряда
if ((U1>4200)||(U2>4200)||(U3>4200)||(U4>4200))
{
charge_off;
}
if ((U1<4150)&&(U2<4150)&&(U3<4150)&&(U4<4150))
{
charge_on;
}
//защита от КЗ
// if (Ipin>4)
// {
// discharge_off;
// charge_off;
// }
#asm("wdr")
}
}

Фюзи WDT - programmed ,CKSEL - 0100 , SUT- 00
Перехожу к тестирования в железе. Всем спасибо кто помог.


Вложения:
bmstiny1.jpg [83.77 KiB]
Скачиваний: 350
Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y