Про железку: купил я вот такую штуку - STM32H723ZGT6 (https://www.ozon.ru/product/1-sht-modul-otladochnoy-platy-s-...). Здоровая, сука! И программатор к ней - клон ST-link V2 (https://www.ozon.ru/product/programmator-st-link-stlink-st-l...). Через CUbeIDE прошить не могу - он наотрез отказывается скачивать что-то с интернета. В PlatformIO такой камень отсутствует, но есть Nucleo H723. Попробовал его с ST-link - не идет - ошибка. Вшитая с завода "мигалка светодиодом" успешно слетела, новая не встает, камень в защите. Выходит из защиты только если сделать st-info --probe с зажатым RESET, а потом отпустить и еще раз. Попытка стирания флеша проваливается. Или стирается, но новую прошивку не принимает. Прошил rpi-pico на picoprobe, подключил через SWD, шил через openocd. Перешил на micropython, шил скриптом через uart. Никак. Info : Listening on port 3333 for gdb connections [stm32h7x.cpu0] halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc Info : Device: STM32H72x/73x Info : flash size probed value 1024k Info : STM32H7 flash has a single bank Info : Bank (0) size is 1024 kb, base address is 0x08000000
Info : Bank (0) size is 1024 kb, base address is 0x08000000 Error: [stm32h7x.cpu0] clearing lockup after double fault [stm32h7x.cpu0] halted due to debug-request, current mode: Handler HardFault xPSR: 0x01000003 pc: 0xfffffffe msp: 0xffffffd8
В общем вот так. Основная проблема - не получается зашить в этот камень хоть что-то. Чего делать то, выкинуть нахер? Кто-нибудь уже успешно шил такую фигню?
Вот такой заголовок придумал) Нужен ваш совет коллеги , надумал я пойти ,точнее попробовать, трудоустроиться в разработку embedded . За плечами опыт работы инженером , ведущим инженером электроником в направлении ремонта ИБП , схемотехнику знаю , с приборами работать умею. И вот сидя дома томным вечером я понял , что хочу сменить работу. )) Из нужного знаю Си , ну как знаю , синтаксис , работу с памятью разобрал, указатели, битовые операции , немного поморгал светодиодом на отладке . А вопрос в следующем : какой необходим набор минимальных знаний и умений чтобы пройти на позицию джуна . Если кому не лениво напишите пожалуйста .Спасибо за внимание .)
Недавно в моих руках оказался уникальный кнопочный телефон - Маском Н2. Сначала я подумал что это просто китайский NoName-телефон по типу DEXP'а, или Fly'я, однако сняв заднюю крышку - я обомлел... И в том числе из-за использования корпуса от неприметной раскладушки - Samsung GT-C3520. Интересно узнать, что он скрывает у себя внутри?
Что за девайс?
На первый взгляд кажется что телефоны на фото - близнецы и ничем друг от друга не отличаются. Однако левое устройство выдаёт отсутствие логотипа Samsung, а также камеры, которая была заменена на логотип компании-производителя: некой Маском. После краткого гугления, оказалось что эта компания занимается исключительно госпроектами: разработка аудиосистемы в Кремле, создание супервычислительного научного комплекса и создание мобильных спец. лабораторий. В общем, компания серьезная...
Казалось бы, на первый взгляд это просто китайский бюджетный NoName-телефон с переклеенным шильдиком и кастомным логотипом, где из чипов только система на кристалле от MediaTek/Spreadtrum, микросхема флэш-памяти и усилитель мощности. Однако здесь внимание сразу привлекает использование внешнего радиомодуля Telit, который сам по себе стоит около двух-трех тысяч рублей. Не слишком похоже на обычный кнопочник...
Так уж получилось, что аппарат достался мне из утиля вместе с коробочкой. Несколько лет назад его списали по причине повреждения сим-лотка, выкинули на свалку, а оттуда он попал ко мне - в гиковские ручки, которые любят всё необычное :)
Комплект поставки максимально простой: сам телефон, зарядное устройство и небольшой мануал. Если честно, упаковка немного напоминает советскую - и этому есть своя причина.
Дело в том, что данный телефон стоил целых 34 тысячи рублей и предназначался специально для государственных служб. В мануале указано что устройство является защищенным и физически отключает микрофон при закрытии флипа, благодаря чему его можно использовать на закрытых собраниях. Если честно, я так и не понял почему телефон нельзя использовать для обработки чувствительной информации, но можно ходить с ним на собрания. Если кто-то шарит - расскажите пожалуйста в комментариях :)
Что внутри?
Увидев модем от Telit, я просто не смог удержаться и не разобрать Н2, дабы узнать что-же он там скрывает внутри. Серийный телефон на нестандартной платформе, да ещё и разработанный в РФ... У меня аж мурашки по коже были от потенциальной крутости такого устройства :)
Схемотехника и инженерные решения оказались очень необычными по меркам телефона. Например за питание в обычных кнопочных отвечает отдельный чип - так называемый контроллер питания, который совмещает в себе чарджер, DC-DC преобразователи, набор LDO, а также Watchdog. В Маском Н2 же используются отдельные чипы, выполняющие схожую функцию: например за зарядку отвечает модуль TP4056 разработки TPower, за питание микроконтроллера (процессора) - обычный 3.3v/300mA ULDO-регулятор по типу AMS1117, а в качестве драйвера, формирующего питание подсветки дисплея - Texas Instruments LM2733YMF. В качестве того самого механизма защиты с отключением микрофона используется аппаратный SPDT-свитч Analog Devices ADG884, Input-сигнал для которого идёт с датчика Холла флипа устройства. Решение весьма изящное :)
Радиомодуль Telit GE866-QUAD достоин отдельного разговора. Это по сути почти готовый внешний телефон, который общается с микроконтроллером или AP-процессором посредством шины UART. Общение происходит обычными AT-командами, как и в случае с радиомодулем вашего смартфона. Внутри него скрывается:
Неизвестный Baseband-процессор, состоящий из обычного ARM (?) ядра и DSP-сопроцессора для работы с GSM-модулем. Именно он выполняет основные функции телефона: звонки, СМС, работа с SIM-картой, хранение телефонной книги и даже выход в интернет. В обычных кнопочных телефонах, Baseband сразу же выполняет функции центрального процессора и отвечает за пользовательский интерфейс, Java и другие функции.
Baseband возможно собственной разработки Telit, а возможно и что-то от MediaTek/Qualcomm - как в случае с SIMCOM SIM800 (по крайней мере, Telit использует Qualcomm'овские MSM'ки в своих LTE-модемах).
RF-фронтэнд (может быть как частью бейсбенда, так и отдельным чипом). Он отвечает за всю "магию" под капотом аналоговой части и перегоняет исходящие цифровые GSM-пакеты от DSP в аналоговый сигнал на усилитель, а входящие из эфира - в цифровой. Если я не ошибаюсь, именно фронтэнд считает число палочек качества связи :)
Усилитель мощности. Тут думаю всё очевидно.
Возможно микросхема флэш-памяти с прошивкой модема, однако флэшка может быть и частью Baseband'а.
Интересно и то, что Telit сама когда-то делала ODM-телефоны для других брендов. У нас некоторые из них продавались под брендом RoverPC (RoverPC M1 - Telit SP600) и i-Mate (JAMA). Наверняка есть ещё какие-то интересные модели :)
Самое интересное у Н2 скрывается под металлическим экраном... и это микроконтроллер STM32F427 производства компании STMicroelectronics, который используется в качестве центрального процессора. Это очень "жирный" и крутой микроконтроллер, который состоит из:
Одного ARM-ядра Cortex-M4F, которое способно работать на частоте до 180МГц. Это в три раза больше, чем у ARM7TDMI в Motorola E398, в полтора раза больше, чем ARM926EJ-S в Siemens S65 и примерно на уровне Nokia времен C2 и X3. Однако M4F - куда более современное ядро и выдаёт 225 DMIPS в бенчмарке Dhrystone, что ставит его примерно на уровне Pentium MMX 200 (Dhrystone 2 с оптимизациями) и Pentium III 450 (без оптимизаций). Кроме того, у M4F есть FPU - заметно помогает с отрисовкой графики.
2 мегабайта встроенной Flash-памяти и 256 килобайт оперативной SRAM-памяти. Для сравнения, в Siemens C65 32 мегабайта NOR-памяти и 4 мегабайта SDRAM (но в Н2 основная память в модеме).
Большого числа периферийных ядер: FSMC для подключения внешней памяти, контроллер 8080-дисплеев, три 12-битных ADC, два 12-битных DAC'а, 4 UART'а, 3 I2C... прямо таки мечта эмдбеддщика :)
Основная изюминка здесь в том, что обычно в кнопочных телефонах не используют микроконтроллеры общего назначения. В них используются однокристальные ASIC'и, которые были разработаны специально для использования в мобильных гаджетах в целях максимального удешевления производства. Здесь же используется дорогущая STM'ка, которая сама по себе стоит не меньше 400-500 рублей (MediaTek MT6261DA стоит около 300 рублей при мелком опте, а это уже почти готовый телефон), что и намекает на мелкосерийную и российскую натуру разработки устройства.
С обратной стороны платы расположился копирайт (в ODM-устройствах информация о производителе обычно не указывается, ограничиваясь маркировкой модели). Мой экземпляр произведен в 2019 году.
Интересно, сколько вообще ревизий было?!
В целом, конструктивно телефон прост и надежен как автомат АК-47. Он собран из обычных компонентов, которые можно найти в любом более-менее крупном радиомагазине, все чипы используют выводные корпуса, а не BGA, что делает телефон устойчивее к падениям, а вся схемотехника устройства считывается глазами инженера за пару минут. Единственное действительно слабое место устройства - модуль зарядки TP4056. Дело в том, что у этого чипа очень много подделок и контрафактные экземпляры банально не держат ток зарядки в 500мА и выше, сильно нагреваясь и перегорая. Но учитывая емкость родного Samsung-овского аккумулятора в 800мА, вряд-ли чарджер здесь подвержен серьезным нагрузкам...
Даже я будучи не инженером нарисовал принципиальную схему у себя в голове уже через 5 минут после изучения устройства. Простота - во благо :)
Включаем
После включения нас встречает логотип Маском и рабочий стол, который всеми силами пытается пародировать интерфейс Nokia. Немудрено, аппарат ведь специально разработан чтобы быть внешне знакомым и при этом не выделятся среди других телефонов.
Поскольку в качестве основного процессора здесь используется микроконтроллер общего назначения, прошивку инженерам пришлось написать с нуля. Вся UI-часть телефона, плюс управление модемом разработано в РФ, что иронично - ведь когда-то у нас частично разрабатывали Motorola E398, CDMA-телефоны LG и по слухам некоторые телефоны Samsung.
Основное меню устройства состоит всего из четырех пунктов: настройки, журнал звонков, контакты и СМС. Функционал беднее чем в Nokia 3310, но учитывая назначение Н2 этому особо не удивляешься. Нет даже змейки, хотя процессор устройства способен потянуть Doom и даже Quake!
Встроенные программы реализованы на самом базовом уровне. В контактах есть возможность назначить только номер и имя, никаких подгрупп или фотографий при вызове.
У Н2 также есть некая программа для синхронизации с ПК, которую мне найти не удалось. В пункте Настройки можно найти специальный пункт для этого, а софт показывает число переданных данных (байтов? Пакетов? Контактов?)
Интересен и тот факт, что данные хранятся только на SIM. Это чётко можно заметить по окну "пожалуйста, подождите" при запуске меню сообщений, поскольку в это время телефон запрашивает данные из модема.
В целом, по программной части телефон очень простой и в нем реализован лишь базовый функционал. Однако это не делает его плохим или бесперспективным: я думаю что если бы Н2 был более массовым (пусть даже при цене в 6-7к рублей), то его давным давно бы уже замоддили, запилили кастомные прошивки и возможно даже написали свою с нуля. Но увы, к сожалению этих телефонов очень мало, на авито их не найти и телефон, который может по праву называться российским, так и канул в лету. Может хоть я оставлю небольшой след на скрижалях истории? :)
Заключение
Вообще, я уже писал статью об этом телефоне год назад. Однако та версия не была богата на детали, плюс, по моему мнению, требовала некоторого ремастера и с ней могли ознакомиться не все заинтересованные Пикабушники. Так что в рамках статьи-шортса, думаю, самое то :)
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья и вы хотите меня поддержать, у меня есть Boosty, а также виджет на Пикабу ниже. А ещё мне можноотправить какое-нибудь интересное железо: устройства на WinCE/WinMobile, смартфоны на Symbian, китайские кнопочники, китайские подделки на iPhone/Samsung из начала 2010-х, ретро-ПК железо - всё это я очень люблю, коллекционирую и пишу о них интересные статьи - как, например, эта :) Всем огромное спасибо!
В данной статье я хочу Вам рассказать про датчик HEDR(от компании avago technologies) - это двухканальный инкрементальный оптический датчик, предназначен для измерения пройденного пути, линейной скорости, угловой скорости и направлении вращения вала. С помощью данного датчика будет реализован энкодер на базе микроконтроллера STM32, который будет производить вычисление пройденного пути.
В данной статье будет рассмотрено:
Принцип работы датчика HEDR-5420-ES214;
Схема подключения к микроконтроллеру STM32;
Программная реализация (расчет пройденного пути и вывод информации на дисплей).
Источник света (светодиод, формирующий поток света);
Оптическая система (линза, обеспечивает фокусировку и отражение света);
Фотодетектор.
Линза фокусирует излучаемый свет на кодовое колесо (диск с чередующимися отражающими и неотражающими участками), при вращении диска, отраженный свет проходит обратно через оптическую систему и попадает на фотодиоды, таким образом на их поверхности формируется чередующийся рисунок света и тени, соответствующий узору кодового диска.
Эти изменения интенсивности света преобразуются в внутренние сигналы А и В, которые проходят через компараторы в составе обработки сигналов, на выходе формируются два цифровых прямоугольных сигнала - канал А и В, находящиеся в квадратурной фазе на 90°, что позволяет микроконтроллеру определять направление вращения вала, к примеру:
если канал А опережает канал B - вращение происходит в одну сторону;
если канал B опережает канал А - вращение происходит в противоположную сторону.
Для своей задачи применяется следующая последовательность, если канал А опережает канал B - движение энкодера считается положительным, если на оборот, то движение будет отрицательным.
Осциллограмма данных полученных с датчика HEDR-5420-ES214
Схема подключения к микроконтроллеру STM32
Схема подключения HEDR и дисплея к микроконтроллеру STM32F030CCT6
Макет STM32F030CCTx и HEDR
В данной схеме используются преобразователь напряжения DA1 (+12V +5V) и стабилизатор напряжения DA2, дисплей подключается к выводам МК 21_SCL_I2C2 и 22_SDA_I2C2, датчик HEDR подключается к выводам МК 29_CH.A и 30_CH.B, данные сигналы сначала проходят через делители, R17-R18-[CH.A] и R15-R16-[CH.B], так как датчик работает от +5V, сигналы соответственно тоже у него +5V, я всегда стараюсь дополнительно защитить МК, после делителя амплитуда сигналов снизится до +3.3V, копипастить информацию по описанию узлов преобразователя, стабилизатора, узла обвязки напряжения питания и резонатора для МК не особо хочется, поэтому кому интересно можно почитать статью [Модуль обработки и коммутации данных, с внешними управляющими устройствами по RS-485 на STM32] Настройка микроконтроллера STM32F030CCTx в CubeIDE
Настройка RCC и SYS (в RCC выбираю Crystal/Ceramic Resonator, так как у меня внешний кварц на 8 МГц)
Настройка дисплея
Взаимодействие дисплея с МК будет через I2C2
Настройка выводов узла подключения датчика HEDR
TIM1_CH1 (к данному выводу будет подключаться сигнал CH.A);
TIM1_CH2 (к данному выводу будет подключаться сигнал CH.B).
Таймер используется в режиме Encoder mode - это специальный аппаратный режим, который позволяет микроконтроллеру автоматически подсчитывать импульсы от инкрементального датчика и определять направление вращения, данная конфигурация освобождает МК от необходимости программно обрабатывать прерывания по каждому импульсу.
Encoder Mode TI1 and TI2 данный параметр указывает, что используется оба канала датчика (A и B), это дает разрешение X4 - т.е. счетчик будет увеличиваться на 4 шага за один полный оборот.
Описание режимов
TI1 - подсчет ведется по фронту одного канала А, направление определяется по уровню В, разрешение 1.8 градусов;
TI2 - аналогично логике TI1, но базируется на канале В;
TI1 and TI2 - подсчет ведется на каждом фронте обоих каналов (А+, А-, В+, В-), направление определяется автоматически, т.е. количеством импульсов на оборот 200, я получаю 800 шагов на оборот, разрешение будет 0.45 градусов.
Input Filter - включает цифровую фильтрацию входного сигнала, помогает убрать дребезг и шум, значения от 0 до 15, чем выше значение, тем надежнее фильтрация, но будет повышаться задержка.
Polarity (Rising Edge) - счетчик реагирует на восходящие фронты сигнала.
Настройка Clock
Программная реализация ведомого устройства
Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код — Исходный код для Encoder_HEDR_5420_STM32F030CCTx].
Модуль process_Encoder
Данный модуль реализует считывание сигналов с инкрементального датчика HEDR и вычисляет:
Количество импульсов на оборот;
Пройденную дистанцию;
Отображение данных на дисплее.
#define ENCODER_MODE_X4 4
Данный параметр отражает режим подсчета импульсов, привожу формулу
Этот режим обеспечивает максимальную точность - 0.45 на один шаг.
Если статья показалась Вам интересной, буду рад выпустить для Вас еще множество статей исследований по всевозможным видам устройств, так что, если не хотите их пропустить — буду благодарен за подписку на мой ТГ-канал.
В системах точного позиционирования и измерения угла поворота оптические энкодеры остаются критически важным компонентом, обеспечивающим обратную связь по положению. Среди множества датчиков данной категории, будет рассмотрен HOA0902-11 - это двухканальный фотодатчик, предназначенный для высокоточного измерения углового положения, скорости и направления вращения, его конструкция и схема работы основаны на принципе оптической модуляции света через диск.
Устройство датчика:
Внутри установлен светодиод (ИК-излучатель), который подсвечивает импульсный диск;
С противоположной стороны находятся два фотоприемника (фототранзистора);
Эти два фотоприемника расположены со смещением относительно друг друга (90° фазовый сдвиг).
HOA0902-11
В данной статье будут рассмотрены
Физические принципы работы HOA092-11;
Схема подключения к микроконтроллеру STM32F030CCTx;
Программная реализация (расчет пройденного пути, скорости и направления движения, а также вывод информации на дисплей).
Минимальный механический период (разрешение) [ предназначен для работы с механическим периодом равным 0,036 in (≈ 0.914 мм), что дает разрешение до 0,018 in (≈ 0,457 мм) ];
Температурный диапазон эксплуатации [ от -40°C до +70°C ]|.
Кремниевый NPN фототранзистор выполняет функцию приемника излучения;
Оптический зазор между излучателем и приемником обеспечивает зону детектирования.
Режимы работы:
Выход(SPEED(TACH)) - генерирует импульс при каждом пересечении порога освещенности, т.е. как только импульсный диск будет проходить через щель, появляется импульс (ширина 8 микросекунд, частота 125 kHz), как раз этот импульс я и буду обрабатывать в микроконтроллере.
В данном проекте используется импульсный диск он состоит из 16 "окон", за одно прохождение "окна", датчик будет выдавать контроллеру по 2 импульса,
Конструкция датчика и расположение "окон" на диске сделаны так, что когда одно "окно" проходит над датчиком, два приемника оказываются в разных фазах этого "окна".
Один приемник (канал A) находится точно по центру окна, когда другой (канал B) находится уже на краю (или наоборот).
Это приводит к тому, что сигналы с каналов A и B сдвинуты относительно друг друга на 90 электрических градусов.
Зачем это нужно?
Такой сдвиг (квадратура) решает сразу несколько критически важных задач:
1. Определение направления вращения (главная причина) Это самая важная функция, схема обработки сигнала в датчике смотрит, какой канал опережает.
Если канал A опережает канал B → вращение по часовой стрелке.
Если канал B опережает канал A → вращение против часовой стрелки.
2. Повышение разрешения
Удвоение количества импульсов достигается за счет обработки двух сдвинутых по фазе сигналов, что позволяет извлекать из одной механической конструкции вдвое больше полезной информации, в данной статье датчик HOA0902-11, через который проходит импульсный диск имеющий 16 "окон" при полном обороте, будет выдавать 32 импульса, таким образом получается более точное измерение угла, расстояния и скорости, что позволяет разрешению увеличиваться.
16 импульсов - шаг угла 360° / 16 = 22.5°;
32 импульса - шаг угла 360° / 32 = 11.25°.
3. Повышение помехоустойчивости и надежности Система может проверять соответствие сигналов двух каналов друг другу. Если возникает одиночный ложный импульс на одном канале, которому нет соответствия на другом, его можно отфильтровать как ошибку.
Выход направления (DIRECTION) - это логический вывод, который формируется внутри датчика HOA0902-11 из сравнения сигналов А и В, т.е. датчик сам определяет направление вращения и выдает это как отдельный цифровой сигнал:
DIRECTION = 0 (LOW) - вращение вперед (например, по часовой стрелке);
DIRECTION = 1 (HIGHT) - вращение назад (против часовой стрелки).
Таким образом, не нужно в МК сравнивать А и В, чтобы вычислять направление - датчик сам это делает, достаточно просто повесить прерывание.
!!! Очень важная информация, так как датчик HOA0902-11 работает по +5В, подключать напрямую сигналы "SPEED(TACH)" и "DIRECTION(DIR)" к микроконтроллеру STM32 (у которого логика работы по +3В) опасно, есть риск повреждения выводов, в следствии МК может просто выйти из строя.
Осциллограмма сигнала SPEED(TACH) (до делителя)
Осциллограмма сигнала DIRECTION(DIR) (до делителя)
Для того чтобы напряжение было приемлемым, для МК, необходимо поставить делители напряжения, на сигналы "SPEED" и "DIRECTION".
Осциллограмма сигнала SPEED(TACH) (после делителя)
Осциллограмма сигнала DIRECTION(DIR) (после делителя)Схема подключения HOA0902-11 и дисплея к микроконтроллеру STM32F030CCTx
На данной схеме изображено подключение датчика HOA0902-11 и дисплея, к микроконтроллеру STM32F030CCTx, а также реализация преобразователя со стабилизатором напряжения
Схема подключения HOA0902-11 и дисплея к микроконтроллеру STM32F030CCTx
Перечень элементов
Пояснения к схеме
Выводы NRST и BOOT0
Вывод NRST(reset) используется для аппаратного сброса МК, подключается через резистор R7(10кОм) к питанию +3В - подтягивает NRST к логической "1", конденсатор С5(0,1мкФ), формирует RC-цепочку, используется для подавления помех и автосброса при включении питания, данный пример схемы гарантирует корректный старт МК после подачи питания, защищает от ложных срабатываний при скачках напряжения.
Подключение NRST и BOOT0
Вывод BOOT0 определяет, откуда МК будет загружать программу после сброса:
BOOT0 = 0 - загрузка из Flash-памяти(основной режим работы);
BOOT0 = 1 - загрузка из системной памяти (встроенный загрузчик через UART, I2C, SPI).
В схеме вывод подтянут резистором R8 к земле (логический "0"), это обеспечивает автоматическую загрузку программы из flash-памяти после старта, если потребуется использовать встроенный загрузчик, можно временно подать "1" на BOOT0.
Обвязка питания VCC и VA
МК имеет несколько выводов питания:
VCC - основное цифровое питание (3.3В);
VA - питание аналоговой части (АЦП, компараторы и т.д.).
На выводах VCC и VA уставлен конденсатор С6 (0.1мкФ), он фильтрует высокочастотные помехи, возникающие при переключении логики, конденсатор ставиться как можно ближе к выводам МК, также дополнительно установлен танталовый конденсатор 4.7мкФ, он сглаживает низкочастотные колебания и стабилизирует питание аналоговой части.
Микросхема DA1 - MP2315 представляет собой синхронный понижающий (buck) DC-DC преобразователь с интегрированными силовыми MOSFET-ключами. Высокая частота переключения (до 2.2 МГц), компактный корпус и широкий диапазон входных напряжений (от 4.5 В до 24 В), ссылка на техническую документацию MP2315 [https://www.alldatasheet.com/datasheet-pdf/pdf/1035056/MPS/MP2315.html].
Микросхема DA2 - LP2985 представляет собой малошумящий стабилизатор, предназначен для преобразования входного напряжения +5В в стабильное напряжение +3В, используемое МК и периферийными узлами, ссылка на техническую документацию LP2985 [https://www.alldatasheet.com/datasheet-pdf/pdf/99706/TI/LP2985.html].
Подключение датчика HOA0902-11
Сигнал SPEED(TACH) - подключается через делитель R1 и R3, к выводу МК-12(PA2);
Сигнал DIR(DIRECTION) - подключается через делитель R4 и R5, к выводу МК-13(PA3).
Подключение дисплея
Сигнал SDA - подключается к выводу 21(PB10);
Сигнал SCL - подключается к выводу 22(PB11).
Настройка микроконтроллера STM32F030CCTx в CubeIDE
Настройка выводов
Вывод PA2 настроен на внешнее прерывание (EXTI) (выполняет роль триггера для подсчета импульса) к нему подключается сигнал SPEED(TACH) датчика HOA0902-11, каждый раз, когда через окно датчика проходит импульсный диск, датчик формирует импульс, далее он фиксируется аппаратным модулем EXTI, который:
Генерирует прерывание;
Устанавливает флаг encoderDone;
Делегирует дальнейшую обработку в функцию encoder_Handler().
Вывод PA3(DIRECTION) (GPIO_INPUT), используется для определения направления вращения.
Настройка таймеров
TIM3 используется как счетчик временных интервалов, настроен на генерацию прерываний, каждое срабатывание таймера фиксирует количество импульсов, поступивших от энкодера, таймер настраивается на прерывание раз в 100ms.
Настройка TIM3 в CubeMX
TIM14 используется в качестве системного диспетчера вывода информации на дисплей, таймер настраивается на генерацию прерываний с периодом 200mS, при каждом срабатывании прерывания происходит вызов функции display_update(), которая обновляет содержимое экрана.
Настройка TIM14
Настройка приоритетов
EXTI line 2 and 3 interrupts - [0];
TIM13 - [1];
TIM14 - [2].
Настройка Clock
Реализация программного кода
Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код - Исходный код для Encoder_HOA0902-11_STM32F030CCT6], а также видео тестирования энкодера [#исскуствомк_тестирование_Encoder].
Выполняет начальную инициализацию дисплея, подключенного по интерфейсу I2C(на базе контроллера SSD1306)
Инициализируется драйвер дисплея;
Выполняется заливка экрана черным цветом;
На дисплее на 2 секунды отображается стартовый экран с надписью ''ChipCraft";
После задержки экран очищается для дальнейшей работы.
Функция encoder_Handler() обработчик инкрементального энкодера
Вызывается при установке флага encoderDone, который формируется в прерывании внешнего входа (EXTI);
Определяется направление вращения вала датчика по состоянию пина DIRECTION_Pin:
RESET - движение вперед (инкремент счетчика);
SET - движение назад (декремент счетчика).
Вызывается метод get_distance_m() для расчета дистанции.
Функция display_update()
Отвечает за визуализацию информации на дисплее:
Экран предварительно очищается с помощью ssd1306_Fill(Black);
В верхней части по центру отображается надпись "Encoder";
Ниже последовательно выводятся:
количество импульсов;
дистанция;
скорость.
Буфер графики передается на дисплей вызовом ssd1306_UpdateScreen()
Функция float get_distance_m()
Возвращает текущее значение пройденного пути в метрах, расчет выполняется как произведение общего числа импульсов pulse_counter на метрический коэффициент DIST_PER_STEP_M, который определяется из геометрии колеса и количества "окон" импульсного диска.
Формула расчета дистанции
где:
N - Число импульсов;
D - Диаметр колеса;
PPR - количество импульсов на оборот.
HAL_TIM_PeriodElapsedCallback Функция обратного вызова, выполняется при переполнении таймера
Каждые WINDOW_TIME_S секунд фиксируется количество импульсов в pulse_counter_window;
После чтения счетчик сбрасывается;
Рассчитывается скорость
Формула расчета скорости
окно - это фиксированный промежуток времени, в течении которого производится расчет количества импульсов от датчика, в данном проекте будет 100 мс (0.1 с)
Скорость определяется как отношение пройденного пути за окно.
где S - путь в окне, t - длительность окна.
также в данной функции вызывается display_update(), для визуализации текущих значений на дисплее.
Модуль process_Encoder
Модуль proj_main()
Выполняется инициализация дисплея;
Запуск таймеров;
Запуск функции encoder_Handler().
Вывод
В результате проделанной работы реализована полноценная система измерения и отображения параметров энкодера, на базе датчика HOA0902-11 и микроконтроллера STM32F030CCTx.
Если статья показалась Вам интересной, буду рад выпустить для Вас еще множество статей исследований по всевозможным видам устройств, так что, если не хотите их пропустить – буду благодарен за подписку на мой ТГ-канал: https://t.me/ChipCraft.
Решил замерить потребление моей самодельной подвижной платформы на шаговых серво-двигателях.
Оказалось всё довольно экономно при цене в 5.56 руб за киловатт-час. Выходит около 56 коп. в час. При стоимости ваттметра в 831 руб. за те же деньги можно играть более 1400 часов.
Пополняю ассортимент своего магазина. Хотел спросить у более сведущих в этой сфере людей. Какое сопротивление резисторов самое ходовое? Как лучше закупить и каких побольше?