IOT / Esp32 / FreeRTOS / Arduino / stm32
800 subscribers
747 photos
133 videos
29 files
199 links
Копилка материалов по работе с микроконтроллером esp32 / stm32
Download Telegram
Хотел вроде всё по простому сделать: взять прекрасную платформио и на ней накодить максимально примитивно.

Но дошёл до кнопочки "генерировать проект", а там нужно было выбрать в каком Toolchain/IDE собрать. Ну пошёл гуглить, понял что лучше делать это через Makefile, а тут уже можно и на нормальную отладку посмотреть, чтобы точки останова ставить, и всякие переменные смотреть и даже состояние регистров.

Ну не красота ли?
This media is not supported in your browser
VIEW IN TELEGRAM
Радует что сразу всё завелось и blink во фриртосе заработал)

С кучей инструментов отладки проходить квест будет сильно проще чем угадывать что могло пойти не так. Всё сведётся к «читай документацию и сорцы и делай как написано». У esp это делать сильно сложнее из-за закрытого ядра (дальше .h файлов там не пройти).

Работа с отладкой на первый взгляд сильно комфортнее чем у esp32. Прикольно что регистры можно менять прямо из гуя, например вручную включать/выключать ноги.

Но может это все лишь первое обманчивое впечатление)
IOT / Esp32 / FreeRTOS / Arduino / stm32
Получилась и тоге такая красота! Заказ обошёлся в $40+
Посмотрим ещё раз на этот рендер платы.

Во первых плата bluePill тут перевёрнута, она должна смотреть в другую сторону. Но это просто неправильно отпозиционированная 3D модель - типа ок, ничего страшного.

но САМОЕ ГЛАВНОЕ (тут без капса уже не обойтись), посмотрите на дорожку внизу платы, которая выбегает из J3 и убегает под плату к пину 3.3V.

А теперь попробуйте найти эту дорожку на приехавших платах - её там нет:(
А я почти два вечера убил пытаясь понять, почему даже базовые вещи у меня не работают.

Проверил герберы, которые генерятся - там дорожка есть.
Скачал герберы, которые прикреплены к заказу - там дорожки нет :( в какой момент она могла пропасть - ну хз.
Паяем дорожку и начинаем с начала
This media is not supported in your browser
VIEW IN TELEGRAM
После доработки платки всё сразу завелось.

Сейчас код сделан в том-же виде как и на esp32, повторяем до беспамятства цикл:
- переключаем ноги
- измеряем
- переключаем ноги
- изменяем

Получается 3 kHz, что не удивительно - частота тактирование тактирование у stm 70MHz против 160MHz на esp.

А вот использование нормального отладчика для меня новый и очень приятный опыт. Можно остановить работу микроконтроллера в любом месте и последить за интересующими переменными. А также можно исполнять команды по шагам что позволяет быстро находить ошибки.
Закончим сегодня всё на тех же 4+kHz,
но с выпиленной логикой esp32,
и реализацией на бодрых технологиях STM

Итак вместо упоротого цикла у нас теперь:
- таймер который дёргает ногами
- при переключении ног запускает АЦП на 8 измерений
- АЦП в режиме DMA, значит оно само складывает нам данные в массив
- (до этого момента процессор и не работал совсем)
- т.к. 8 - это 2 в 3 степени, то мы получаем среднее значение из 8 просто сложив их, а потом сделав битовый сдвиг в право на 3.

В общем всё это шевелится быстро и практически без участия процессора.

Реализация конечно скорее спортивная) потому что никому в здравом уме не нужно измерять EC с частотой 4+kHz.
А дискретизация с частотой 8kHz уже может использоваться в телефонах для оцифровки речи.

Осталось сделать чтобы АЦП измеряло напряжение не каждый раз когда дёргаются ноги,
а например каждый 100й раз =) и тогда EC будет измеряться 40 раз в секунду,
что тоже конечно дохрена для воды, но более чем достаточно для работы в любых других приборах.
This media is not supported in your browser
VIEW IN TELEGRAM
Зацените точность, с которой таймер держит частоту переключения лапок.

Аж душу греет 🥰
Удивительно мало кода с логикой требуется для такой реализации. Но пришлось попотеть над статьями и ютубом чтобы раскурить что где настраивается в CubeMX.
Последнее место куда написал код для измерения ec =)

там правда ещё есть задача которая калибрует АЦП чтобы попугаев можно было легко переводить в милливольты. Про это тоже стоит рассказать, но не сегодня.
Хотел похвастаться красивым графиком, потому как прошла неделя с последнего перетыкания питаний и всё выглядело очень прилично.

Но ночью термобокс поехал кукухой и перестал отключать питание. Температура уже до 34 градусов поднялась 🤨.

Вообщем красивых графиков пока не будет - лень боксом заниматься.
This media is not supported in your browser
VIEW IN TELEGRAM
Видимо я как-то странно перед созданием гербера подвигал этот разьем у дисплея tm1637,
и там и линия питания пропала, и зепля у разьёма не подцепилась :(

Вобщем нашёл ещё одну багу, прицепил землю, добавил библиотеку и дисплей заработал.

#ссылочки
Пока всё что сделано идёт по блогу https://istarik.ru/

АЦП: https://istarik.ru/blog/stm32/113.html
Таймер: https://istarik.ru/blog/stm32/118.html
Дисплей: https://istarik.ru/blog/stm32/132.html

Примеры реализации в его репозитории:
https://github.com/stDstm/Example_STM32F103/tree/master/TM1637_F103/Src

Если где-то чего-то с первого раза не понятно - смотрю на ютбубе в первую очередь народстрим https://www.youtube.com/watch?v=0fpdNWFnggQ и его описание на сайте.

Вот этот чувак ещё подробно и хорошо, но очень занудно разбирает устройство АЦП https://www.youtube.com/watch?v=_fCVWvL6Eq8
Графики измерения напряжения в прямую и обратную сторону.

В stm32 много прикольных фишек, которые могут всё делать за тебя. Например мигать лапками в противофазе по таймеру - это просто конфигурируемая опция которая называется комплементарные выходы, и скорости там можно получить сумасшедшие. При этом переключение происходит по таймеру не сразу, а с настраиваемым сдвигом. В итоге получаем 2 прерывания: таймер обновился, лапки переключились.

Те ничего не делая и лишь меняя 2 цифры мы меняем частоту таймера и задержку для измерения АЦП.

Получилось:
2500 тиков нужно чтобы DMA наполнило 16 ячеек АЦП и усреднило данные
200 тиков нужно чтобы всё точно переключилось.

Итого частота которую получается выжать - это 2700 тиков. А результат таких измерений на картинке.
This media is not supported in your browser
VIEW IN TELEGRAM
2700 тиков нужно на измерение.
72MHz у нас частота stm32f103 bluepill

Делим одно на другое, получаем:
26666*Hz частота замера АЦП.

За это время мы померяем половину - положительное или отриацтельное приложение напряжения.

А полный цикл это 2 измерения или частота
13333

Хз зачем я упарываюсь над этими цифрами =)
Там кстати есть ещё несколько мест для оптимизации, но
даже текущие действия излишни.
У процессора остаётся ещё куча времени чтобы крутить фриртос и спамить в юсарт 5 раз в секунду.

[*] - для справки частота дискретизации звука для радио — 22 050 Гц


PS: в итоге поставил таймер на 3600 тиков чтобы с учётом аналогичных вычислений видеть на экране "осцилографа" красивые 10kHz
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#stm32

Надо не забыть начало работы с отладками нуклео:
1) обновляем stlink на jlink с помощью мануала и тулзов с сайта segger
2) Берем svd файл из папки программы https://www.st.com/en/development-tools/stm32cubeprog.html или качаем с сайта
https://stm32-rs.github.io/stm32-rs/ и кладём в проект

Остальное вроде всё понятно. launch.json такой:
{
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}",
"executable": "./build/stm32-G031K8T6-board.elf",
"svdFile": "./JLink/stm32g031.svd",
"request": "launch",
"type": "cortex-debug",
"servertype": "jlink",
"device": "STM32G031K8",
"interface": "swd",
"ipAddress": null,
"serialNumber": null,
// "rtos": "FreeRTOS",
}
]
}
Подоспело барахло с алиекспресса. Буду использовать в своих проектах (с). Правда буду) почти всё приехало по делу.
Диоды на 220 приехали для блока питания на 36v от увлажнителя воздуха. В новой квартире с сухостью проблем нет, и восстановление работы - скорее ачивка чем необходимость. Сейчас эта задача кажется непреодолимой высотой, потому что с аналоговыми частями у меня прям плохо.
Мал золотник)

Штукенция которая договаривается с квикчардж зарядками чтобы те подавали на питание сколько могут (ну хотяб 9v), попробую помпу мощную для полива запитать
Недостающий кусок ленты 3м для потолка и мощный блок на 5v и 10 китайских ампер. До этого ленту только на 50 пунктов из 255 зажигал, а хочу по полной