Преобразование уровней 1.5 и 5 вольт

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Добрый день.
Есть необходимость подключить китайский шатнгенциркуль к Ардуино.
В оригинальной статье используется достаточно простой переход питания 3.3 в 1.5 стабилизацией диодом,
а обратное преобразование сигналов 1.5 никак не происходит, как пишет автор при подтягивании + к 3.3 на плате
вроде как уровни становятся повыше и этого достаточно ардуино для считывания логики.

Хочется спросить как это согласование сделать правильно?
Можно ли установить на линии данных скажем простые DC-DC преобразователи типа таких?
Может есть готовые платы или микросхемы для таких решений?



"
The Arduino uses 5V logic but the callipers output 1.5V logic. This is a bit of a bodge and may not always work, really a proper logic level conversion circuit should be used but the flowing is a simple hack that worked well with my Arduino:

My Arduino changed between logic high and logic low at about 2.5V (this could vary a bit between boards).

Connecting the positive pin on the callipers to the 3.3V supply means when the clock and data pins are connected to the arduino their voltage seems to vary between 3.3V and 1.8V, which is the Arduino reads as logic high and low respectively.
"
 

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Здесь предлагают согласование через транзистор или простой делитель напряжения.
Почему при таком включении ардуино увидит уровень сигнала как 3.2 вольта?

"But more interestingly I came up with a novel approach to the logic level problem. I used three 10k resistors to make a voltage divider across the arduino 5v supply. That gave, 0V --|10k|-- 1.66V --|10K|-- 3.32V --|10K|-- 5V. I ran the caliper supply voltage from the 3.32V division and the caliper ground from the 1.66V division. This gave the caliper a close to nominal 1.66V supply but meant that the arduino would see its logic level shifting from 1.6V to 3.2V, just about perfect for the digital input logic levels. "
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
635
45
Ну классические способы:
  • Вниз (5В->1.5В) с помощью резисторного делителя, либо резистор-стабилитрон ограничителя.
  • Вверх (1.5В->5В) только с помощью транзистора. Причем если использовать мосфет, то нужно подбирать на пороговое напряжение открытия, т.к. не все смогут работать на 1.5В напряжении открытия.
Еще вариант заключается в том, чтобы уменьшить напряжение питания контроллера, atmega328p поддерживает питание с 1.8В, поэтому на минимальном напряжении вполне можно подключать без преобразователя. Но возникает другая проблема, подключение периферии с таким напряжением.
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,271
950
@78125, По ссылке представлены два метода:
1. С помощью транзистора. Здесь, наверное, подкачал перевод, так как транзистор в таком включении является не усилителем, а ключом. Тем не менее, уровни 0-1,5В эффективно преобразуются в уровни ~0,5-5В.
2. С помощью делителя. В этом случае отрицательная шина caliper подключается к точке 1,66В, а положительная - к 3,32В. Т.е., логический 0 на выходе соответствует потенциалу отрицательной шины и "видится" Ардуино как уровень 1,66В, а логическая 0 добавляет к уровню отрицательной шины 1,5В уровня единицы от caliper: 1,66+1,5 = 3,16В. Я бы так делать не стал по многим причинам. В первую очередь - ток, потребляемый caliper понижает напряжение на резистивном делителе и вызывает помехи на внутренние цепи (потенциально можно смягчить конденсатором параллельно шинам питания caliper). Во-вторых, 1,66В - это нестандартный уровень нуля для Ардуино. Да, это сработало в конкретном случае автора, но не факт, что Вам повезёт также. Аргумент "это проще" не вызывает никакой критики, так как один дешёвый транзистор и резистор по любому проще нескольких резисторов в делителе + шунтирующих конденсаторов. Транзисторный вариант инвертирует сигнал, что может являться проблемой если использовать стандартные библиотеки. Но добавление ещё одного транзистора полностью решает проблему.