Jump to content

Экономичный таймер питания от 9-15 В


Александр Д.
 Share

Recommended Posts

Доброго всем дня, коллеги!
Надо раз в 1-2 часа включить некое устройство (подать импульс, 100mS вполне хватит - дальше самоподхват питания и всё такое), отключусь сам :)
Питание -9-15в (по факту планирую АКБ 12в).
ОЧЕНЬ важно иметь минимальное потребление и работа при минус 20с.

Для низковольных решений (2-5v) я применяю TPL5110.
может существует готовое решение в виде микросхемы для бОльшего напряжения питания?

Как второе решение: применить 555, а именно CMOS версию - там ток потребления весьма мал. Сделать из неё мультивибратор с периодом в пару часов вполне реально.

Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.

Link to comment
Share on other sites

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

  • 6 months later...

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Всем привет.  Собрал схему  с таймером на TPL5110. Должна работать на подачу питания на МК каждые 43 сек. С одним МК без подключенных передатчика и датчика так и происходит. МК каждые 43 секунды включается и передает сигнал, но стоит только к схеме подключить хотя бы датчик и питание подается постоянно, хотя сигнал продолжает посылаться с периодичностью 43 сек.

Что не так в работе таймера?

 

Scheme.jpeg

Link to comment
Share on other sites

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

11 часов назад, Gomerchik сказал:

Что не так в работе таймера?

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

Жизнь не белая или чёрная, а в мелкую серенькую полосочку...

Link to comment
Share on other sites

Да код вроде понятный, одна команда, после передачи...

#endif
    //Команда на отключение питания
    digitalWrite(DONE_PIN, HIGH);

 

Link to comment
Share on other sites

40 минут назад, Gomerchik сказал:

одна команда, после передачи...

а до этой команды что делает программа?

все гениальное просто. чем проще тем надежнее.

Link to comment
Share on other sites

43 минуты назад, Gomerchik сказал:

код вроде понятный,

Запитывай датчик BME  и " передатчик" от 5v ,а не от 3,3v arduino.

Link to comment
Share on other sites

7 минут назад, skripach сказал:

от 5v ,а не от 3,3v arduino.

какое это имеет значение?

все гениальное просто. чем проще тем надежнее.

Link to comment
Share on other sites

3 минуты назад, v1ct0r сказал:

какое это имеет значение?

Большое!

На Ардуино 1 ams1117 ( в данном случае на 5v) , а 3,3в может идти с ft232.

Link to comment
Share on other sites

16 минут назад, skripach сказал:

ft232

1. и где вы ее увидели в схеме?

2. даже если так, то что с того?

в программе не выполняется условие для выполнения команды 

"digitalWrite(DONE_PIN, HIGH);"

Edited by v1ct0r

все гениальное просто. чем проще тем надежнее.

Link to comment
Share on other sites

1 час назад, Gomerchik сказал:

Да код вроде понятный, одна команда, после передачи...

А физически вы его проверяли? Замерами на собранной железке.

Жизнь не белая или чёрная, а в мелкую серенькую полосочку...

Link to comment
Share on other sites

12 минут назад, v1ct0r сказал:

где вы ее увидели в схеме?

Тут нет схемы самой Ардуино(но есть второе напряжение 3,3в , схема ниже)

 

15 минут назад, v1ct0r сказал:

даже если так, то что с того?

Не вывозит!!!

arduino-nano_schematic.png

Link to comment
Share on other sites

#include <Wire.h>
#include <Oregon_TM.h>
#include <BME280I2C.h>

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Скетч для устройства, передающего данные датчика BME280 в формате Oregon Scientific THGN132N
//Принципиальная схема прилагается.
//Для работы необходима библиотека https://github.com/finitespace/BME280/
//Устройство работает от 3-ех пальчиковых батареек, для экономии электричества заливать скетч нужно через ISP
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Также возможна передача данных в формате - THP (температура, влажность, давление, напряжение батареи)
//Пример с приёмником поддерживает расшифоовку THP
////////////////////////////////////////////////////////////////////////////////////////////////////////////

# define THGN_SEND        1  // Передавать ли данные в формате THGN132
# define THP_SEND         0  // Передавать ли данные в формате THP
# define DEVICE_LOG       1   //Писать ли лог В Serial

# define DONE_PIN         15      // вывод сигнала об окончании работы на таймер

# define BME_WAIT         10      // Сколько мс ожидать датчик BME
# define BATTERY_THR      3.5     // Порог напряжения для выставляения флага разряда батарейки (THGN)

/////////////////////////////////////////////////////////////////////////////////////////////////
//Ниблы датчика THP
//Во всех полях младшие ниблы идут вперёд!!!
// 1-2    - тип (55)
// 3      - канал (0-7)
// 4-6    - (температура от -100С) * 10. Т.е. +25.1С = 1251 = 4E3h 
// 7-9    - Влажность *10 Т.е. 25.1% = 251 = 0FBh
// 10-12  - (давление от 500ммртст) * 10. Т.е. 765мм = 2650 = A5Ah
// 13-15  - данные с АЦП (A0)
// 16-17  - CheckSUM 
// 18-19  - CRC8 (poly 0x07 start 0x00)
/////////////////////////////////////////////////////////////////////////////////////////////////

Oregon_TM transmitter(4);
BME280I2C bme;  

bool  bme_present = false;
float bme_temp(NAN), bme_hum(NAN), bme_pres(NAN);
/////////////////////////////////////////////////////////////////////////////////////////////////

void setup()
  {
    digitalWrite(DONE_PIN, LOW);   
    pinMode(DONE_PIN, OUTPUT);
    
#ifdef DEVICE_LOG
    Serial.begin(115200);     
    Serial.println("Waiting for BMEsensor...");
#endif

    //Обмен данными с BME//////////////////////////////////
    Wire.begin();
    while(!bme.begin())
    {
      if (millis() > BME_WAIT) break;
    }
    if (!bme.begin())
    {
#ifdef DEVICE_LOG                             
      Serial.println("No BME sensor found");
#endif      
      bme_present = false;
    }
    else
    {
      switch(bme.chipModel())
      {
        case BME280::ChipModel_BME280:
           bme_present = true;
           bme.read(bme_pres, bme_temp, bme_hum);
#ifdef DEVICE_LOG                       
          Serial.println("Found BME280 sensor! Success.");
          Serial.print("Temperature = ");
          Serial.print(bme_temp, 1);
          Serial.println("C");
          Serial.print("Humidity = ");
          Serial.print(bme_hum, 1);
          Serial.println("%");
          Serial.print("Pressure = ");
          Serial.print(bme_pres * 0.75, 1);
          Serial.println("mmHg");
#endif                     
          break;
        default:
#ifdef DEVICE_LOG                       
            Serial.println("Found UNKNOWN sensor! Error!");
#endif
            bme_present = false;
      }
    }

    //Напряжения батареи///////////////////////////////////////////
    word battvotage = (word)(((float)(1.1 * 16368) / Vbg()) * 100);
#ifdef DEVICE_LOG
    Serial.print("Battery voltage = ");
    Serial.println(battvotage,HEX);
#endif
    
    //Подготовка и отправка данных THGN//////////////////////////////////////
    transmitter.protocol == 2;
    if (THGN_SEND)
    {
      transmitter.setType(THGN132);
      transmitter.setChannel(3);   
      transmitter.setBatteryFlag(battvotage < BATTERY_THR); 
      if (bme_present)
      {
        if (bme_hum > 98) bme_hum = 98;
        if (bme_hum < 2) bme_hum = 2;
        if (bme_temp > 70) bme_temp = 70;
        if (bme_temp < -50) bme_temp = -50;
        transmitter.setTemperature(bme_temp);
        transmitter.setHumidity(bme_hum);  
        transmitter.setComfort(bme_temp, bme_hum);
      }
      else
      {
        transmitter.setTemperature(-49.9);
        transmitter.setHumidity(2);  
        transmitter.setComfort(-49.9, 2);
      }
      transmitter.SendPacket();
    }
    
    // Если отправляются оба формата пакетов, межу ними надо выдержать паузу
    if (THP_SEND && THGN_SEND) delay(100);
    
    //Подготовка и отправка данных THP//////////////////////////////////////
    if (THP_SEND)
    {
      transmitter.setType(THP);
      transmitter.setChannelTHP(1);         
      transmitter.setBatteryTHP( battvotage);
      if (bme_present)
      {
        transmitter.setTemperatureTHP(bme_temp);
        transmitter.setHumidityTHP(bme_hum);  
        transmitter.setPressureTHP(bme_pres * 0.75);  // перевод Pa в mmHg
      }
      else
      {
        transmitter.setErrorTHP();  
      }
      transmitter.SendPacket();
    }
    
#ifdef DEVICE_LOG    
    Serial.println();
    Serial.print(millis());
    Serial.println("ms");
    Serial.println();
#endif
    //Команда на отключение питания
    digitalWrite(DONE_PIN, HIGH);
  }
/////////////////////////////////////////////////////////////////////////////////////////////////
void loop(){}
/////////////////////////////////////////////////////////////////////////////////////////////////
int Vbg() { 
  ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0);
  long buffersamp=0;
  for (int n=0x0; n<=0xff; n++ ) {
  ADCSRA = 0xc7;
  while (bit_is_set(ADCSRA,ADSC));
  buffersamp += ADC; }
  buffersamp >>=4; //16368 full scale 14bit
  ADCSRA &= ~(1 << ADEN);  // отключаем АЦП
  return buffersamp;
}

Вот код программы. Пробовал по разному и от 5в запитывал и всю систему от 3,3 в. Причем голая ардуинка с таймером работает в нормальном режиме некоторое время, но потом все равно слетает и начинает питать мк постоянно( Причем это происходит всегда через разный промежуток времени.

Link to comment
Share on other sites

1 час назад, Gomerchik сказал:

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

удивительно, что она вообще иногда выключается

у вас команда на выключение стоит в сетапе, который отрабатывается один раз при запуске программы и все, а программа все время "крутится" в  void loop(), который у вас пустой.

объясните каким образом по вашему должна выполнятся команда

digitalWrite(DONE_PIN, HIGH);

поместите ее в void loop()  

я думаю после этого все наладится

Edited by v1ct0r

все гениальное просто. чем проще тем надежнее.

Link to comment
Share on other sites

Спасибо за совет.

Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору).

В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция). 

Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает. 

Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(

Link to comment
Share on other sites

@Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?

все гениальное просто. чем проще тем надежнее.

Link to comment
Share on other sites

12 часов назад, v1ct0r сказал:

digitalWrite(DONE_PIN, HIGH);

поместите ее в void loop()  

Не надо его перемещать никуда. Явно проблема в коде. Где-то зацикливается и просто не доходит до конца.

Лог с временем выполнения перед командой отключения приходит?

Link to comment
Share on other sites

В 27.09.2023 в 09:00, Александр Д. сказал:

ланирую АКБ 12в).
ОЧЕНЬ важно иметь минимальное потребление и работа при минус 20с.

Что-то не вяжется аккумулятор и отрицательные температуры.

А чем не нравится КР512ПС10?

  • Ток потребления менее 1мА.
  • Можно сформировать хоть одиночный импульс, хоть непрерывную генерацию.
  • Длительность периода от нескольких миллисекунд до нескольких месяцев.
  • Плавное аналоговое регулирование длительности.
  • Копеечная стоимость.

Широко применялся в промышленных реле времени лет 10…30 назад. Можно взять промышленное реле времени и перестроить его на нужный диапазон просто перепаяв не более 5 перемычек.

https://www.110volt.ru/rele_vremeni/vl64

p0099.png

vl64b.jpg

Link to comment
Share on other sites

7 минут назад, korsaj сказал:

ток потребления 35 нА.

При токах потребления менее 1 мА не критично.
Все равно ток саморазряда аккумулятора в десятки раз выше.
Если с питанием совсем уж беда, то я бы вообще сходил в фикспрайс и купил несколько ночных светящихся цветков с солнечной батареей и ионистором.

Link to comment
Share on other sites

3 минуты назад, avv_rem сказал:

мА не критично.
Все равно ток саморазряда аккумулятора в десятки раз выше.

Вы наверно про кислотный АКБ? У литиевых куда меньше, и ток 1 мА очень критичен для автономных систем.

Link to comment
Share on other sites

Разумеется, кислотный. Четко же сказано в начале

В 27.09.2023 в 09:00, Александр Д. сказал:

по факту планирую АКБ 12в

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • Решил обновить все, что бы однозначно быть уверенным, что транзисторы- новые и в порядке. Всё сделал идентично тому, как было с завода. И полностью совпадает со схемой. Транзисторы покупал с проверкой. 
    • Притирать на стекле я предлагал транзисторы, а не радиатор. Зачем яму и зачем именно в центре? Я вот креплю платы планарно в основном и плоскости контакта получаются по краям. Размер транзистора небольшой. Плоскость такой площади можно снять даже соскабливанием, это не принципиально. А проконтролировать нужно предварительно в первую очередь. Возможно вам и не нужно там ничего делать и керамика итак ляжет нормально. Как проконтролировать плоскость на малом участке общей поверхности- чисто дело техники. Если будет нужно, то я тупо отпилю от условной линейки нужной длины кусок. Согласен, бывает.  Не думаю, что у тебя что-то выйдет с таким тюбиком.
    • Проверил на пробой. GD900 пробивает при 800 вольтах, намертво, далее измеряется как короткое, которое уходит только после удаления термопасты. КПТ-8 как таковую не пробивает, разряд возникает по поверхности текстолита почти при 2000 вольтах  
    • У меня вот такая. Родственник как то давно подарил, брал в ЧиД-е.   У тюбика широкое горлышко, перемешать отвёрткрй нет проблем.))
    • Каким образом вы в центре кривого радиатора притрете поверхность, со съемом материала, фактически сделав яму на поверхности, а потом еще и проверите линейкой?  Типа забоины пошкурить-снять можно и это максимум, и ни какой притирки. Плоскость на стекле,  так это веся плоскость радиатора, а не кусочек, да и стекло надо еще прямое и толстое найти, чтоб не прогибалось.
    • Китайская керамика и сама бывает кривая и требует входного контроля. Да верю я, верю. Сам ломал.
    • Ну с таким подходом с этого надо было начинать, сэкономили бы кучу времени и нервов.)
×
×
  • Create New...