У меня есть следующая схема для обработки сигналов, поступающих на контакты моего микроконтроллера.
Эта схема считывает как цифровые сигналы в диапазоне от 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, с резким переходом, чтобы он не влиял на диапазон АЦП.
Есть идеи?
Низковольтные стабилитроны имеют очень мягкие колена и для этой цели не подходят. Также вы никогда не сможете сделать ограничитель цепи точно при заданном напряжении - вам нужно определить минимальное напряжение, при котором ограничитель начинает влиять на вход (в определенной степени, например, 0,2%), и максимальное напряжение, которое произойдет после фиксации (при некотором максимальном входном напряжении). Чем ближе числа друг к другу (и чем выше максимальное входное напряжение), тем сложнее становится. Если ваш опорный сигнал АЦП значительно меньше, чем напряжение питания (как это обычно бывает в прецизионной системе), может быть разумный запас.
Также следует учитывать, куда будет протекать ток при фиксации (все входы одновременно, если это возможно). Очевидный метод зажима положительной рейки может вызвать проблемы, вызывая выход рейки из-под контроля и, возможно, повреждение деталей в результате.
Например, 4 входа с входным напряжением 30 В потребуют фиксации более 100 мА, что, скорее всего, вызовет серьезные проблемы.
Я предлагаю рассмотреть возможность смещения шунтирующего регулятора (например, TL431 ) примерно до 3,2 или 3,3 В (например, от источника 5 В > = 1 мА смещения, поэтому 1,6 К) и использовать диоды Шоттки для фиксации напряжения регулятора и 0 В. У вас все еще могут быть проблемы с тем, что он влияет на вход около полной шкалы или поддерживает входное напряжение ниже (скажем) 3,6 В - Vf диода Шоттки действительно изменяется с током.
Редактировать:
Пример:
Вы можете разделить питание клещей с более чем одним входом, в зависимости от максимального тока, который может выдержать TL431 (100 мА или меньше, в зависимости от тепловых соображений).
смоделируйте эту схему - схема, созданная с помощью CircuitLab
Если вы хотите изменить C1, обязательно обратитесь к техническому описанию и избегайте области нестабильности «туннеля смерти» при любых условиях.
Альтернативным и более надежным (и более быстрым, я считаю) способом защиты от перенапряжения является использование диода Шоттки на входе после токоограничивающего резистора (R1 в моем примере ниже).
Такое расположение защитит от максимального входного напряжения 30 В, которое вы предлагаете:
смоделируйте эту схему - схема, созданная с помощью CircuitLab
Эта схема имеет входной ограничитель R1, который, когда входное напряжение составляет максимум 30 В, ограничивает ток через D1, который ограничивается 3,3 В (VCC) до ~ 10 мА. D1 и D2 представляют собой диоды Шоттки с малым падением напряжения в прямом направлении, помогающим зафиксировать как можно ближе к VCC, а также защитить входные диоды CMOS микроконтроллера.
Конденсатор C1 предназначен для вашего RC-фильтра, который вы хотели. Его не нужно нагружать, или его можно заменить на той же площади подтягивающим резистором. Всегда можно добавить дискретные подтягивающие/понижающие резисторы рядом с C1.
У большинства микроконтроллеров есть опция для режимов входных выводов с внутренним подтягиванием, поэтому вы можете сохранить компонент, если у вас есть эта опция.
Если бы у вас была возможность НЕ подключаться к 30 В напрямую, я бы посоветовал вам сделать это, а не пытаться подключиться напрямую к выводу MCU, даже через эту схему защиты. См. этот вопрос и ответ / ответы для интерфейса высокого напряжения до 3,3 В: как эта схема для сопряжения сигнала 20 В с микроконтроллером 3v3
Возможно, вам придется найти хитрый способ пройти через аналоговый сигнал, возможно, аналоговый буфер с контактом «включения» и аналогичную схему защиты на его входе.
У вас уже есть разные значения компонентов для аналогового и цифрового (без подтягивающих и понижающих резисторов в аналоговой конфигурации), поэтому вам не нужно программное переключение между двумя режимами.
Следовательно, кажется разумным иметь два разных варианта Зенера?
В цифровом режиме стабилитрон является частью делителя напряжения, поэтому вы должны выбрать его, чтобы получить результирующее напряжение в нормальном рабочем диапазоне, т.е. вплоть до . 3,3-вольтовый или 3-вольтовый стабилитрон должен работать превосходно, возможно, даже при напряжении 2,5 В (см. спецификацию вашего микроконтроллера, чтобы узнать значение GPIO). ).
В аналоговом режиме вы получаете защиту от перегрузки, и никакого эффекта, когда вход находится в пределах допустимого диапазона. Таким образом, результирующее напряжение должно быть в пределах абсолютных максимальных значений, а не рабочего диапазона. Проверьте свое техническое описание, но 3,6 В почти наверняка приемлемо (вы защищаете чрезмерные токи от протекания через паразитные диоды внутри полупроводника, которые включают один диод выше ).
Чтобы защитить входные контакты от сигналов, подаваемых при отключении питания (или просто от остаточной мощности, попавшей в C1 при отключении питания), вам действительно следует запараллелить этот стабилитрон диодом с низким прямым напряжением (вы можете найти 0,2 В - 0,3 В), подключенный к рельс.
Не думаю, что это лучшее решение — накладные и более дорогостоящие, — но если вы сможете реализовать приведенную ниже логику с двумя операционными усилителями и драйвером, все готово.
if(Vin > 3.3) {
if(Vin > 3.3) {
Vout = Vcc;
} else {
Vout = -Vcc;
//never reaches here.
}
} else {
Vout = Vin;
//Driver needed here
}
КиранФ