MCP3424, як паралельно читати канали?


9

Про це питання

У мене немає досвіду інженерної роботи з електронікою, і це одне з моїх перших проблем із спілкуванням через I2C та з записом до реєстру, тому, будь ласка, не приймайте занадто багато знань з моєї сторони. Я програмую Arduino.

На запитання про певний електронний компонент / мікросхему, я припускаю, що люди не можуть експериментувати / тестувати, щоб дати мені правильну відповідь. Я також очікую, що люди навіть не знають цього компонента. Тому я спробую додати багато інформації в це питання.

Будь ласка, повідомте мене, якщо вам потрібна додаткова інформація.

Компонент має чотири АЦП

Я використовую 4-канальний компонент MCP3424 ( таблиця даних ). Він поставляється в двох пакетах. Я використовую MCP3424 E / SL, 4-канальну версію SOIC, а не MCP3422 або 2-канальну MCP3423.

Я вважаю, що він має чотири АЦП. У RS-Online схоже, що версія E / SL має 4 АЦП ( пряме посилання ), тоді як E / ST має лише один ( пряме посилання ). введіть тут опис зображення

Я припускаю, що це повинно означати, що він може робити вибірку на кількох каналах одночасно. Я не бачу інших причин ставити більше одного АЦП на компонент.

Чи правий я?

Спілкування через I2C

Комунікація відбувається шляхом надсилання одного байта конфігурації, а потім чекання закінчення вибірки та зчитування результату.

Формат конфігураційного байта

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

Цікавими є:

  • біт три зліва, рахуючи від 1: Безперервне відбір проб
  • біт один і два зліва, рахуючи від 1: Адреса

Більш детально про байт config можна знайти на сторінці даних 18, також зображеній тут .

Формат результату читання

Мої приклади будуть лише з 18-бітовою роздільною здатністю (біт 5 і 6 встановлено на 1). Результатом зчитування буде чотири байти: перший три містить значення, а четвертий містить байт config.

Однак самий лівий біт, RDY, повідомляє, чи є значення "новим", тобто якщо це нове читання, починаючи з останнього читання. При першому читанні одного результату значення дорівнює 0, а для наступних - 1, доки АЦП не буде готовий з новим значенням вибірки.

Як використовувати його без вибірки паралельно

Я прекрасно знаю, як це зробити. І всі приклади, які я знайшов в Інтернеті, також прості про це. Просто запишіть байт конфігурації до компонента, а потім прочитайте значення назад.

Як налаштувати кожен канал на вибіркове автоматичне вибірко і читати канали паралельно

Псевдо-код може бути подібним

setup():
    start sampling channel 1, 18bit, 0gain, continuously
    start sampling channel 2, 18bit, 0gain, continuously
    start sampling channel 3, 18bit, 4gain, continuously
    start sampling channel 1, 18bit, 2gain, continuously

readADCs():
    // Run every 500ms
    // 18 bit samples take 375ms, so must happen in parallel 
    // to get a new sample for all every 500ms
    read channel 1
    read channel 2
    read channel 3
    read channel 4

Моя найкраща спроба

Тож я сподіваюся, що наступне встановлює кожен АЦП для вибірки безперервно. Це код Ардуїно.

void setup() {

    Wire.write(0b00011100);
    Wire.write(0b01011100);
    Wire.write(0b10011110);
    Wire.write(0b11011101);
}

Потім, як я читаю конкретний канал. Якщо я просто запитаю компонент для результату, він поверне результат каналу в регістр. З налаштуваннями вище, я отримав би читання для каналу 4. Але скажімо, я хочу прочитати з каналу 2. Якимось чином мені просто потрібно сказати, що я хочу результат каналу 2. Я не хочу Попросіть його зробити вибірку будь-чого, він повинен просто продовжувати робити безперервний відбір проб, і я просто хочу найбільш обурювати зразок, який він створив під час автоматичного відбору проб.

Нижче моя найкраща здогадка

void readADCs() {

    // Channel 1
    // ...

    // Channel 2
    Wire.beginTransmission(104);
    Wire.write(0b01011100); // I hope not to affect, just to select
    Wire.endTransmission();
    Wire.requestFrom(104);
    Wire.read(); // val byte 1
    Wire.read(); // val byte 2
    Wire.read(); // val byte 3
    Wire.read(); // config byte
}

Тому я найкраще здогадуюсь. Якщо я хочу прочитати канал 2, я записую байт config, який точно такий же, як і те, що я використовував для запуску вибіркового каналу 2.

Однак це не працює. Немає готового зразка, навіть якщо він мав більше необхідних 375 мс.

Як я цього досягти?

Я намагався зробити все можливе, описуючи бажаний результат і те, що намагався, але я знаю, що це не просто прочитати.

Не могли б ви дати мені поради, як дозволити паралельно вибірці всіх АЦП, а потім читати з них, не заважаючи?


Гарний старт. Єдине, чого не вистачає, - це посилання на таблицю даних для MCP3424, яку я додав.
JRE

MCP3424 постачається у двох пакетах, а не у версіях, і обидва - це 4 канали. ST - TSSOP, SL - Soic. Є 2 канали MCP3422, фіксована адреса, MCP3423, 2 канали, регульована адреса та 4 канали MCP3424.
Перехожий

+1 Дуже ретельне, добре написане запитання. На жаль, цей чіп є єдиним АЦП. Це проілюстровано у таблиці даних у "Діаграмі функціональних блоків". Ви читали вхідні канали як значення АЦП. Наявність багатьох вхідних каналів дозволяє використовувати один АЦП для вибірки багатьох різних сигналів (послідовно). АЦП набагато дорожче виготовити, ніж аналоговий мультиплексор (який вибирає канал), а вибірка декількох сигналів є загальною вимогою. Отже, чіпи ADC часто працюють таким чином. Енді ака відповів на ваше запитання, але, можливо, зачекайте, перш ніж приймати, оскільки ви можете отримати більше інформації.
gbulmer

Я вважав, що в ньому є 4 АЦП, тому що RS-Online сказав, що у E / SL було 4, а в E / ST було 1. Я додав до опису
Mads Skjern

2
@MadsSkjern ігнорує RS, Microchip та їх аркуш даних є королем. Це помилка в RS. Помилки на сайтах дистриб'юторів досить поширені.
Перехожий

Відповіді:


11

У мене є останній з чотирма АЦП. Я припускаю, що це повинно означати, що він може робити вибірку на кількох каналах одночасно.

На жаль ні. Є лише один АЦП, і для перетворення декількох каналів це потрібно робити послідовно, звертаючись до внутрішнього мультиплексора, таким чином "читаючи" інший канал. На жаль, немає одночасного відбору проб: -

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

Зверніть увагу, що вхідний мультиплексор вибирає ТІЛЬКИ один із чотирьох каналів одночасно. Це досить поширений метод, який використовується для зчитування декількох каналів, але є одночасні вибіркові АЦП там. Спробуйте переглянути лінійні технології, портфелі TI або ADI.


+1, ви побили мене :-) Можливо, варто окреслити той факт, що для одного зразків АЦП є досить поширеним декілька каналів, оскільки він може вибирати різні аналогові сигнали, що є звичайним випадком.
gbulmer

Також, якщо потрібні низькі показники вибірки, мультиплексування / переплетення часто досить добре
Скотт Сейдман

Покращення поліпшення, сер.
gbulmer

@gbulmer Ви занадто добрий сер !!
Енді ака

5

MCP3424 це один АЦП з мультиплексором на передньому кінці.

Ця діаграма з даних показує це досить чітко

MCP3424 Архітектура

Таблиця даних підтримує це введенням:

4.1 Загальний огляд

Пристрої MCP3422 / 3/4 - це диференціальні багатоканальні малопотужні 18-бітові перетворювачі Delta-Sigma A / D з послідовним інтерфейсом I2C. Пристрої містять мультиплексор вибору вхідного каналу (mux), програмований підсилювач посилення (PGA), вбудовану опорну напругу (2,048 В) та внутрішній генератор.

Отже, ви не можете конвертувати різні канали по-справжньому одночасно, але ви можете вибирати канали послідовно з відносно короткою затримкою між ними.

Під час використання пристрою потрібно забезпечити стабільність бітів адреси I2C; ще раз із таблиці:

MCP3423 і MCP3424 мають два зовнішні штифти адреси пристрою (Adr1, Adr0). Ці штифти можна встановити на логічний високий (або прив'язаний до VDD), низький (або прив'язаний до VSS), або залишений плаваючим (не пов'язаний ні до чого, або прив'язаний до VDD / 2). Ці комбінації логічного рівня за допомогою двох штифтів дозволяють вісім можливих адрес. У таблиці 5-3 показано адресу пристрою залежно від логічного стану штифтів вибору адреси. Пристрій відбирає логічний стан штифтів Adr0 та Adr1 у таких подіях:

а. Увімкнення живлення пристрою.

б. Загальний скидання дзвінків

(Див. Розділ 5.4 «Загальний виклик»).

c. Загальний виклик виклику

(Див. Розділ 5.4 «Загальний виклик»).

Пристрій відбирає логічний стан (адресні штифти) під час вищезазначених подій та фіксує значення, поки не відбудеться нова подія засувки. Під час нормальної роботи (після замикання адресних штифтів) контактні штифти внутрішньо відключені від решти внутрішнього кола.

Рекомендується оформити команду «Загальний скидання виклику» або «Загальний затвор виклику» один раз після включення пристрою. Це забезпечить пристрій зчитування адресних штифтів у стабільному стані та уникне замикання бітових адрес під час нарощування джерела живлення. Це може спричинити неточне виявлення штифтів адреси.

Я б радив вам дотримуватися цієї рекомендації, щоб переконатися, що ви дійсно спілкуєтесь із пристроєм.

Щоб прочитати певний канал, потрібно вибрати канал у реєстрі конфігурації та розпочати перетворення. Біт RDY знизиться, коли результат цього перетворення буде доступний у вихідному реєстрі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.