Реклама: ЗУ на Ардуино от Dkin

 

Хочешь стать куратором любимой темы?

* Комментарии к новостям

1. ULTRON T11/HALTEN RS-03 (60v, 2x1200, 23,4Ah) (Электросамокаты Halten ) от Bengs (23.07.2019 в 23:10)2. Катушка на запад (Брянск, Брест, Минск, Смоленск, Селигер) 2019. (Москва) от Statik (23.07.2019 в 23:10)3. Телекоммуникационные источники питания 1500-3000W (CC/CV) (Источники питания) от tmiaer (23.07.2019 в 23:09)4. Переделка курка на менее резкий старт (Самодельные электросамокаты) от ingener (23.07.2019 в 23:07)5. KingSong 17X (16X) (2019) (Моноколёса KingSong) от Сергей2895 (23.07.2019 в 23:05)6. Выбор передней вилки (Электровелосипеды) от russstand (23.07.2019 в 23:02)
7. Помогите выбрать электросамокат! Обсуждаем промышленные электросамокаты (Электросамокаты) от Jones (23.07.2019 в 23:00)8. Электромобиль из детской коляски 2 (Детский электротранспорт) от ILYANOV (23.07.2019 в 22:58)9. Dualtron ultra проблема (Электросамокаты MiniMotors) от Denis Akmalov (23.07.2019 в 22:54)10. ЭлектроСамокаты на YouTube (Электросамокаты) от andreyttg (23.07.2019 в 22:52)11. Пожар был в аккумуляторном отсеке подлодки? (Свободный электрон) от морячок (23.07.2019 в 22:48)12. Благодарности, отзывы, предложения, пожелания по работе EcoDrift (EcoDrift: крупнейший российский магазин электротранспорта) от Сергей2895 (23.07.2019 в 22:47)
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

Прочитано 1252 раз

0 Пользователи и 1 Гость просматривают эту тему.

14 Май 2018 в 10:26
Прочитано 1252 раз
Оффлайн

Dkin

Россия Сообщений: 230
В этой теме выделил свой вариант зарядки для аккумуляторов на основе ардуино нано. Здесь можно задавать вопросы по ее наладке и работе. В перспективе планируется сделать одно устройство для заряда и разряда, а также для проведения одного или нескольких КТЦ.

Возможности: регулируемый цикл заряд пауза (в секундах) и несущей частотой (1-350 Гц). При достижении напряжения отсечки (14,4В) происходит уход в паузу отсечки на настраиваемое время.

Что нужно:
1. Ардуино нано, программируется USB.
Скрытый текст

2. Программа для загрузки программ в ардуино с сайта arduino.cc - она стандартна и незамысловата, ничего сложного нет.
    Вкладка Software - Download the Arduino IDE.

3. Драйвер для работы с платой ардуино
В моем случае это CH340 - устанавливаем один раз.
Скрытый текст
* DRIVER-CH340G.rar (69.58 кБ - загружено 6 раз.)

Название загрузчика, для которого устанавливается драйвер обычно пишут в описании к ардуино.


4. Программа ЗУ:
Скрытый текст
// Общие настройки - Несущая частота
float freq = 35.00; // частота в Гц (от 1 до 350)
float skv1 = 50.00; // коэффициент заполнения (от 1 до 99)

// 1 этап Модулирующие импульсы
long zar1 = 30; // время заряда в сек (от 1 сек)
long pauseosn1 = 10; // время паузы в сек (от 1 сек)

// 2 этап работа отсечки
float Uots = 14.40; // напряжение отсечки
long pauseots1 = 30; // время паузы в сек (от 1 сек)
float koeffU = 0.0276391555; //коэффициент делителя напряжения - подобрать опытным путем, чтобы отсечка срабатывала при Uots

float Uots1 = Uots/koeffU*10;
float impnes1 = 0.00;
float pausenes1 = 0.00;
long previousMillis = 0;
float Utek = 0.00;

void setup()
{
   pinMode(13, OUTPUT); // используем 13 выход для управления ключом, на нем также висит синий светодиод, располагающийся на плате, для наглядности
   pinMode(10, OUTPUT); // внешний светодиод
   impnes1 = 10 * skv1 / freq; // расчет импульса заряда несущей частоты
   pausenes1 = 10 * (100 - skv1) / freq; // расчет паузы несущей частоты
}
void loop()
{
label2:
// расчет основного цикла заряд/пауза
unsigned long currentMillis = millis();
 if (currentMillis - previousMillis > zar1*1000) // если время заряда истекло
 {
    digitalWrite(13, LOW); // выключаем ключ
    digitalWrite(10, LOW); // выключаем внешний светодиод
    delay (pauseosn1*1000); // пауза основного цикла
    currentMillis = millis();
    previousMillis = currentMillis;
 }
// работа импульсов несущей частоты
  digitalWrite(10, HIGH); // включаем внешний светодиод
  digitalWrite(13, HIGH); // включаем ключ
  delay(impnes1 );                     
  Utek=0;
  for (int i = 0; i <10; i ++)  Utek+=analogRead(A3); // измеряем напряжение на входе А3 10 раз подряд и прибавляем друг к другу
  if (Utek > Uots1) // если измеренное напряжение больше напряжения отсечки
{
goto label1; // перейти на паузу отсечки
}
  digitalWrite(13, LOW); // отключаем ключ
  delay( pausenes1 );
  goto label2; // пропустить паузу отсечки
label1:
    digitalWrite(13, LOW); // выключаем ключ
    digitalWrite(10, LOW); // отключаем внешний светодиод
    delay (200);
    digitalWrite(10, HIGH); // включаем внешний светодиод
    delay (200);
    digitalWrite(10, LOW); // отключаем внешний светодиод
    delay (200);
    digitalWrite(10, HIGH); // включаем внешний светодиод
    delay (200);
    digitalWrite(10, LOW); // отключаем внешний светодиод
    delay (200);
    digitalWrite(10, HIGH); // включаем внешний светодиод
    delay (200);
    digitalWrite(10, LOW); // отключаем внешний светодиод
    delay (pauseots1*1000-1200); //пауза после отсечки минус 1,2 сек (мигание светодиода)
    currentMillis = millis();
    previousMillis = currentMillis;
}

Первые семь строк - настройка.

5. Схема.
Ключ заряда (порт D13), ключ разряда (порт D4), делитель напряжения (порт А3), внешний светодиод (порт D10).
Внешний светодиод - горит при заряде постоянно.
При достижении напряжения отсечки - мигает три раза и выключается.
Порты А4 и А5 остаются свободными для подключения в будущем устройств по i2c шине, например, двухстрочного экрана. В ардуино нано порт А4 - SDA, порт А5 - SCL.
Кнопка и разрядный ключ тоже пока не используются.
Скрытый текст

* прсхема080417.rar (81.52 кБ - загружено 18 раз.)


6. Печатная плата (45х65 мм).
Скрытый текст

* ПП Моргалка ардуино 080417.rar (11.98 кБ - загружено 15 раз.)


Т.о. в моем примере время заряда - 30 сек, паузы 10 сек, несущая частота 35Гц с коэффициентом заполнения 50%. При достижении напряжения 14,4В на АКБ происходит уход в паузу на 30 сек.

---------------------------------------------------------------------------------------------------------------------------------

Отдельное устройство для разряда аккумулятора.

Алгоритм:

Разряд/пауза - 21/7 секунд

Если напряжение в паузе не поднимается выше 12В, разряд прекращается.

Времена и напряжение останова можно в программе изменять.

Схема:
Скрытый текст


Программа:
Скрытый текст
float Utek = 0.00;
float KoefU = 1313.600;

void setup() {
 Serial.begin(9600); 
 pinMode(13, OUTPUT); //светодиод на плате, для наглядности
   pinMode(4, OUTPUT); //ключ разряда
}

void loop() {
  delay(5000);
   for (int i = 0; i <20; i ++)  Utek+=analogRead(A3); // измеряем напряжение на входе А3 20 раз подряд и прибавляем друг к другу
Serial.println("NRC" );
Serial.println(Utek/KoefU);

  label1:
  digitalWrite(13, HIGH); 
  digitalWrite(4, HIGH);
  delay(21000); // пауза 21 сек.
  Utek=0;
  for (int i = 0; i <20; i ++)  Utek+=analogRead(A3); // измеряем напряжение на входе А3 20 раз подряд и прибавляем друг к другу
Serial.println("nagruzka" );
Serial.println(Utek/KoefU);
 
  digitalWrite(13, LOW);   
  digitalWrite(4, LOW);
  delay(7000);                       // пауза 7 сек.
 
  Utek=0;
  for (int i = 0; i <20; i ++)  Utek+=analogRead(A3); // измеряем напряжение на входе А3 20 раз подряд и прибавляем друг к другу
Serial.println("pause" );
Serial.println(Utek/KoefU);
 if (Utek/KoefU < 12.00) // если измеренное напряжение меньше 12.00 В, прекращаем разряд.
{
  Serial.println("STOP" );
goto label2;
}
 goto label1;
 label2:
delay(100000);     
goto label2;
}

Внешний вид:
Скрытый текст

« Последнее редактирование: 14 Май 2018 в 10:38 от Dkin »
Сообщение понравилось: Серик, Иван77, UriBas

16 Май 2018 в 11:42
Ответ #1
Оффлайн

Dkin

Россия Сообщений: 230
Добавил экран 1602 к разрядному устройству.
Теперь при подключении его к аккумулятору отображается НРЦ, затем в работе напряжение в паузе, при нагрузке.
При достижении напряжения 12В разряд прекращается, отображается время разряда.

Скрытый текст
// библиотеки экрана
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

float Upayse = 0.00; //напряжение в паузе
float Unagr = 0.00; //напряжение при нагрузке
float KoefU = 1313.600;
int timeMin; //переменные для расчета времени
int timeH;
LiquidCrystal_I2C lcd(0x27,16,2); // присваиваем имя lcd для дисплея 16х2

void setup() {
  lcd.init();                    // Инициализация lcd             
  lcd.backlight();         // Включаем подсветку
  Upayse=0;
  for (int i = 0; i <20; i ++)  Upayse+=analogRead(A3); // измеряем напряжение на входе А3 10 раз подряд и прибавляем друг к другу
lcd.print("NRC");
lcd.setCursor(8, 0);
lcd.print(Upayse/KoefU); 

 Serial.begin(9600); 
 pinMode(13, OUTPUT); // используем 13 выход для управления ключом, на нем также висит синий светодиод, располагающийся на плате, для наглядности
   pinMode(4, OUTPUT);
}
void loop() {
  delay(5000);
label1:
  digitalWrite(13, HIGH);
  digitalWrite(4, HIGH);
  delay(21000); // пауза 21 секунды
  Unagr=0;
  for (int i = 0; i <20; i ++)  Unagr+=analogRead(A3); // измеряем напряжение на входе А3 20 раз подряд и прибавляем друг к другу
Serial.println("nagruzka" );
Serial.println(Unagr/KoefU);
  digitalWrite(13, LOW);   
  digitalWrite(4, LOW);
  delay(7000);                       // пауза 7 секунд 
  Upayse=0;
  for (int i = 0; i <20; i ++)  Upayse+=analogRead(A3); // измеряем напряжение на входе А3 20 раз подряд и прибавляем друг к другу
Serial.println("pause" );
Serial.println(Upayse/KoefU);
 timeMin = millis()/1000/60;
 timeH = millis()/1000/60/60;
 timeMin = millis()/1000/60 - timeH*60;

  lcd.print(Upayse/KoefU); 
  lcd.setCursor(8, 0);
  lcd.print(Unagr/KoefU);
  lcd.setCursor(0, 1);
  lcd.print(timeH);
  lcd.setCursor(4, 1);
  lcd.print("H");
  lcd.setCursor(7, 1);
  lcd.print(timeMin);
  lcd.setCursor(10, 1);
  lcd.print("Min");
   
 if (Upayse/KoefU < 12.00) // если измеренное напряжение меньше 12.00 В
{
  Serial.println("STOP" );
goto label2; // перейти на паузу
}
 goto label1;
 label2:
delay(100000);     
goto label2;
 }
Сообщение понравилось: Серик

14 Июл 2018 в 18:29
Ответ #2
Оффлайн

Паяка

Россия, Челябинск Сообщений: 1652
Есть смысл добавить и SD-карту, получится логгер. Правда, сама карта может при этом быстро изнашиваться. Мне не встречалась информация, как именно на аппаратном уровне работает стандартная библиотека Ардуино для работы с SD, как у неё устроена буферизация.

15 Июл 2018 в 16:04
Ответ #3
Оффлайн

Necromant

Калининград Сообщений: 185
Есть смысл добавить и SD-карту, получится логгер. Правда, сама карта может при этом быстро изнашиваться. Мне не встречалась информация, как именно на аппаратном уровне работает стандартная библиотека Ардуино для работы с SD, как у неё устроена буферизация.
Нет там буферизации практически, там опреативы всего 2 кб, пишется все в реалтайме
чтобы долше флешка не дохла есть смысл форматировать на 1-5 Мб и сдвигать рабочий участок по мере деградации
так флешка в 2 гига при форматировании по 10 Мб и с ресурсом в 500 циклов перезаписи выдержит 100 000 логов
если по 10 логов снимать в день то на 27 лет хватит
Сообщение понравилось: Паяка

16 Июл 2018 в 10:34
Ответ #4
Оффлайн

Кass

Модератор Москва Сообщений: 4508
5. Схема.

Я бы не стал на 7805 подавать 19В. Я бы сначала поставил 7812, а только потом 7805. Ну или ставить нужно DC/DC преобразователь, который по входу имеет 9-36В.
Сообщение понравилось: Паяка, Водитель самолета

16 Июл 2018 в 13:01
Ответ #5
Оффлайн

Паяка

Россия, Челябинск Сообщений: 1652
, писали, что встроенный контроллер SD-карты каждый раз пишет на новое место, но утверждать не буду. Ещё и контроллеры могут попадаться разные.

Добавлено 16 Июл 2018 в 13:03
DC/DC преобразователь, который по входу имеет 9-36В
Самый компактный и дешёвый на MC34063, можно добыть из телефонной зарядки от прикуривателя.

16 Июл 2018 в 13:29
Ответ #6
Оффлайн

Necromant

Калининград Сообщений: 185
, писали, что встроенный контроллер SD-карты каждый раз пишет на новое место, но утверждать не буду. Ещё и контроллеры могут попадаться разные.
верно, но в пределах диапазона адресов указанных в FAT

19 Мар 2019 в 19:46
Ответ #7
Оффлайн

Иван77

Россия, Московская область Сообщений: 26
, попробую в ближайшее время.