Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Начните с маленькой подводной лодки: устанавливайте бомбы, избавляйтесь от врагов и старайтесь не попадаться на глаза своим плавучим врагам. Вас ждет еще несколько игровых вселенных, много уникальных сюжетов и интересных загадок.

Пикабомбер

Аркады, Пиксельная, 2D

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Stm32f103

106 постов сначала свежее
71
nagibator2505
5 лет назад
Лига Радиолюбителей

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32⁠⁠

Захотелось мне как то сделать инфракрасную паяльную станцию. Начал я смотреть разные сайты с готовыми схемами и решил сделать по-своему. Так же среди этих сайтов был и Пикабу, человек очень хорошо описал фазовое управление и алгоритм Брейзенхейма (тут ссылка на статью )Ардуино и управление мощной нагрузкой переменного тока или самогонный аппарат 2. но мне не понравилась идея использовать 2 контроллера.
Задание для себя было таким:
• Два ПИД регулятора для верхнего и нижнего нагревателей;
• Соответственно 2 датчика температуры (для каждого регулятора свой);
• Управление с энкодера и встроенной в него кнопки;
• Отображение на дисплей SSD1306 (128x64 т.к. был)
• Отсылка данных в ПК через USB-CDC;
• Фазовое регулирование (алгоритм Брейзенхейма)
• Малошумящее управление тиристорами (MOC3063)

Мозгом паяльника стал STM32f103 или в народе BluePill. Сконфигурировал его в CubeMX и понеслось.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

Измерение температуры сделал на термопарах с усилением их сигнала на отдельной плате-усилителе (в моем случае я калибровал для каждого канала отдельно каждую термопару). Если будете повторять, лучше сделать на модуле max31855, но придется немного изменить код и схему (там не много просто я занял оба SPI, но место еще есть, луче использовать SPI2) .
В основном меню устанавливаем температуру, поворотом энкодера, значения сохраняются во флеш. Если вам не нужен верх, то можно установить 0 в задании температуры.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

Так же есть подменю с настройками ПИД регуляторов, тут перемещение нажатием кнопки на энкодере а поворот устанавливает значение.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

ПИД регулятор получился не такой как все =). Его интегральная часть это единица времени, а не просто безразмерный коэффициент как в других цифровых регуляторах. Все цифровые регуляторы дискретны (мои срабатывают каждые 500мс(можно сделать быстрее если нужно)), за это время интегральная часть закидывает в буфер текущее значение ошибки регулирования. Дальше берется сумма этого буфера и вот мы получаем интеграл. Вот тут то и отличие, те регуляторы, что я видел, берут сумму всего буфера и умножают на безразмерный коэффициент. У моего регулятора интегратор это и есть число выборок, которое нужно взять. Допустим, время интегрирования установлено 10 т.к. частота дискретизации регулятора 0,5 с 10*0,5=5 секунд. Следовательно, регулятор будет использовать интеграл изменения ошибки за последние 5 секунд. Максимум 256 выборок. Хотел сделать, что то похожее с дифференциальным звеном, но чет забил. Там можно было бы уменьшать время для следующего отчета ошибки для диф. звена, но тогда придется слишком часто дергать АЦП, а нам еще данные по ЮСБ отправлять и на экран.
Чтобы получать данные по USB нужно установить драйвер от STM usb-cdc. Потом у Вас появится ком порт, куда каждые 500мс будут отправляться данные. Можно не использовать эту функцию, ну а если решите написать ГУИ, то в коде вся строка отправления лежит за sprintf. Так же можно отправлять команды на управление. Например, чтобы установить температуру верха нужно закинуть строковые “Ch5”+ 2 байта значение температуры (0x01ff-511 градусов).
Использован широко известный экран i2c на контроллере ssd1306 (128x64), я использую свою библиотеку к нему (урезанный adafruit).
В силовой части использовал тиристоры BTA41-600. Они на 40А, но т.к. китайские, для нагрузки в 2кВт поставил 2 штуки параллельно (говорят так нельзя делать, но я надеюсь, Вы никому не скажете). Чтобы ими управлять и использую внешние прерывания при переходе синуса сети через 0. Сделано на самой обычной оптопаре, диодном мосте и паре резисторов (на схеме d1-4, u5). На печатной плате разделил силовую часть от слаботочной. Предохранителей никаких не ставил, потому что думаю запитать от автомата.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры
ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

С силовой частью все. Вот такое получилось устройство в сборе (пока без радиаторов). Нагружал силовую часть лампочками по 100Вт, все работает.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры
ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

Остается сделать корпус, пока на это нет времени. Нагреватели уже куплены и лежат в коробочках. Нагреватели заказывал у компании Электронагрев, обошлись в 6 тысяч с доставкой в Уфу, но при получении у Деловых линии, возникли проблемы с тем, что у них висел какой то долг)). Через пару дней они закрыли долг и я смог получить свои нагреватели.
Что я бы изменил, если делал заново:
• Использовал max31855
• Не забыл включить вачдог)))
• Использовал freertos
• Дописал ГУЙ))
Схемы и ссылку на код прилагаю:
https://drive.google.com/open?id=1TT0NNhkICT5_5t9u4LS_0rpkKu...
https://easyeda.com/aminovilshat/Payalnik_ultra
З.Ы. я не занимаюсь профессионально программированием STM32, это всего лишь хобби. Но судите строго) кроме советов отказаться от HAL и СubeMX.

Показать полностью 7
[моё] Электроника Электричество Своими руками Длиннопост Паяльная станция Stm32 Микроконтроллеры
40
13009
Ramzezka
Ramzezka
5 лет назад

Озвучил стиралку в стиле кожаных ублюдков)⁠⁠

звуковой модуль jq6500 плюс stm32.


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


хотел сначала просто мелодию сделать. и тут понеслось...


основная проблема была снять сигналы с платы стиралки. для этого ее пришлось немного исследовать.

включение и выключение по нажатию кнопки POWER, при этом проверяются импульсы динамический индикации на плате. если они есть, значит вкл. иначе выкл.


начало цикла стирки тупо по нажатию кнопки PLAY


сложнее всего было с окончанием стирки. изначально думал прицепиться к электрозамку. но потом передумал лезть в 220в.


единственный индикатор окончания стирки оказался диод, который мигает при включении, потом горит при стирке и тухнет после ее окончания.


простейший конечный автомат позволил найти нужный момент в этой цепочке.


дальше сложность была в том, как отследить состояние диода. снять с него напряжение без дополнительного ОУ никак бы не получилось.


после исследования платы я понял, что для динамической индикации используется матрица светодиодов 7 на 7.


далее решено было найти 2 входа (вертикаль и горизонталь) , состояние которых как то коррелировало с горением диода. с двухканальным осциллом это было не трудно.


В итоге , все получилось ))

Озвучил стиралку в стиле кожаных ублюдков) Своими руками, Кожаные ублюдки, Бот, Восстание машин, Stm32, Программирование, Видео, Длиннопост, Стиральная машина

Для питания был взять какой то развязывающий DC\DC преобразователь из 12в в 5в. Линейный стабик не вытянул звуковой модуль)

Показать полностью 1
[моё] Своими руками Кожаные ублюдки Бот Восстание машин Stm32 Программирование Видео Длиннопост Стиральная машина
816
81
MechanicalMimic
MechanicalMimic
5 лет назад
Лига Ролевиков

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon⁠⁠

Введение


Есть у меня одно хобби: игра в Dungeon and Dragon.

Справка из википедии про игру:

В игре участвуют ведущий (так называемый «мастер») и несколько игроков, число которых варьируется в зависимости от редакции и пожеланий участников. Обычно один игрок руководит в игровом мире действиями одного персонажа. Мастер действует от лица всех неигровых персонажей, описывает окружающую среду и происходящие в ней события. В течение игры каждый игрок задаёт действия для своего персонажа, а результаты действий определяются мастером в соответствии с правилами. Случайные события моделируются броском кубика. Иногда решения мастера могут не соответствовать правилам. Это является Золотым правилом игры: «ГМ всегда прав», так называемым «мастерским произволом». Традиционно руководство игры или свод правил включает в себя три книги: «Player’s Handbook», «Dungeon Master’s Guide» и «Monster Manual». Также существуют различные дополнения, которые мастер может использовать по своему усмотрению. Иногда для игры используются различные карты, чтобы визуально изобразить ситуации в игре, также могут использоваться фигурки персонажей и их противников. Но основным, а иногда и единственным требованием для игры является наличие листов персонажей и набора кубиков — дайсов — игральных костей с заданным числом сторон (d4, d6, d8, d10, d12, d20, d100(процентовый кубик)).

Недавно мне, как ведущему, захотелось для своих постоянных игроков выдумать что-нибудь этакое. Интересные квесты, загадки, ловушки, миниатюры и красивые карты — это все хорошо, однако хотелось что-то совсем-совсем особенное, не характерное для моих игр и к чему игроки еще не успели привыкнуть. Тут стоит отметить, что помимо D&D есть у меня и другое хобби — радиолюбительство, которым я увлекся вскоре после поступления в университет. Собственно, появилась мысль совместить два моих увлечения в одном и сконструировать шкатулку-головоломку, которую персонажи игроков найдут в игре, а вот разгадывать и получать неприятности от скрытых в ней ловушек придется уже игрокам в реальной жизни.


Шкатулка-головоломка

Из мешка убитого вами упыря вываливается странная и явно необычная шкатулка… ваши действия?
Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Шкатулка представляет собой собранную из цельного листа толстого картона прямоугольную коробку с несколькими секциями. Спереди можно увидеть три запертых дверцы, а на крышке три рычага, которые могут принимать две возможных позиции, а так же соответствующие им три картинки: фонарь, ключ, меч.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

С правой боковой стенки написан текст загадки и изображен дракон.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Получишь желаемое, если сможешь усыпить дракона в темноте и найдешь сочетание фонаря, что душу жжёт, меча, что рассекает миры, ключа, что откроет дверь.
Очевидная мысль, которая может сразу появиться при осмотре шкатулки проста: «Хэй, тут всего три рычага с двумя возможными позициями. Это всего-лишь девять комбинаций, которые можно подобрать поочередно и найти нужную!». То есть всё сводится к простому перебору… казалось бы, однако давайте перебирать комбинации.

Итак, первый вариант подобран и свет над левой дверцей загорается, сообщая о том, что она открыта.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Однако внутри оказывается лишь небольшой отдел с чашей внутри, которая заполнена до краев кислотной слизью (игрушечный лизун). Неаккуратный игрок, захотевший осмотреть находку, может запачкаться и его персонаж соответственно получит кислотный урон. В общем, эта комбинация — ошибочная и является ловушкой.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Что же, хорошо, подбираем комбинации рычагов дальше и свет загорается над дверцей посередине. Однако открывшего её ждет неприятный сюрприз.

Человека, который откроет дверь тут же обрызгает кислотной водицей (ладно, простой водицей) и если игрока заденет, урон получит соответственно его персонаж. Стоит отметить, что с левой боковой стенки находится еще одна запертая дверца, которая в такт брызгам будет открываться и закрываться, поддразнивая игроков. За ней видно сокровище — кольцо (на видео кольцо отсутствует). Однако о нем позже, продолжаем подбирать комбинации.

Дергая рычаги подбираем третью возможную комбинацию и дверца подсвечивается, сигнализируя, что она готова к открытию. За дверь мы видим одинокую желтую кнопку…

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Нажимаем и слышим пронзительный писк — мощная звуковая волна исходит из шкатулки, нанося урон всем трём героям. Что же, третья дверь и последняя испробованная комбинация и все являются ошибочными! В чем секрет? Подсказка кроется в тексте загадке:

Получишь желаемое, если сможешь усыпить дракона в темноте
На боковой стенке у нас имеется дракон, давайте же попробуем усыпить его… выключив свет! На задней стенке расположен фоторезистор, реагирующий на степень освещенности. Как только свет выключается, светодиоды на крыльях дракона загораются, сообщая о том, что тот уснул и игроки двигаются в решении загадки в правильном направлении.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Дальше на ум приходят различные варианты: перепробовать комбинации рычагов еще раз, попробовать найти связь между изображениями на дверях с изображениями ключа, меча и фонаря на крышке шкатулки и многое другое, что может прийти на ум находчивым игрокам. К сожалению все варианты неверные. Однако при переборе вариантов хоть один игрок, да коснется определенного участка крышки и пронаблюдает интересное явление. Если коснуться пальцем или ладонью изображения фонаря, зажжется светодиод, который будет плавно менять свой цвет с красного на зеленый.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

По аналогии игроки коснутся всех трех артефактов и обретут желаемое сокровище.

Заключение


Вот такая получилась шкатулка-головоломка, которая смогла разнообразить наш игровой процесс в игре Dungeon and Dragon и над разгадкой которой игроки бились около двадцати минут. Поделкой остался в целом доволен, однако картон хотелось бы заменить на дерево, а отделку сделать более аккуратной. В планах есть идеи других подобных вещиц для игры в Dungeon and Dragons. Если у кого-то был похожий опыт или имеются идеи для реализации - круто было бы почитать в комментариях, возможно использую в будущем.

В конце приведу некоторую информацию по тому как именно реализовывалась конструкция. Ниже приведена общая структурная схема, которая рисовалась для меня самого, чтобы легче было собирать конструкцию:

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Рисовалась структурная схема второпях, могут присутствовать небольшие ошибки. Микроконтроллер использовался довольно популярный — stm32f103c8t6, расположенный на отладочной плате. При написании программы использовал стандартную библиотеку от производителя Standard Peripherals Library и среду разработки Keil uvision. Для управления светодиодами и тумблерами использовались выводы интерфейса GPIO, настроенные на выходы и входы. Водяной насос для обрызгивания игроков подключается через ключ на MOSFET транзисторе в smd корпусе, пачка которых у меня имелась при себе. Для звуковой ловушки использовался зуммер, который подключался через собранный мною простенький усилитель, опять же на MOSFET транзисторе. Сервоприводы управляются с помощью ШИМ, генерируемого одним из таймеров МК. Фоторезистор через делитель напряжения подключен к АЦП микроконтроллера, что позволяло регистрировать смену освещенности вокруг. Наконец, всё устройство имеет автономное питание от литий-полимерного аккумулятора и модуль заряда с защитой, выведенного на заднею стенку конструкции. Очень понравились емкостные сенсорные датчики TTP223, которые расположил под изображениями меча, фонаря и ключа — срабатывают при прикосновении даже через слой картона.

Показать полностью 9 2
[моё] Dungeons & Dragons Stm32 Микроконтроллеры Головоломка Видео Длиннопост
15
11
Lancelot77
5 лет назад

AS5045 и STM32⁠⁠

AS5045 и STM32 Stm32, Электроника, Длиннопост

И снова здравствуйте. Хотел бы продолжить тему про магнитный энкодер AS5045, начатую в моей прошлой статье(https://pikabu.ru/story/as5045_i_arduino_6724136).  Но на этот раз датчик подключается не к ардуино, а к STM32F103C8T6. Так как ардуино оказалась слишком медленной  для  одновременного считывания двух датчиков, выполнение вычислений и многого другого не относящегося к теме. Писался код в System Workbench for STM32 (SW4STM32), но образцы представленного кода должны работать в любой другой среде. Кстати, большей частью эти функции практически полностью перекопированы из библиотеки для ардуино но с оглядкой на частоту STM.

И так начнем с выставления портов ввода-вывода в нужные состояния: CS,CLK - OUTPUT;  DO - INPUT. Названия пинов отражают к какому выводу подключаться на плате датчика.

AS5045 и STM32 Stm32, Электроника, Длиннопост

Теперь тактирование. Оно максимально насколько это возможно и где это возможно:

AS5045 и STM32 Stm32, Электроника, Длиннопост

Вначале нужно объявить следующие дефайны:



#define AS5045_STATUS_OCF 0x10

#define AS5045_STATUS_COF 0x08

#define AS5045_STATUS_LIN 0x04

#define AS5045_STATUS_MAGINC 0x02

#define AS5045_STATUS_MAGDEC 0x01


Встречайте, функция инициализации датчика!


_Bool AS5045_Init()

{

uint8_t count = 0;

while (AS5045_Read(), (_status & AS5045_STATUS_OCF) == 0)

{

if (count > 30)

{

return 0 ; //ошибка инициализации

}

HAL_Delay(5);

count++;

}

return 1;

}


А вот и само считывание статуса датчика и его положения:


uint16_t AS5045_Read()

{


HAL_GPIO_WritePin(GPIOB,CS_PIN_Pin,0); 


uint16_t value = 0;

uint8_t i = 0;


status = 0;

for (i = 0; i <12; i++)

{

HAL_GPIO_WritePin(GPIOB,CLK_PIN_Pin,0);

for(uint8_t i = 0; i < 4; i++){}  //без подобных циклов датчик не

HAL_GPIO_WritePin(GPIOB,CLK_PIN_Pin,1);  //успевает передать данные и на выходе

for(uint8_t i = 0; i < 2; i++) {}  //рандомные числа

value = (value << 1) | HAL_GPIO_ReadPin(DO_PIN_GPIO_Port,DO_PIN_Pin);

}


for ( i = 0 ; i < 6 ; i++)

{

HAL_GPIO_WritePin(GPIOB,CLK_PIN_Pin,0);

for(uint8_t i = 0; i < 4; i++){}

HAL_GPIO_WritePin(GPIOB,CLK_PIN_Pin,1);

for(uint8_t i = 0; i < 2; i++){}


status = (status << 1) | HAL_GPIO_ReadPin(DO_PIN_GPIO_Port,DO_PIN_Pin);

}


HAL_GPIO_WritePin(GPIOB,CS_PIN_Pin,1);


_status = status >> 1 ;


return value ;

}


В принципе это все что я хотел показать сегодня. Тут нет программирования нулевого положения и, возможно, она не самая оптимальная по производительности, но эти функции делают все что мне нужно. Спасибо за внимание!

Показать полностью 2
[моё] Stm32 Электроника Длиннопост
8
20
DimikFilik
6 лет назад

История роботизированной змеи⁠⁠

Всем доброго времени суток. Вот и прошёл мой 3 курс в универе (МИЭМ НИУ ВШЭ). В течении года нам надо было сделать проект в качестве курсовой. Первая идея проекта состояла в том, чтобы сделать подлодку, но мы подумали, что это скучновато и было принято решение сделать подводную змею. Первым этапом стало создание презентационной гифки в Unity, чтобы защитить тему работы.

Но мне больше нравится вот так

Тему мы защитили, финансы получили, а значит пришло время проектирования и закупок. Первый концепт звена.

История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост
История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост
История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост

Сразу скажу, мы студенты на специальность коммуникационные технологии, у нас много электроники и мало механики/сопромата и делали мы всё по сути в первый раз, поэтому строго не судите.


После моделирования было решено сделать опытный образец для тестов и промежуточного отчёта. Тогда с stm32 я ещё не разобрался, поэтому тестовый образец был сделан на arduino nano. Детали печатались на 3d принтере Ender-3. В итоге получилось вот такое (5 звеньев).

История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост

Сразу стало понятно, что есть проблемы в прочности деталей и в надёжности их печати. Постарались их переделать, печататься всё стало нормально, но с прочностью всё равно остались проблемы. После презентации собрали финальную версию из 8 звеньев

История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост
История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост

Одно звено печаталось 13 часов. Потом надо было сделать платы для управления и повышения напряжения. Платы делались с помощью фоторезиста.

История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост
История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост
История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост

Собрали, спаяли, сделали голову

История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост
История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост

Потом сделали корпус из силикона

История роботизированной змеи Робот, Змея, Угорь, Проект, Электроника, 3D принтер, Stm32, Печатная плата, Видео, Длиннопост

Когда всё собрали начались испытания

Ну и финальным аккордом было выступление на техношоу. Даже по телеку показали)

Показать полностью 12 3
[моё] Робот Змея Угорь Проект Электроника 3D принтер Stm32 Печатная плата Видео Длиннопост
9
123
AfterBefore
6 лет назад

Вторая жизнь старому стрелочному мультиметру⁠⁠

Бывает, что у радиолюбителей есть старый стрелочный мультиметр советских времен, лежит где-то далеко на полке. По прямому назначению его уже использовать не хочется, а выкинуть жалко. Так и лежит. В этой статье мы сделаем его модернизацию, а именно – добавим USB, для возможности анализа данных и построения графиков.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Из курса школьной физики вспоминаем принцип работы такого измерительного прибора – ток течет по обмотке, находящейся в магнитном поле, пытается покрутиться и отклоняет стрелку. Первым делом вскрываем мультиметр и смотрим на подключение стрелки.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Подаем ему на измерение напряжение с потенциометра, а другим мультиметром снимаем напряжение между каждым проводом от стрелки и общим. Данные заносим в табличку и строим график.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Выбираем провод с более резким наклоном прямой. В моем случае получилось что при максимальном отклонении стрелки напряжение равно 96,4 мВ. Для оцифровки микроконтроллером мало, но ничего страшного, это напряжение можно усилить операционным усилителем. Подойдет любой ОУ, я взял LM2904, просто потому что у меня такой был. Смотрим документ на микросхему – два ОУ в одном корпусе, максимальное выходное напряжение Vcc-1.5v. Запитывать будем от 3.3 вольт, значит надо подобрать коэффициенты усиления так, чтобы при зашкаливающей стрелке ОУ выдавал максимально возможное напряжение.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Готово. Первый каскад усиливает напряжение со стрелки мультиметра в 10 раз, второй каскад усиливает выход первого в зависимости от настройки потенциометра. Для тестов я собрал все на старом кусочке текстолита.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Проверяем напряжение на выходе усилителя при разных положениях стрелки. Нужно настроить так, чтобы когда стрелка зашкаливает, напряжение продолжало увеличиваться пока она не упрется в ограничитель хода. Теперь это напряжение надо оцифровать. Я взял китайскую платку с STM, купленную на Али.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

На борту у нее микроконтроллер STM32F103C8T6. Есть АЦП и USB. Подходит. Для первоначальной настройки предлагаю воспользоваться STM32CubeMX. Включаем тактирование, настраиваем кварцевые резонаторы.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Включаем и настраиваем АЦП, не забываем про прерывание по готовности.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

АЦП будет запускаться по событию таймера, настраиваем таймер.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Таймер тактируется частотой 48 МГц, с предделителем 24 и периодом 2000 получится, что он будет запускать АЦП каждую 1 мс. В принципе так часто нет смысла, но мы будем использовать усреднение значений, поэтому пусть будет. Включаем USB, выбираем Custom HID.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Генерируем проект и переходим к написанию кода. Я использовал System Workbench for STM32. Добавляем в «main.c» запуск таймера и АЦП, и несколько глобальных переменных.


/* USER CODE BEGIN PV */

//uint16_t adc_arr[ADC_MAX_CONVERSATIONS];

uint16_t adc_to_send;

uint32_t adc_sum;

uint8_t adc_counter;

uint8_t send_flag;

volatile uint16_t x;

/* USER CODE END PV */

/* USER CODE BEGIN 2 */

HAL_ADC_Start(&hadc1);

HAL_ADC_Start_IT(&hadc1);

HAL_TIM_Base_Start(&htim3);

/* USER CODE END 2 */


В прерывании прибавляем к переменной значение с АЦП и увеличиваем счетчик. Когда счетчик достигнет 200, усредняем значение и перекладываем в буфер для отправки по USB. Поднимем флаг, что пора отправлять.


/* USER CODE BEGIN 4 */

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){

adc_sum+=HAL_ADC_GetValue(hadc);

adc_counter++;

if(adc_counter==ADC_MAX_CONVERSATIONS){

HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

adc_to_send=adc_sum/ADC_MAX_CONVERSATIONS;

adc_counter=0;

adc_sum=0;

send_flag=1;

}

}

/* USER CODE END 4 */


В основном цикле все время проверяем флаг, если поднят опускаем и отправляем буфер. Получится что мы будем отправлять значения каждые 200 мс.


/* USER CODE BEGIN WHILE */

while (1)

{

// HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

if(send_flag){

send_flag=0;

..USB_Send_report(adc_to_send);

}

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}


Дескриптор USB устройства уже создался стм кубом, его трогать не будем, только проверим интервал опроса, должно быть не больше наших 200 мс.


/* 34 */

0x07, /* bLength: Endpoint Descriptor size */

USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */

CUSTOM_HID_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/

0x03, /* bmAttributes: Interrupt endpoint */

CUSTOM_HID_EPOUT_SIZE, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (20 ms) */

/* 41 */


Далее составим «HID Report» дескриптор в программке HID Descriptor Tool.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Тут мы говорим, что наше устройство сообщает температуру в комнате (Usage). Report Size=8 и Report Count=4 означают, что 32 бита посылается от устройства к компьютеру (Input) и столько же от компьютера к устройству (Output). Нам из этого всего понадобится только 2 байта, остальное на будущее. Сохраняем как заголовочный файл, и копируем в наш код (куб там оставил место в файле usbd_custom_hid_if.c). Так же надо проверить соответствие размеров репорт дескриптора 35 байт и размер буфера под отправку (тут должно быть 5 байт, потому что мы еще указали Report ID – это еще 1 байт в самом начале). Прошьем и проверим, что устройство правильно определилось в системе.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Раскомментируем функцию отправки в файле «usbd_custom_hid_if.c» и заполняем, указав первым байтом Report ID, дальше наше значение АЦП.


/* USER CODE BEGIN 7 */

/**

* @brief Send the report to the Host

* @Param report: The report to be sent

* @Param len: The report length

* @retval USBD_OK if all operations are OK else USBD_FAIL

*/

static uint8_t USBD_CUSTOM_HID_SendReport_FS(uint8_t *report, uint16_t len)

{

return USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, report, len);

}

uint8_t USB_Send_report(uint16_t data){

Rep_buffer[0]=0x01;//report id

Rep_buffer[1]=data>>8;

Rep_buffer[2]=data;

Rep_buffer[3]=0xFF;

Rep_buffer[4]=0xFF;

return USBD_CUSTOM_HID_SendReport_FS(Rep_buffer,5);

}

/* USER CODE END 7 */


Проверяем в какой-нибудь утилитке что пакеты действительно идут.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Осталось написать программку под Windows, которая бы все это обрабатывала. Берем любимую среду программирования и библиотеку для работы с HID устройствами. Я взял старенькую Delphi 7 и библиотеку компонентов JEDI VCL. Из нее нужны «TJvHidDeviceController» и «TJvHidDevice». Добавляем обработчик «OnEnumerate» у девайс контроллера, в него по очереди прилетают все HID устройства при вызове энумерации. Остается отфильтровать наше устройство по VID и PID, затем связать с компонентом «TJvHidDevice».


function TUSBMeter.HidControllerEnumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)=VID)and

(IntToHex(HidDev.Attributes.ProductID,4)=PID) then

begin

if (HidDev.Caps.OutputReportByteLength=OUT_REPORT_COUNT_AMPERAGE) then

HidController.CheckOutByIndex(HidAmperage,Idx);

usb_ready:=true;

end;

Result := True;

end;


Данные будут приходить в обработчик «OnDeviceData». В нем вычисляем из посылки значение АЦП и выводим куда-нибудь для проверки.


procedure TUSBMeter.HidControllerDeviceData(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);


var

buf:^byte;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)<>VID)or((IntToHex(HidDev.Attributes.ProductID,4)<>PID)) then exit;

buf:=Data; // rep

adc_abs:=buf^;

adc_abs:= adc_abs shl 8;

inc(buf);

adc_abs:=adc_abs+(buf^);

inc(buf);

callback;

end;


Теперь надо сделать пересчет, добавим на форму RadioGroup и настроим как на переключателе мультиметра. Я не стал добавлять шкалу сопротивлений, не нужна.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Заведем так же масштабирующий массив для пересчета и массив с единицами измерений.


const

scale_arr: array[1..18] of real = (600,300,150,60,30,15,6,3,0.75,1500,300,60,15,3,0.6,0.12,0.000012,1);

scale_arr_symb: array[1..18] of string[2] = ('V','V','V','V','V','V','V','V','V','mA','mA','mA','mA','mA','mA','mA','uA','');


Для пересчета еще понадобятся два граничных значения acd_min и adc_max. Подключаем потенциометр к мультиметру, выставляем стрелку на 0 и смотрим, что присылается в программу. Если тоже 0 – хорошо, если нет – не беда, подкорректируем. Потом выставляем стрелку на максимум и так же смотрим. Важно чтобы когда стрелка «зашкаливала» значение продолжало увеличиваться, так будет запас. Если этого нет, надо подкрутить потенциометр ОУ. У меня получилось 0 и 2365. Пересчитываем и выводим уже на основное табло.


procedure TMainForm.HID_Callback;

var

s:string;

buf:string;

rec_s:string;

begin

s:=floattostr(((meter.ADC-adc_min)/(adc_max-adc_min))*scale_arr[RadioGroup1.ItemIndex+1]);

buf:=copy(s,1,5);

buf[pos(',',buf)]:='.';

Label2.Caption:=buf;

end;

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Большая часть готова, теперь надо прикрутить запись в файл, страницу настроек с сохранением и красивый GUI. Формат файла я взял CSV, так как из него будет легко строить графики в Экселе.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Все, готово. Осталось собрать все в корпус мультиметра, свободного места там полно. Прорезать отверстие под USB шнурок и убрать обратно на самую дальнюю полку до тех пор, пока не понадобится снять долгий график разряда аккумулятора или график потребления тока каким-нибудь устройством.


Надеюсь, кому-нибудь будет полезно.

Показать полностью 23 1
[моё] Мультиметр Новая жизнь старых вещей Схемотехника Микроконтроллеры Arduino Stm32 Delphi Программирование Видео Длиннопост
45
648
kolyandex
kolyandex
6 лет назад

Расширяем функционал штатной аудиосистемы⁠⁠

Всем привет. Являюсь обладателем десятилетнего японца, в котором меня все устраивало, за исключением штатной аудиосистемы - в ней отсутствовал Bluetooth. Передо мной стояло три варианта решения этой проблемы:


1. Купить затычку в прикуриватель и не выпендриваться.

2. Купить на разборках за немалые деньги штатный блок Bluetooth + голову поновее.

3. Сделать что-либо самому, но так, чтобы не урезать имеющийся функционал.


Как вы поняли из названия, я выбрал путь номер 3. (не тот, о чем вы подумали)


Итак, имеем:


Штатная аудиосистема, которая состоит из головного устройства и панели, которая выглядит так:

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

В ней есть режим AUX, который позволяет подключать внешние устройства для прослушивания музыки. Почему бы не воспользоваться им в своих целях? Примерное тз - сделать так, чтобы определенной комбинацией клавиш запускался режим AUX, но в то же время все данные на экране полностью переходили под наше управление и звук в AUX перенаправлялся из Bluetooth модуля. Будем разбираться с проблемами по мере их поступления.


Задача: выяснить, как осуществляется обмен данными между панелью и головой.


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

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Далее был пущен в ход логический анализатор, которым была определена скорость и протокол обмена между головой и панелью. (Частота обновления экрана 10 кадров в секунду, частота сканирования нажатий 30 мс). В итоге был получен результат в виде Hello World, знакомого каждому программисту =)

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Следующим шагом был этап выбора микроконтроллера для реализации этой содомии) Выбор пал на STM32F103, на борту которого целых 3 UART и есть поддержка CAN шины (почему бы не добавить и ее). В качестве Bluetooth модуля изначально был куплен CSR8645, первая версия была с ним, но он не мог выводить названия треков, а также не имел управления по цифровой шине, поэтому был куплен прямо from USA модуль под названием Bluegiga WT32i, в котором было все, что нужно и даже больше - поддержка вывода цифрового звука и поддержка lossless кодека AptX. В течение пары месяцев, когда было свободное время велась разработка прототипа. Были познаны все ужасы HAL и прелести SPL. Досконально изучены UART и DMA в микроконтроллере, т.к. связать все это вместе и чтобы оно работало без тормозов и сбоев было необходимо.


Отладка обмена:

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Отладка и настройка Bluetooth-модуля с внешним ЦАПом

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Затем все это добро было внедрено в головное устройство, но так, чтобы можно было без проблем прошить и снять для доработки. В качестве интерфейса был задействован кабель HDMI и разъем из мертвого ноутбука. Изнутри все выглядело так:

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Снаружи вот так:

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Корпусом выступил старый блок питания от ноутбука.


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

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Ну и результат после месяца ожидания:

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

На фото и модели платы немного отличаются, был добавлен CAN трансивер и еще по мелочи.


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

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Корпусом выступил все тот же блок питания.


Далее был добавлен CAN трансивер, с помощью которого можно получать кучу интересных и не очень данных из CAN шины автомобиля. Я пока использую только вывод расхода топлива в час, т.к. штатный бк такой функцией не обладает.

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Вид в сборе

Расширяем функционал штатной аудиосистемы Своими руками, Электроника, Mitsubishi, Embedded, Stm32, Видео, Длиннопост

Ну и видео работы

Примечание. Как вы могли заметить, русский текст выводится транслитом, более-менее умным. Например буква ч заменяется на ch и т.п., чего штатными средствами достичь никак бы не удалось. Ну и в добавок поддержка lossless аудио.


Если кто захочет повторить, пишите, у меня еще осталось 9 плат. Прошивку скину :)


Тем, кто жаждет подробностей. Задействованы все 3 UART. Один на дисплей, один на клавиши и один на Bluetooth модуль. Звуковой поток переключается аналоговым мультиплексором. CAN используется тоже из STM32. Стоит внешний ЦАП PCM5102, звук очень недурный. Подключается между головой и проводкой автомобиля. Разъемы были найдены на разборке за дофига денег)


Вышло дороже, чем купить штатную систему Bluetooth, но удовольствия от разработки оно принесло намного больше)


iam@kolyandex.su

Показать полностью 12 1
[моё] Своими руками Электроника Mitsubishi Embedded Stm32 Видео Длиннопост
178
75
42423245
6 лет назад
TECHNO BROTHER

Делаем ST-Link V2.1 из китайского ST-Link V2⁠⁠

Длиннопост!

Приветствую всех!

Заранее прошу прощения за возможную неясность/запутанность текста, мой первый пост.

Чукча не писатель, чукча - радиолюбитель!))
Так же предупреждаю - я не несу ответственность за ваши действия, а так же не призываю к действиям! Все что выделаете - делаете на свой страх и риск!


Update! Статью со значительными изменениями и уточнениями выложил на хабр:

https://habr.com/ru/post/442290/

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Предыстория...

Так уж случилось, что мне надоели лишние провода.

Немного подумав я вспомнил что на палатах Nucleo и Discovery - ST-Link совмещает в себе SWD и VCP (Virtual Com Port).

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

Однако стоимость в 20$ за ненужный кусок текстолита, при стоимости китайского варианта в 3$ - лишние расходы.

Благо мне подсказали ссылку на GitHub с уже вытянутым загрузчиком )


Приступаем к работе!

Как оказалось, для STM32+CVP не важно какой чип, C8 или CB.

Если у вас чип C8 то при обновлении указывайте модификацию STM32+Audio.

Модификацию можно произвести только на Windows версии софта, кроссплатформенная версия софта отказывается обновлять девайс!
Внутри программатора может быть совершенно разные платы и чипы!

Есть несколько вариантов модификации, и часть из них нельзя сделать если чип не подходящий!

На пример, следующие модификации можно сделать если чип STM32F1xxCBxx:

STM32 + VCP

STM8 + VCP

STM32 + STM8
Only STM32
Only STM8
Но если чип STM32F1xxC8xx, то только следующие:

STM8 + VCP

STM32 + STM8

Only STM32

Only STM8
По этому для модификации STM32 + VCP вместе с программатором покупаем чип STM32F1xxCBxx.

После модификации до STM32 + VCP программатор теряет возможность прошивать STM8!

В данном посте я делаю модификацию STM32 + VCP.


Нам понадобится:

0) Руки из правильного места ;)

1) Немного знаний

2) Паяльник
3) Мультиметр с прозвонкой

4) ПК с ОС Windows

5) Китайский клон ST-Link V2

6) Чип STM32F1xxCBxx (если программатор уже у вас в руках, и чип подходящий - то дополнительный чип покупать не обязательно)

7) USB-UART адаптер либо второй ST-Link V2

Что ж, вскрываем...

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост
Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост
Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Смотрим маркировку чипа.
В желтом чип 103CB - его можно модифицировать до модификации STM32 + VCP.
В фиолетовом же на первом фото 102С8 - его до нужной модификации модифицировать нельзя, придется менять чип.
На втором фото 103CB.
Мне же повезло, у меня чип 101CB.
Далее есть два пути:
USB-UART (вариант сложнее) либо второй ST-Link V2

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост


Если у вас USB-UART:


1) Прозвонкой находим резистор который подключен к BOOT0.
Аккуратно его выпаиваем. (резистор еще понадобится, не оторвите дорожки!)
А сам BOOT0 этим же резистором подтягиваем к питанию.
Далее паяем комариные письки на контакты PA9(TX) и PA10(RX) :
(Как оказалось, на PA9 подключен светодиод, так что прозваниваем к какой стороне светодиода или резистора рядом он подключен - и подпаиваемся туда, меньше геморроя ;)

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

К ним подпаиваем USB-UART, а так же не забываем подпаять к нему же питание и землю.
Качаем загрузчик Protected-2-1-Bootloader.bin
Прошиваем с помощью STM32 Flash loader demonstrator
Дабы не удлинять пост еще больше, не буду расписывать работу данной утилитой, мануалов в сети полно.
На пример мануал от товарища stD

После прошивки отпаиваем PA9 иPA10, PA10 оставляем если хотим вывести пин SWO


Если у вас ST-Link V2:

На платах есть по 4 контакта, в некоторых случаях они уже промаркированы, в противном же случае прозваниваем их относительно PA13(SWDIO) и PA14(SWCLK), подпаиваемся вторым ST-Link V2, не забываем подпаять к нему же питание и землю.
Прошиваем с помощью STM32 ST-LINK Utility
Дабы не удлинять пост еще больше, не буду расписывать прошивку данной утилитой, мануалов в сети полно.
Единственное скажу что скорее всего понадобится снять защиту, иначе не прошьется.
Для этого в программе STM32 ST-LINK Utility жмем Target > Option Bytes, переключаемRead Out Protection в Disabled и жмем Apply

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост


Обновление до ST-Link V2.1:


После прошивки подключаем прошитый ST-Link уже почти V2.1 к ПК
В программе STM32 ST-LINK Utility жмем ST-LINK > Firmware update
Жмем Device Connect - получаем список возможных модификаций:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Выбираем нужную вам модификацию, в моем случае STM32+MSD+VCP и жмем Yes >>>>
Ждем пока завершится обновление...
В итоге получаем сообщение об удачном завершении:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Профит! ;)

Завершающая часть:

Так как SWIM и RST после такой модификации не работают - отрезаю их.
Так же отрезаю дублирующие 5V и 3.3V.
Получается 4 свободных пина.
На них подпаиваюсь проводками к чипу:
PA10 -> SWO
PB0 -> NRST
PA3 -> RX
PA2 -> TX

Вывожу все на основной разъем, на оставшиеся свободные пины.
Получилась такая распиновка:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Мой девайс после модификации:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост
Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Накарябал скальпелем маркировку на корпусе:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Не забываем отмыть плату после пайки )

В итоге девайс должен определяться так:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост
Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Я без понятия чему равен объем виртуальной флешки (в данном случае к ST-Link V2.1 был подключен 103C8)

Если на нее закинуть файл прошивки - программатор прошьет чип без программ.

Проверяем VCP:

Делаем ST-Link V2.1 из китайского ST-Link V2 Stm32, St-link, Длиннопост

Ну, вроде все )


Спасибо за внимание!

С вопросами обращайтесь в комментарии, чем смогу - помогу.

Показать полностью 16
[моё] Stm32 St-link Длиннопост
30
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии