#476 Re: Апаратні питання » Автономное питание Raspberry pi 5 » 2024-07-12 01:25:54

Наскільки розумію, PD потрібно тільки для того, щоб забезпечити по 1.6А на USB виходах. Якщо PD нема, то струм на USB-виходах просто обмежується до 0.6А. Мені поки не вдалося знайти, чи підтримує RPi 5 підвищення напруги по PD, бо 5В 5А - це наче б то тільки у PD 3.1, і кабель має бути здатним тягнути такий струм.

Тут і тут схожі питання.

А от щодо M.2 памʼяті, скільки вона споживає при активній роботі? Ось тут згадується, що FPC коннектор може забезпечувати не більше 5 ватт, а типові NVMe зазвичай споживають більше. Потрібне окреме додаткове живлення для NVMe.

#477 Re: Апаратні питання » Автономное питание Raspberry pi 5 » 2024-07-10 20:26:35

Ua пише:

Пікове споживання не заміряв , але при роботі від 5.1В 3А джерела живлення в деякі моменти вона підвисає , з чесними 5.1В 5А працює ідеально.

Значить, задача зводиться до пошуку якісного step-down DC-DC. Розумію, що в цьому і полягає питання. Згадані у попередньому коментарі модулі непогані. Може хто ще порекомендує щось інше.

Тут скоріш за все проблема не в потужності як такій, а в "якості" напруги при різних умовах. Потужність обмежена в основному ККД перетворювача та його здатністю розсіювати тепло. А рівень пульсацій залежить як від схеми, так і від струму, і різниці вхідної та вихідної напруг. Один і той же DC-DC при одних умовах може давати прийнятний рівень пульсацій та встигати адекватно реагувати на зміну струму, а в інших уже ні.

Спробуйте таки поставити додатковий LC-фільтр. Так, це габарити. Втім, чим вища частота перетворення DC-DC, тим менші потрібні номінали елементів.

#478 Re: Апаратні питання » Автономное питание Raspberry pi 5 » 2024-07-09 20:58:03

3 А недостатньо? Наскільки знаю, 5 А потребує тільки RPi 5 для забезпечення 1.6 А на підключену до USB периферію.
Яка саме у вас малинка? Яке реальне середнє і пікове споживання?

28 вольт - це з PD? Яка напруга самого джерела? Якщо там 1 cell Li-Ion, то не дуже ефективно спочатку підвищувати, потім знижувати. Один step-up буде ефективніше.

Якщо DC-DC сильно шумить і малинка через це збоїть, то можна або П-подібний LC-фільтр, або вхідну напругу підвищити до 6-6.5 В і лінійний LDO-регулятор, якщо потрібно - з радіатором.

Із step-down ці непогано себе поки що показують: Понижуючий перетворювач 5.2В 8А з 2хUSB виходами Але пульсації потрібно давити.

#479 Re: Проекти » Відстеження цілісності ліній » 2024-06-27 18:00:13

Щоб визначати, чи в замкненому стані лінія, на неї в будь-якому разі потрібно подавати напругу. Можна подати на всі лінії одночасно, можна подавати циклічно по одній.
Якщо ліній багато, я би взяв потрібну кількість регістрів зсуву і опитував би стан ліній послідовно. Як організувати схему, яку подавати напругу,  як обмежувати струм, яка частота опитування  - залежить від того, якої довжини лінії, які провідники, чи можна зʼєднати один із кінців всіх ліній в загальний, яка допустима затримка між обривом лінії та реакцією системи, та багато інших питань.
Якщо робити на регістрах зсуву, то до керуючого контроллера вимоги мінімальні. Головне, щоб можна було організувати шину SPI, хоча б бітбенгом. А якщо підключатиметься до компа, то можна обійтись і звичайним USB-UART адаптером з виведенними керуючими пінами, і всю логіку опитування організувати на компі.

#480 Re: Програмування Arduino » Генератор прямокутних імпульсів з регулюванням частоти » 2024-06-19 19:25:21

Y&M пише:

Запитання: Вибачте не знаю як до Вас звертатись. Якщо у Вас є бажання та час на співпрацю за кошти - то будь ласка напишіть

Дмитро. Нажаль, часу займатись ще одним проектом не маю. Можу тільки іноді давати безкоштовні поради з метою підвищення кваліфікації спеціалістів у галузі smile

#481 Re: Програмування Arduino » Генератор прямокутних імпульсів з регулюванням частоти » 2024-06-19 17:06:20

Сама Atmega328p при 16 МГц і споживає біля 10-14 мА в активному режимі. На чому написана прошивка? Якщо це ардуіна, то мабуть крутиться постійно в активному режимі, без будь-якої сплячки.
Спробуйте в setup() додати:

set_sleep_mode(SLEEP_MODE_IDLE);

а в loop():

sleep_mode();

Переривання від таймера все одно буде виводити процесор зі сплячки приблизно кожну мілісекунду, для опитування кнопок і енкодера має вистачати.
Може й вдастся знизити в середньому до 2-5 мА.

В даташиті є цілий розділ "9.10 Minimizing Power Consumption" з рекомендаціями, як знизити споживання. Повідключайте непротрібну периферію. Зменшіть тактову частоту ядра.

Плюс OLED може суттєво споживати, в залежності від кількості активних пікселів та яскравості. Можна зменшити яскравіть. Можна вимикати через деякий час неактивності.

#482 Re: Проекти » Поскажите новичку » 2024-06-11 19:07:03

Так, якщо живлення схеми гальванічно розвʼязане від акумуляторів, то можна комутувати мінус акумулятора до мінуса схеми, а плюс до дільника і на АЦП. Тільки бути особливо уважним з послідовністю комутації, щоб не замкнути в недопустимій комбінації.

Про аналоговий мультиплексор я згадував. Можна і електромеханічними реле. Якщо DPST чи DPDT, то керувати буде простіше. Але дешеві реле мають властивість залипати. Хоч струми мізерні, але все ж. Тому "верхній" резистор дільника бажано окремий для кожного акумулятора, і вже після нього ключ.

Якщо так вже хочеться вимірювати сумарну напругу, то знадобиться додатковий резистор для дільника і окремий канал комутації. Але не розумію, навіщо це потрібно. Не дуже уявляю ситуацію, коли напруга на чотирьох послідовно зʼєднаних акумуляторах суттєво відрізнятиметься від суми їх окремих напруг.

Одна десята вольта - це менше 1% від 12 вольт. Однозначно потрібна буде калібровка під конкретний екземпляр контроллера і резисторів у дільниках.

#483 Re: Проекти » Поскажите новичку » 2024-06-09 18:11:58

АЦП на мікроконтроллерах вимірюють напругу відносно мінуса живлення (землі). У ESP32 ця напруга не повинна перевищувати напругу живлення 3.3 вольта, а більш-менш задовільна точність обмежується 3.1 вольтами. Тому потрібні дільники на резисторах, щоб з одного акумулятора 15 В привести до 3 В, з двох послідовних (30 В) до 3 В відносно землі, і т.д.
На вашій схемі окремі вольтметри (АЦП), які мають бути гальванічно розв'язані з контроллером. Такі бувають, але обійдуться вам набагато дорожче. Тим більше з верхнею межею 60 вольт. Також, якщо вони з I2C, буде непросто підʼєднати пʼять штук до однієї шини.
Або схема на операційниках з лінійними оптопарами, типу IL300.

Яка точність вам потрібна? Від вбудованих в контроллер АЦП великої точності не очікуйте. І для чого велика точність? Якщо акумулятори свинцево-кислотні, то рівень заряду по напрузі можна визначати тільки після кількох годин "відпочинку" у відключеному стані.

#484 Re: Проекти » Поскажите новичку » 2024-06-09 05:42:18

Як іще один варіант - 4 штуки ESP8266, по одній на кожний акумулятор з живленням від нього ж (з пониженням через DC-DC). Нехай кожна з них вимірює напругу тільки на своєму акумуляторі через дільник своїм єдиним АЦП, зʼєднується з WiFi і рапортує як окремий клієнт. Сумарну напругу обчислювати вже на сервері. Вийде дорожче ніж одна ESP32, зате просто масштабується.

#485 Re: Проекти » Поскажите новичку » 2024-06-09 05:25:15

Так, найпростіший, мабуть, варіант - ESP32 і дільники напруги на резисторах.

Як альтернатива - ESP8266 і 4-канальний АЦП (наприклад ADS1115), і ті ж самі дільники.
Можна придумати купу інших альтернатив, наприклад, замість 4-канального АЦП - аналоговий мультиплексор, і вимірювати єдиним каналом АЦП. Але це зайві ускладнення, якщо тільки з якоїсь причини ні варіант з ESP32, ні з окремим АЦП для ESP8266 ну зовсім не підходять.

При послідовно зʼєднаних акумуляторах доведеться вимірювати сумарну напругу на всіх чотирьох, на трьох "нижніх", на двох, і на останньому "нижньому". Напругу на кожному з трьох "верхніх" обчислювати відніманням. (У ADS1115 є можливість вимірювати різницю напруг між парами каналів, але в даному випадку це не дуже допоможе).
Або на кожний акумулятор окремий АЦП з живленням від цього ж акумулятора і опторозвʼязкою. Або схема на високовольтних операційниках. Але це вже все збочення.

Також пристрій потрібно чимость живити. Якщо достатньо живлення тільки з мережі, то не проблема - блок на 5В (або 3.3В для варіанта з ESP8266). Якщо потрібне автономне живлення з цих же акумуляторів, то можна брати тільки 12В з "нижнього". Деякі плати ESP32 можна живити 12 вольтами напряму, якщо там стоїть нормальний регулятор і в програмі грамотно використовується сплячий режим. Але при довготривалому споживанні в активному режимі буде перегрів. Тому краще поставити імпульсний DC-DC з низьким струмом холостого ходу.
Також живлення від одного акумулятора внесе деякий розбаланс у збірку, що може бути небажаним. В ідеалі потрібно живити з усієї збірки через ефективний високовольтний DC-DC, що може працювати при 60 вольтах на вході.

Майте на увазі, що приклади, які йдуть з фреймворками, зазвичай дуже спрощені та не використовують сплячі режими для зменшення споживання. При автономному живленні це може бути критично, тоді прийдеться розбиратись, як їх застосовувати.

#486 Re: Програмування Arduino » Проблема аппаратная или програмная? Неправильно считает время » 2024-05-13 17:26:49

У вас немає ніякого програмного придушення брязкіту контактів (debouncing). Якщо кнопка підʼєднана напряму і debouncing не реалізовано апаратно, то кожне натиснення генерує серію імпульсів.

Приклад, як можна реалізувати програмно:

static const byte buttonPin   { 2 };
static const byte debounce_ms { 20 };

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

static bool pressedPrev  { false };
static bool debounce     { false };
static unsigned long debounceStartTime;

static unsigned long lastPressTime;
static bool firstPress   { true };

void loop() {
  unsigned long now = millis();

  if (debounce && (now - debounceStartTime >= debounce_ms)) {
      debounce = false;
  }

  if (!debounce) {
    bool pressed = digitalRead(buttonPin) == LOW;
    if (pressed != pressedPrev) {
      debounceStartTime = now;
      pressedPrev = pressed;
      debounce = true;

      // тут обробляєте натиснення або відпускання як вам потрібно
      if (pressed) {
        if (!firstPress) {
          Serial.println((now - lastPressTime) / 1000);
        } else {
          firstPress = false;
        }
        lastPressTime = now;
      }

    }
  }
}

Оптимальне значення debounce_ms можна підібрати під конкретну кнопку, наскільки довго вона брязчить при натисканні та відпусканні. Зазвичай декілька мс достатньо.

Зверніть увагу, якщо між натисненнями пройде більше ніж 1193 години (≈49 діб), то результат буде некоректний через переповнення unsigned long.

#487 Re: Програмування Arduino » Шкала, що заливається » 2024-04-27 22:00:12

Для округлення до найближчого цілого можна так:

long map_round(long x, long in_max, long out_max)
{
  return (x * out_max + in_max / 2) / in_max;
}
...
int FuelLeve2 = map_round(avgVadc, 500, 62);
...

#488 Re: Програмування Arduino » Шкала, що заливається » 2024-04-27 21:04:09

Спробуйте

display.fillRect (100, 64-FuelLeve2, 18, FuelLeve2, 1);

Але у вашому коді є інші проблеми. Сама рамка при висоті 64 вже займає 2 пікселі, тому для шкали залишається 62 пікселя. А в Adafruit GFX є проблема з граничними значеннями: fillRect() малює прямокутник висотою в 1 піксель (лінію), навіть якщо висота дорівнює 0. Тобто для 0 і 1 зображення буде однаковим.

Для точнішого відображення FuelLeve2 потрібно мапити на діапазон [0..62] і не викликати fillRect() при значенні 0:

int FuelLeve2 = map(avgVadc, 0, 500, 0, 62);
if (FuelLeve2) {
  display.fillRect (100, 63-FuelLeve2, 18, FuelLeve2, 1);
}

Це якщо avgVadc приймає значення від 0 до 500 включно, і вас задовільняє округлення до найменшого цілого, що виконує map(). Якщо ж хочете відображати ненульовий рівень при невеликих значеннях avgVadc, або повний рівень при значеннях, трохи менших від 500, тоді потрібно змінити формулу для мапінгу.

Доречі, не обовʼязково малювати поверх вертикальних ліній рамки, має бути достатньо

display.fillRect (101, 63-FuelLeve2, 16, FuelLeve2, 1);

#489 Re: Апаратні питання » Драйвер для водяного насоса 12 вольт » 2024-04-17 23:48:55

Валентина пише:

Можливо проблема в БЖ, яким я намагаюсь заживити відразу ключ і контролер. Не можу розібратись (.

Який у вас БЖ? ESP8266 живиться 3.3 В, як їх отримуєте з 12 В? Покажіть схему підключення.
Може бути таке, що насос намагається стартувати, напруга живлення просаджується і контроллер іде в ребут. Впевніться, що живлення контроллера в нормі і він не рестартує.
Дивіться осциллографом, що там відбувається на шині живлення і на затворі транзистора, коли "не працює".
Також гріється і не працює, якщо подавати постійно одиницю (100% заповнення), чи тільки при ШІМ? Яка частота і який коефіцієнт заповнення?
Доречі, на схемі ключа немає підтягуючого резистора в землю. Рекомендую поставити кілоом 10, бо коли вихід контроллера в високоімпедансному стані, ключ ловить шуми космоса і може відкриватись коли захоче.

#490 Re: Апаратні питання » Драйвер для водяного насоса 12 вольт » 2024-04-17 21:30:56

Може проблема не в ключі? Сам насос працює при подачі живлення напряму? Якщо замкнути вхід ключа на землю, транзистор гріється? (насос при цьому працювати не має). А якщо на вхід ключа подати постійні 3.3 В?

#491 Re: Апаратні питання » Драйвер для водяного насоса 12 вольт » 2024-04-17 20:23:25

Валентина пише:

Подскажите, пожалуйста, как модернизировать схему для работы с более мощным насосом.

Поставити радіатор? При керуючій напрузі навіть 5В опір у відкритому стані 28 мОм. При струмі 6.5 А потрібно розсіювати більше 1Вт, для TO-220 без радіатора це важко.

#492 Re: Різне » Перезагрузка девайсу по інтервалам » 2024-04-16 11:38:11

Vitalion96 пише:

Чи краще керувати звичайним польовим транзистором на пряму?

У вас же струм тільки в одному напрямку тече, від джерела живлення до девайса? Тоді одного транзистора буде достатньо. Тільки дивіться, щоб напруга відкриття транзистора була достатньою для ваших умов (графік Gate-to-Source Voltage  / Drain Current в даташиті, і параметр Gate-source threshold voltage).

#493 Re: Різне » Перезагрузка девайсу по інтервалам » 2024-04-15 20:02:08

NE555 обмежений по номіналам резисторів, при низьковольтному живленні там не більше кількох мегаом. Тобто для кількох годин потрібно буде конденсатор на кілька десятків тисяч мкФ. А у них струм протікання уже суттєвий. Тобто можна, але будь-який дешевий мікроконтроллер справиться з такою задачею краще. Або навіть на таймері c005 можна зробити.
В якості ключа - mosfet, P-канальним простіше керувати живленням. Якщо падіння напруги не критичне, то можна і біполярник.

#494 Re: Апаратні питання » Джойстик,..... дефект? » 2024-04-11 08:51:31

vvr пише:

Звичайний джойстік з потенціометрами та кнопкою.

Так, але потенціометри зʼєднані паралельно:
pots.png
При ідеальних потенціометрах залежність еквівалентного опору між точками A і B від положення повзунка має квадратичний характер:
graph.png
Невеликий розкид параметрів призводить до відʼємної залежності у близьких до верхнього положеннях.
Тому потрібно подавати живлення і зчитувати напругу. Тоді теоретично залежність має лінійний характер.

#495 Re: Апаратні питання » Джойстик,..... дефект? » 2024-04-10 12:46:17

Потрібно не опір вимірювати, а подавати живлення +5В і вимірювати напругу. Наскільки розумію, там щось інше ніж звичайні потенціометри.

#496 Re: Програмування Arduino » ZMCT103C + EmonLib допоможіть з нелінейною характеристикою » 2024-04-07 09:05:14

khalimon пише:

Буду дивитись в напрямку програмної правки

Яка може бути програмна правка, коли вихід операційного підсилювача упирається в напругу живлення?

khalimon пише:

або шукати інше апаратне рішення...

Ви готовий модуль підключаєте? Замініть шунт 100 Ом на менший. Або зменшіть коефіцієнт підсилення першого каскада, збільшивши вхідний резистор або зменшивши резистор у зворотньому звʼязку.
Ще можна підняти напругу живлення, але можуть бути нюанси. Яка схема у модуля? На виході є розвʼязуючий конденатор, як тут? Тоді на стороні ардуіно також має якось задаватись середня точка, наприклад, резистивним дільником.

#497 Re: Програмування Arduino » Генератор частоти з регулюванням шім » 2024-04-05 12:37:37

Дійсно, в режимах, де ICRn використовується як TOP, він не оновлюється автоматично. Тоді так, на одному 16-бітному таймері можна зробити два канала з довільною частотою. Для FastPWM це режим 14.

#498 Re: Програмування Arduino » Генератор частоти з регулюванням шім » 2024-04-05 02:40:14

GmmC пише:

можливо одночасно буде реалізувати також шім по двух чи одному каналу?

На одному таймері з довільною частотою два канала не вийде: у таймера два регістра-компаратора, і один із них використовується або як один із каналів ШІМ, або для керування частотою.

Є наступні варіанти:

1) Один таймер, два канала, фіксований набір частот. Для 16-бітного таймера максимальна частота 16 МГц / 65536 ≈ 244 Гц, решта нижчі. Для 8-бітного 62500 Гц, 7812.5 Гц і т.д, тобто 16 МГц / 256 і дільниками 1, 8, 64, 256, 1024 для TC0. Для TC2 також доступні дільники 32 і 128.

2) Два таймера, по одному на кожний канал. Для точного налаштування фази їх потрібно буде синхронізувати, наприклад, задаючи різні початкові значення TCCNT.

3) Таймер в режимі лічильника, з вимкненим Compare Output. Програмно опитувати TCCNT в циклі і відповідно смикати GPIO. Звернути увагу на можливі ґлітчі при взаємодії з UI та зміні параметрів.

4) Взагалі без таймерів, генерувати затримки програмно, смикати GPIO. Для досягнення хорошої точності прийдеться вираховувати час виконання окремих інструкцій. Сумістити це з UI - той ще челендж.

#499 Re: Програмування Arduino » Генератор частоти з регулюванням шім » 2024-04-02 01:50:42

Частота 32 кГц при тактовій 16 МГц доступна точно: це рівно 500 тіків. Наступна досяжна нижча частота буде при дільнику 501: [16e3/501] = 31936 Гц. Якщо округлювати задану користувачем частоту до найближчої досяжної, то відносна похибка виходить ≈ 0.1%. У китайських модулів заявлено 2%  smile

Якщо така точність задовільняє, то можна обійтись FastPWM режимом 16-бітного таймера.
Для нижчих частот вмикати апаратний дільник таймера (prescaler), щоб не переповнювався 16-бітний лічильник. Розрахувати діапазони для зміни дільника, щоб зберегти баланс між похибкою по частоті і по коефіцієнту заповнення.

Також для 100% заповнення (або для 0% в інверсному режимі) вимикати керування піном по таймеру і виставляти відповідне значення через GPIO.

Доречі, на деяких платах ардуіно зустрічаються Atmega328PB (хоча марковані як 328P). У них є два додаткових 16-бітних таймера з окремим прескалером (а також додаткові UART, SPI, I2C).

#500 Re: Програмування Arduino » Генератор частоти з регулюванням шім » 2024-03-31 19:10:37

Honey пише:

Частоту і коефіцієнт заповнення ШІМ на AVR не вийде встановлювати абсолютно довільно

Для невиликих частот можна генерувати ШІМ програмно з раціональним дільником, в певних межах точності.
Питання в тому, чи хоче ТС розібратись сам, чи чекає на готове рішення.

Підвал форуму