Преобразование входных данных микроконтроллера

У меня есть следующая схема для обработки сигналов, поступающих на контакты моего микроконтроллера.

Эта схема считывает как цифровые сигналы в диапазоне от 0 до 30 В, так и аналоговые сигналы в диапазоне от 0 до 3,3 В.

введите описание изображения здесь

Компоненты Пояснение

  • R2 и R3 никогда не заполняются одновременно. Это подтягивающие/понижающие резисторы для цифровых сигналов.

  • R1 выполняет двойную роль. С одной стороны он входит в состав RC-фильтра вместе с C1, а с другой стороны является ограничителем тока для D1.

  • D1 просто гарантирует, что напряжение (в сигналах выше 3,3 В) будет зафиксировано, защищая uC.

Однако стабилитрон D1 создает проблему. Если я выберу стабилитрон 3V6, то более высокое напряжение, чем нужно, достигнет uC. Если я выберу стабилитрон 3V3, то слабые аналоговые сигналы, как правило, обрезаются раньше (т. е. стабилитрон начинает проводить небольшой ток раньше, чем его номинальное напряжение). Что еще хуже, даже если бы я мог каким-то образом гарантировать, что напряжение будет зафиксировано точно на уровне 3 В3, а по какой-либо причине Vcc даже немного ниже 3 В3, тогда АЦП сообщит неправильный результат.

Что мне здесь нужно, так это схема, которая будет фиксировать напряжение точно на Vcc, с резким переходом, чтобы он не влиял на диапазон АЦП.

Есть идеи?

Рассматривали ли вы возможность использования высоковольтного операционного усилителя, такого как LT6015? Он может выдерживать вдвое большее напряжение, чем вы ожидаете, и если вы питаете его от 3,3 В, он просто зафиксируется на выходной шине — это означает, что цифровой сигнал 0–30 В будет проходить как 0–3,3 В, а аналоговый сигнал будет проходить с усиление равное 1, если вы того пожелаете, или вы даже можете специально поставить на него усиление. с GBWP 3+ МГц, он точно должен соответствовать всем вашим требованиям к скорости. Если хочешь, я могу сделать это ответом

Ответы (4)

Низковольтные стабилитроны имеют очень мягкие колена и для этой цели не подходят. Также вы никогда не сможете сделать ограничитель цепи точно при заданном напряжении - вам нужно определить минимальное напряжение, при котором ограничитель начинает влиять на вход (в определенной степени, например, 0,2%), и максимальное напряжение, которое произойдет после фиксации (при некотором максимальном входном напряжении). Чем ближе числа друг к другу (и чем выше максимальное входное напряжение), тем сложнее становится. Если ваш опорный сигнал АЦП значительно меньше, чем напряжение питания (как это обычно бывает в прецизионной системе), может быть разумный запас.

Также следует учитывать, куда будет протекать ток при фиксации (все входы одновременно, если это возможно). Очевидный метод зажима положительной рейки может вызвать проблемы, вызывая выход рейки из-под контроля и, возможно, повреждение деталей в результате.

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

Я предлагаю рассмотреть возможность смещения шунтирующего регулятора (например, TL431 ) примерно до 3,2 или 3,3 В (например, от источника 5 В > = 1 мА смещения, поэтому 1,6 К) и использовать диоды Шоттки для фиксации напряжения регулятора и 0 В. У вас все еще могут быть проблемы с тем, что он влияет на вход около полной шкалы или поддерживает входное напряжение ниже (скажем) 3,6 В - Vf диода Шоттки действительно изменяется с током.

Редактировать:

Пример:

Вы можете разделить питание клещей с более чем одним входом, в зависимости от максимального тока, который может выдержать TL431 (100 мА или меньше, в зависимости от тепловых соображений).

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Если вы хотите изменить C1, обязательно обратитесь к техническому описанию и избегайте области нестабильности «туннеля смерти» при любых условиях.

Ага... Я как раз искал TL431. Не могли бы вы привести пример схемы с использованием этого компонента?
нельзя ли использовать лом на шине питания для предотвращения опасного перенапряжения от источников входного тока?
@KyranF Хороший вопрос. Конечно, вы можете поставить лом (или зажим) на источник питания. Конечно, это должно быть спроектировано так, чтобы он не отключался при слишком высоком или слишком низком напряжении, чтобы все на шине 3,3 В было защищено. С положительной стороны, уже есть много байпасной емкости, поэтому она никуда не денется слишком быстро.

Альтернативным и более надежным (и более быстрым, я считаю) способом защиты от перенапряжения является использование диода Шоттки на входе после токоограничивающего резистора (R1 в моем примере ниже).

Такое расположение защитит от максимального входного напряжения 30 В, которое вы предлагаете:

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Эта схема имеет входной ограничитель R1, который, когда входное напряжение составляет максимум 30 В, ограничивает ток через D1, который ограничивается 3,3 В (VCC) до ~ 10 мА. D1 и D2 представляют собой диоды Шоттки с малым падением напряжения в прямом направлении, помогающим зафиксировать как можно ближе к VCC, а также защитить входные диоды CMOS микроконтроллера.

Конденсатор C1 предназначен для вашего RC-фильтра, который вы хотели. Его не нужно нагружать, или его можно заменить на той же площади подтягивающим резистором. Всегда можно добавить дискретные подтягивающие/понижающие резисторы рядом с C1.

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

Если бы у вас была возможность НЕ подключаться к 30 В напрямую, я бы посоветовал вам сделать это, а не пытаться подключиться напрямую к выводу MCU, даже через эту схему защиты. См. этот вопрос и ответ / ответы для интерфейса высокого напряжения до 3,3 В: как эта схема для сопряжения сигнала 20 В с микроконтроллером 3v3

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

R1 был первым, за исключением подтягивающих и подтягивающих площадок, которые вы удалили (внутренне программируемая подтяжка/подтягивание является законным вариантом, если доступные значения являются разумными, но я не вижу, что наличие площадок для внешних резисторов создает какие-либо проблема).
R1 НЕ был первым, если подумать о последовательности событий для RC-фильтра и для ограничения тока через стабилитрон. Стабилитрон взорвался бы очень быстро, если бы вы подали 30 В на этот входной контакт.
Я думаю, вы неправильно читаете схему в вопросе, сигнал 30 В подается на разъем P1 (разъемы предназначены для подключения к внешним сигналам, и это единственное чтение, согласующееся с объяснением в вопросе), сеть помечена «INPUT» — это вывод микроконтроллера. Да, это справа налево, что сбивает с толку, но не редкость для контактов, находящихся с правой стороны символа MCU.
@BenVoigt ах да, теперь понятно. спасибо, что указали на это.
Это также имеет дополнительное преимущество защиты входа при отключении питания. Хотя я полагаю, что могут возникнуть проблемы со случайным включением схемы через фиксирующий диод.
@ alex.forencich да, хотя большинство электронных устройств говорят, что внешнее входное напряжение не должно применяться, если устройство не включено в первую очередь. Это поможет избежать такого сценария

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

Следовательно, кажется разумным иметь два разных варианта Зенера?

В цифровом режиме стабилитрон является частью делителя напряжения, поэтому вы должны выбрать его, чтобы получить результирующее напряжение в нормальном рабочем диапазоне, т.е. В я ЧАС вплоть до В С С . 3,3-вольтовый или 3-вольтовый стабилитрон должен работать превосходно, возможно, даже при напряжении 2,5 В (см. спецификацию вашего микроконтроллера, чтобы узнать значение GPIO). В я ЧАС ).

В аналоговом режиме вы получаете защиту от перегрузки, и никакого эффекта, когда вход находится в пределах допустимого диапазона. Таким образом, результирующее напряжение должно быть в пределах абсолютных максимальных значений, а не рабочего диапазона. Проверьте свое техническое описание, но 3,6 В почти наверняка приемлемо (вы защищаете чрезмерные токи от протекания через паразитные диоды внутри полупроводника, которые включают один диод выше В С С ).

Чтобы защитить входные контакты от сигналов, подаваемых при отключении питания (или просто от остаточной мощности, попавшей в C1 при отключении питания), вам действительно следует запараллелить этот стабилитрон диодом с низким прямым напряжением (вы можете найти 0,2 В - 0,3 В), подключенный к В С С рельс.

Бывают случаи аналоговых сигналов, при которых подтяжка будет сохраняться (т. е. при считывании показаний термистора). Так что это не отвечает на вопрос.
@ user3634713: Для термистора вы настраиваете стабилитрон как для аналоговых приложений, то есть компонент 3,6 В.
Может быть, это было не так ясно в моем вопросе, но в моем конкретном случае может быть обычным зажим больших напряжений, а выше Vcc АЦП работает со сбоями. Так что и в аналоговых случаях такое большое напряжение стабилитрона нежелательно. По сути, мне нужна схема, которая заменит стабилитрон, с более крутыми характеристиками зажима.

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

if(Vin > 3.3) {

     if(Vin > 3.3) {
          Vout = Vcc;
     } else {
          Vout = -Vcc;
          //never reaches here.
     }

} else {

     Vout = Vin;
     //Driver needed here
}
Интересный способ посмотреть на это. Это может быть реализовано с помощью простого буферного операционного усилителя, устойчивого к высоким напряжениям, такого как LT6015 или двойная версия LT6016.