Электротранспорт
Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск    

Реклама:

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

Страницы: 123 ... 62>>Вниз

Автор Тема: Моргалка на Arduino. Этюды для начинающих.  (Прочитано 33887 раз)

Dunkel, Ribbentrop, UriBas и 2 Гостей просматривают эту тему.

UriBas

  • Старожил
  • *****
  • Репутация: 13
  • Сообщений: 1313
  • Украина, Ровно
  • Ездю на батарейках!
  • Онлайн Онлайн
    • Награды
Ардуино  - это открытая среда программирования микроконтроллеров для начинающих и не только.. позволяет доступными методами реализовать самые смелые проекты зарядных устройств, позволяет объединять усилия людей разного уровня знаний.. и добиваться того, что не под силу одному.

Цель данной темы - создать зарядное устройство - "моргалку" т.е. заряд импульсами как в упрощенном варианте (типа как на таймере 555), так и с адаптивными алгоритмами в разных вариантах.

Пользователи, которые поместили свои схемы и скетчи

  вариант регулируемый цикл заряд пауза (в секундах) и несущей частотой (1-350 Гц). При достижении напряжения отсечки (14,4В) происходит уход в паузу отсечки на настраиваемое время.
--------------------------------------------------------------------------------------------------------------------------------------------
 
версия от 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/ussr/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  Схема, графики и скетч
Скрытый текст
СхемаМоргалка на Arduino. Этюды для начинающих.
Сначала замеряют ЭДС -V1  (НРЦ в паузе), потом подают определенный ток Y и снова мерят напряжение V2  затем вычисляют вн. сопр.    Rвн =(V2  -V1)/ Y    Сделал по простому - резистор 0,1 Ом в качестве шунта, на нем измеряется ток.
Итак, моргалка на esp32, АКБ 6В 1,2Ач, БП 8В.  Дельта 0,4В
Графики
Заряд около суток:
Моргалка на Arduino. Этюды для начинающих.
Длительность импульса и паузы в мс:
Моргалка на Arduino. Этюды для начинающих.
Какое-то Rвн.
Моргалка на Arduino. Этюды для начинающих.
Напряжение в импульсе:
Моргалка на Arduino. Этюды для начинающих.
Скетч
// 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;
}

------------------------------------------------------------------------------------------------------------------------------------------------
   
версия от 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 
Скрытый текст
поправил алгоритм (немного некорректно работал),  стала сильнее заметней разница в паузе для хорошего и плохого аккумулятора и корректней капельница,  увеличилась пауза в конце добивки

------------------------------------------------------------------------------------------------------------------------------------------------
  (имеет очень полезные наработки  зарядных/разрядных устройств на Ардуино, на этом форуме)
моргалка Ардуино на UPS
Универсальный комбайн для КТЦ 
активный балансир на 6 банок АКБ
------------------------------------------------------------------------------------------------------------------------------------------------
Краткий путеводитель по теме
Скрытый текст
2стр - обсуждение delay millis в программе, про частоту, про метку в коде куски кода
3стр -  в ответе 42 от Dkin первый код программы, обсуждение алгоритма отв 44, отв 48 время выполнения команд от Dkin и предложение от UstAlexei по оптимизации кода - деления.
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 стр - про измерения, как замерить скорость падения 2-4мВ/с и Дельту
38стр -  тема про вычисления АЦП, шумы, хватит ли 20В для раскачки АКБ.
39 стр  - примечательна ссылка на хороший учебник (Яков), обсуждение схемы на драйверах Дункель, ссылка на оч. хороший ДС-ДС             преобразователь 20А от 0 до 50В с точностью до тысячных Ампера и сотых вольта.  Новые скетчи и графики от Дункель, интересные результаты по Дельте!!
40стр - снова о точности измерений (на 6 янв 2018) ЛОГ от Дункель,  анализ и обсуждение, особенности схемы.
41 стр. Проверенные схемы от Дункель 1) Драйвер TLP250 2) Драйвер на биполярных транзисторах.  Новая версия скетча №6 с улучшенными алгоритмами - добавлена раскачка и другие параметры, представлен график заряда и квасеков".. (редакт 24 янв 2018)
42 стр.  Пару постов полемики о полезности импульсов..  о заменяемости полевого транзистора, схема от Дункель на IR2101 и n-fet  
43 стр.  Полемика "как ведет себя напряжение в паузе "  и как будет реагировать БП моргалки.  Эксперимент от Дункель заряда 6В АКБ и уменьшение Дельты в два раза.  Скетч, графики, лог
44 стр.  Опыт проверки алгоритма на заряде никель кадмиевых аккумуляторов Дункель Ссылка на программный фильтр от http://chipenable.ru/index.php/item/162  и обсуждение ..
45 стр.  Еще ссылка на цифровой фильтр от http://we.easyelectronics.ru/Theory/chestno-prostoy-cifrovoy-filtr.html   обсуждение..  и пример упрощенного фильтра Калмана далее обсуждение быстродействия и прочее.
46 стр.  .. продолжение обсуждение на грани спора об языках, о быстродействии.. Вставка кода программирования таймеров   и фото девайса (без кода) от ,  ...  и обсуждение .. (10 февр 2018)
47 стр.  Дебаты Серг А.Сороки и Касс о работе АЦП
48 стр. Продолжение обсуждение АЦП   И  « Ответ #858 : 19 Фев 2018 в 00:47 » вариант простейшей моргалки с элементами адаптивного алгоритма. скетч, схема, алгоритм по Вурдбриджу но с паузами !!
49 стр. Обсуждение использования трансформатора в качестве моргалки, , практическое использования алгоритма и моргалки на трансе
50 стр. , ,  обсуждение  алгоритма  , об управлении транса
51стр. - обсуждение дуины MD-328D
52стр. - Обсуждение фильтра от Alex_N и обсуждение интерфейса зарядки
53стр. - Модульность возможна? Обсуждение быстродействия и интерфейса,  реалтайм и прочее.
54стр. - схема опторазвязки с usb,  далее сообщения  про колебания с IRL3713 предоставил данные по точности  измерений.
55стр. - - идеи по схемотехнике.  - ссылки на приборы.   Далее обсуждения про колебания возникающие при использовании в качестве ключа - полевого транзистора IRL3713 - предоставил фото своей моргалки (без скетча и схемы)
56стр. -   « Ответ #994 новая версия скетча.   Далее дебаты по измерениям. [/user] выложил график замера через ads1115 без усреднений   выложил пример своих измерений в файле.  Таблица Дункель с сравнительными усредн. измерениями от 8 до 1000 выборок, про модули мосфетов с Али.
57стр. - Продолжение темы про мосфеты.. далее про методы измерение внутр. сопр,  Alex_N сделал десульфатор с 2кГц частоты и обсуждение.
58стр. - Продолжение обсуждения частоты ШИМ, далее про изм вн. сопр. выложил скетч управления десульфатором .  Далее , выложил новый вариант моргалки на esp32 и тестовыми графиками АКБ 6В 1,2Ач, БП 8В.  и с Дельтой= 0,4В.
« Последнее редактирование: 13 Апр 2018 в 22:28 от UriBas »

Сообщение понравилось: Dkin, Dunkel, LANcetnick, Серик, Massa75

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #1 : 19 Мар 2017 в 18:35 »
          Предлагаю вариант моргалки для зарядки и восстановления аккумуляторов. Разработана на ардуино нано. В качестве ключа использован транзистор IRL3713 (30В, 260А, 3 мОм).

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

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


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

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

Скрытый текст
* DRIVER-CH340G.rar (69.58 кБ - загружено 53 раз.)


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



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 кБ - загружено 80 раз.)


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

Скрытый текст

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


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



Еще один вариант моргалки от
« Последнее редактирование: 01 Ноя 2017 в 14:12 от Яков93 »

Сообщение понравилось: LANcetnick, Griig, UriBas, Олег., ihor, Серик, Umid, LANcetnick

mr.Dream

  • Старожил
  • *****
  • Репутация: 107
  • Сообщений: 2979
  • Ternopil, Ukraine
  • Ездю на лифере :)
  • Онлайн Онлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #2 : 19 Мар 2017 в 20:19 »
Только не скважность, а коэфициент заполнения автор имел ввиду.
Скважность 50,00 это 1/50 времени периода, то есть 2%.
Если все таки имелось ввиду действительно скважность, прошу прощения. Просто часто замечаю подмену этих понятий, что приводит к путанице.

Сообщение понравилось: Dkin

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #3 : 19 Мар 2017 в 20:30 »
Чтобы можно было потом разобраться что к чему.   Было бы хорошо в самом скетче, в заголовке, указывать последнюю дату обновления и описание алгоритма или ссылку..   
Отличное предложение, сейчас поправлю. Вообще моя версия, думаю это начало начал. Нужно дорабатывать ее, чтобы и измеритель напряжения был , например для остановки по верхней границе напряжения или по скорости изменения напряжения.

Только не скважность, а коэфициент заполнения автор имел ввиду.
Да, когда читал формулу, все перепутал, конечно коэффициент заполнения.

UriBas

  • Старожил
  • *****
  • Репутация: 13
  • Сообщений: 1313
  • Украина, Ровно
  • Ездю на батарейках!
  • Онлайн Онлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #4 : 19 Мар 2017 в 20:52 »
  .. Вообще моя версия, думаю это начало начал.
Так и есть, вообще надо чтобы было несколько готовых версий, от очень простой (разумно) до ... скажем с наворотами, поэтому надо определится со стратегией.  1) Делаем минимально упрощенную версию, чтобы даже начинающий первоклашка или не электронщик (как в теме и указано) мог легко повторить...  поэтому надо максимально комментировать схему, алгоритм, скетч..  и прочее.   Далее уже по мере сложности..  но нужно сразу поставить цель с переспективой, что к примеру Вы хотели бы видеть в конечном варианте?
   Нужно дорабатывать ее, чтобы и измеритель напряжения был , например для остановки по верхней границе напряжения или по скорости изменения напряжения ...    Да, когда читал формулу, все перепутал, конечно коэффициент заполнения.
Да, будем говорить о коэф. заполнения, а не о скважности.   Конечно, без привязки к напряжению моргалка становится слишком уж ущербной и неоправданно дорогой..  т.е. типа получаем обычное реле, но только при наворотах с полевиками, с Мегой 328 с переходниками и пр.. 

« Последнее редактирование: 19 Мар 2017 в 21:05 от UriBas »

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #5 : 19 Мар 2017 в 21:10 »
В перспективе вижу добавить только делитель напряжения. Получается ардуино + выходной ключ и делитель напряжения. Больше ничего. Скорее всего предложат добавить второй ключ для разряда, логгер, wi-fi и т.д. Затем добавить пылесос, кофеварку и настольную лампу (простите за каламбур). Так обычно бывает на форумах, ищешь в интернете схему простой сигнализации, а получаешь, то, что будешь собирать 5 лет и не настроишь в конечном итоге, такие схемы я не рассматриваю. Поэтому хотел бы видеть простую, универсальную моргалку, легкую для повторения и с простыми пояснениями изменений настроек. Сложные, готовые и более эффективные устройства здесь на форуме уже есть.

UriBas

  • Старожил
  • *****
  • Репутация: 13
  • Сообщений: 1313
  • Украина, Ровно
  • Ездю на батарейках!
  • Онлайн Онлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #6 : 19 Мар 2017 в 21:34 »
  В перспективе вижу добавить только делитель напряжения. ... Поэтому хотел бы видеть простую, универсальную моргалку, легкую для повторения и с простыми пояснениями изменений настроек. Сложные, готовые и более эффективные устройства здесь на форуме уже есть.
Понятно, в принципе на форуме есть уже подобные простые схемы, только на других процессорах (Тини13, Пики", ) Можно взять за основу
1) Схема только с делителем напр.
Скрытый текст
2) Схема с делителем и  разрядом
Скрытый текст
А как собираетесь выводить информацию?

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #7 : 19 Мар 2017 в 21:40 »
Спасибо за схемы.
А как собираетесь выводить информацию?
Можно на двухстрочный дисплей, с ними я работал, но т.к. я взят курс на максимальное упрощение, то скорее всего на светодиоды (заряд и отсечка по верхнему напряжению в перспективе).

Яков93

  • Модератор
  • Старожил
  • *
  • Репутация: 75
  • Сообщений: 3004
  • Россия, Анапа
  • Питаюсь солнышком
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #8 : 19 Мар 2017 в 22:15 »
, если не ошибаюсь программа работает так
Заряд в течение 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, UriBas

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #9 : 19 Мар 2017 в 22:32 »
Отличные замечания! Вообще отказаться от delay - первостепенная задача, только я еще не разбирался. Оказывается еще можно и переменные упростить.

Сообщение понравилось: Яков93

ihor

  • Старожил
  • *****
  • Репутация: 38
  • Сообщений: 1434
  • LVIV-ЛЬВІВ
  • ТОП-4 рулит
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #10 : 20 Мар 2017 в 09:21 »
Тема хорошая и нужная :wow:, но только для "рукастых самодельщиков".
Почему? Навесным не сделаешь, травить паять.
                БП, абы какой не пойдет, проверено.
                "Плюшками"обрастет и к бабке не ходи...
З.Ы. Навеяло...где-то уже такое было...поискал, таки да, Сорока ранее такого типа тоже делал и более ранняя версия на светодиодах без БП была, но с егоной программой.

Сообщение понравилось: Dkin

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #11 : 20 Мар 2017 в 10:13 »
Намечу первоначальный курс, чтобы не уходить в сторону.
Алгоритм
При включении моргалки 1 этап: настраиваемые времена заряд/пауза с несущей частотой.
При достижении напряжения на аккумуляторе 14,4В (это напряжение можно менять в настройках) - переход на 2 этап.
2 этап: при достижении 14,4В - отключение заряда на паузу, время которой можно установить в настройках.
По истечении паузы - опять заряд с несущей частотой до 14,4В.
Т.о. получается настраиваемые независимые времена для 1 и 2 этапов.
Думаю пока хватит.

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #12 : 20 Мар 2017 в 10:37 »
Настройки:

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

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

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

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

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

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #13 : 20 Мар 2017 в 12:18 »
Цитата: UstAlexei
Предлагаю сразу же рассмотреть вопрос о выводе информации и изменении уставок напряжений / скважности и т.п. через терминал.
Сначала бы просто программу написать, потом будем дополнять
Цитата
И зачем в цикле вычислять то что и так постоянно (Ton / Toff) ?
Это замечание высказали уже, перенесу в начало программы

Яков93

  • Модератор
  • Старожил
  • *
  • Репутация: 75
  • Сообщений: 3004
  • Россия, Анапа
  • Питаюсь солнышком
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #14 : 20 Мар 2017 в 14:12 »
          Предлагаю вариант моргалки для зарядки и восстановления аккумуляторов. Разработана на ардуино нано, можно использовать любую ардуино. В качестве ключа использована TLP250 и два транзистора IRL3713 (30В, 260А, 3 мОм).
Скетч дали, а схемку? Зачем, к примеру, там мосфеты аж на 260А, - где такой источник тока взять? И почему их сразу два?
Может также и драйвер TLP250 не нужен, это же IRL мосфеты, они и без драйвера просто от 4,5-5В полностью откроются

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

Не скажу что в Вашем варианте делать невозможно, но можно ведь и еще проще и дешевле.
« Последнее редактирование: 20 Мар 2017 в 14:39 от Яков93 »

Сообщение понравилось: Dkin

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #15 : 20 Мар 2017 в 14:48 »
IRL3713 с запасом взяты, можно и по-проще. Будем экспериментировать, вроде как TLP250 более резкий фронт делает.

Dunkel

  • Наш человек
  • ***
  • Репутация: 1
  • Сообщений: 261
  • Россия, Санкт-Петербург
  • Онлайн Онлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #16 : 21 Мар 2017 в 14:21 »
Начал делать примерно такую же штуку, только вместо ардуины взял digispark, но это не принципиально. Подключил к выходу затвор IRF2807 через 100 Ом - работает, светодиодом моргает. Теперь встал вопрос - а чем моргать-то?
Есть китайская понижайка CC/CV, заряжаю ей упсовые АКБ 7А/ч.
Подключить мосфет между ее выходом и АКБ?
Или так не получиться?

Dkin

  • Неравнодушный
  • **
  • Репутация: 0
  • Сообщений: 222
  • Россия
  • Оффлайн Оффлайн
    • Награды
Моргалка на Arduino. Этюды для начинающих.
« Ответ #17 : 21 Мар 2017 в 14:41 »
Получится. Напряжение на ней должно быть не меньше 17-18 вольт, чтобы ток при напряжении на АКБ 14,4В не снижался.
Я мигаю Кулоном 715А, напряжение поднял до 17В, ток он до 20А дает в импульсе.
« Последнее редактирование: 21 Мар 2017 в 14:57 от Dkin »

Страницы: 123 ... 62>>Вверх
 

Помощь форуму | Отказ от ответственности | Новая версия форума

Размер занимаемой памяти: 5.75 мегабайт.
Страница сгенерирована за 0.3 секунд. Запросов: 112.