IOT / Esp32 / FreeRTOS / Arduino / stm32
801 subscribers
747 photos
133 videos
29 files
199 links
Копилка материалов по работе с микроконтроллером esp32 / stm32
Download Telegram
С одной стороны платы пациент stm32G031,
С нижней стороны ST-Link на F103CBT6

Взял за 1200 рублей в https://www.terraelectronica.ru/product/3468813

А в на картинке цена на lcsc для истории
Надо потестить "аналоговую часть" схемы на stm32 как отдельный модуль.

Ну собирать на макетке - это не наш метод =) сделаем для этого плату для bluePIll. Для начала откроем CubeMx и зададим важные контакты (i2c, Uart, ADC), ну и все остальные. Потом конечно при разводке всё поперетыкаем, но начало положено.

Получается как-то так.
Разводить плату прям приятно) как будто собираешь пазл или решаешь ребус.

Нужно обязательно расположить всё так чтобы ничего не пересекалось, было с красивыми отступами и изгибами, чувствовалась гармония 😎

Хотя справа можно было поровнее расположить)
Получилась и тоге такая красота!
Заказ обошёлся в $40+
Заказ и BOM лист
Вернёмся пока к нашим баранам на esp32 и аналоговой части. Впаял источник опорного как положено (хотя скорее "как мне кажется правильно"). Сижу меряю напряжение на выходе, получаю вот такой график.

хм. можно ли это считать успехом? 🤔
Или напряжение можно получить точнее? По крайней мере радует что заказанный модуль с stm32 разведён скорее всего правильно.
Первое что можно сделать с этими измерениями - это oversampling.
По сути мы делаем измерения много раз, а потом делим на количество измерений.

Для него есть очень элегантный кусочек кода, который выполняет этот функционал без использования деления.
Хз зачем мне это, просто для души 🌟

Идея такая: если мы сделаем количество измерений кратно степени двойки, то можно вместо деления использовать битовый сдвиг. Код в приложенной картинке (обоже, как же бесят люди которые выкладывают код картинками 😂)
Всё это затевается ради одной простой цели: получить одинаковое напряжение питания на делителях напряжения у NTC-термистора и EC-щупа при разном питании платы.

Сама плата питается от кренок на 3.3V, но оказывается что эти 3.3 слишком разные в зависимости от модуля. =) Настолько разные что не подходит для задачи.

Для того чтобы потестить как это будет работать - первым делом начнём передавать эту информацию в mqtt шину. Добавляем библиотечку в проект, компилим, и ...

Хьюстон, у нас проблемы!
27kb не влезает 🙈
У меня 4Mb флешка, а не влезает в 1Mb о.О. Ну что-же придётся лезть и разбираться как настроить партишены.
А ларчик просто открывался 🥳
Оказывается при работе через официальный плагин (а не через platformio) - всё можно настроить через гуй.

Это сильно проще чем тыкаться в консольный menuconfig:
- жмякаем настройки
- ищем настройку партишенов
- выбираем "свой csv"
- создаём файлик и указываем там нужные размеры
Результаты:
с разным питанием разбег 10mV

До этого разбег был 60mV, так что стало однозначно лучше. Можно ли ещё улучшить? 🤔 Звучит как хорошая задача для специалистов по аналоговой части =) осталось таких найти.
Чтобы проще заниматься отладкой - припаяем к плате дисплей. Для этих целей у платки выведен специальный разъём.

Для дисплея на плате tm1637 есть хорошая библиотечка
https://github.com/petrows/esp-32-tm1637

На этом-же выведенном разьеме можно и i2c дисплей завести, но видимо в следующий раз) пока хватит и такого.