avatar_UriBas

Моргалка на Arduino. Этюды для начинающих.

Автор UriBas, 08 Март 2017 в 16:08

« назад - далее »

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

UriBas

Ардуино  - это открытая среда программирования микроконтроллеров для начинающих и не только.. позволяет доступными методами реализовать самые смелые проекты зарядных устройств, позволяет объединять усилия людей разного уровня знаний.. и добиваться того, что не под силу одному.

Цель данной темы - создать зарядное устройство - "моргалку" т.е. заряд импульсами типа как на таймере 555, в разных вариантах.
[b-b]Некоторые алгоритмы применяемые в "моргалках"[/b-b]
Спойлер

Режим хранения -"Качели"
Спойлер
 
Применяется для предотвращения застарелой сульфатации (разряда) и для поддержания АКБ в рабочем состоянии в процессе хранения. 

Принцип работы качелей прост, - когда АКБ разряжается до нижнего порога напряжения = 12,6-12,9В (зависит от состояния и типа АКБ) включается заряд и АКБ заряжается до верхнего порога напряжения = 14,4-14,7В (или выше, также исходя из типа и состояния АКБ).  После того, как напряжение достигает верхнего порога, заряд отключается до момента, пока напряжение на АКБ снова не достигнет нижнего порога и так по кругу (как качели – «туда сюда»)

Пороги могут задаватся жестко  («простые качели») или настраиваться автоматически («адаптивные качели»), что зависит от схемы и от алгоритмов заложенных в зарядное устройство.

В «адаптивных качелях» могут применятся такие  алгоритмы как:
•   Определение нижнего порога по саморазряду, т.е. по скорости падения напряжения.
•   Определение верхнего порога по снижению тока заряда или (и) по «дельте» - т.е. по скорости повышения напряжения.

"Режим поддержания"
Спойлер

Адаптивный импульсный режим " Дельта"
Спойлер

Адаптивный импульсный режим "Дельта + "
Спойлер

"Капельный разряд"
Спойлер

Адаптивный разряд
Спойлер


[b-b]Пользователи, которые поместили свои схемы и скетчи[/b-b]

[user]Dkin[/user],    вариант регулируемый цикл заряд пауза (в секундах) и несущей частотой (1-350 Гц). При достижении напряжения отсечки (14,4В) происходит уход в паузу отсечки на настраиваемое время.
--------------------------------------------------------------------------------------------------------------------------------------------
[user]Dunkel[/user] 
версия от 31.10.2017 20:32  скетч с адаптивной паузой
Спойлер
действующий алгоритм.
Начальные параметры:
Пачка импульсов длительностью 30с.  Пауза между пачками 10с.   Импульсы в пачке длительностью 14мс.   Паузы между импульсами 14мс.
1. Измеряем Контрольный НРЦ, если превышает 14,4В  - делаем паузу 10с. (не допускаем перезаряд)
2. Начинаем пачку импульсов. После каждого импульса измеряем НРЦ. Если было касание 14,4В - прекращаем пачку импульсов, увеличиваем паузу между пачками на 0,1с.
3. Начинаем паузу между пачками. Каждые 100мс измеряем НРЦ. Если НРЦ упал до Контрольного и было касание 14,4В - прекращаем паузу между пачками, переходим к п.1.
Таким образом, по мере заряда, пачки импульсов становятся короче и в конце превращаются в одиночные импульсы.
версия от 17.11.2017 15:26  Адаптивный заряд алгоритма "дельта" с применением подсчета импульсов
Спойлер
По совету коллег внес некоторые изменения. Теперь напряжение измеряется все время - и в паузе и в импульсе. В импульсе измерение происходит с точностью 10-бит, каждую 1мс.
В паузе между пачками импульсов точность 16-бит, измерения каждые 100мс - вычисляется скорость изменения напряжения в мВ/с.
Использовал нестандартный Ардуино с 16-битным АЦП: https://www.aliexpress.com/item/MassDuino-UNO-LC-MD-328D-R3-5V-3-3V-Development-Board-for-Arduino-Compatible-Low-Cost/32655296623.html  Для сравнения попробовал оверсемплинг на обычной pro mini,  128  измерений дают примерно такую-же точность. По крайней мере визуальных отличий в работе алгоритма я не обнаружил.
Алгоритм: Начальные параметры:
Пачка импульсов длительностью 30с.  Пауза между пачками 10с. Импульсы в пачке длительностью 14мс.  Паузы между импульсами 14мс.
1. Измеряем Контрольный НРЦ, если превышает 14,2В  - делаем паузу 10с. (не допускаем перезаряд)
2. Начинаем пачку импульсов. В импульсе каждую 1мс измеряем напряжение. Если было касание 14,4В или напряжение (дельта) превысило на 0,4-0,6В Контрольный НРЦ  - прекращаем пачку импульсов, увеличиваем паузу между пачками на 1с.
3. Начинаем паузу между пачками. Каждую секунду вычисляем скорость уменьшения напряжения, если меньше 2-4мВ/с - уменьшаем паузу между пачками на 1сек, переходим к п.1.
В процессе заряда, сначала паузы сокращаются до минимума (1сек.) без изменения длительности пачки импульсов, а затем по достижению дельты 0,4-0,6В сокращается импульс до минимальных 0,1сек., а пауза начинает увеличиваться.
еще пара проверенных вариантов схемы 11 Янв 2018 в 18:49
версия (6) от 12.01.2018  16:44  "безпороговый алгоритм"
Спойлер
----  Еще одна модификация алгоритма. По моей нумерации это версия 6.
Переделал процедуру калибровки импульса (кванта). Теперь происходит не только постоянное уменьшение кванта, но и его увеличение (при необходимости) путем ухода на перекалибровку.
Критерием является превышение длительности пачки в 500 000 квантов.
Также добавлена начальная раскачка больных или сильно разряженных АКБ путем временного повышения Дельты на 1В.    Для отлавливания "больных" введен параметр "Спад" - разница между максимальным напряжением при заряде и максимальным напряжением в текущей пачке. Если Спад увеличивается при малых значениях длительности пачки, значит АКБ не принимает заряд..
Экспериментальным путем в качестве лечения было выбрано временное увеличение Дельты на 1В, что позволяет АКБ восстановить хотя бы минимальную способность воспринимать заряд. После окончания восстановительной процедуры и последующей перекалибровки, заряд возвращается в штатный режим. ---- 
https://electrotransport.ru/index.php?msg=1261951 - Небольшая иллюстрация возможностей адаптивного алгоритма без контроля пороговых значений. Коэффициент делителя задан с ошибкой процентов на 20. Несмотря на это, заряд прошел абсолютно нормально, только график получился неправильный:   
версия - схема на IR2101 от 25.01.2018 в 21:12
Версия - заряд 6В АКБ!!.  от 29.01.2018  21:45
Спойлер
Попробовал зарядить 6В АКБ.  Специально для опытов приобрел GS1,3-6  https://www.chipdip.ru/product/gs1.3-6
1,3 А/ч, Cycle use 7,2-7,5V,  0,39A MAX. Из магазина на клеммах 6,3В.   Заряжал с помощью БП 12В 2А (это на нем написано, ток не проверял).
Алгоритм тот же, ориентироваться по пороговым значениям не стал, ввел параметр "вольтаж", который пропорционально корректирует параметры, связанные с количеством банок.  Т.е. для 6В вдвое уменьшается Дельта, dU/dT и т.д. Подробности в скетче.   Алгоритм отработал вполне успешно, НРЦ 6,71В через полтора часа после окончания заряда, через 12ч. 6,6В.   
версия заряда беспороговой дельтой  NiMH 3,6V 250mAh 01 Фев 2018 в 21:47
Мнемоническая схема алгоритма
Спойлер
Для облегчения понимания нарисовал укрупненную блок-схему моей текущей реализации беспорогового алгоритма. 
Алгоритм строго последовательный - дали воздействие, посмотрели на реакцию, применили коррекцию при необходимости и т.д.   Никакие жесткие привязки к частоте или времени (ШИМ, таймер и пр.) здесь не годятся.
Величину Delta можно усредненно принять по 0,1В на каждую банку, но лучше подбирать индивидуально под каждый конкретный экземпляр АКБ.   dUmin = 2-6мВ, принципиальной разницы не имеет.
Спойлер
Моргалка на модуле esp32 с измерением внутреннего сопротивления 11 апр 2018 в 21:47  Схема, графики и скетч
Спойлер
Схема
Сначала замеряют ЭДС -V1  (НРЦ в паузе), потом подают определенный ток Y и снова мерят напряжение V2  затем вычисляют вн. сопр.    Rвн =(V2  -V1)/ Y    Сделал по простому - резистор 0,1 Ом в качестве шунта, на нем измеряется ток.
Итак, моргалка на esp32, АКБ 6В 1,2Ач, БП 8В.  Дельта 0,4В
Графики
Заряд около суток:

Длительность импульса и паузы в мс:

Какое-то Rвн.

Напряжение в импульсе:

Скетч
// analogread-esp32
// 12/04/2018
// (c)dunkel
// esp32, питание 5V stab
// Pin32 - заряд, на затвор мосфета
// Pin33 - разряд, на затвор мосфета
// PinА1 - напряжение с делителя АКБ 1k/5.1k
// PinА3 - шунт 0.1Ом

#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
unsigned long t;
int pin = 32;
void setup() {
  Serial.begin(9600);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  pinMode(pin, OUTPUT); // - на затвор мосфета заряда
  digitalWrite(pin, LOW); //
}
void loop() {
  float U0 = 0;
  float U1 = 0;
  float U2 = 0;
  float I = 0;
  float R = 0;
  t = micros();
  //  delay(700);
  U0 = readU016();
  t = micros() - t;
  Serial.print(" 32 000 ar, U0 ");  Serial.print(U0, 4);
  Serial.print("  ,t = ");   Serial.print(t); Serial.print(" us");
  SerialBT.print(",  32 000 ar, U1 ");  SerialBT.print(U0, 4);
  SerialBT.print("  ,t = ");   SerialBT.print(t); SerialBT.print(" us");
  t = micros();
  digitalWrite(pin, HIGH); //
  //  delayMicroseconds(400);
  U1 = 0;
  U2 = 0;
  for (int j = 1; j <= 32; j++) {
    U1 += analogRead(A0);
    U2 += analogRead(A3);
  }
  U1 = U1 * 0.0001816;
  U2 = U2 * 0.0001834;
  digitalWrite(pin, LOW); //
  t = micros() - t;
  I = (U2 - U1) * 10;
  R = (U1 - U0) / I - 0.1;
  Serial.print("  32 ar, U1 "); Serial.print(U1, 4);
  Serial.print("  32 ar, U2 "); Serial.print(U2, 4);
  Serial.print(" , I "); Serial.print(I, 4);
  Serial.print(" , R "); Serial.print(R, 4);
  Serial.print("  ,t = ");   Serial.print(t); Serial.println(" us");
  SerialBT.print("  32 ar, U1 "); SerialBT.print(U1, 4);
  SerialBT.print("  32 ar, U2 "); SerialBT.print(U2, 4);
  SerialBT.print(" , I "); SerialBT.print(I, 4);
  SerialBT.print(" , R "); SerialBT.print(R, 4);
  SerialBT.print("  ,t = ");   SerialBT.print(t); SerialBT.println(" us");
}


// Измерение UAK 32000, длительность 300мс
float readU016() {
  long U1 = 0; //Напряжение на АКБ
  float result = 0.0;
  float V1 = 0.0;
  float K1 = 0.0000001814; // 32000 300ms 5.1k/1k esp32
  for (int j = 1; j <= 32000; j++) {
    U1 += analogRead(A0);
  }
  V1 = U1 * K1;
  result =  V1;
  return result;
}

------------------------------------------------------------------------------------------------------------------------------------------------
[user]Necromant[/user]   
версия от 19.02.2018 00:47
Спойлер
Предлагаю свой вариант простейшей моргалки с элементами адаптивного алгоритма.
Я моргаю обычным трансформаторным выпрямителем: 2 трансформатора ТН180 (выход 12,6В), диодный мост, конденсатор на 2200 мкФ. К выводам аккумулятора подключаю клеммы от зарядного и крокодилами моргалку, причем стараюсь чтобы клемма зарядного не касалась крокодила, был контакт только через вывод аккумулятора. Питание моргалки по USB от зарядника для мобильника. Выпрямитель подключен через твердотельное реле, применены обычные провод с вилкой и розетка.
Про моргалку:
Делитель напряжения из тех номиналов, что были под рукой. Massduino выбрано именно из-за 16-битного АЦП.  Можно использовать и 12-битные.
Калибровка заключается в определении отсчета 0В (U0 при замкнутых крокодилах) и пары-тройки точек для определения наклона линейной характеристики делителя + АЦП (он отличается от чисто расчетного)  и вычисление коэффициента maxV (соответствует отсчету 65535) .
Цена вопроса: контроллер 130 руб, реле SSR-10DA 150 руб, крокодилы 8 руб, резисторы, вилка с розеткой из запасов.
версия (3) от 8.03.2018 17:13
Спойлер
Теперь не только адаптивная пауза (и подача по паузе), но и адаптивная скорость dU/dt, что позволило отказаться от этапов зарядки.
На сильно разряженном короткие подачи и небольшие паузы
В середине зарядки паузы и подачи равны
В конце заряда пауза удлиняется, подача сокращается
Ограничение подачи до 14,4 всю зарядку
версия (4) от  17. 03. 2018 в 00:50 
Спойлер
поправил алгоритм (немного некорректно работал),  стала сильнее заметней разница в паузе для хорошего и плохого аккумулятора и корректней капельница,  увеличилась пауза в конце добивки

------------------------------------------------------------------------------------------------------------------------------------------------
[user]Яков93[/user]  (имеет очень полезные наработки  зарядных/разрядных устройств на Ардуино, на этом форуме)
моргалка Ардуино на UPS
Универсальный комбайн для КТЦ 
активный балансир на 6 банок АКБ
------------------------------------------------------------------------------------------------------------------------------------------------
[b-b]Краткий путеводитель по теме[/b-b]
Спойлер

2стр - обсуждение delay millis в программе, про частоту, про метку в коде куски кода
3стр -  в ответе 42 от Dkin первый код программы, [b-b]обсуждение алгоритма [/b-b]отв 44, отв 48 [b-b]время выполнения команд от Dkin [/b-b]и предложение [b-b]от UstAlexei по оптимизации кода[/b-b] - деления.
4стр - Продолжается обсуждение и оптимизация кода, предложение от Реношника отв 56, также от mr.Dream, первые испытания кода на практике от Dunkel
5стр   - Обсуждение частей моргалки дисплея, МК, предложени ИС-Х по вольтмтру, расчет делителя от Dkin, 
6стр - Обсуждение опорного напряжения, какое лучше, какой делитель.
7стр – Предложение Алексея по оптимизации AnalogRead()
8, 9, 10, 11 стр - обсуждение мосфетов, какие ставить, разные схемы.
12, 13стр - схема от Реношника, обсуждение земли» общая или раздельная, предложение от  Dunkel схема (Dkin выходит из себя..)
14стр – полная схема моргалки от    Dkin     обсуждение схемы, подключение по портам, делитель и до какого напр делать.   схема в sPlan 7.0 для Ардуины "Мини"
15стр. – схема от Dkin 
16 стр – нужен ли экран и что на него выводить, какие данные
17стр. – Схемы и печатные платы моргалки
18, 19стр. – Доводка печатной платы и схемы готовые варианты, дальше пауза
20,21 стр. – возобновление обсуждения нужности экрана. Скетчи от Дункель»  и схемы с двумя делителями.
22, 23стр. –  обсуждение двух делителей, рабочие скетчи от Дункель«  первый скетч от Дункель с адаптивной паузой и длит пачки имп.
24 стр
25стр , « Ответ #440 схема от UriBas
26, 27, 28, 29,30, 31стр  – обсуждение второстепенных тем (разных платформ и пр.), точности замеров, сторонние протоколы.. на 29 есть реальные замеры Дункель и обсуждение от куда берется точность у Меги в 1мВ
32 - 36 стр  какие драйверы применять, обсуждение питания светодиодов и портов МК,   Ответ #641 скетч от geometr
37 стр - про измерения, как замерить [b-b]скорость падения 2-4мВ/с и Дельту[/b-b]
38стр -  тема про вычисления АЦП, шумы, хватит ли 20В для раскачки АКБ.
39 стр  - примечательна ссылка на хороший учебник (Яков), [b-b]обсуждение схемы на драйверах Дункель[/b-b], ссылка на оч. хороший ДС-ДС             преобразователь 20А от 0 до 50В с точностью до тысячных Ампера и сотых вольта.  Новые скетчи и графики от Дункель, [b-b]интересные результаты по Дельте!! [/b-b]
40стр - снова о точности измерений (на 6 янв 2018) ЛОГ от Дункель,  анализ и обсуждение, особенности схемы.
41 стр. Проверенные схемы от Дункель [b-b]1) Драйвер TLP250 2) Драйвер на биполярных транзисторах.  [/b-b]Новая версия скетча №6 с улучшенными алгоритмами - добавлена раскачка и другие параметры, представлен график заряда и квасеков".. (редакт 24 янв 2018)
42 стр.  Пару постов полемики о полезности импульсов..  о заменяемости полевого транзистора, [b-b]схема от Дункель на IR2101 и n-fet [/b-b] 
43 стр.  Полемика "как ведет себя напряжение в паузе "  и как будет реагировать БП моргалки.  [b-b] Эксперимент от Дункель заряда 6В АКБ и уменьшение Дельты в два раза.  Скетч, графики, лог[/b-b]
44 стр.  [b-b]Опыт проверки алгоритма на заряде никель кадмиевых аккумуляторов Дункель [/b-b] Ссылка на программный фильтр от [user]11vetal[/user] http://chipenable.ru/index.php/item/162  и обсуждение ..
45 стр.  Еще ссылка на цифровой фильтр от [user]11vetal[/user],  http://we.easyelectronics.ru/Theory/chestno-prostoy-cifrovoy-filtr.html   обсуждение..  и пример упрощенного фильтра Калмана [user]11vetal[/user] далее обсуждение быстродействия и прочее.
46 стр.  .. продолжение обсуждение на грани спора об языках, о быстродействии.. Вставка кода программирования таймеров   и фото девайса (без кода) от [user]Alex_N[/user],  ...  и обсуждение .. (10 февр 2018)
47 стр.  Дебаты Серг А.Сороки и Касс о работе АЦП
48 стр. Продолжение обсуждение АЦП   И  « Ответ #858 : 19 Фев 2018 в 00:47 »[user]Necromant[/user] ,  [b-b] вариант простейшей моргалки с элементами адаптивного алгоритма. [/b-b] скетч, схема,[b-b] алгоритм по Вурдбриджу[/b-b] но с паузами !!
49 стр. Обсуждение использования трансформатора в качестве моргалки, [user]Necromant[/user], [b-b]практическое использования алгоритма и моргалки на трансе [/b-b]
50 стр. [user]Necromant[/user], [user]UriBas[/user],  обсуждение  алгоритма  [user]KIE[/user], об управлении транса
51стр. - обсуждение дуины MD-328D
52стр. - Обсуждение фильтра от [b-b]Alex_N[/b-b] и обсуждение интерфейса зарядки
53стр. - Модульность возможна? Обсуждение быстродействия и интерфейса,  реалтайм и прочее.
54стр. - [user]Dunkel[/user] схема опторазвязки с usb,  далее сообщения  [user]Dkin[/user] про колебания с IRL3713 [user]Dunkel [/user] предоставил данные по точности  измерений.
55стр. -[user]Dkin  [/user] - идеи по схемотехнике.  [user]Ribbentrop [/user]- ссылки на приборы.   Далее обсуждения про колебания возникающие при использовании в качестве ключа - полевого транзистора IRL3713 [user]Alex_N[/user] - предоставил фото своей моргалки (без скетча и схемы)
56стр. - [user]Necromant  [/user]  « Ответ #994 новая версия скетча.   Далее дебаты по измерениям. [user][user]bones[/user][/user] выложил график замера через [b-b]ads1115 [/b-b] без усреднений [user]Alex_N[/user]  выложил пример своих измерений в файле.  Таблица Дункель с сравнительными усредн. измерениями от 8 до 1000 выборок, [user]UriBas[/user] про модули мосфетов с Али.
57стр. - Продолжение темы про мосфеты.. далее про методы измерение внутр. сопр,  Alex_N сделал десульфатор с 2кГц частоты и обсуждение.
58стр. - Продолжение обсуждения частоты ШИМ, далее про изм вн. сопр. [user] Alex_N[/user] выложил [b-b]скетч управления десульфатором [/b-b].  Далее [user]Dunkel[/user], выложил новый [b-b]вариант моргалки на esp32[/b-b] и тестовыми графиками АКБ 6В 1,2Ач, БП 8В.  и с Дельтой= 0,4В.
59стр. Обсуждение R. Графики и эксперименты  [user]Dunkel[/user] и их обсуждение
60стр.  Корректировка [user]Dunkel[/user] "Дельты" по внутреннему сопр.
61стр.  Обсуждение -  ESP32 относится ли к Ардуино?   Процедура определения оптимального тока с помощью ЛБП  и емкости по дельте 0,03В  [user]UriBas[/user].. обсуждение.  Опыты и тесты от [user]sancta[/user] обсуждение
62стр.   ответы №1098 - №1115  Графики [user]Dunkel[/user]  -  зависимость  частота-скважность-Rвн   Обсуждение опытов [user]sancta[/user]
63стр.    ответы №1116 - №1130  Обсуждение опытов [user]sancta[/user]  Предложения по КТЦ.  Ссылки на инструкции по КТЦ
64стр.
[b-b]Что такое КТЦ (контрольно тренировочный цикл) и как правильно проводить (ссылки) [/b-b]
Спойлер



Развитие и продолжение данной темы это Продвинутое самодельное универсальное ЗУ на МК
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Dkin

#1
          Предлагаю вариант моргалки для зарядки и восстановления аккумуляторов. Разработана на ардуино нано. В качестве ключа использован транзистор IRL3713 (30В, 260А, 3 мОм).

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

Что нужно:
1. Ардуино
Я использовал самую дешевую, программируюмую непосредственно через microUSB. Стоимость - 200 руб., доставка 20 дней до России.

Спойлер

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

3. Драйвер для работы с платой ардуино
В моем случае это CH340 - устанавливаем один раз.

Спойлер



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



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.
Кнопка и разрядный ключ тоже пока не используются.

Спойлер




6. Печатная плата (45х65 мм).

Спойлер




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





Еще один вариант моргалки от [user]Dukel[/user]

mr.Dream

Только не скважность, а коэфициент заполнения автор имел ввиду.
Скважность 50,00 это 1/50 времени периода, то есть 2%.
Если все таки имелось ввиду действительно скважность, прошу прощения. Просто часто замечаю подмену этих понятий, что приводит к путанице.

Dkin

Цитата: UriBas от 19 Март 2017 в 20:07
Чтобы можно было потом разобраться что к чему.   Было бы хорошо в самом скетче, в заголовке, указывать последнюю дату обновления и описание алгоритма или ссылку..   
Отличное предложение, сейчас поправлю. Вообще моя версия, думаю это начало начал. Нужно дорабатывать ее, чтобы и измеритель напряжения был , например для остановки по верхней границе напряжения или по скорости изменения напряжения.

Цитата: mr.Dream от 19 Март 2017 в 20:19
Только не скважность, а коэфициент заполнения автор имел ввиду.
Да, когда читал формулу, все перепутал, конечно коэффициент заполнения.

UriBas

#4
Цитата: Dkin от 19 Март 2017 в 20:30.. Вообще моя версия, думаю это начало начал.
Так и есть, вообще надо чтобы было несколько готовых версий, от очень простой (разумно) до ... скажем с наворотами, поэтому надо определится со стратегией.  1) Делаем минимально упрощенную версию, чтобы даже начинающий первоклашка или не электронщик (как в теме и указано) мог легко повторить...  поэтому надо максимально комментировать схему, алгоритм, скетч..  и прочее.   Далее уже по мере сложности..  но нужно сразу поставить цель с переспективой, что к примеру Вы хотели бы видеть в конечном варианте?
Цитата: Dkin от 19 Март 2017 в 20:30Нужно дорабатывать ее, чтобы и измеритель напряжения был , например для остановки по верхней границе напряжения или по скорости изменения напряжения ...    Да, когда читал формулу, все перепутал, конечно коэффициент заполнения.
Да, будем говорить о коэф. заполнения, а не о скважности.   Конечно, без привязки к напряжению моргалка становится слишком уж ущербной и неоправданно дорогой..  т.е. типа получаем обычное реле, но только при наворотах с полевиками, с Мегой 328 с переходниками и пр.. 

Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Dkin

В перспективе вижу добавить только делитель напряжения. Получается ардуино + выходной ключ и делитель напряжения. Больше ничего. Скорее всего предложат добавить второй ключ для разряда, логгер, wi-fi и т.д. Затем добавить пылесос, кофеварку и настольную лампу (простите за каламбур). Так обычно бывает на форумах, ищешь в интернете схему простой сигнализации, а получаешь, то, что будешь собирать 5 лет и не настроишь в конечном итоге, такие схемы я не рассматриваю. Поэтому хотел бы видеть простую, универсальную моргалку, легкую для повторения и с простыми пояснениями изменений настроек. Сложные, готовые и более эффективные устройства здесь на форуме уже есть.

UriBas

Цитата: Dkin от 19 Март 2017 в 21:10В перспективе вижу добавить только делитель напряжения. ... Поэтому хотел бы видеть простую, универсальную моргалку, легкую для повторения и с простыми пояснениями изменений настроек. Сложные, готовые и более эффективные устройства здесь на форуме уже есть.
Понятно, в принципе на форуме есть уже подобные простые схемы, только на других процессорах (Тини13, Пики", ) Можно взять за основу
1) Схема только с делителем напр.
Спойлер
2) Схема с делителем и  разрядом
Спойлер
А как собираетесь выводить информацию?
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Dkin

Спасибо за схемы.
Цитата: UriBas от 19 Март 2017 в 21:34
А как собираетесь выводить информацию?
Можно на двухстрочный дисплей, с ними я работал, но т.к. я взят курс на максимальное упрощение, то скорее всего на светодиоды (заряд и отсечка по верхнему напряжению в перспективе).

Яков93

[user]Dkin[/user], если не ошибаюсь программа работает так
Заряд в течение 14 млс. (impnes1 = 10 * skv1 / freq;)
Отключение заряда в течение 14 млс. (pausenes1 = 10 * (100 - skv1) / freq;)
Получается частота действительно 35 Гц с заполнением 50%.

Каждые 30 секунд заряд отключается на 10 секунд.

Алгоритм мне кажется очень затяжной получается, может я и не прав.

По скетчу.
Спойлер
Вы используете много излишне тяжелых переменных - long и float где это не нужно. Единственное место где нужен long  в "previousMillis" и "currentMillis". В остальных местах можно использовать "int" или вообще "byte", они занимают в памяти МК меньше места. Float вообще для значений с запятой до фиг знает какого знака, а у Вас таких значений нет. Сейчас конечно проблем нет, т.к. скетч очень простой, Но если захотите в будущем приделать пылесос и кофеварку на все может не хватить памяти.

Плюс совсем не обязательно в цикле каждый раз проводить тяжелые вычисления деления/умножения чисел с плавающей точкой
impnes1 = 10 * skv1 / freq; // расчет импульса заряда
pausenes1 = 10 * (100 - skv1) / freq; // расчет паузы
Поставьте эти вычисления в самое начало, там где переменные объявляете. Они же все равно за время работы скетча не меняются, в самом начале программы они вычислятся один раз и этого хватит.

Да, и использовать delay() для таких огромных пауз как 10 секунд неправильно. Особенно если захотите прикрутить вольтметр нужно будет постоянное измерение как можно чаще. Вы же пользуетесь таймером
if (currentMillis - previousMillis > zar1*1000)
Такие же таймеры надо ставить и вместо этих могучих delay(10000).

Это конечно не требования, но пожелания.

Я тоже делаю подобные моргалки на свои ИБП.

Dkin

Отличные замечания! Вообще отказаться от delay - первостепенная задача, только я еще не разбирался. Оказывается еще можно и переменные упростить.

ihor

Тема хорошая и нужная :wow:, но только для "рукастых самодельщиков".
Почему? Навесным не сделаешь, травить паять.
                БП, абы какой не пойдет, проверено.
                "Плюшками"обрастет и к бабке не ходи...
З.Ы. Навеяло...где-то уже такое было...поискал, таки да, Сорока ранее такого типа тоже делал и более ранняя версия на светодиодах без БП была, но с егоной программой.
Спойлер

Dkin

Намечу первоначальный курс, чтобы не уходить в сторону.
Алгоритм
При включении моргалки 1 этап: настраиваемые времена заряд/пауза с несущей частотой.
При достижении напряжения на аккумуляторе 14,4В (это напряжение можно менять в настройках) - переход на 2 этап.
2 этап: при достижении 14,4В - отключение заряда на паузу, время которой можно установить в настройках.
По истечении паузы - опять заряд с несущей частотой до 14,4В.
Т.о. получается настраиваемые независимые времена для 1 и 2 этапов.
Думаю пока хватит.

Dkin

Настройки:

Общие
несущая частота
коэффициент заполнения

1 этап
время заряда
время паузы

2 этап
напряжение отсечки
время паузы

Добавлено 20 Март 2017 в 10:42

Светодиоды:
Зеленый - горит во время заряда,
Красный - загорается на 1 сек. при достижении напряжения отсечки.

Попытаюсь написать программу и нарисовать схему для этого алгоритма, нужно немного времени.

Dkin

Цитата: UstAlexei
Предлагаю сразу же рассмотреть вопрос о выводе информации и изменении уставок напряжений / скважности и т.п. через терминал.
Сначала бы просто программу написать, потом будем дополнять
Цитировать
И зачем в цикле вычислять то что и так постоянно (Ton / Toff) ?
Это замечание высказали уже, перенесу в начало программы

Яков93

#14
Цитата: Dkin от 19 Март 2017 в 18:35
          Предлагаю вариант моргалки для зарядки и восстановления аккумуляторов. Разработана на ардуино нано, можно использовать любую ардуино. В качестве ключа использована TLP250 и два транзистора IRL3713 (30В, 260А, 3 мОм).
Скетч дали, а схемку? Зачем, к примеру, там мосфеты аж на 260А, - где такой источник тока взять? И почему их сразу два?
Может также и драйвер TLP250 не нужен, это же IRL мосфеты, они и без драйвера просто от 4,5-5В полностью откроются

Просто подключаете затвор прямо к выходу ардуино через резистор 100 Ом и все должно работать. Гигантских напряжений на мосфете нет чтобы ардуино пробить, т.е. функция оптопары тоже не нужна.

Не скажу что в Вашем варианте делать невозможно, но можно ведь и еще проще и дешевле.

Dkin

IRL3713 с запасом взяты, можно и по-проще. Будем экспериментировать, вроде как TLP250 более резкий фронт делает.

Dunkel

Начал делать примерно такую же штуку, только вместо ардуины взял digispark, но это не принципиально. Подключил к выходу затвор IRF2807 через 100 Ом - работает, светодиодом моргает. Теперь встал вопрос - а чем моргать-то?
Есть китайская понижайка CC/CV, заряжаю ей упсовые АКБ 7А/ч.
Подключить мосфет между ее выходом и АКБ?
Или так не получиться?
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

Dkin

#17
Получится. Напряжение на ней должно быть не меньше 17-18 вольт, чтобы ток при напряжении на АКБ 14,4В не снижался.
Я мигаю Кулоном 715А, напряжение поднял до 17В, ток он до 20А дает в импульсе.