Читання величезної кількості аналогових датчиків у режимі реального часу


17

Я намагаюся створити MIDI-подібний контролер, який має шию, як гітара. На цій шиї є величезна матриця датчиків тиску. Контролер буде імітувати 3 рядки.

Як це працює: Три довгі смужки двосторонньої мідної стрічки (шириною 0,5 см, як шийка), які підключені до живлення (3,3 В або 5 В, мабуть, наразі не має значення). На цих смугах розташований шар Велостату, який змінює опір на основі тиску. Зверху на веластаті буде ще один шар рядків або комірок мідної стрічки, з'єднаних із чимось, що виплює показання напруги через шар велостату. Оскільки шия завдовжки близько 40 см, буде не менше 80 рядів.

Якщо ви уявляєте нижню 3 смужки мідної стрічки як стовпчики діаграми вздовж горловини, датчиками будуть або клітини, або рядки, залежно від методу вимірювання (я думав, що можна було б також мультиплексувати стовпчики, тоді Там можуть бути рядки.) Існує кілька спеціальних умов, які можуть полегшити це: Оскільки це контролер, подібний до гітари, не кожну взаємодію потрібно вимірювати! Має значення лише дотик, найближчий до корпусу контролера. Також роздільна здатність 8 біт повинна бути достатньо точною. 255 рівнів тиску, ймовірно, більше, ніж потрібно в будь-якому випадку.

Тепер складні шматочки:

Вимірювання повинно бути в режимі реального часу - y достатньо для виявлення забивання тощо (навіть не уявляючи, наскільки високою є вибіркова швидкість - оцінюється в кілька кГц для хорошої міри та відтворюваності), а цифровий вихід контролера повинен бути або MIDI (на 3 окремих канали - по одному на рядок) або цифровий сигнал, який можна обробити за допомогою Raspberry Pi.

Оскільки мої знання справді обмежені, я не міг придумати правильних інструментів для роботи. Що я все-таки знаю: це можливо. Існує аналогічний, але різний контролер, який використовує дуже схожу техніку (яку я практично інженерно розробляв, поки не помітив, що у них є патент, а інформація про те, як вони це роблять, не така таємнича, як я думала), це називається ROLI Морське узбережжя.

TL; DR:

  • приблизно 240 датчиків

  • можна розділити на групи по 80, які живляться за тією ж лінією

  • це програма в реальному часі, мені потрібно тиснути з кожного датчика під час дотику (деякі умови застосовуються, див. вище)

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

Речі, про які я думав поки що:

Мультиплексування рядків і стовпців, зчитування кожної комірки з MCP3008 або більшою АЦП та ланцюжок (ланцюжок ромашки або дерево типу) ATmegas, які підштовхують лише нижчу взаємодію до позитивного кінцевого сигналу, але з моїх підрахунків, які, можливо, можуть бути обмежені спілкування накладні. Також більш рання модель включала стрічкові потенціометри, які я відкинув, тому що конструкція була поганою (кілька спроб, не було досить круто).

Редагування / оновлення:

Дякуємо за хороші пропозиції поки! Завдяки їм я можу набагато чіткіше викласти свою проблему:

У мене є матриця на 80 рядків * 3 колонки датчиків тиску. Коли людина взаємодіє з матрицею датчиків, декілька датчиків, що знаходяться в безпосередній близькості, підхоплять дотик, але лише уздовж стовпчика. Стовпи розділені механічно. Датчики мають опір між 100 Ом і 1 кОм. Усі ці датчики потрібно зчитувати з глибиною 8 біт, обробляти і результати надсилати зі швидкістю не менше 1 кГц. Тому одне читання / обробка потребує менше мілісекунди. Кінцевий вихід на стовпець повинен бути: 4 байти для float32 та 1 байт для uint8. Float32 буде вказувати усереднене положення першої взаємодії вздовж стовпця. Взаємодія визначається як послідовне скупчення датчиків з тиском вище певного порогу. Ось де обробка потрапляє в суміш: стовпець буде просуватися вниз, поки читання не переступить поріг. Потім це буде вважатися початком взаємодії. Тиск і положення кожного датчика запам'ятовуються до тих пір, поки перший датчик не впаде нижче порогового значення, максимум (4) датчиків. З усіх датчиків записаної взаємодії буде оброблено лише два датчика - той, який зчитує найвищий тиск (найнижчий опір) і найвищий безпосередньо над або під ним. Положення з плаваючою точкою обчислюється шляхом усереднення двох положень датчиків, зважених за їх тисками. Загальний тиск взаємодії буде лише додаванням обох тиску, затиснутих між 0 і 255 (додати обидва тиску одиниці8 на утиль16 і розділити на 2 без округлення, відкинути непотрібні біти - це повинно бути швидким). Це має відбуватися для кожного стовпця. Результат розміром 15 байт буде відправлений через SPI на невеликий комп'ютер (Raspberry Pi B3), який виконує функції синтезатора. Я не налаштований на спосіб передачі. Якщо SPI не є правильним інструментом для роботи, я готовий скористатися будь-яким способом комунікації, з яким Raspberry Pi може працювати. Оскільки це музично-інтерактивна програма, затримка має вирішальне значення.

Мої точні питання: Чи можна це вирішити за допомогою одного мікроконтролера, не порушуючи банк? Я не можу дозволити собі придбати ІС на кілька сотень доларів для хобі-проекту. Яке обладнання ви б рекомендували? Чи є неочевидні застереження, з якими я повинен бути обережним?

Підхід, який я отримав з відповідей до цього часу, полягав у тому, щоб живити кожен стовпчик окремо, а потім зачитувати рядки з 5 16-канальними АЦП (ADS7961), підключеними до Arduino через SPI. Я переживаю, що це може бути не найпростішим / найдешевшим підходом або недостатньо швидким для досягнення швидкості> 1 кГц.

Відмова: Я, як правило, хімік-теоретик і жахливий любитель, що стосується електротехніки, все, що я знаю, - самоучка і без будь-якого професійного досвіду (що, в свою чергу, є причиною, коли я шукаю допомоги у більш обізнаних людей). Я все-таки знаю свій шлях навколо програмного забезпечення. Все, що стосується програмного забезпечення, я розберу з достатньою кількістю часу. Також я німець, тому, будь ласка, виправдайте випадкові недоліки граматики.


просто ідея .... може бути покращення швидкості, якщо мукси будуть переплетені .... mux0 сканує лад 0,8,16,24 і т.д. ... mux1 - 1,9,17,25 ... до mux7 (або вище) ... таким чином спочатку 8 ладів читають одночасно 8 мюкс ... потім наступні 8 ладів ... і т. д.
jsotola

2
Термін "в реальному часі" може бути не зовсім правильним. Це означає, що дані залишають систему з тією ж швидкістю, яку вони вводять до неї (Один зразок, один зразок). Але це нічого не говорить про затримку - час, який потрібно на її обробку. Для музичного використання потрібна загальна затримка (включаючи час синтезу / відтворення фінального звуку) менше 10–15 мс, бажано менше 5.
Schizomorph

Яка різниця в опорі між натиснутою та не натиснутою?
Trevor_G

між 10 і 1000 Ом (приблизно)
d.oelert

Вимоги на зразок змішуються із запропонованою реалізацією. Можливо, ви вже відповіли на ці питання. Чи зможе виконавець виконати слайд, щоб інструмент мав змогу визначати діапазон позицій між сусідніми ладами? Чи потрібно мати можливість підтримувати нестримний інструмент, чи лади можуть бути частиною рішення?
Уейн Конрад

Відповіді:


7

Залежно від вашого цінового діапазону, ви можете розглянути можливість використання FPGA між вашими Raspberry Pi та ADC, наприклад, платою DE0-Nano , яка має хорошу підтримку в якості вступної плати розробки FPGA. Це рішення має перевагу, що дозволяє писати код, який буде синхронізувати декілька / безліч АЦП одночасно і форматувати ваші дані таким чином, який можна презентувати Raspberry Pi.

Ви згадали, що розглядали MCP3008. Цей чіп є SPI, тому ви можете підключити кілька пристроїв разом на одній шині з різними CS-штифтами. Припустимо, ви підключили три мікросхеми до шини, що дає 24 канали АЦП на 6 контактів (три лінії даних та три лінії CS). Це означає 240 каналів на 60 контактів, що легко в межах можливостей FPGA.

Якщо ви запускаєте тактову лінію MCP3008 на її максимальній частоті 2 МГц, це займе (15 годин / канал) * (8 каналів / чіп) * (3 мікросхеми / шина) * (1/2000000 секунд / такт) = 0,18 мс до зчитувати всі 240 датчиків, що відповідають швидкості вибірки 5,56 кГц.


звучить як неймовірно крутий підхід! я обов'язково загляну в це. Я не маю досвіду роботи з FPGA, тому це може бути занадто багато для мене, щоб впоратися ... з іншого боку, я завжди шукав привід, щоб потрапити в ПЛІС ...
d.oelert

Можна використовувати чіп ARM з кількома лініями SPI. Таким чином ви уникнете витрат FPGA і отримаєте потрійну швидкість вибірки (якщо у вас є 3 контролери SPI). Майте на увазі, що вам доведеться керувати затримкою через внутрішню обробку (переміщення показань всередині MCU до місця, де може потрапити Pi) та зв'язку MCU-> Pi.
Ронан Пайшао

До речі, у ПІ також є контролер SPI.
Ронан Пайшао

Ідея, що стоїть за FPGA, полягає в тому, що ви можете зробити, скажімо, 10 окремих контролерів SPI (використовуючи число з прикладу, який я надав) і легко керувати ними ідеально паралельно. І так, Pi має контролер SPI, але він ніде не такий швидкий або паралельний, як FPGA дозволив би створити.
Біллі Кальфус

Якщо ви зможете знайти FPGA або CPLD з небуферованими входами, ви навіть зможете створити аналоговий MUX 80: 1. Це довгий постріл, але це може спрацювати.
Caleb Reister

10

Очевидна відповідь - примхливість, це означає, що ви зробите електричну трасу динамічно. Тому просто перейдіть через всю матрицю, по одному, або стільки входів ADC (аналогового цифрового перетворювача), скільки у вас є.

Якщо у вас є 3 АЦП, то ви можете читати по одному рядку, потім ви змінюєте вхідні дані на mux і voilla, тепер читаєте другий рядок, а потім продовжуєте. Проблема з цією установкою полягає в тому, що у вас 80 рядків, і я не знаю жодного 80: 1 (вісімдесяти входів на один вхід) mux. Але є 16: 1 мюкси, які ви можете зібрати, щоб отримати 16 * 5 = 80 входів.

Це виглядатиме приблизно так:

row  0-15 [16:1 mux]____________ 5 inputs in [8:1 mux]-ADC
row 16-31 [16:1 mux]_| | | |
row 32-47 [16:1 mux]___| | |
row 48-63 [16:1 mux]_____| |
row 64-79 [16:1 mux]_______|

4 вхідних сигналу до 16: 1 муксів можна з'єднати разом.

Отже, врешті-решт у вас є байт із керуючими сигналами у цій схемі:

Grouped up:
0, 3 bits for the 8:1 mux, 4 bits for the 16:1 mux

Bit for bit:
0,8:1 MSB, 8:1 LSB+1, 8:1 LSB, 16:1 MSB, 16:1 LSB+3, 16:1 LSB+2, 16:1 LSB+1, 16:1 LSB

Це означає, що вам знадобиться 5 × 16: 1 мюкс і один 8: 1 мукс = 6 ІС,

Помножте це на 3, тому що, можливо, вам захочеться читати по одному рядку.

Це означає, що у вас буде 18 ІС, 7 контрольних сигналів. Ви можете зменшити кількість ІС, якщо збільшите кількість аналогових входів. Це 18 із лише 3 аналоговими входами.

Якщо ви замість цього використовували 240/16 = 15 ІС, то у вас вийшло 15 аналогових виходів із 15-ти мукс. Тоді ви можете каскадити його 16: 1 мюкс, або 16: 8. Зрештою, це було б 16 ІС, якби ви "оптимізували" його за допомогою мюксерів 16: 1. Але це означатиме, що ваше програмне рішення не буде таким елегантним, як вище, це було б перехресним переходом та модулем та іншими речами, але ей, ви заощадите 2 ІС.

10.8ms=1.25kHz

Це можливо, але це не гарний дизайн.

Давайте вирішимо це іншим ... більш ефективним способом використання коштів та коштів.

* 20 хвилин потому * Хм ... все рішення, які я придумав, або надто складно налаштувати, і / або вимагає додаткової калібрування ...

Ну добре, тоді я припускаю, що ваш дизайн відповідає вашим завданням.

Удачі.


Цікаво, що це за інші рішення. Хочете поділитися? - пандальон98

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

Ось кілька моїх ідей, де я думаю лише про одну колонку. Просто помножте ідею на 3, і у вас є ціле рішення для 3-колонкової гітари.

Перша ідея:

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

Якщо торкнутись обох проводів пальцем, ви з'єднаєте два дроти, і тут буде деяка індуктивність. Чим далі ви доторкаєтесь до гітари, тим довше буде ланцюг і тим більше вимірювання індуктивності. Чим сильніше натискати, тим більше площа поверхні між двома проводами і тим менше її опір.

Це не повинно бути двома "проводами", це можуть бути дві електропровідні стрічки чи щось інше.

Чому я не ділився цим раніше: Щоб це було надійно, вам потрібно відкалібрувати датчики для кожної людини, оскільки кожен має різну кількість опору на своїй шкірі. Кожного разу, коли ви гратимете, ви будете потіти і для цього додатково знижуєте опір, тому вам потрібно буде це компенсувати. Всі сильно потіють по-різному, тому це також доведеться калібрувати на людину.

Отже, індуктивність => положення пальця. Опір => як сильно ти натискав.

Відхилення значень, які ви вимірюєте, буде в нано Ω та нано H, це означає, що вам знадобляться належні знання щодо CMRR та SNR. Інакше все, що ви побачите, буде напруга мережі, якщо це буде зроблено в приміщенні. Або якісь інші частоти від Wi-Fi або ламп чи інших джерел шуму. Тож, можливо, знадобиться належний цифровий фільтр. І ... це, мабуть, вже поза межами можливостей ОП та прийнятних розумових зусиль. Тож ця ідея викидається.

Друга ідея:

Зробіть рівну струмопровідну поверхню на гітарі, яка з'єднана із землею.

Використовуйте один провід, або струмопровідну стрічку або просто плоский провідник. Покладіть на неї якусь непровідну фарбу або звичайну непровідну стрічку.

Перев’яжіть його поперек гітари знизу до шиї гітари. Підключіть дріт внизу гітари до високих частот у діапазоні сотень МГц. Тепер ви почнете отримувати помітні роздуми. Тому що ви технічно отримали .... погану лінію електропередачі, де захищена лише одна сторона.

Таким чином, ви надішлите короткий імпульс короткої квадратної хвилі і виміряйте, скільки часу потрібно, щоб він повернувся завдяки відображенню через те, що палець знаходиться на верхній частині ізольованого дроту. А потім ви вимірюєте амплітуду відбитого шипа внизу гітари. Тож час подорожі => положення пальця. Амплітуда відображення => як сильно тиснувся.

Це не найпростіше налаштувати ... якщо ти не знаєш, що робиш. Отже, знову-таки, це може бути занадто великим зусиллям, щоб ОП вирішила. Тож ця ідея викидається.


Це виглядатиме приблизно так:

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

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

Ось посилання на випадок, якщо хтось захоче возитися.

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

Іншою складною частиною буде фактично виміряти TOF (Час польоту), там є кілька ІС, але вони не дешеві .. але ви завжди можете просто зробити джерело постійного струму і заповнити невеликий конденсатор, а потім просто зчитувати напругу.

Ідея тут полягає в тому, що коли палець наблизиться до дроту, ваш палець стане частиною ланцюга і діятиме як конденсатор. Чим ближче палець, тим ємніше. Ось чому опір у точці пальця знизиться.

https://en.wikipedia.org/wiki/Transmission_line прокрутіть трохи вниз, і ви побачите, що ємнісний параметр є частиною знаменника.

Щоразу, коли точка на дроті буде невідповідна, то буде відображення, і ви можете прочитати це на "виході", звідки походить ваш сигнал. Якщо ніде не відображено, ваш сигнал припиняється в будь-якій з кінцевих точок.

Чим важче натискати вниз, тим більше площа вашого пальця стане плоскою => більше ємність за рахунок площі. Крім того, будь-який непровідний матеріал, який ви потрапили між дротом і пальцем, буде настільки злегка стиснений, щоб додатково збільшити ємність.

Третя ідея:

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

На даний момент у мене закінчуються ідеї і кажу, що я витратив 20 хвилин. Коли насправді я, можливо, витратив 10. О добре. Зараз я напевно витратив ще 10 хвилин, щоб написати це, тож все це склалося.


1
Я відчуваю, що налагодження, пов'язане з підключенням 15 ІМС до 3 наборів 80 датчиків, може бути ... значним. Також, безумовно, ця річ ніколи не буде достатньо надійною у використанні, завдяки сотням проводів, що звисають із масиву датчиків.
BeB00

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

Цікаво, що це за інші рішення. Хочете поділитися?
ПНДА

1
@ pandalion98 Гммм ... можливо, друга ідея не була такою поганою ідеєю. Що ж, добре.
Гаррі Свенссон

6

Три ідеї:

1. Зробіть кілька мультиплексування на стороні постачання

Ефективно, описана вами схема - це велика кількість змінних опорів, кожен з яких має кінець, з'єднаний з напругою живлення. Ви хочете прочитати всі значення опору та інші відповіді поки що в основному пропонували підходи до мультиплексування сигналу на стороні аналога.

Але ви також можете зробити деяке або все це мультиплексування на стороні постачання , поділивши «рейку» на n секцій. З’єднайте разом набори n сенсорних колодок, кожен з яких має різну подачу шини. Тепер заряджайте лише однією подаючою рейкою та використовуйте один вхід АЦП, щоб прочитати кожен набір колодок. (Ось як зазвичай працює схема, що зчитує клавіатуру комп'ютера, і те, як проводяться перемикачі комутаторів, часто називають «перемикачем перехрестя».) Зрештою, ви можете просто використовувати один АЦП, підключений до всіх «рейкових», і робити все мультиплексування шляхом підключення живлення до кожної колодки по черзі.

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

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

2. Використовуйте кілька мікроконтролерів з великою кількістю входів АЦП

Наприклад, PICAXE 40X2 має 27 штифтів, які можна використовувати як аналог, і ви можете покрити свої потреби 9 з них. Він запрограмований простою базовою мовою і може діяти як підлеглий i2c - таким чином, ви можете прочитати 9 мікросхем за допомогою іншого мікроконтролера - або ви, ймовірно, можете просто надіслати вихід з кожного чіпа як послідовні дані та прочитати його на хост-комп'ютері через послідовний USB-перетворювач. Не можу точно пообіцяти, як швидко це піде, але я думаю, що це має спрацювати нормально, якщо ви рухаєтесь на PICAXE на максимальній швидкості (64 МГц, використовуючи 16 МГц зовнішній резонатор). Звичайно, якщо ви задоволені програмуванням мікроконтролерів на C, тоді ви можете зробити те ж саме з PIC18F45K22, на якій базується PICAXE.

3. Використовуйте аналогові вхідні блоки, що не існують

Нарешті, якщо ви не заперечуєте витрачати гроші, щоб заощадити час, а портативність не є найважливішим пріоритетом - наприклад, якщо це нормально, щоб інструмент був прив’язаний до стійки обладнання якимись товстими кабелями - ви могли просто придбати достатньо високих- аналогові вхідні пристрої підрахунку каналів для вимірювання всіх датчиків одночасно. Наприклад, USB-2633 Measurement Computing обчислює 64 аналогові входи за трохи більше 1 000 доларів США.


4

Можливо, варто врахувати грубі зусилля сигналу (можливо, пасивні) з подальшим дрібним АЦП або MCU / ADC з 16 або більше входами АЦП MUX кожен. Це всього 40 фішок. Одним із прикладів мікросхеми, яка може працювати, є ADS7961QDBTRQ1 , який має режим автоматичного збільшення каналу та 16 входів.

Загальна швидкість передачі даних навіть при частоті вибірки 4 кГц і 240 байтах на зразок становить близько 1 МБ / с, що не надто страшно. Можливо, головний процесор з шиною SPI 10 МГц або 20 МГц, що спілкується з рабами. Використовуйте 2 шини SPI, якщо пропускна здатність відсутня. Згадана частина працює на частоті 20 МГц, тому зробить один SPI.

Або, можливо, ви можете використовувати один мікросхему TI - DDC2256AZZF , який має 64-канальний одночасний вибірки та 256 входів .., але це не особливо дешево (близько 350 доларів США) і поставляється у 32-контактному LFBA-масиві 14x14 мм, тому він не збирається робота з дошкою з білого щита.


3

Для програмного інтерфейсу в реальному часі загальна швидкість вибірки в декількох кГц здається високою. 50 ГГц, ймовірно, достатньо ( https://en.wikipedia.org/wiki/Input_lag#Typical_overall_response_times ). Це означає, що вам потрібно взяти вибірку всіх датчиків у розмірі <20 мс, тобто 80us на датчик. Це не надто складно, і ним можна керувати, в основному, всі звичайні 8-бітові мікроконтролери (тобто Atmega88 може це зробити в <30us).

Ви можете також виміряти всі взаємодії, а потім просто відмовитися від тих, які вам не потрібні, вважаючи, що виміряти їх усі не є технологічно складною. Проблема виходить з мультиплексування. Я трохи розгублений у вашій посаді, бо там сказано, що датчики живляться 80 одночасно? Звичайна річ - це, як ви кажете, мультиплексні стовпці та рядки. Якщо ви цього не зробите, вам доведеться мати справу з> 80 проводів, що виходять з вашого пристрою, що насправді не чудова ідея. Вам потрібно знайти спосіб розділити його на матрицю, так ви отримаєте 30 проводів (що ще багато). Потім ви могли б їх мультиплексувати і т. Д., Але якби я був у вас, я просто мав би декілька мікроконтролерів і підключив їх до майстра. Ви можете використовувати виділений АЦП замість підлеглого MCU, але я особисто дотримуюся MCU.

Ви правильно визначили, що комунікація може бути проблемою, але це не велика справа, принаймні між MCU. Атмега на 8 МГц може робити SPI на частоті 2 МГц, тому відправлення всіх даних датчика займе <1 мс. Тоді питання полягає у тому, що ви хочете зробити з цими даними після того, як це буде створено головним MCU.


2
Під час реагування на один вхід 50 Гц зазвичай вважається "достатньою" в загальних рисах графічного інтерфейсу, але, з мого власного досвіду роботи зі звуковими картами, відтворення музики із затримкою в 200 мс зовсім не приємне враження (подумайте, що звук мовлення). Я гадаю, що змінна затримка 0-200 мс зробить інструмент практично неможливим, оскільки будь-яке відчуття ритму, безумовно, буде вбито мертвим. Частота опитування близько одного кГц була б хорошим початковим мінімумом, метейнкс.
Дампмаскін

1
@Dampmaskin 50 Гц = 20 мс, а не 200 мс. 20 мс, мабуть, більш розумний
Стівен Уотерман

1
Моє ліжко. 20 мс, ймовірно, може бути корисним, якщо це постійний 20 мс, але менше затримки завжди краще. Завжди завжди буде більше затримок у ланцюзі сигналів.
Дампмаскін

@Dampmaskin саме та проблема, яку я бачу при описаному підході. Мені потрібно «зберегти» якомога більше затримок для наступних компонентів ланцюга, оскільки я намагаюся підключити малиновий пі-синтезатор, і в ідеалі я хотів би залишитися нижче 15-20 мс загальної затримки. Якщо контролер вже займає 20 мс, не залишається ніякого пробілу.
d.oelert

@StevenLowes 20 мс занадто довгий для більшості музикантів. Це навіть за межами відстані Хааса для деяких звуків. Особисто я не можу впоратися із затримкою більше 10 мс, і я знаю піаніста, який просто не може дотримати затримки 6 мс.
Тодд Вілкокс

3

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

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

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Тоді керуючий мікроконтролер посилає нульовий біт сингера вниз по ланцюгу регістрів, тому одночасно працює один стовпець. Решта з'єднань були б плаваючими.


1

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

це скаже вам сенсорне місцезнаходження.

щоб отримати тиск на дотик, поставте конденсатор від землі до кожного ладу і виміряйте опір змінного струму на кожній струні.

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


2
вибачте, якщо ви неправильно зрозуміли, але в нас немає гітарної шиї, а також струнних. Це просто дерев’яна дошка з матрицею датчика тиску вгорі, що імітує ігровий стиль, який ви використовували б на справжній плавці. Дякую за вклад, хоча, я можу це враховувати для майбутніх проектів!
d.oelert

під ладами та струнами вище я маю на увазі мідні смужки, про які ви згадуєте у своєму запитанні,
Ясен

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

також, хоча мені дуже подобається ваш підхід, це не дає відповіді на моє первісне запитання, яке полягає в тому, як типово мати справу з великою кількістю аналогових датчиків, які потрібно обробити в режимі реального часу.
d.oelert

камери мають велику кількість аналогових датчиків ...
Ясен

0

Якщо ви можете отримати дріт, який має досить рівномірний опір на дюйм, який знаходиться десь від 100 Ом до 100 К на довжину гітари, можливо, ви зможете просто зробити горловину з матеріалу, що відрізняється середньою провідністю, з поверхневим опором який зменшується з тиском, а потім вимірюють опір між горловиною та кожним кінцем кожної струни. Сума опорів, мінус опір струни, вказувала б вдвічі опір точки контакту. Після відняття опору точки контакту від кожного вимірюваного опору співвідношення решти опорів вказувало б на контактну точку на шиї.

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


" Якщо ви можете отримати якийсь провід, який має досить рівномірний опір на дюйм, який знаходиться десь від 100 Ом до 100 К на довжину гітари " - я сумніваюся, що він може знайти такий тип дроту.
Гаррі Свенссон

Я не погоджуюсь; У мене в офісі є провід опору, який становить 1717 Ом / м, так що його зовсім не важко знайти. Я не кажу, що з цим легко працювати, бачачи, що це дріт Ø50 мкм, але це не важко придбати.
MrGerber

@MrGerber: Я забув, що опір ніхромового дроту значно нижчий при більш холодних температурах, ніж тепліші, і тому, можливо, було б краще змінити ланцюг, щоб працювати на щось ближче до 10 Ом, але над базовою концепцією можна було б працювати. Як альтернатива, горловина може бути слабкопровідним матеріалом і мати струни, що з'єднують це, також може працювати.
supercat

Це не NiCr, а FeCrAl, і опір не сильно змінюється над температурою. Тип, який я маю, змінюється приблизно на 8% від 100 C до 1300 C. Посилання: Kanthal D (та ні, я не роблю електронних сигарет.)
MrGerber

@MrGerber: Гаразд, це непогано. У відповідь на попередній коментар я подивився кілька таблиць і побачив опір, який збільшувався на порядок із температурою.
supercat

0

Я бачив цю публікацію і думав, що можливо, можливо, за допомогою одного чіпа. Я б припустив, що ви взяли якусь плату мікроконтролера, як-от дешева плата-план. Він має ARM M3, з 10 каналами АЦП, вільними у користуванні. Якщо ви розміщуєте стовпці в 3 кластери з 3 рядків, підключіть їх до 9 безкоштовних каналів АЦП. Використовуйте інші 21 штифт для перемикання рядків шпильок, загалом 63 "лади". connection matrix, resistors are the velostat cells, the gpio drives at 3.3v or is in input mode, the ADC pins measure the voltage drop across the velostat cell Мікроконтролер має два 12-бітних АЦП 1 Мс / с, які можна використовувати із затримкою фази для підтримки 2Мс / с, що повинно бути багато, щоб ніколи не пропустити молоток або помітити будь-яку модуляцію. Я думаю, ви можете використовувати USB-з'єднання і зробити так, щоб ця робота працювала як контролер USB midi. Ви можете використовувати більший мікроконтролер для отримання більшої кількості входів, але я не бачу, як ви збираєтеся керувати міжряддями "ладу" з більш ніж 30 ладами, або це буде більше схоже на сенсорний екран?

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

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