Давайте огляньмо високий рівень того, що має осцилограф:
Спочатку ми маємо аналоговий фронт-енд. Тут у нас є мережа, що відповідає імпедансу, для зондів (але зонди повинні мати також частину, що відповідає ємності), секцію ослаблення (дуже важливо, тому ми не перевантажуємо АЦП і не пускаємо великі напруги), спрацьовування та підключення до аналоговий цифровий перетворювач. Я не буду надто багато говорити про це, оскільки я не надто хороший з аналоговими матеріалами, але суть полягає в тому, що з Pi в цьому розділі ми нічого не можемо зробити.
Далі ми маємо частину аналого-цифрового перетворювача. Вам знадобиться принаймні один АЦП для кожного каналу. Більше можна використовувати для більшої швидкості вибірки. У традиційній області застосування АЦП підключений до ASIC або пристрою FPGA. Вони використовуються, оскільки традиційні комп’ютери недостатньо в режимі реального часу (і не плутайте їх у режимі реального часу з швидкими!) Для обробки даних, наданих АЦП. Ці дані потім зберігаються в оперативній пам’яті певного роду. Деякі пристрої використовуватимуть статичну ОЗУ, а інші використовуватимуть динамічну ОЗУ. Взагалі підхід SRAM є більш традиційним і спостерігається у виробників великих імен, тоді як використання DRAM, здається, є більш новим підходом, який спостерігається у дешевших китайських пристроях.
Обсяг оперативної пам’яті та її швидкість визначатимуть, скільки зразків можна зберігати. Практично завжди АЦП буде 8-бітним АЦП, тому, скажімо, для одного мегасемплера нам знадобиться 8 b разів 100000 = 8 Мб або 1 Мб оперативної пам’яті. Для однієї MSa / s нам знадобиться оперативна пам'ять, яка може працювати на цій швидкості. Сьогодні це зробити досить легко. FPGA зазвичай керує оперативною пам’яттю безпосередньо і відповідає за збереження в ній даних. Він працює, заповнюючи зразок пам'яті, поки є порожня кімната, а потім перезаписує її, коли вона заповнена. Коли на каналі є декілька АЦП, FPGA встановить їх таким чином, щоб спочатку почати вибірку, потім на наступну тактову секунду тощо. Коли вони закінчать вибірку, зразок першого АЦП буде записаний спочатку в пам'ять, а потім другий зразок АЦП. Це зробить вигляд, що АЦП беруть вибірки швидше, ніж вони є насправді.
Наступним моментом у цьому розділі є те, що зразки мають бути рівновіддаленими за часом. Це основна проблема використання ПК в осцилоскопах і причина, чому FPGA та ASIC є переважаючими. Якщо деякі зразки запізнюються або рано, зображення, зображене на екрані, буде неправильним.
У цій частині ми бачимо перше можливе використання Pi. Якщо частота вибірки є досить низькою, ми можемо мати можливість керувати АЦП безпосередньо з Pi та зберігати їх результати в оперативній пам'яті Pi. Наскільки швидко ми можемо пройти, залежить від способу підключення АЦП до Pi та того, як Pi виконує введення / виведення. З того, що я читав, найвища швидкість портів I ^ 2C Пі - 150 МГц (наскільки легко це досягти в GNU / Linux - інше питання), а найвища стандартизована швидкість - 5 МГц, а для SPI - найвища швидкість у Pi - 250 МГц. Я не впевнений, яка найвища стандартна швидкість SPI, але я сподіваюся, що вона буде десь у діапазоні 100 МГц на максимумі.
Тож теоретично у нас є більш ніж достатня швидкість на Pi для запуску АЦП в низькому діапазоні МСа / с. У мене є відчуття, що швидкість оперативної пам’яті тут не буде проблемою, але я не маю даних, щоб підкріпити це. Якщо це так, то ми мали б велику перевагу в порівнянні зі звичайними сферами застосування: Існує дуже велика кількість пам'яті для захоплення. Наприклад, якщо ми виділимо 32 Мб оперативної пам’яті програмі для вибіркової пам’яті, і у нас є два канали, це дозволить нам отримати 16 МБ на кожен канал або трохи більше 134 Мб або 134 мегасемплера на канал. Це те, чого навіть сьогодні багато осцилоскопів не мають.
Мінус полягає в тому, що нам знадобляться серйозні модифікації операційної системи, щоб ми могли отримати точну вибірку тут. У мене немає досвіду роботи з Linux в режимі реального часу, тому я не знаю, наскільки це було б просто.
У будь-якому випадку перейдемо до наступного кроку. Тож у нас є система вибірки, яка заповнює ОЗУ. Наступна частина - курок. Тригер тісно пов'язаний зі швидкістю оновлення екрана. Що в основному робить, це знайти цікавий зразок і зберегти його в пам’яті. Коли область спрацьовує, він продовжує вибірку після тригера, поки не заповнить пам'ять, а потім відправить її на обробку та відображення на екрані. Під час опрацювання даних система відбору проб, якщо часто заморожується, і чекає, коли дані відобразяться. Ось чому сфери низького класу мають менший показник оновлення, тоді як області високого класу матимуть спеціальні дисплеї з високою швидкістю оновлення та витрачають набагато менше часу на очікування відображення даних.
У цьому розділі часто буде інший ASIC або FPGA, який буде виконувати обробку сигналів на зразках, будь-який протокол декодування, якщо область підтримує його і фактично керує самим дисплеєм.
Це та частина, де від того, що я бачу, Пі справді може сяяти. Він може мати хороший дисплей 1920х1080 (хоча області часто знаходяться на ділянці 800х600) і може дуже добре робити декодування протоколів. Єдиною проблемою, яку я бачу, є швидкість та те, як обробка вплине на час витримки. Якщо ми підемо на низьку частоту оновлення, тоді ми можемо отримати справді хороший логічний аналізатор.
Нарешті, слово про USB-осцилоскопи та чому USB взагалі поганий для цього типу проекту: традиційний осцилоскоп USB робить введення та вибірку та передає дані вибірки на ПК для обробки, для якого існує хост-додаток. В основному щось дуже подібне було б зроблено і з Пі. Зазвичай комп'ютерні програми погано розроблені та переповнені помилками. Наступна погана частина - сам USB. Його рекламують як швидку шину, яка може робити 480 Мбіт / с у режимі "Привіт-швидкість". Правда полягає в тому, що вкрай рідко можна знайти USB-контролер, який може підтримувати такі високі швидкості (середнє здається, приблизно 250 Мбіт / с від того, що я бачив) і що це як протокол не дуже підходить для жодної реальної -час застосування. По-перше, це спільний доступ до всіх пристроїв на концентраторі (а Pi має лише один USB-порт, до якого підключений Ethernet + USB концентратор), має відносно високі накладні витрати (порівняно з SPI) та має високу затримку (пам’ятайте, що при 1 МСа / с кожен зразок триває всього 1 мкс, тому ми повинні мати пам’ять на нашій платі, оскільки ми не можемо надсилати зразки в режимі реального часу через USB). Нарешті, використання USB дозволить зробити частину збору даних просто можливим ще одним осцилографом USB, і тут ми втрачаємо будь-яку перевагу використання Pi: Традиційні настільні комп’ютери набагато частіше, швидше, легше отримати та мають набагато кращі можливості USB.
EDIT
Я прочитав порівняно недавній пост Герта ван Лоо, і за його словами, реальні показники для I ^ 2C Пі - 400 кГц, а для SPI - 20 МГц.