Минимальный российский RISC. MDR1215LGI и MDR1219LGI от Миландр.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Вт окт 01, 2024 15:22:33

Сообщение Adrift »

ejsanyo писал(а): Сб авг 15, 2026 00:42:19Какие-то совсем новые чипы?
Последняя серия, если не считать анонсированного V8, на днях платку от Weact получил. За счет 40nm техпроцесса ST сделала камни на M33 дешевле, чем 90nm STM32G0 на M0+.
ejsanyo писал(а):Да, реально заварили 4 проволочки с чипа на один и тот же вывод! А чё, так можно было, что-ли?!
Такое давно делают:
Изображение
Вложения
g031.png
(19.68 КБ) 208 скачиваний
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Adrift писал(а): Сб авг 15, 2026 02:49:56 Такое давно делают:
О, не иначе опять кто-то у кого-то подсмотрел! :write: Хотя, у STm-а то наверно ноги мультиплексируются через коммутатор, а не запараллелены напрямую, как здесь?

Кстати о ногах, осталось упомянуть ещё один момент, без которого тема входов-выходов не будет полностью раскрыта:
Упомянуть, что в наших чипах, к сожалению, все ноги умеют работать либо только входами, либо двухтактными (push-pull) выходами. В смысле режима "открытый сток" тут не завезли, а жаль, в I2C и ему подобных интерфейсах было бы удобнее. Никакой "5В толерантности" у входов нет, что также печально. А выходы весьма слабые по нагрузочной способности, есть 2 градации мощности: до 2 мА и до 4 мА. Так что какой-то внешний буфер, по хорошему, придётся вешать даже чтобы нормально зажечь светодиод. И всё это вдвойне странно в свете того, что в ARM-чипах Миландра (да в том же К1986ВЕ92) всё перечисленное есть, и выходы нормальные, может, даже сильнее, чем в этих ваших STM32! Попытались сделать какой-то особо экономичный выходной каскад? Или у них отняли лицензию на нормальный IP-блок портов? :? Ну хотя бы сохранили возможность активировать слабую подтяжку как на плюс, так и на землю. "Атомарные операции" (выставить 0 или 1 в определённом разряде, не затрагивая остальные) поддерживаются на аппаратном уровне через специальные регистры (кстати, в К1986ВЕ92 такого не было).
Хоронили кваку - порвали три Rocket Launcherа.©
Реклама
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Вт окт 01, 2024 15:22:33

Сообщение Adrift »

ejsanyo писал(а): Сб авг 15, 2026 12:42:10Хотя, у STm-а то наверно ноги мультиплексируются через коммутатор, а не запараллелены напрямую, как здесь?
Соединены. Мультиплексируется только пара ног, там где PA12[PA10] и PA11[PA9].
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Adrift писал(а): Сб авг 15, 2026 13:08:37 Соединены. Мультиплексируется только пара ног, там где PA12[PA10] и PA11[PA9].
Не совсем понял из даташита на серию...т.е. здесь тоже можно включить пару выходов на конфликтующие уровни? И ладно бы Миландр и его дохлые пара мА (кстати теперь думаю, уж не по этой ли причине их так придушили по току? :))) ), но у ST-а то минимум полные 20! Неужто буржуи и правда такое допустили?!
Впрочем, вернёмся к нашим баранам MDR-ам. Пришло время, наконец, что-нибудь на них попробовать сделать. И начнём, пожалуй, с простого, с MDR1215LGI. Как уже отмечалось, более-менее полноценно на его ногах представлен 32-битный Таймер 1. А раз так, логично попробовать сделать на его основе, скажем...частотомер? :roll:
Захотелось тут, было дело, сделать такой индикатор нам на производство, чтобы контролить частоту напряжения при настройке. Напряжение порядка несколько сотен вольт, частота где-то от 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В, уже во всю трудится по прямому назначению.
Вложения
P_20260601_135138.jpg
(44.05 КБ) 167 скачиваний
Sch1.gif
(147.62 КБ) 164 скачивания
Хоронили кваку - порвали три Rocket Launcherа.©
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Пройдёмся немного по коду прошивки и поясним наиболее существенные моменты:

Код: Выделить всё

Не забываем закомменить #define USE_JTAG в MDR32VF0xI_config.h!
Да, тем самым мы отключаем последний рубеж защиты - программный, который разработчики библиотек тщательно выстроили в своём коде. Если эту строку оставить, библиотечные функции будут блокировать все "опасные" действия, которые могут отключить JTAG. Но, во имя функциональности, нам придётся идти на определённый риск. 8)

Код: Выделить всё

RST_CLK_HCLK_InitStructure.RST_CLK_PLLCPU_Multiplier = RST_CLK_PLLCPU_MUL_2; //будет 16 МГц
RST_CLK_HCLK_InitStructure.RST_CLK_CPU_C2_ClockSource = RST_CLK_CPU_C2_CLK_SRC_PLLCPU;
и далее...
Здесь, очевидно, мы включаем PLL и немного умножаем частоту RC-генератора...но зачем? Неужели 8 МГц не хватит на такие простые задачи? И здесь мы плавно переходим к разговору о серьёзных ограничениях возможности таймера. Взглянем на структурную схему из даташита:
Изображение
И увидим что? Правильно, цифровой фильтр, который откидывает импульсы короче определённой длительности. И вроде бы это неплохо, поскольку может устранить ложные срабатывания. Но дело в том, что этот фильтр хоть и настраиваемый, но...неотключаемый! И максимальная тактовая частота таймера, которую его можно заставить пропустить, составляет не более половины тактовой частоты, поступающей на этот фильтр! Да, вы правильно поняли, чтобы заработало внешнее тактирование таймера, вам всё равно придётся включить и внутреннее тактирование таймера!

Код: Выделить всё

RST_CLK_PER1_C2_Cmd(RST_CLK_PER1_C2_TIM1, ENABLE);
RST_CLK_PCLKCmd(RST_CLK_PCLK_TIMER1, ENABLE);
Да, в этом смысле наш чип, пожалуй, уступает некоторым PIC16, в которых таймер можно было гнать гораздо быстрее частоты ядра. :? Чем активно пользовались создатели любительских частотомеров. Но для нашей задачи и её частот имеющихся возможностей всё ещё достаточно.
Но всё-таки, зачем тогда мы включаем умножитель? 8 МГц частоты RC-генератора как раз в 2 раза больше кварцевой. Так...да не совсем: у любого генератора есть допуски по частоте, а также нестабильность во времени. И этот хрупкий баланс частоты в результате может нарушаться, что у меня и происходило на практике - частотомер показывал какой-то случайный бред. Так что реально разницу частот придётся делать с запасом, больше двух. И раз уж кварц я уже впаял на 4 МГц...пришлось выкручиваться разгоном внутренней тактовой частоты.
Кстати, на входе активации захвата таймера подобный фильтр также присутствует, и здесь как раз будет разумно этой функцией воспользоваться, адекватно настроив его полосу пропускания.
Из нетипичного можете увидеть в коде пример использования аппаратного блока для расчёта контрольных сумм. Он там весьма удобен и функционален. А также правильную последовательность инициализации и работу с Watchdog-ом.
Местную систему прерываний и правила работы с ней весьма подробно расписал в специальной статье один из разработчков (?) чипа. Отметим только, что здесь мы использовали векторный режим прерываний (а в чём вообще смысл им не пользоваться?!). Одно прерывание, очевидно, срабатывает на событие захвата таймера. Но также очевидно, что при пропадании сигнала на входе события захвата таймера также пропадут, и цикл измерений так и зависнет в бесконечности. Так что нужно предусмотреть некоторый таймаут, по истечении которого показать пользователю, что частоты на входе нет. Для этого включаем в работу Таймер 2 (какая разница, всё равно без дела простаивает) и его прерывания по счёту до заданного порога.
Часть интерфейса TM1637 реализована по самому банальному принципу, с активным использованием программных задержек DELAY_WaitUs(), DELAY_WaitMs() для задания длительности импульсов. Хочется ещё раз похвалить разработчиков библиотек за грамотную реализацию этих функций. :chmoked:
Вложения
ETR.gif
(12.45 КБ) 146 скачиваний
Хоронили кваку - порвали три Rocket Launcherа.©
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

А здесь у нас ещё один пример самоделки на MDR1215LGI. Тоже вполне рабочий :roll:
Хоронили кваку - порвали три Rocket Launcherа.©
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Кстати да, следует уточнить кое-какие моменты про MDR1219LGI:
  • Ноги PA10, PA11 можно задействовать не только под UART, но и под Таймер 4, аналогично PA6, PA7 в MDR1215LGI.
  • Кроме того, нога PA10 может стать входом внешнего прерывания.
  • А вот SPI, к сожалению, в нормальном виде здесь использовать не получится, поскольку сигнал SSP2_CLK остался в недрах чипа. :( Так что пригодится он, разве что, в каком-нибудь нестандартном применении, вроде генератора импульсов.
И конечно, в Eclipse чтобы скомпилировать проект в выбранной конфигурации, необязательно жмать "Build All", лучше выбрать "Build Project".
Хоронили кваку - порвали три Rocket Launcherа.©
Мучитель микросхем
Сообщения: 466
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

То есть, вместо нормального RM, будет эта ветка? Заодно с "обучением" работы в Eclipse? А зачем?
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Zapolyarny писал(а): Вс авг 30, 2026 17:17:10 То есть, вместо нормального RM, будет эта ветка?
"Нормального"...кого? :?
Хоронили кваку - порвали три Rocket Launcherа.©
Мучитель микросхем
Сообщения: 466
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Руководства по применению. Reference Manual. У них его нет?
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Zapolyarny писал(а): Вс авг 30, 2026 23:02:21 них его нет?
У них есть даташиты, понятное дело. И есть некий раздел на сайте, под названием "База знаний". Но очевидно, что всех нюансов там не раскрыто, хотя так можно сказать о любом контроллере. Тащемта, поэтому я и сделал эту ветку здесь. :lol:
Хоронили кваку - порвали три Rocket Launcherа.©
Мучитель микросхем
Сообщения: 466
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Ясно. Тогда полезно.
Однако, насчёт других микроконтроллеров... я пока лишь один раз нашёл "косяк" в PIC18F14K50 - описание работы модуля USB в одном месте не соответствовало действительности. А так-то обычно более чем описаны импортные. И если для этого мк нужны такие изыскания, то как-то он не вызывает желания приобретаться...
Друг Кота
Аватара пользователя
Сообщения: 3506
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

Ну так и не приобретайте. Если Вы не понимаете зачем Вам нужны именно российские комплектующие микроконтроллеры, значит они Вам не нужны.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Мучитель микросхем
Сообщения: 466
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Я искренне рад за Вас, что Вы понимаете, зачем Вам нужны псевдороссийские микроконтроллеры на порядок дороже с сомнительной поддержкой и практически фабрика-лесс.
Мне-то, ущербному, этого не понять.
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

Zapolyarny писал(а): Вс авг 30, 2026 23:18:30 я пока лишь один раз нашёл "косяк" в PIC18F14K50
Уверен, что наверняка этим дело не ограничивается. Наверняка имеются какие-то нюансы использования MPLab-а (или под чем сейчас предлагается кодить под микрочипы ), которые вам очевидны, а другим - не особо? Вы бы могли сделать в соседнем разделе свою ветку и провести в ней обзор свежих псевдо-американских PIC-ов, наверняка эта контора не сидела без дела с тех пор, как скушала псевдо-норвежский Atmel? Ну, или не знаю в каком разделе, но провести полный сравнительный обзор воистину-китайской линейки ESP32...хотя да, с рассовой чистотой там тоже всё спорно. :)))
В данной же ветке мы продолжим делиться знаниями, полученными относительно новой миландровской продукции. А что же именно мы недавно узнали? Например то, что в MDR1219LGI у нас присутствует вход АЦП. Не опробовать ли нам его в деле? Например, как он себя покажет в качестве...вольтметра?
Даташит нам скромно обещает "10 бит, в качестве опоры - напряжение питания, до 500 кВыборок/с, нелинейность в районе 1 МЗР". В общем, всё как обычно.
Есть канал встроенного датчика температуры, громоздкая, хоть и не особо сложная формула для которого приведена в соответствующем разделе. Как всегда, для встроенных датчиков, эта формула весьма примерная, и результаты зависят от конкретного экземпляра чипа. Так что сойдёт либо только для очень грубой защиты устройства от перегрева, либо делайте сложную нудную индивидуальную калибровку, либо просто используйте более точный внешний датчик.
Можно в специальных регистрах задавать две уставки, если очередной отсчёт АЦП их пересекает, генерится прерывание (это обзывают "Преобразование с контролем границ"). Может пригодиться, если будем делать какое-нибудь пороговое устройство.
Но если присмотреться к структурной схеме, можно увидеть, что для АЦП можно включить в качестве опоры гораздо более стабильный, чем питание, встроенный источник опоры VREF_INT, с номинальным напряжением 2,4В. Хоть в корпусе MDR1219LGI он наружу не выведен, но он есть, и его на самом деле можно включить. И он работает! Почему были сомнения? Потому что в даташите есть раздел "Предельно-допустимые и предельные параметры", в котором, если присмотреться, старательно не нормируют параметры АЦП при работе с VREF_INT. Странно...тогда я спросил у ясеня техподдержки Миландра, что бы это значило? Оказывается, суть как раз в том, что в отличие от "полнокорпусного" MDR1206, опора не выведена наружу. В результате, на производстве после корпусирования...изготовитель просто не в состоянии адекватно измерить параметры VREF_INT. :oops: А потому и не может давать гарантии относительно него в данном исполнении. Но технически, да, источник VREF_INT внутри такой же, и с технической точки зрения его параметры должны быть те же самые, что и у "полной версии" чипа.
Но кажется, мы ещё о чём-то забыли. Даташит нам говорит, что мы можем тактировать АЦП либо частотой, которая идёт на процессорное ядро, либо включить отдельную ветку делителей от тактового генератора. И довольно кратко упоминает, мол, "Максимальная частота не может превышать 28 МГц". Хорошо, а как насчёт...минимальной частоты? А она явно должна быть, поскольку обязательный элемент любого современного АЦП - устройство выборки-хранения, которое способно сохранять мгновенное значение сигнала лишь ограниченное время! Техподдержка Миландра прокомментировала это так, что официально они нормируют лишь максимальную частоту. Разработчик чипа рассчитывал на минимальную тактовую частоту не менее 1 МГц, хотя при заводских испытаниях АЦП вполне соответствовал заявленным требованиям и на гораздо более низких тактовых частотах. У меня он, по факту, адекватно работал на тактовых частотах порядка нескольких кГц. Опять скромничают? :P Хотя совсем дотошно, во всём диапазоне температур, я его пока не проверял.
Хоронили кваку - порвали три Rocket Launcherа.©
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Чт апр 28, 2016 22:33:47
Откуда: ARPA Internet

Сообщение ejsanyo »

А теперь подумаем, каким должен быть полученный вольтметр? Пожалуй, сделаем диапазон как один из в каком-нибудь китайском тестере, ±20 Вольт например. 10 бит АЦП теоретически дают нам инструментальную погрешность измерений 100/1024 = порядка 0,1%, или для выбранного диапазона дискретность порядка 0,02 Вольт. Ну плюс ещё потенциально может наложиться нелинейность, шум, где-то всё это тоже потенциально 1 младший значащий разряд. Пока как-то не очень впечатляет, но мы проверим всё это на практике...а как проверим-то, если нам захотелось диапазон "плюс-минус"?! Местный АЦП ведь умеет измерять только положительное напряжение! :? Но нет ничего невозможного, когда на помощь приходит старая добрая аналоговая схемотехника! 8)
Например, можно взять дополнительный источник опорного напряжения, равный по величине половине от напряжения встроенного ИОН контроллера, замешать его с основным сигналом при помощи аналогового сумматора и подать результат на АЦП. В нуле получим половину отсчётов АЦП, при отрицательном напряжении число просто пойдёт вниз. Но есть в этом методе недостаток в том, что здесь мы фактически потратили один бит из своих и так немногих десяти на отображение знака, так что дискретность измерений станет ещё в 2 раза грубее. Ладно, допустим суммирующий усилитель мы можем сделать таким, что его погрешность нам заметно ничего не испортит, но в качестве ещё одного источника нестабильности (особенно температурной) появляется дополнительный ИОН, что не очень хорошо. А встроенный ИОН контроллера, как мы помним, наружу не выведен, так что он нам не поможет. А что если бы пойти другим путём? Сделать такую схему, которая будет всегда изменять знак выходного напряжения на положительный, независимо от того, что подано на вход? Так мы сможем сохранить все свои биты! И такие схемы давно известны, под названием "активный детектор".
Были проведены кое-какие практические испытания, в результате которых лучше всего показал себя вариант...да вот сейчас мы его и изобразим:
Изображение
А чтобы можно было лучше всё рассмотреть, вот, как обычно, полный архив проекта со схемой, разводкой платы и проектом прошивки: https://drive.google.com/file/d/1r_KdVr ... sp=sharing :lol:
Сдвоенный операционник DA2 реализует тот самый высоколинейный детектор, а по совместительству - "ослабитель" входного сигнала с коэффициентом передачи, близким к 0,12. Мы же помним, что диапазон входа АЦП составляет лишь до 2,4В? Кондёр С3 зарубает частотную характеристику входного каскада для пущей устойчивости его, а также некоторый фильтрации сигнала от высокочастотных составляющих. Не забудем поставить последовательно с выходом детектора R11, чтобы по возможности не мешать программатору, когда он подключен.
Но кажется кое-что мы забыли? Ну конечно, что же это за тестер такой будет, который на сигнал любой полярности будет показывать лишь абсолютное значение напряжения? Нужна индикация знака этого самого напряжения! А для индикации нужно каким-то образом сообщить контроллеру о знаке напряжения. И так у нас в схеме появился классический компаратор DA3, который в ходе практической отработки показал себя лучше всего именно в таком включении, как показано на схеме. Казалось бы, что проще? Сравниваем сигнал с нулём, выдаём результат на вход контроллера...но можно сделать и лучше! Чтобы понять суть, вспомним, как работает основная часть детектора DA2A: как любой инвертирующий усилитель, охваченный отрицательной обратной связью, схема всеми силами тужится сохранить равенство потенциалов между инвертирующим и неинвертирующим входами. Выдавая на выходе соответствующее напряжение, конечно. Но на пути в обратную связь это напряжение встречается с диодом VD1, падение напряжения на одном из p-n переходов которого ему придётся преодолеть. К чему это приводит? К тому, что даже при минимальном изменении входного сигнала относительно нуля, в плюс или минус, на выходе сигнал будет подскакивать резко, практически сразу до уровня падения напряжения на открытом диоде, т.е. не менее где-то 0,4...0,5В. При этом знак этого напряжения, опять таки по принципу действия, будет противоположным по сравнению со знаком входного сигнала. Очевидно, такое "дискретное" поведение гораздо лучше подходит для сравнения компаратором, повышая чёткость его переключения! А если вспомнить, что LM311 имеет выходной каскад с открытыми эмиттером и коллектором, которые можно подключить куда хочешь, согласование с 3,3 вольтовыми уровнями контроллера упрощается. Но не забудем установить R15, опять же, чтобы не мешать программатору.
Как вы уже успели заметить, диод VD1 имеет ключевую роль в процессе "выпрямления" входного сигнала, замыкая либо одну, либо другую ветку обратной связи. А учитывая, какие малые токи в этой обратной связи протекают (при максимальном входном сигнале - порядка до сотни с небольшим мкА), становится ощутимым влияние тока утечки закрытой части диода! Особенно когда данный ток начинает возрастать с ростом окружающей температуры. Так, испытания показали, что с маленькими диодами Шоттки, вроде BAT54S КДШ160ВС9 схема устойчиво воспроизводит коэффициент передачи лишь в нормальных условиях, но при нагреве до 40 градусов и выше выходной сигнал резко падает. Вот почему сейчас в схеме установлен BAV199, знаменитый своим крайне низким током утечки. С ним изменение коэффициента передачи получилось, по крайней мере, не хуже -0,05% на 10 градусов. Вероятно, могут подойти и другие хорошие диоды не-Шоттки, например, КД629АС9, но надо проверять.
Следует также отметить особую роль конденсатора C10: опытные разрабы знают, что компараторы старых лет разработки имеют некоторые проблемы при сравнении сигналов, близких по уровню - возможно нестабильное переключение, в худшем случае сваливающееся в генерёжку. За долгие годы применения были также выработаны способы устранения этого явления, и установка такого кондёра на выходе - один из самых простых и надёжных. Разумеется, при этом сильно теряется быстродействие, но в нашем случае это не имеет значения. Ещё один нюанс применения LM311, о котором иногда забывают - если выводы балансировки 5, 6 не используются, их лучше перемкнуть между собой.
Пару слов о питании: для надёжной и правильной работы детектора его величина должна быть хотя бы не ниже 5В. Кроме того, питание здесь требуется двухполярное, как минимум, поскольку DA2A при работе должен уметь выдавать отрицательное напряжение на выходе. Но, поскольку потребление в данном случае небольшое, порядка нескольких мА, мы можем сделать отрицательное питание из положительного классическим "емкостным насосом" DA4 ICL7660.
Вложения
Schematic Prints.gif
(191.74 КБ) 31 скачивание
Хоронили кваку - порвали три Rocket Launcherа.©
Ответить

Вернуться в «Разные вопросы по МК»