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.

Рисунок 1 — Распиновка микросхемы MCP3301
Рисунок 1 — Распиновка микросхемы MCP3301

В микросхеме MCP3301 используется аналого-цифровой преобразователь последовательного приближения. При таком аппаратном решении производится одновременное преобразование и сохранение значения разницы потенциалов на аналоговых входах микросхемы во внутренних схемах микросхемы за время, равное 1,5 тактовых цикла (tACQ). После этого схема удержания входного сигнала открывается, а аккумулированный заряд используется для получения данных, передаваемых последовательного в виде 13-битного дополнительного кода. Данный процесс преобразования управляется внешним тактирующим сигналом и должен включать 13 синхронизирующих импульсов, по одному на каждый бит. Во время этого процесса сначала выводится наиболее значимый бит (MSB). Этот бит является знаковым битом и указывает, находится ли вход IN+ или вход IN- с более высоким потенциалом.

3. Работа с последовательным интерфейсом

Микросхема передаёт значение напряжения в дополнительном коде. Первым передаётся бит, индицирующий знак измеренного значения напряжения. При превышении значения напряжения на аналоговом входе IN+ над величиной напряжения аналогового входа IN- знаковый бит устанавливается в ноль. В случае, если значение напряжения на аналоговом входе IN- выше значения  напряжения на аналоговом входе IN+, знаковый бит устанавливается в единицу. Циклограмма процесса взаимодействия с микросхемой MCP3301 приведена на рисунке 2.

Рисунок 2 — Циклограмма процесса взаимодействия с микросхемой MCP3301 по интерфейсу SPI
Рисунок 2 — Циклограмма процесса взаимодействия с микросхемой MCP3301 по интерфейсу SPI

Связь с микросхемой MCP3301 обеспечивается с помощью стандартного последовательного интерфейса SPI. Инициализация связи производится посредством перевода линии CS в низкое состояние. При следующем переднем фронте тактового сигнала микросхема начинает операцию сэмплирования входного напряжения, которая завершается на заднем фронте синхроимпульса. Одновременно с этим микросхема передаёт нулевой бит со значением “0”. Следующие 13 тактовых сигналов микросхема передаёт результат сэмплирования: 1-й бит — знаковый бит, остальные 12 битов — измеренное значение (начиная с наибольшего значащего бита (MSB)). Данные передаются всегда на заднем фронте тактового сигнала.

Если все 13 бит данных переданы, но тактирование микросхемы продолжается, а также одновременно с этим удерживается в низком состоянии линия CS, устройство начинает повторную передачу данных, но теперь начиная с наименьшего значащего бита (LSB). Циклограмма процесса взаимодействия с микросхемой MCP3301 в случае продолжения тактирования и установленным низким уровнем на линии CS приведена на рисунке 3.

Рисунок 3 — Циклограмма процесса взаимодействия с микросхемой MCP3301 в случае продолжения тактирования и установленным низким уровнем на линии выбора ведомого устройства CS
Рисунок 3 — Циклограмма процесса взаимодействия с микросхемой MCP3301 в случае продолжения тактирования и установленным низким уровнем на линии выбора ведомого устройства CS

В примере использовался микроконтроллер 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 мВ соответственно.

Рисунок 4 — Циклограмма процесса передачи битов данных (выходное напряжением - 1 мВ)
Рисунок 4 — Циклограмма процесса передачи битов данных (выходное напряжением - 1 мВ)
Рисунок 5 — Циклограмма процесса передачи битов данных (выходное напряжением - 3,335 В)
Рисунок 5 — Циклограмма процесса передачи битов данных (выходное напряжением - 3,335 В)
Рисунок 6 — Циклограмма процесса передачи битов данных (выходное напряжением - 313 мВ)
Рисунок 6 — Циклограмма процесса передачи битов данных (выходное напряжением - 313 мВ)

Файл для работы с микросхемой MCP3301 размещён на Github. Вся информация при работе с микросхемой MCP3301 была взята из соответствующей документации, размещённой на сайте производителя.

Комментарии (5)


  1. fk0
    09.08.2022 20:37
    +13

    Какой смысл в упрощённых переводах даташитов?

    Тем более данная микросхема устарела уже на два десятка лет и применять её смысла не имеет. В современных МК не худший ADC обычно уже встроен. Не говоря уж про ценник достойный антиквариата...

    Данная микросхема нужна только при ремонте аппаратуры, разработка ПО при этом не нужна.


    1. Olegun
      10.08.2022 04:00

      Если к rp2040 требуется добавить ещё два ADC, то что стоит смотреть и где почитать?


      1. maledog
        10.08.2022 15:57
        +1

        ADS1115. 12-битный АЦП. Не требует источник опорного напряжения. Имеет 4 мультиплексируемых входа. Интерфейс i2с(задействует две ноги контроллера вместо трех, может быть посажен параллельно с другими i2c устройствами.)


      1. nixtonixto
        10.08.2022 17:24
        +3

        74HC4051 — и 1 вход АЦП превратится в 8 мультиплексируемых входов.


  1. ruomserg
    10.08.2022 07:16
    +5

    А как расскажу-то я вам сказку! Попалось нам в руки устройство с крутилкой. А крутилка та была собрана на переменном резисторе да микросхеме MCP3301. И вот раз подох тот переменный резистор, второй раз подох, а на третий раз постановили переделать на энкодер Omron (китайская копия), а заодно развязать крутилку с энкодером ремнем GT2, чтобы богатырские руки перестали напрямую давить на вал вверенного им оборудования.

    Пришлось доставать даташиты вражеские и читать как интерфейс этой MCP3301 устроен. После чего выпаяна была микросхема та (точнее, отключена), а на ее место встал микроконтроллер ATMEL (времена-то стародавние были...), который считал обороты энкодера (а заодно еще замыкание контакта Z — абсолютного позиционирования) и высылал якобы измеренный с резистора уровень напряжения тому, кто о том спрашивал — полностью эмулируя по шине поведение MCP3301…

    Так что хорошая микросхема, нам понравилась!

    P.S. Ограничение поворота энкодера сделали механически на ведущем валу. Пользователи не заметили
    P.P.S. Датчик холла, конечно, надо было ставить с масштабирующим ОУ — но как-то по запарке не догадались. Притащили энкодер, поставили энкодер… :)