1. Общая характеристика микросхемы MCP3301
Микросхема MCP3301 представляет собой 13-битный низкопотребляющий (до 450 мкА в активном режиме при питании от источника 5 В) аналого-цифровой преобразователь (АЦП) последовательного приближения с дифференциальным входом и возможностью передачи данных по SPI-интерфейсу. Максимальная частота семплирования — 100 ksps. Опорное напряжение может быть выбрано из диапазона от 400 мВ до 5 В; получающийся при этом шаг преобразования: 98 мкВ и 1,22 мВ соответственно. MCP3301 доступен в 8-выводных MSOP, PDIP и SOIC корпусах.
2. Описание функционального назначения выводов микросхемы MCP3301
Таблица 1 — Функциональное назначение выводов микросхемы MCP3301
№ |
Наименование вывода |
Функциональное назначение |
1. |
VREF |
Опорное напряжение |
2. |
IN+ |
Положительный аналоговый вход |
3. |
IN- |
Отрицательный аналоговый вход |
4. |
VSS |
Общий |
5. |
CS/SHDN |
Выбор ведомого устройства / режим ожидания |
6. |
DOUT |
Данные, передаваемые по последовательному синхронному интерфейсу SPI |
7. |
CLK |
Сигнал тактирования |
8. |
VDD |
Питание микросхемы (4,5 В - 5,0 В) |
Значение потенциала на выводе опорного напряжения определяет максимальный диапазон измеряемого сигнала, поступающего на аналоговые входы микросхемы, а также величину шага АЦП (минимального измеряемого значения), вычисляемого следующим образом:
Чем ниже значение опорного напряжения на соответствующем выводе микросхемы, тем меньше величина шага АЦП. Полный диапазон измеряемого входного напряжения определяется разницей значений напряжений на аналоговых входах микросхемы. Вывод выбора ведомого устройства / режим ожидания при переводе из высокого состояния в низкое используется для инициирования процесса получения данных с микросхемы АЦП. При переводе данного вывода из низкого состояния в высокое также осуществляется завершение работы преобразователя и переход микросхемы в режим ожидания с низким потреблением. Между результатами преобразования необходимо переводить вывод выбора ведомого устройства / режим ожидания в высокое состояние. Вывод данных последовательного синхронного интерфейса SPI используется для получения результатов АЦП. Бит данных принимается на заднем фронте тактирующего сигнала. Вывод сигнала тактирования используется для инициирования преобразования, а также для синхронизации каждого бита данных АЦП по мере его готовности.
Распиновка микросхемы приведена на рисунке 1.
В микросхеме MCP3301 используется аналого-цифровой преобразователь последовательного приближения. При таком аппаратном решении производится одновременное преобразование и сохранение значения разницы потенциалов на аналоговых входах микросхемы во внутренних схемах микросхемы за время, равное 1,5 тактовых цикла (tACQ). После этого схема удержания входного сигнала открывается, а аккумулированный заряд используется для получения данных, передаваемых последовательного в виде 13-битного дополнительного кода. Данный процесс преобразования управляется внешним тактирующим сигналом и должен включать 13 синхронизирующих импульсов, по одному на каждый бит. Во время этого процесса сначала выводится наиболее значимый бит (MSB). Этот бит является знаковым битом и указывает, находится ли вход IN+ или вход IN- с более высоким потенциалом.
3. Работа с последовательным интерфейсом
Микросхема передаёт значение напряжения в дополнительном коде. Первым передаётся бит, индицирующий знак измеренного значения напряжения. При превышении значения напряжения на аналоговом входе IN+ над величиной напряжения аналогового входа IN- знаковый бит устанавливается в ноль. В случае, если значение напряжения на аналоговом входе IN- выше значения напряжения на аналоговом входе IN+, знаковый бит устанавливается в единицу. Циклограмма процесса взаимодействия с микросхемой MCP3301 приведена на рисунке 2.
Связь с микросхемой MCP3301 обеспечивается с помощью стандартного последовательного интерфейса SPI. Инициализация связи производится посредством перевода линии CS в низкое состояние. При следующем переднем фронте тактового сигнала микросхема начинает операцию сэмплирования входного напряжения, которая завершается на заднем фронте синхроимпульса. Одновременно с этим микросхема передаёт нулевой бит со значением “0”. Следующие 13 тактовых сигналов микросхема передаёт результат сэмплирования: 1-й бит — знаковый бит, остальные 12 битов — измеренное значение (начиная с наибольшего значащего бита (MSB)). Данные передаются всегда на заднем фронте тактового сигнала.
Если все 13 бит данных переданы, но тактирование микросхемы продолжается, а также одновременно с этим удерживается в низком состоянии линия CS, устройство начинает повторную передачу данных, но теперь начиная с наименьшего значащего бита (LSB). Циклограмма процесса взаимодействия с микросхемой MCP3301 в случае продолжения тактирования и установленным низким уровнем на линии CS приведена на рисунке 3.
В примере использовался микроконтроллер STM32F051. В качестве источника опорного напряжения использовалась микросхема MCP1541T (4,096 В). Аналоговый вход IN- подключён к общему выводу.
Фрагмент исходного кода функции на языке С, позволяющий получить данные с микросхемы АЦП MCP3301 по последовательному интерфейсу SPI, приведён ниже.
uint16_t adc_mcp3301_get_data(void)
{
uint16_t data;
ADC_MCP3301_ON; // CS-line driving low (launch the MCP3301)
SPI2 -> CR1 |= SPI_CR1_SPE; // SPI enable
while (LL_SPI_IsActiveFlag_RXNE(SPI2) == RESET); // waiting for SPI2 data reception
SPI2 -> CR1 &= ~SPI_CR1_SPE; // SPI disable
ADC_MCP3301_OFF; // CS-line driving high (MCP3301 standby mode)
data = LL_SPI_ReceiveData16(SPI2); // reading 16-Bits in the SPI data register
data &= 0x1FFF; // bit mask applying (eliminating dummy 0-2 bits)
return data;
}
На рисунках 4–6 представлены циклограммы процесса передачи битов данных, полученные с помощью логического анализатора с измеренным выходным напряжением - 1 мВ, 3,335 В и 313 мВ соответственно.
Файл для работы с микросхемой MCP3301 размещён на Github. Вся информация при работе с микросхемой MCP3301 была взята из соответствующей документации, размещённой на сайте производителя.
Комментарии (5)
ruomserg
10.08.2022 07:16+5А как расскажу-то я вам сказку! Попалось нам в руки устройство с крутилкой. А крутилка та была собрана на переменном резисторе да микросхеме MCP3301. И вот раз подох тот переменный резистор, второй раз подох, а на третий раз постановили переделать на энкодер Omron (китайская копия), а заодно развязать крутилку с энкодером ремнем GT2, чтобы богатырские руки перестали напрямую давить на вал вверенного им оборудования.
Пришлось доставать даташиты вражеские и читать как интерфейс этой MCP3301 устроен. После чего выпаяна была микросхема та (точнее, отключена), а на ее место встал микроконтроллер ATMEL (времена-то стародавние были...), который считал обороты энкодера (а заодно еще замыкание контакта Z — абсолютного позиционирования) и высылал якобы измеренный с резистора уровень напряжения тому, кто о том спрашивал — полностью эмулируя по шине поведение MCP3301…
Так что хорошая микросхема, нам понравилась!
P.S. Ограничение поворота энкодера сделали механически на ведущем валу. Пользователи не заметили
P.P.S. Датчик холла, конечно, надо было ставить с масштабирующим ОУ — но как-то по запарке не догадались. Притащили энкодер, поставили энкодер… :)
fk0
Какой смысл в упрощённых переводах даташитов?
Тем более данная микросхема устарела уже на два десятка лет и применять её смысла не имеет. В современных МК не худший ADC обычно уже встроен. Не говоря уж про ценник достойный антиквариата...
Данная микросхема нужна только при ремонте аппаратуры, разработка ПО при этом не нужна.
Olegun
Если к rp2040 требуется добавить ещё два ADC, то что стоит смотреть и где почитать?
maledog
ADS1115. 12-битный АЦП. Не требует источник опорного напряжения. Имеет 4 мультиплексируемых входа. Интерфейс i2с(задействует две ноги контроллера вместо трех, может быть посажен параллельно с другими i2c устройствами.)
nixtonixto
74HC4051 — и 1 вход АЦП превратится в 8 мультиплексируемых входов.