Як обрати компоненти для власного Embedded-приладу: практичний гайд для новачків
Дисклеймер: тут я опишу процес більше зі сторони бізнесу, так як я не схемотехнік і можу не знати деяких нюансів. Тож якщо ви інженер і маєте якесь зауваження — буду радий почути вашу думку.
Останні 2 роки, я працюю над своїми проектами, для яких часто потрібно розробляти свої пристрої. І в цій статті я б хотів би поділитись досвідом для новачків, які будуть робити це вперше.
Вступ
Перед тим як почати вибирати компоненти, вам потрібно визначитись з тим, що власне ваш пристрій має робити. І це найбільш важливий етап, так як від нього буде залежати якість ТЗ і кількість ітерацій (відповідно часу і грошей), які ви витратите на розробку приладу.
Щоб не розтягувати статтю і не проектувати сильно складний прилад, ми можемо зібрати плату для тестового стенду ракетних двигунів, про який я писав в попередньому топіку.
ТЗ
Загальний опис приладу: нам потрібно мати можливість запуску твердопаливного двигуна або соленоїда, також ми хочемо фіксувати тягу двигуна, за допомогою load cell + АЦП (аналого-цифровий перетворювач), зберігати ці дані, та керувати цим всім на відстані.
Що таке load cell і АЦП
Load cell працює наступним чином: при стисканні чи скручені, він змінює свій опір. Відповідно, якщо пропустити через нього напругу, то на виході можна заміряти зміну напруги в залежності від деформації. І щоб «читати» цю напругу, нам потрібен АЦП, який на вхід буде отримувати напругу, а на виході видавати нам ці значення в цифровому вигляді (наприклад по SPI шині). Потім маючи напругу на виході load cell ми можемо взяти значення «в стані спокою», покласти на load cell предмет з відомою вагою, отримати це значення. Запамятати його як SCALE і використати в дуже простій формулі: get_value() / SCALE;
Більш детальний опис:
- Нам потрібно хоча б 1мс точність вимірів тяги. Також, щоб зменшити вплив шумів, нам потрібно мати мінімум 5 значень, з яких ми будемо брати середнє значення. Тобто нам потрібно, щоб наш АЦП міг читати 1000*5=5000 значень в секунду (1с = 1000мс)
- Читати дані ми будемо з 1 load cell, тож АЦП має підтримувати мінімум 1 канал
- АЦП має мати мінімум 24 біти точність.
- Потрібен радіозвязок, щоб мати можливість запуску двигунів з безпечної відстані (до 50 метрів)
- Потрібна можливість запуску хоча б 1 двигуна (або соленоіда, як в прикладі з минулого топіка)
- Робота від батареї (щоб можна було проводити тести в полі)
- Запис даних на microSD карту
- Потрібен мікроконтролер, який буде інтерпретувати значення з АЦП і видавати нам уже тягу, створену двигуном
- бажано, щоб нашу плату було легко зібрати вдома, не замовляючи збірку на заводі
Тепер давайте пройдемось по пунктах:
АЦП:
Перші 3 пункти стосуються АЦП, тож почнемо з нього: мінімум 5000SPS і 1 канал та 24+ біти точність.
Перше, що ми робимо — це йдемо на сторінки дистрибюторів (mouser, digikey, lcsc) в секцію з АЦП, виставляємо фільтр по точності і сортуємо по наявності (скільки їх є зараз на складі). Сортування потрібне, щоб не витрачати час на компоненти, які вже не виготовляються, але присутні в каталогах.
На перших позиціях часто будуть дешеві компоненти, з дуже малою частотою зчитування. Але якщо проскролити, то побачимо перші компоненти, які потенційно можуть нам підходити.

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

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

В нього є все що нам потрібно. 24 біти, 30khz, низький шум, SOP корпус, який можна буде спаяти паяльником. Далі що нам дуже важливо — це доступність документації і драйверів. Так як ми хочемо спростити розробку, то можна просто загуглити ADS1255 arduino (або ADS1255 stm32) і подивитись чи є вже готові бібліотеки для роботи з ним. І така бібліотека існує!
Тож зупиняємось на ньому (або можна продовжувати шукати і щось дешевше).
Радіозвязок:
Так як нам не потрібна сильно велика дальність і ми хочемо максимально спростити розробку, то можемо зупинитись на Wifi, так як якщо взяти якийсь модуль для радіозвязку (nrf24l01 як приклад), то нам потрібно буде ще робити приймач, що ускладнює розробку. А для Wifi, можна буде підключитись з ноутбуку чи телефону і керувати та отримувати дані на них.
Запуск двигуна:
Це працює дуже легко, потрібен просто транзистор і 1 GPIO вихід на мікроконтролері.
Також краще додати «термінали» для підключення електричного запалу або соленоіда. Термінал такого типу:

УВАГА!!!, дуже важливо перевіряти скільки ампер вони можуть через себе пропустити. В даному випадку 20А, нам підходить.
Батарея:
Тут нам важливі 3 моменти:
- Достатня потужність для електричних запалювачів (тут краще зробити більше дослідження, але на форумах є числа 7.2V та хоча б пару ампер). Також ми вказали керування соленоідом, для них зазвичай потрібно 12V 0.5А. Тож краще всього взяти якусь 2S LiPo батарею і додати
DC-DC конвертор, щоб вихідна напруга була 12V. LiPo батареї можуть видавати високий струм, тож це буде гарний вибір для запалювачів. - Також бажано мати хоча б 1 АЦП пін на мікроконтролері, для того щоб «слідкувати» за напругою на батареї і слідкувати щоб не розрядилась (тут можна було б додати повноцінну BMS, але для простоти ми можемо зупинитись на простому АЦП)
- Так як напруга на батареї буде 7-8V, а АЦП піни часто 3.3V, то нам потрібно буде також voltage divider між батареєю і АЦП піном
MicroSD:
Щоб писати на microSD карту використовують SDIO виходи на мікроконтролерах або SPI шину, тож нам потрібно буде врахувати цей момент також.
Ще 1 момент, який треба врахувати при проектуванні плати — розміщення microSD коннектора. Бажано ставити їх так, щоб карту памяті ви вставляти з зовнішньої сторони плати, а не посередині плати, де будуть заважати інші компоненти:)
Мікроконтролер:
Так як АЦП, який ми обрали працює на SPI шині, то нам потрібно шукати мікроконтролер з мінімум 1 SPI шиною.
Тож якщо підсумувати, які вимоги до мікроконтролера:
- Підтримка SPI шини
- Мінімум
2-3 виходи під GPIO (1 для керування запалювачем/соленоідом,1-2 для chip select пінів для SPI шини) - Мінімум 1 вбудований АЦП для контролю батареї
- Бажано підтримка WiFi щоб не потрібно було шукати зовнішні компоненти
- Підтримка SDIO виходів для запису на карту памяті (або ще 1 SPI шина)
- Легкість пайки
- Легкість розробки
Під цю задачу можна взяти esp32-s3 devkit. Так як в нього є 2 SPI шини, потрібні GPIO та WiFi з можливістю підключити зовнішню антену. Також зручно взяти devkit, а не окремий модуль, так як його буде легше припаяти та уже все «розведено» для його роботи.

Також при проектуванні плати потрібно буде врахувати наступні моменти:
- 2 площадки на краю плати, щоб припаяти коннектор для батареї (так як є різні JST, XT30, XT60 і тд). то щоб потім не шукати перехідники, краще при замовленні батареї, ще взяти Male версію коннектора для вашої батареї)
- Площадки для вимикача або вимикач на краю плати, який буде вимикати живлення плати від батареї. (площадки, якщо ви захочете винести вимикач окремо на корпусі)
- Силові лінії краще не проводити біля антени або її коннектора, щоб не було інтерференції
- Термінал для підключення запалювача або соленоїда краще теж винести на край плати, для зручнішого підключення
- Термінал для підключення load cell, теж розташований на краю плати
- На кутках плати потрібно зробити отвори (наприклад 3мм діаметром) для того, щоб можна було прикрутити її до якогось корпусу
Висновки:
Якщо підсумувати, які кроки ми зробили
- Детальне формування потрібних характеристик (бітність та швидкість АЦП, радіозвязок: дальність, швидкість передачі даних, частота, мікроконтролер, робота від батареї, способи зберігання даних: sd card, flash memory і тд)
- Пошук необхідних основних компонентів у дистрибюторів
- Пошук готових бібліотек для роботи з компонентами (АЦП, радіозвязок, sd card і тд)
- Вибір другорядних компонентів (підключення зовнішніх компонентів, органи керування: кнопки, вимикачі і тд)
8 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівяк на мене то припаяти qfn навіть легше ні sop
а якщо лапки під корпусом? а тепловідну підкладку?
Не взлетить...
бай зе вей, 24 біт АЦП ... ???!!!! ... можна привести розрахунок похибки вимірювання в
темперетурному діапазоні ....
це скільки? 20 ще близько а 30 далеко в зоні прямої видимості?
Зробили хз пойми що.
Порада: займася далі дотнетом.
Ти шо, це ж рокетсайнс на ардуїнах.
Ну так чисто теоретично, вони могли знайти якийсь йоба датчик, якому треба 24 бітний ацп, але судячи з того, що чуваки в якості мк вибрали макетку за 5 баксів, я думаю там такий рівень артхауса, що можна обійтись вбудованими 12 бітками в макетку. Там якраз в еспхи, є два ацп по 12 біт. Усілок бахнув, і маємо робочу схему.
Я там почитав минулу тему, що у нього там 120 Грам тяги вийшло, кароч, геніальна ідея купляєм штатив, купляємо нарковаги 0.01 — 500г, за 300 гривень, і просто дуєм в них. І ніяких 24 бітних АЦП не треба.
тєма агонь
а шо, так можна було ? 🤔