Як обрати компоненти для власного Embedded-приладу: практичний гайд для новачків

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

Дисклеймер: тут я опишу процес більше зі сторони бізнесу, так як я не схемотехнік і можу не знати деяких нюансів. Тож якщо ви інженер і маєте якесь зауваження — буду радий почути вашу думку.

Останні 2 роки, я працюю над своїми проектами, для яких часто потрібно розробляти свої пристрої. І в цій статті я б хотів би поділитись досвідом для новачків, які будуть робити це вперше.

Вступ

Перед тим як почати вибирати компоненти, вам потрібно визначитись з тим, що власне ваш пристрій має робити. І це найбільш важливий етап, так як від нього буде залежати якість ТЗ і кількість ітерацій (відповідно часу і грошей), які ви витратите на розробку приладу.

Щоб не розтягувати статтю і не проектувати сильно складний прилад, ми можемо зібрати плату для тестового стенду ракетних двигунів, про який я писав в попередньому топіку.

ТЗ

Загальний опис приладу: нам потрібно мати можливість запуску твердопаливного двигуна або соленоїда, також ми хочемо фіксувати тягу двигуна, за допомогою load cell + АЦП (аналого-цифровий перетворювач), зберігати ці дані, та керувати цим всім на відстані.

Що таке load cell і АЦП

Load cell працює наступним чином: при стисканні чи скручені, він змінює свій опір. Відповідно, якщо пропустити через нього напругу, то на виході можна заміряти зміну напруги в залежності від деформації. І щоб «читати» цю напругу, нам потрібен АЦП, який на вхід буде отримувати напругу, а на виході видавати нам ці значення в цифровому вигляді (наприклад по SPI шині). Потім маючи напругу на виході load cell ми можемо взяти значення «в стані спокою», покласти на load cell предмет з відомою вагою, отримати це значення. Запамятати його як SCALE і використати в дуже простій формулі: get_value() / SCALE;

Більш детальний опис:

  1. Нам потрібно хоча б 1мс точність вимірів тяги. Також, щоб зменшити вплив шумів, нам потрібно мати мінімум 5 значень, з яких ми будемо брати середнє значення. Тобто нам потрібно, щоб наш АЦП міг читати 1000*5=5000 значень в секунду (1с = 1000мс)
  2. Читати дані ми будемо з 1 load cell, тож АЦП має підтримувати мінімум 1 канал
  3. АЦП має мати мінімум 24 біти точність.
  4. Потрібен радіозвязок, щоб мати можливість запуску двигунів з безпечної відстані (до 50 метрів)
  5. Потрібна можливість запуску хоча б 1 двигуна (або соленоіда, як в прикладі з минулого топіка)
  6. Робота від батареї (щоб можна було проводити тести в полі)
  7. Запис даних на microSD карту
  8. Потрібен мікроконтролер, який буде інтерпретувати значення з АЦП і видавати нам уже тягу, створену двигуном
  9. бажано, щоб нашу плату було легко зібрати вдома, не замовляючи збірку на заводі

Тепер давайте пройдемось по пунктах:

АЦП:

Перші 3 пункти стосуються АЦП, тож почнемо з нього: мінімум 5000SPS і 1 канал та 24+ біти точність.

Перше, що ми робимо — це йдемо на сторінки дистрибюторів (mouser, digikey, lcsc) в секцію з АЦП, виставляємо фільтр по точності і сортуємо по наявності (скільки їх є зараз на складі). Сортування потрібне, щоб не витрачати час на компоненти, які вже не виготовляються, але присутні в каталогах.

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

Якщо відкрити даташит до нижнього компоненту, то в описі буде написано, що він для роботи зі звуком (нам таке не сильно підходить), а якщо відкрити верхній компонент, то його пакування нам не сильно підходить для пайки вдома (тут вже бажано потрібно паяльну пасту і мінімальну паяльну станцію)

Якщо ми будемо шукати далі, то попадемо на TI ADS1255IDBR.

В нього є все що нам потрібно. 24 біти, 30khz, низький шум, SOP корпус, який можна буде спаяти паяльником. Далі що нам дуже важливо — це доступність документації і драйверів. Так як ми хочемо спростити розробку, то можна просто загуглити ADS1255 arduino (або ADS1255 stm32) і подивитись чи є вже готові бібліотеки для роботи з ним. І така бібліотека існує!

Тож зупиняємось на ньому (або можна продовжувати шукати і щось дешевше).

Радіозвязок:

Так як нам не потрібна сильно велика дальність і ми хочемо максимально спростити розробку, то можемо зупинитись на Wifi, так як якщо взяти якийсь модуль для радіозвязку (nrf24l01 як приклад), то нам потрібно буде ще робити приймач, що ускладнює розробку. А для Wifi, можна буде підключитись з ноутбуку чи телефону і керувати та отримувати дані на них.

Запуск двигуна:

Це працює дуже легко, потрібен просто транзистор і 1 GPIO вихід на мікроконтролері.

Також краще додати «термінали» для підключення електричного запалу або соленоіда. Термінал такого типу:

УВАГА!!!, дуже важливо перевіряти скільки ампер вони можуть через себе пропустити. В даному випадку 20А, нам підходить.

Батарея:

Тут нам важливі 3 моменти:

  1. Достатня потужність для електричних запалювачів (тут краще зробити більше дослідження, але на форумах є числа 7.2V та хоча б пару ампер). Також ми вказали керування соленоідом, для них зазвичай потрібно 12V 0.5А. Тож краще всього взяти якусь 2S LiPo батарею і додати DC-DC конвертор, щоб вихідна напруга була 12V. LiPo батареї можуть видавати високий струм, тож це буде гарний вибір для запалювачів.
  2. Також бажано мати хоча б 1 АЦП пін на мікроконтролері, для того щоб «слідкувати» за напругою на батареї і слідкувати щоб не розрядилась (тут можна було б додати повноцінну BMS, але для простоти ми можемо зупинитись на простому АЦП)
  3. Так як напруга на батареї буде 7-8V, а АЦП піни часто 3.3V, то нам потрібно буде також voltage divider між батареєю і АЦП піном

MicroSD:

Щоб писати на microSD карту використовують SDIO виходи на мікроконтролерах або SPI шину, тож нам потрібно буде врахувати цей момент також.

Ще 1 момент, який треба врахувати при проектуванні плати — розміщення microSD коннектора. Бажано ставити їх так, щоб карту памяті ви вставляти з зовнішньої сторони плати, а не посередині плати, де будуть заважати інші компоненти:)

Мікроконтролер:

Так як АЦП, який ми обрали працює на SPI шині, то нам потрібно шукати мікроконтролер з мінімум 1 SPI шиною.

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

  1. Підтримка SPI шини
  2. Мінімум 2-3 виходи під GPIO (1 для керування запалювачем/соленоідом, 1-2 для chip select пінів для SPI шини)
  3. Мінімум 1 вбудований АЦП для контролю батареї
  4. Бажано підтримка WiFi щоб не потрібно було шукати зовнішні компоненти
  5. Підтримка SDIO виходів для запису на карту памяті (або ще 1 SPI шина)
  6. Легкість пайки
  7. Легкість розробки

Під цю задачу можна взяти esp32-s3 devkit. Так як в нього є 2 SPI шини, потрібні GPIO та WiFi з можливістю підключити зовнішню антену. Також зручно взяти devkit, а не окремий модуль, так як його буде легше припаяти та уже все «розведено» для його роботи.

Також при проектуванні плати потрібно буде врахувати наступні моменти:

  1. 2 площадки на краю плати, щоб припаяти коннектор для батареї (так як є різні JST, XT30, XT60 і тд). то щоб потім не шукати перехідники, краще при замовленні батареї, ще взяти Male версію коннектора для вашої батареї)
  2. Площадки для вимикача або вимикач на краю плати, який буде вимикати живлення плати від батареї. (площадки, якщо ви захочете винести вимикач окремо на корпусі)
  3. Силові лінії краще не проводити біля антени або її коннектора, щоб не було інтерференції
  4. Термінал для підключення запалювача або соленоїда краще теж винести на край плати, для зручнішого підключення
  5. Термінал для підключення load cell, теж розташований на краю плати
  6. На кутках плати потрібно зробити отвори (наприклад 3мм діаметром) для того, щоб можна було прикрутити її до якогось корпусу

Висновки:

Якщо підсумувати, які кроки ми зробили

  1. Детальне формування потрібних характеристик (бітність та швидкість АЦП, радіозвязок: дальність, швидкість передачі даних, частота, мікроконтролер, робота від батареї, способи зберігання даних: sd card, flash memory і тд)
  2. Пошук необхідних основних компонентів у дистрибюторів
  3. Пошук готових бібліотек для роботи з компонентами (АЦП, радіозвязок, sd card і тд)
  4. Вибір другорядних компонентів (підключення зовнішніх компонентів, органи керування: кнопки, вимикачі і тд)
👍ПодобаєтьсяСподобалось3
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
а якщо відкрити верхній компонент, то його пакування нам не сильно підходить для пайки вдома (тут вже бажано потрібно паяльну пасту і мінімальну паяльну станцію)

як на мене то припаяти qfn навіть легше ні sop

а якщо лапки під корпусом? а тепловідну підкладку?

Не взлетить...

бай зе вей, 24 біт АЦП ... ???!!!! ... можна привести розрахунок похибки вимірювання в
темперетурному діапазоні ....

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

це скільки? 20 ще близько а 30 далеко в зоні прямої видимості?

Висновки:
Якщо підсумувати, які кроки ми зробили

Зробили хз пойми що.
Порада: займася далі дотнетом.

Ти шо, це ж рокетсайнс на ардуїнах.

24 біт АЦП

Ну так чисто теоретично, вони могли знайти якийсь йоба датчик, якому треба 24 бітний ацп, але судячи з того, що чуваки в якості мк вибрали макетку за 5 баксів, я думаю там такий рівень артхауса, що можна обійтись вбудованими 12 бітками в макетку. Там якраз в еспхи, є два ацп по 12 біт. Усілок бахнув, і маємо робочу схему.

Я там почитав минулу тему, що у нього там 120 Грам тяги вийшло, кароч, геніальна ідея купляєм штатив, купляємо нарковаги 0.01 — 500г, за 300 гривень, і просто дуєм в них. І ніяких 24 бітних АЦП не треба.

Я там почитав минулу тему, що у нього там 120 Грам тяги вийшло, кароч, геніальна ідея купляєм штатив, купляємо нарковаги 0.01 — 500г, за 300 гривень, і просто дуєм в них. І ніяких 24 бітних АЦП не треба.

а шо, так можна було ? 🤔