Adrift писал(а): Сб авг 15, 2026 13:08:37
Соединены. Мультиплексируется только пара ног, там где PA12[PA10] и PA11[PA9].
Не совсем понял из даташита на серию...т.е. здесь тоже можно включить пару выходов на конфликтующие уровни? И ладно бы Миландр и его дохлые пара мА (кстати теперь думаю, уж не по этой ли причине их так придушили по току?

), но у ST-а то минимум полные 20! Неужто буржуи и правда такое допустили?!
Впрочем, вернёмся к нашим
баранам MDR-ам. Пришло время, наконец, что-нибудь на них попробовать сделать. И начнём, пожалуй, с простого, с MDR1215LGI. Как уже отмечалось, более-менее полноценно на его ногах представлен 32-битный Таймер 1. А раз так, логично попробовать сделать на его основе, скажем...частотомер?
Захотелось тут, было дело, сделать такой индикатор нам на производство, чтобы контролить частоту напряжения при настройке. Напряжение порядка несколько сотен вольт, частота где-то от 50 до 400 Гц. Но точность при этом хотелось иметь повыше, как и "отзывчивость" прибора, т.е. период обновления показаний чтобы был почаще, чем в среднетипичном тестере, скажем, но ещё не слишком мельтешащим и раздражающим. Этому неплохо соответствует метод измерения частоты
через период. Берём генератор импульсов с образцовой частотой, считаем при помощи таймера, сколько в
попугаях количестве этих импульсов длится период измеряемого сигнала, и по сути получаем значение его периода. А пользователю выводим обратное значение от этой величины, это и будет частота. Так что в минимальном случае результат измерений у нас будет готов уже через один период сигнала. Дополнительно можем позволить себе сделать "скользящее среднее" из нескольких отсчётов, чтобы снизить флюктуации показаний.
Покажем уже наконец схему и по ней покажем, что тут к чему:

Если форум снова зашакалит картинку, здесь полный проект в Altium Designer 10 и исходники прошивки:
https://drive.google.com/file/d/1dbp3GH ... sp=sharing hex-файл лежит в папке
MDR1206_FLASH_RELEASE.
Начнём с цепей входного сигнала. Поскольку с той стороны высокое напряжение, сделаем его гальваническую развязку на
китайском трансформаторе напряжения ZMPT101, подозрительно похожем на трансформатор тока. Действительно, на самом деле он передаём именно ток в соотношении 1:1, который задаётся двумя резисторами R1, R2. Резюки должны быть достаточно могучими, чтобы выдерживать напряжение и мощность. Рекомендую взять их на мощность
не менее 1 Вт, этого должно хватить для диапазона входных напряжений от нескольких десятков до 500В. Но, собственно, сам уровень напряжения нас сейчас не интересует, нам нужна частота. Поэтому дальше стоит простейший ключ-формирователь импульсов на VT1, который заводится на вход таймера для захвата (input capture). Кстати, вы обратили внимание, как мы лихо скооперировали его с подтяжкой JTAG в виде R4? Причём, пока сигнала на входе нет, ключ закрыт и на работу JTAG влиять не будет!
Вот и минимальный набор для измерения готов...но чего-то, кажется, не хватает? Генератора опорной частоты, конечно. Да, мы можем использовать внутренний RC-генератор чипа в качестве опоры, но, несмотря на заводскую подгонку, с точки зрения метрологии это такое себе. Поэтому хотелось бы чего-нибудь кварцевого для таких целей. И вот здесь как раз пригодится возможность работы входа
ETR в качестве источника тактовых импульсов таймера! Просто берём и вешаем туда модуль кварцевого генератора. Я взял его
на 4 МГц, и конечно, рассчитанный на питание 3,3В. Хотя не совсем "просто", лучше сделать это через резистор. При этом, при подключенном JTAG, его выходной буфер будет пересиливать ток генератора, ограниченный резистором, благодаря чему генератор нам хотя бы не помешает зашить прошивку. Естественно, чтобы таймер заработал, после зашивки JTAG придётся отключить (если сам JTAG-адаптер не переведёт свои выходы в Z-состояние). Поначалу я взял
R5 на 10 кОм, и в принципе всё работало, но не понравилось, как на такой частоте заваливались фронты импульсов. Видимо постоянная времени получается с учётом входной ёмкости уже слишком большой, поэтому уменьшил его до 1 кОм. Мой
ULINK2 вроде справляется нормально, но если есть сомнения в буферах вашего JTAG-адаптера, придётся, наверно, временно разрывать цепь, джампером например.
Вот теперь измерительный тракт точно готов, осталось сделать индикацию. Для этого возьмём банальный
TM1637 и повесим на него большой и красивый модуль индикации
E60561-IOOW, который идеально вписывается в возможности чипа. Поскольку иных вариантов особо нет, интерфейс с контроллером делаем по
ардуиновской классике, "ногодрыгом". Не забывая при этом, что режима "открытый сток" в наш контроллер не завезли! Так что придётся его "эмулировать", почти как на AVR: переключая режим работы ноги то на выход с зажатым нулём, то на вход. Но есть ещё пара нюансов с этим подключением:
Питание на TM1637 мы даём полные 5В, чтоб индикаторы горели хорошо и ярко. Но согласно даташиту гарантированно распознаваемый уровень лог. 1 у него составляет "0,7 * Udd". Т.е. при питании 5В это будет 3,5В. Но контроллер-то питается у нас от 3,3В! Вообще пишут, что в жизни это не так критично, у людей всё нормально работает и с 3,3В уровнями. Но попробуем немного перестраховаться и
подтянем R8, R9 прямо на 5В. "А так можно, что-ли?" Почему бы и нет. Конечно, в недрах контроллера при этом откроются внутренние защитные диоды на плюс питания и будут нам значительную часть потенциала лог. 1 туда сливать...ну и что? Чип от этого не сломается, с таким-то током подтяжки. а с учётом падения напряжения на диодах, мы хотя бы можем рассчитывать на уровень единицы не ниже 3,8В. И формально выполнить требование даташита!
По каким-то неписанным китайским правилам, на готовых модулях с TM1637 на линиях интерфейса всегда распаивают пару конденсаторов. Очевидно, для снижения влияния помех. Требуется ли это на самом деле, или нет - вопрос неоднозначный. Но я не стал нарушать традиций и поставил C4, C5.

Эта приспособа, дополненная блоком питания на 5В, уже во всю трудится по прямому назначению.