실시간으로 수많은 아날로그 센서 읽기


17

기타와 같은 목을 가진 MIDI와 같은 컨트롤러를 만들려고합니다. 그 목에는 거대한 압력 센서 매트릭스가 있습니다. 컨트롤러는 3 개의 문자열을 에뮬레이션합니다.

작동 방식 : 전원에 연결된 3 개의 긴 양면 구리 테이프 스트립 (넥 길이 0.5cm)이 있습니다 (3.3V 또는 5V는 중요하지 않습니다). 이 스트립에는 압력에 따라 저항이 변하는 Velostat 층이 있습니다. velostat의 상단에는 velostat 층을 통한 전압 판독 값을 내뿜는 무언가에 연결된 구리 테이프의 다른 행 또는 셀 층이 있습니다. 목의 길이는 약 40cm이므로 줄이 80 개 이상입니다.

목을 따라 차트의 열로 아래쪽 3 개의 구리 테이프 스트립을 상상하면 측정 방법에 따라 센서가 셀 또는 행이됩니다 (열을 다중화 할 수도 있다고 생각했습니다. 행이있을 수 있습니다.) 몇 가지 특별한 조건이 있지만이 작업을 더 쉽게 할 수 있습니다. 이것은 기타와 같은 컨트롤러이므로 모든 상호 작용을 측정 할 필요는 없습니다! 컨트롤러 본체에 가장 가까운 터치 만 중요합니다. 또한 8 비트의 해상도는 충분히 정확해야합니다. 어쨌든 255 압력 수준은 아마도 필요한 것 이상입니다.

이제 어려운 일들 :

측정은 해머 온 등을 감지 할 수있을 정도로 실시간으로 이루어져야합니다 (샘플 속도를 얼마나 높게 측정해야하는지 잘 모름-측정 및 재생성을 위해 몇 kHz로 추정) 컨트롤러의 디지털 출력은 다음 중 하나 여야합니다. MIDI (문자열 당 하나의 개별 채널 3 개) 또는 Raspberry Pi로 처리 할 수있는 디지털 신호.

내 지식이 실제로 제한되어 있으므로 작업에 적합한 도구를 생각할 수 없었습니다. 내가 아는 것은 가능합니다. 매우 유사한 기술을 사용하는 유사하지만 다른 컨트롤러가 있습니다 (실제로 리버스 엔지니어링 된 것으로 나타났습니다. 실제로 리버스 엔지니어링되었으며 특허를 보유하고 있으며 그 방법에 대한 정보는 생각보다 비열한 것이 아닙니다) .ROLI라고합니다. 해안.

TL; DR :

  • 약 240 개의 센서

  • 동일한 회선으로 구동되는 80 개의 그룹으로 분리 가능

  • 이것은 실시간 응용 프로그램입니다. 터치 할 때 모든 센서에서 압력을 가져와야합니다 (일부 조건이 적용됨, 위 참조).

미리 감사드립니다. 읽어야 할 것이 많다는 것을 알고 있습니다. 나는 어떤 제안에 감사하고 내가 생산하기로 설정 한 끔찍한 혼란을 달성하도록 도울 수 있다면 매우 기쁠 것입니다!

내가 생각한 것들 :

멀티플렉싱 행 및 열, MCP3008 이상의 ADC를 사용하여 각 셀을 읽고 위치 별 최저 상호 작용을 최종 신호에 푸시하지만 내 계산에서 병목 현상이 발생할 수있는 ATmegas를 체인 업 (데이지 체인 또는 트리와 같은) 통신 오버 헤드. 또한 이전 모델에는 리본 전위차계가 포함되어 있는데,이 설계는 설계가 나쁘기 때문에 (몇 번의 시도로 충분히 시원하지 않았기 때문에) 버렸습니다.

편집 / 업데이트 :

지금까지 좋은 제안에 감사드립니다! 덕분에 이제 내 문제를 훨씬 더 명확하게 표현할 수 있습니다.

80 열 * 3 열의 압력 센서 매트릭스가 있습니다. 사람이 센서 매트릭스와 상호 작용하면 근접한 여러 센서가 열을 따라 만 터치를받습니다. 컬럼은 기계적으로 분리됩니다. 센서의 저항은 100 Ohm과 1 kOhm 사이입니다. 이러한 모든 센서는 깊이 8 비트로 판독되고 처리되어야하며 결과는 1kHz 이상의 속도로 전송되어야합니다. 따라서 단일 판독 / 처리에는 밀리 초 미만이 소요됩니다. 열당 최종 출력은 float32의 경우 4 바이트, uint8의 경우 1 바이트 여야합니다. float32는 열을 따라 첫 번째 상호 작용의 평균 위치를 나타냅니다. 상호 작용은 압력이 특정 임계 값을 초과하는 연속적인 센서 클러스터로 정의됩니다. 처리가 혼합되는 곳입니다. 판독 값이 임계 값을 초과 할 때까지 열이 아래로 이동합니다. 그러면 상호 작용의 시작으로 계산됩니다. 모든 센서의 압력과 위치는 첫 번째 센서까지 기억되며, 최대 4 개의 연속 센서로 임계 값 아래로 떨어집니다. 기록 된 상호 작용의 모든 센서에서 가장 높은 압력 (가장 낮은 저항)을 판독하는 센서와 바로 위 또는 아래에 가장 높은 센서가 두 개만 처리됩니다. 부동 소수점 위치는 압력에 의해 가중치가 부여 된 두 센서 위치를 평균하여 계산됩니다. 상호 작용의 전체 압력은 0과 255 사이에 고정 된 두 압력을 추가하는 것입니다 (단위 8의 두 압력을 uint16에 추가하고 반올림없이 2로 나누고 불필요한 비트는 버립니다-이것은 빠릅니다). 이것은 모든 열에 대해 발생해야합니다. 15 바이트 크기의 결과는 SPI를 통해 신시사이저 역할을하는 작은 컴퓨터 (Raspberry Pi B3)로 전송됩니다. 전송 방법이 설정되어 있지 않습니다. SPI가 업무에 적합한 도구가 아닌 경우 Raspberry Pi가 처리 할 수있는 모든 통신 방법을 기꺼이 취하겠습니다. 이것은 음악 대화 형 응용 프로그램이므로 대기 시간이 중요합니다.

정확한 질문은 다음과 같습니다. 은행을 해치지 않고 단일 마이크로 컨트롤러로이 문제를 해결할 수 있습니까? 취미 프로젝트를 위해 수백 달러 상당의 IC를 살 여유가 없습니다. 어떤 하드웨어를 추천 하시겠습니까? 내가 조심해야 할 명백한 경고가 있습니까?

내가 지금까지 얻은 답변에서 얻은 접근 방식은 각 열에 개별적으로 전원을 공급 한 다음 SPI를 통해 Arduino에 연결된 5 개의 16 채널 ADC (ADS7961)로 행을 읽습니다. 이것이 가장 쉬운 방법이 아니거나> 1 kHz의 속도에 도달하기에 충분히 빠르지 않을까 걱정됩니다.

면책 조항 : 나는 전기 공학에 관해서는 일반적으로 이론적 인 화학자이자 끔찍한 아마추어입니다. 내가 아는 모든 것은 자율적이며 전문적인 배경이 없습니다 (결과적으로 지식이 많은 사람들의 도움을 구하는 이유입니다). 그래도 소프트웨어를 둘러싼 길을 알고 있습니다. 소프트웨어에 관한 모든 것, 나는 충분한 시간으로 알아낼 것입니다. 또한 저는 독일인이므로 가끔 문법 결함이 있습니다.


mux0이 인터리브되면 속도가 향상 될 수 있습니다 .... mux0은 프렛 0,8,16,24 등을 스캔합니다 ... mux1-1,9,17,25 ... 최대 mux7 (또는 그 이상) ... 그런 식으로 처음 8 프렛을 동시에 8 먹스로 읽은 다음 다음 8 프렛 ... 등
jsotola

2
'실시간'이라는 용어가 정확히 맞지 않을 수도 있습니다. 데이터가 시스템에 입력 된 것과 동일한 속도 (샘플 1 개, 샘플 1 개)로 시스템을 떠나고 있음을 의미합니다. 그러나 대기 시간에 대해서는 아무 것도 말하지 않습니다. 처리하는 데 걸리는 시간입니다. 음악을 사용하려면 전체 지연 시간 (최종 사운드를 합성 / 재생하는 시간 포함)이
10-15ms

눌린 것과 눌리지 않은 저항 사이의 변화는 무엇입니까?
Trevor_G

10 ~ 1000 ohm (대략)
d.oelert

요구 사항은 제안 된 구현과 혼합됩니다. 당신은 이미이 질문들에 대답했을 것입니다. 연주자가 슬라이드를 수행하여 악기가 인접한 프렛 사이의 위치를 ​​감지 할 수 있어야합니까? 프렛없는 기기를 지원할 수 있어야합니까, 프렛이 솔루션의 일부가 될 수 있습니까?
Wayne Conrad

답변:


7

가격대에 따라 Raspberry Pi와 ADC 사이에 FPGA와 같은 FPGA를 사용하는 것이 좋습니다. 입문 FPGA 개발 보드로 잘 지원되는 DE0-Nano 보드 . 이 솔루션은 여러 / 많은 ADC를 동시에 클럭하고 Raspberry Pi에 표시 할 수있는 방식으로 데이터를 포맷하는 코드를 작성할 수 있다는 이점이 있습니다.

MCP3008을 고려하고 있다고 언급했습니다. 이 칩은 SPI이므로 서로 다른 CS 핀을 사용하여 동일한 버스에서 몇 개의 장치를 함께 연결할 수 있습니다. 3 개의 칩을 버스에 연결하여 6 개의 핀 (3 개의 데이터 라인과 3 개의 CS 라인) 당 24 개의 ADC 채널을 제공한다고 가정합니다. 이는 60 핀의 240 개 채널을 의미하며 FPGA의 기능 범위 내에 있습니다.

MCP3008 클럭 라인을 최대 주파수 2MHz로 실행하면 (15 클럭 / 채널) * (8 채널 / 칩) * (3 칩 / 버스) * (1/2000000 초 / 클럭) = 0.18ms ~ 5.56kHz의 샘플 속도에 해당하는 240 개의 센서를 모두 읽습니다.


엄청나게 멋진 접근법처럼 들립니다! 나는 확실히 그것을 조사 할 것입니다. 나는 FPGA에 대한 경험이 없다. 그래서 이것은 처리하기에는 너무 많을 수도있다. 반면에 나는 항상 FPGA에 들어갈 변명을 찾고있다. ...
d.oelert

여러 SPI 라인과 함께 ARM 칩을 사용할 수 있습니다. 이렇게하면 FPGA 비용을 피하고 샘플링 속도가 3 배가됩니다 (SPI 컨트롤러가 3 개인 경우). 내부 처리 (Pi가 얻을 수있는 곳으로 MCU 내부 판독 값 이동) 및 MCU-> Pi 통신으로 인한 지연을 관리해야합니다.
Ronan Paixão

그런데 PI에는 SPI 컨트롤러도 있습니다.
Ronan Paixão

FPGA의 기본 개념은 10 개의 개별 SPI 컨트롤러 (제공된 예제의 숫자를 사용하여)를 만들고 완벽하게 병렬로 쉽게 작동 할 수 있다는 것입니다. 그리고 Pi는 SPI 컨트롤러를 가지고 있지만 FPGA가 만들 수있는 것만 큼 빠르거나 병렬적인 곳은 없습니다.
Billy Kalfus

버퍼되지 않은 입력으로 FPGA 또는 CPLD를 찾을 수 있다면 80 : 1 아날로그 MUX를 생성 할 수도 있습니다. 오래 걸리지 만 작동 할 있습니다.
Caleb Reister

10

확실한 대답은 멀티플렉싱입니다. 이는 전기 경로를 동적으로 만드는 것을 의미합니다. 따라서 전체 매트릭스를 한 번에 하나씩 또는 많은 ADC (아날로그-디지털 변환기) 입력을 반복합니다.

ADC가 3 개인 경우 한 번에 한 행을 읽을 수 있으며 입력을 mux와 voilla로 변경하면 두 번째 행을 읽은 다음 계속됩니다. 이 설정의 문제는 80 개의 행이 있고 내가 알고있는 80 : 1 (한 입력에 80 개의 입력) mux가 없다는 것입니다. 그러나 16 * 5 = 80 입력을 얻기 위해 함께 사용할 수 있는 16 : 1 mux 가 있습니다.

다음과 같이 보일 것입니다.

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]_______|

16 : 1 멀티플렉서에 대한 4 개의 입력 신호를 함께 연결할 수 있습니다.

결국이 패턴에 제어 신호가있는 바이트가 있습니다.

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 mux와 하나의 8 : 1 mux = 6 IC가 필요합니다.

한 번에 한 행을 읽고 싶을 수 있으므로 3을 곱하십시오.

즉, 18 개의 IC, 7 개의 제어 신호를 갖게됩니다. 아날로그 입력 수를 늘리면 IC 수를 줄일 수 있습니다. 단지 3 개의 아날로그 입력으로 18입니다.

240/16 = 15 IC를 대신 사용하면 15 × 16 : 1 멀티플렉서에서 15 개의 아날로그 출력을 얻습니다. 그런 다음 16 : 1 mux 또는 16 : 8 mux로 캐스케이드 연결할 수 있습니다. 16 : 1 mux로 "최적화"한다면 결국 16 개의 IC가됩니다. 그러나 이것은 귀하의 소프트웨어 솔루션이 위와 같이 우아하지 않을 것이며, 십자형과 모듈러스 및 기타 것들이 될 것이지만 2 개의 IC를 절약 할 수 있음을 의미합니다.

따라서 한 행을 읽고 처리 한 후 다음 행으로 이동하여 처리 한 후 다음 행 등을 수행합니다. 각 행에 10µs를 주면 0.8ms에서 80 개의 행을 수행하게됩니다. 10.8ms=1.25kH , 그것은 당신이 생각하고 있던 범위에 있습니다.

가능하지만 좋은 디자인 아닙니다 .

더 많은 공간과 비용 효율적인 방법으로 이것을 해결합시다.

* 20 분 후 * 흠 ... 내가 생각 해낸 모든 솔루션은 너무 설정 및 / 또는 일부 고급 교정을 필요로하기 어려운 ...

오, 그럼 당신의 디자인이 당신의 작업에 적합하다고 생각합니다.

행운을 빌어 요.


다른 솔루션이 무엇인지 궁금합니다. 공유 할까? – pandalion98

OP는 위치와 압력을 측정하려고합니다. 그것은 두 개의 매개 변수입니다. 즉, 정보를 읽고 해독 할 수 있도록 전압 신호 안에 해당 정보를 포장해야합니다. 또는 옴, 인덕턴스, 커패시턴스와 같은 다른 장치에 포장해야합니다.

여기 하나의 열에 대해서만 생각하는 아이디어가 있습니다. 아이디어에 3을 곱하면 3 열 기타에 대한 전체 솔루션이 있습니다.

첫 번째 아이디어 :

기타 밑면에서 기타 목까지가는 두 개의 평행선 (낮은 저항)을 사용하십시오. 기타 하단의 전선 중 하나에 접지를 연결하십시오. LR 측정 시스템을 만들고 바닥에서 다른 와이어의 인덕턴스와 저항을 측정하십시오.

손가락으로 두 전선을 만지면 두 전선이 연결되고 일부 전선이 여기에 인덕턴스가 있습니다. 기타를 터치할수록 회로가 길어지고 측정 할 인덕턴스가 커집니다. 더 세게 누를수록 두 와이어 사이의 표면적이 커지고 저항이 줄어 듭니다.

두 개의 "와이어"일 필요는 없으며 두 개의 전도성 테이프 또는 다른 것일 수 있습니다.

내가 전에 이것을 공유하지 않은 이유 : 이것이 신뢰할 수 있으려면 모든 사람의 피부 저항이 다르기 때문에 각 개인에 대한 센서를 교정해야합니다. 연주 할 때마다 땀이 나고 저항이 더 줄어들므로이를 보상해야합니다. 사람마다 다르게 땀을 흘리므로 사람마다 보정해야합니다.

따라서 인덕턴스 => 손가락의 위치. 저항력 => 얼마나 힘들 었는지.

측정 할 값의 편차는 nano Ω 및 nano H에 있으며 CMRR 및 SNR에 대한 적절한 지식이 필요합니다. 그렇지 않으면 이것이 실내에서 이루어진다 고 가정 할 때 주전원 전압이 될 것입니다. 또는 wifi 또는 램프 또는 다른 소음원의 다른 주파수. 따라서 적절한 디지털 필터가 필요할 것입니다. 그리고 ... 아마 이미 OP의 능력과 수용 가능한 정신 노력의 범위를 벗어 났을 것입니다. 따라서이 아이디어는 버려집니다.

두 번째 아이디어 :

기타에지면에 연결된 평평한 전도성 표면을 만듭니다.

하나의 와이어 또는 전도성 테이프 또는 평평한 도체를 사용하십시오. 비전 도성 페인트를 그 위에 놓거나 일반 비전 도성 테이프를 그 위에 놓으십시오.

기타의 바닥에서 기타의 목까지 끈으로 묶습니다. 기타 하단의 와이어를 수백 MHz 범위의 고주파에 연결합니다. 이제 눈에 띄는 반향이 시작됩니다. 기술적으로 한쪽에만 차폐 된 전송 라인이 잘못 되었기 때문입니다.

따라서 짧은 구형파 펄스를 보내고 손가락이 절연 전선 위에 있기 때문에 반사로 인해 되돌아 오는 데 걸리는 시간을 측정합니다. 그런 다음 기타 하단에서 반사 된 스파이크의 진폭을 측정합니다. 따라서 이동 시간 => 손가락의 위치. 반사의 진폭 => 얼마나 세게 누르는가.

당신이하고있는 일을 모른다면 이것은 가장 쉬운 설정이 아닙니다. 다시 말하지만 이것은 OP가 다루기에는 너무 많은 노력 일 수 있습니다. 따라서이 아이디어는 버려집니다.


다음과 같이 보일 것입니다.

여기에 이미지 설명을 입력하십시오

특성 임피던스는 150Ω, 즉 전송 라인이 매우 나쁜 것으로 가정했습니다. 실제로는 더 나빠질 수 있습니다.

누군가가 엉망이되는 경우를 대비 한 링크 가 있습니다.

가장 어려운 부분 중 하나는 종점을 저항에 맞추는 것입니다. 오실로스코프 나 다른 고가의 장비가 필요할 수 있습니다.

다른 어려운 부분은 실제로 TOF (비행 시간)를 측정하는 것입니다. 일부 IC가 있지만 저렴하지는 않습니다. 그러나 항상 일정한 전류 소스를 만들어 작은 커패시터를 채운 다음 전압을 읽으십시오.

여기서 아이디어는 손가락이 전선에 가까이 오면 손가락이 회로의 일부가되어 커패시터로 작동한다는 것입니다. 손가락이 가까울수록 용량이 커집니다. 이것이 손가락 지점의 저항이 낮아지는 이유입니다.

https://en.wikipedia.org/wiki/Transmission_line 조금 아래로 스크롤하면 용량 매개 변수가 분모의 일부임을 알 수 있습니다.

전선의 한 지점이 일치하지 않을 때마다 반사가 발생하며 신호가 발생하는 "출력"에서이 지점을 읽을 수 있습니다. 어느 곳에도 반사가 없으면 신호가 종료 지점 중 하나에서 종료됩니다.

더 세게 누를수록 손가락의 면적이 더 넓어 져서 면적이 커져 정전 용량이 커집니다. 또한, 와이어와 손가락 사이에있는 비전 도성 재료는 커패시턴스를 더 높이기 위해 약간 압착됩니다.

세번째 아이디어 :

스틱 테레 민 기타와 측정 주파수 및 진폭 안쪽. 나는저기서 출력이 정확히 무엇인지 알지 못하지만 분명히 무언가를 사용할 수 있습니다.

이 시점에서 나는 아이디어가 부족하고 20 분을 보냈다고 말합니다. 실제로 나는 아마 10을 보냈다. 오 잘. 이제 이것을 작성하는 데 10 분이 더 걸렸으므로 모두 합산됩니다.


1
15 개의 IC를 3 개의 80 센서 세트에 연결하는 데 관련된 디버깅이 중요하다고 생각합니다. 또한 센서 어레이에 수백 개의 전선이 걸려 있기 때문에이 제품은 사용하기에 충분히 견고하지 않습니다.
BeB00

나는 이것이 실제로 실현 가능하다고 생각하고, 올바르게 수행되면 필요한 배선의 양을 줄입니다.
pjc50

다른 솔루션이 무엇인지 궁금합니다. 공유 할까?
PNDA

1
@ pandalion98 흠 ... 아마도 두 번째 아이디어는 그렇게 나쁜 아이디어가 아니었을 것입니다. 오 잘
Harry Svensson

6

세 가지 아이디어 :

1. 공급측에서 일부 멀티플렉싱을 수행하십시오.

실제로, 설명한 회로는 한쪽 끝이 공급 전압과 공통 인 수많은 가변 저항입니다. 모든 저항 값을 읽으려면 지금까지 다른 답장은 아날로그 측에서 신호를 다중화하는 방법을 제안했습니다.

그러나 공급 '레일'을 n 섹션 으로 나누어 공급 측 에서이 멀티플렉싱의 일부 또는 전부를 수행 할 수도 있습니다. 각각 다른 공급 레일이있는 n 개의 센서 패드 세트를 함께 연결하십시오 . 이제 한 번에 하나의 공급 레일에만 전원을 공급하고 하나의 ADC 입력을 사용하여 각 패드 세트를 읽습니다. (이것은 컴퓨터 키보드를 읽는 회로가 일반적으로 작동하는 방식이며 스위치가 연결된 방식을 종종 '크로스 포인트 스위치'라고합니다.) 궁극적으로 모든 '레일'에 연결된 단일 ADC를 사용할 수 있습니다. 전원을 각 패드에 차례로 연결하여 모든 멀티플렉싱.

유일한 문제점은 다른 모든 패드는 전원 레일에서 분리해야하며 접지에 연결되어 있지 않아야하며 각 패드에 대해 디지털 출력을 사용한 경우에 해당됩니다. 다이오드, 바이폴라 트랜지스터 또는 FET를 통해 각 패드를 배선하는 등 여러 가지 방법으로이를 해결할 수 있습니다. 실제로 얼마나 빨리 수행 할 수 있는지 모르겠지만 원칙적으로 가능합니다. 상대적으로 높은 임피던스를 가져야하는 경우 마이크로 컨트롤러를 사용하여 높은 출력 또는 입력으로 설정합니다.

이 기술로 센서를 측정하는 정확도는 단일 고정 전압 소스 및 고품질 아날로그 멀티플렉서를 사용하는 것과 비교할 때 완벽하지 않을 수 있지만 압력 센서가 약간의 허용 오차를 갖기 때문에 특히 충분할 것으로 생각됩니다 저항-어쨌든 참조 힘을 사용하여 각 센서에 대해이를 교정해야 할 수도 있습니다.

2. ADC 입력이 많은 일부 마이크로 컨트롤러 사용

예를 들어, PICAXE 40X2 에는 아날로그로 사용할 수있는 27 개의 핀이 있으므로 9 개의 핀으로 필요를 충족시킬 수 있습니다. 간단한 BASIC 언어로 프로그래밍되어 i2c 슬레이브로 작동 할 수 있으므로 하나의 마이크로 컨트롤러로 9 개의 칩을 읽거나 각 칩의 출력을 직렬 데이터로 전송하여 호스트 컴퓨터에서 읽을 수 있습니다. 직렬 -USB 변환기를 통해. 나는 그것이 얼마나 빨리 갈지 약속 할 수는 없지만 PICAXE를 최대 속도 (64 MHz, 16 MHz 외부 공진기를 사용하여)로 클럭하면 제대로 작동한다고 생각합니다. 물론 C에서 마이크로 컨트롤러 프로그래밍에 만족한다면 PICAXE의 기반이되는 PIC18F45K22로 동일한 작업을 수행 할 수 있습니다.

3. 상용 아날로그 입력 장치 사용

마지막으로 시간을 절약하기 위해 돈을 쓰지 않아도되고 휴대 성이 중요하지 않은 경우 (예 : 두꺼운 케이블을 사용하여 장비를 장비 랙에 연결하는 것이 좋다면) 모든 센서를 한 번에 측정 할 수있는 채널 수 아날로그 입력 장치. 예를 들어 Measurement Computing USB-2633 은 US $ 1k를 약간 넘는 64 개의 아날로그 입력을 읽습니다.


4

무차별 강제 신호 컨디셔닝 (수동)과 소형 ADC 또는 각각 16 개 이상의 MUX ADC 입력이있는 MCU / ADC를 고려할 가치가 있습니다. 40 개에 불과합니다. 작동 할 수있는 칩의 한 예 는 자동 증분 채널 모드와 16 개의 입력을 가진 ADS7961QDBTRQ1 입니다.

4kHz 샘플 레이트 및 샘플 당 240 바이트에서도 전체 데이터 전송률은 약 1MB / s로, 두렵지 않습니다. 아마도 슬레이브와 통신하는 10MHz 또는 20MHz SPI 버스가있는 마스터 CPU 일 것입니다. 대역폭이 없으면 2 개의 SPI 버스를 사용하십시오. 위에서 언급 한 부분은 20MHz에서 작동하므로 단일 SPI가 작동합니다.

또는 단일 TI 칩인 DDC2256AZZF를 사용할 수 있습니다. DDC2256AZZF 는 64 채널 동시 샘플링 및 256 개의 입력을 제공합니다. 그러나 특히 저렴하지는 않지만 (약 350 달러) 14x14mm 323 핀 LFBA 어레이로 제공되므로 흰색 플러그 보드 브레드 보드로 작업하십시오.


3

실시간 휴먼 인터페이스 애플리케이션의 경우 멀티-킬로그램의 전체 샘플링 속도가 높습니다. 아마도 50Hz이면 충분합니다 ( https://en.wikipedia.org/wiki/Input_lag#Typical_overall_response_times ). 즉, 센서 당 80us 미만의 모든 센서를 20ms 미만으로 샘플링해야합니다. 이것은 어렵지 않으며 기본적으로 모든 일반 8 비트 마이크로 컨트롤러로 관리 할 수 ​​있습니다 (예 : Atmega88은 <30us에서 수행 할 수 있음).

모든 상호 작용을 측정 한 다음 필요하지 않은 상호 작용을 모두 폐기하는 것은 기술적으로 어렵지 않습니다. 이 문제는 멀티플렉싱에서 발생합니다. 센서가 한 번에 80 개로 구동된다고 말하면서 게시물에 약간 혼란 스럽습니까? 일반적으로해야 할 일은 다중 열과 행입니다. 그렇게하지 않으면 장치에서 80 개가 넘는 전선을 처리해야하는데 이는 좋은 생각이 아닙니다. 그것을 매트릭스로 나누는 방법을 찾아야하므로 30 개의 와이어를 얻을 수 있습니다 (여전히 많이 있습니다). 그런 다음 멀티플렉싱 할 수 있지만 내가 당신이라면 여러 개의 마이크로 컨트롤러를 가지고 마스터에 연결해야합니다. 슬레이브 MCU 대신 전용 ADC를 사용할 수 있지만 개인적으로 MCU를 사용합니다.

통신이 문제가 될 수 있음을 올바르게 확인했지만 적어도 MCU 간에는 큰 문제가 아닙니다. 8MHz의 Atmega는 2MHz에서 SPI를 수행 할 수 있으므로 모든 센서 데이터를 전송하는 데 <1ms가 걸립니다. 문제는 마스터 MCU가 가지고있는 후에이 데이터로 무엇을하고 싶은가입니다.


2
단일 입력에 반응 할 때 50Hz는 일반적으로 일반적인 GUI 용어로 "충분한"것으로 간주되지만 사운드 카드에 대한 내 자신의 경험에서 200ms의 대기 시간으로 음악을 재생하는 것은 전혀 즐거운 경험이 아닙니다 (음성 걸림). 가변적 인 0-200ms의 레이턴시로 인해 rhytm의 의미가 반드시 죽어 버릴 수 있기 때문에 악기를 사실상 재생할 수 없게 될 것이라고 생각합니다. 약 1 kHz의 폴링 주파수는 최소 좋은 시작점입니다.
Dampmaskin

1
@Dampmaskin 50Hz = 20ms, 200ms가 아닙니다. 20ms가 더 합리적 일 것입니다
Steven Waterman

1
내 잘못이야. 20ms가 20ms 인 경우에는 20ms를 사용할 수 있지만 대기 시간이 짧을수록 항상 좋습니다. 어쨌든 신호 체인에는 나중에 더 많은 대기 시간이 있습니다.
Dampmaskin

@Dampmaskin은 설명 된 접근 방식으로 볼 수있는 문제입니다. 라즈베리 파이 신디사이저를 연결하려고 할 때 이상적으로 총 대기 시간의 15-20ms 미만을 유지하고 싶기 때문에 체인의 이후 구성 요소에 대해 가능한 한 많은 대기 시간을 "저장"해야합니다. 컨트롤러가 이미 20ms를 차지하면 헤드 룸이 남아 있지 않습니다.
d.oelert

@StevenLowes 20ms는 대부분의 음악가들에게는 너무 길다. 그것은 일부 소리에 대한 Haas 거리 밖에 있습니다. 개인적으로 나는 실제로 10ms 이상의 대기 시간을 처리 할 수 ​​없으며 단순히 6ms 대기 시간을 견딜 수없는 피아니스트를 알고 있습니다.
토드 윌콕스

3

가장 간단한 방법은 10 개의 8 비트 오픈 콜렉터 체인과 병렬 레지스터를 병렬로 분배하는 10 개의 8 비트 오픈 콜렉터 체인을 사용하여 긴 플렉스 회로에 모든 것을 구축하여 각 패드 열에 개별적으로 전원을 공급하는 것입니다.

이를 사용하여 모든 열의 각 열을 동시에 구동하고 공통 리턴 라인을 ADC에 다중화 할 수 있습니다. 리턴 라인에는 적절한 풀업이 필요하므로 버튼 저항으로 저항 분배기 전압을 얻을 수 있습니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

그런 다음 제어 마이크로는 레지스터 체인 아래에 단일 제로 비트를 전송하므로 한 열만 시간으로 구동됩니다. 나머지 연결은 유동적입니다.


1

이 작업을 수행하는 확실한 방법은 (각 스트링을 한 번만 터치하면 알 수 있음) 프렛을 전압 분배기에 연결 한 다음 각 스트링의 전압을 측정하는 것입니다

터치 위치를 알려줍니다.

접촉 압력을 얻으려면 커패시터를 접지에서 각 프렛까지 넣고 각 스트링의 AC 저항을 측정하십시오.

이 접근법의 단점은 현이 더 높은 터치에 반응한다는 것입니다


2
잘못 이해했지만 죄송하지만 실제 기타 넥이없고 끈도없는 경우 죄송합니다. 그것은 상단에 압력 센서 매트릭스가있는 나무 보드 일뿐입니다.이 보드는 실제 프렛 보드에서 사용할 플레이 스타일을 모방합니다. 의견을 보내 주셔서 감사합니다. 향후 프로젝트에 대해 명심할 것입니다!
d.oelert

위의 프렛과 끈으로 나는 당신이 당신의 질문에서 언급 한 구리 스트립을 의미합니다.
Jasen

아, 지금 무슨 뜻인지 알 겠어. 노트가 레가토로 연주 될 때이 접근법은 깨질 수 있습니다. 왜냐하면 같은 줄에서 여러 번 터치해야하기 때문입니다. 그래도 가장 낮은 문제
d.oelert

또한 나는 당신의 접근 방식을 정말로 좋아하지만 이것은 원래의 질문에 대답하지 않습니다. 이것은 일반적으로 실시간으로 처리 해야하는 많은 수의 아날로그 센서를 처리하는 방법입니다.
d.oelert

카메라에는 수많은 아날로그 센서가 있습니다 ...
Jasen

0

기타 길이에 대해 100Ω에서 100K 사이의 인치당 상당히 균일 한 저항을 갖는 와이어를 얻을 수 있다면 표면 저항을 사용하여 적당히 전도성이있는 재료로 목을 만들 수 있습니다. 압력과 함께 줄어든 다음 목과 각 줄의 각 끝 사이의 저항을 측정합니다. 스트링의 저항을 뺀 저항의 합은 접점 저항의 두 배를 나타냅니다. 측정 된 각 저항에서 접점 저항을 빼면 나머지 저항의 비율이 목의 접점을 나타냅니다.

이 방법을 사용하면 세 줄 모두에서 동시 프레스를 감지 할 수 있지만 문자열을 여러 위치에서 누를 경우 작동하지 않습니다. 기타의 경우, 그러한 디자인은 바레 코드를 사용하는 것을 배제 할 수 있지만 (심각한 제한) 다른 악기는 여러 스팟에서 현을 만질 필요가 없습니다.


" 기타 길이에 대해 100Ω과 100K 사이의 인치 당 상당히 균일 한 저항을 가진 와이어를 얻을 수 있다면 "-그 타입의 와이어를 찾을 수 있을지 의심됩니다.
Harry Svensson

동의하지 않습니다. 내 사무실에는 1717 ohm / m의 저항 와이어가 있으므로 찾기가 쉽지 않습니다. 나는 이것이 Ø50 µm 와이어이기 때문에 작업하기 쉽다고 말하지는 않지만 획득하기는 어렵지 않습니다.
MrGerber

@ MrGerber : 니크롬 와이어의 저항은 따뜻한 것보다 추운 온도에서 훨씬 낮다는 것을 잊었습니다. 따라서 회로를 10ohm에 가까운 것으로 작동하도록 변경하는 것이 더 좋을지 모르지만 기본 개념은 작동 할 수 있습니다. 대안 적으로, 목이 약한 전도성 물질이고 끈이 연결되도록하여 작동 할 수도 있습니다.
supercat

이것은 NiCr이 아니라 FeCrAl이며 저항은 온도에 따라 크게 변하지 않습니다. 내가 가지고있는 유형은 100 C에서 1300 C로 약 8 %가 바뀌 었습니다. 참조 : Kanthal D (그리고 저는 전자 담배를 만들지 않습니다)
MrGerber

@ MrGerber : 좋아, 나쁘지 않습니다. 앞서 언급 한 의견에 따라 몇 가지 표를 살펴보면서 온도에 따라 저항이 커지는 저항을 보았습니다.
supercat

0

나는이 게시물을 보았고 하나의 칩으로 가능할 수 있다고 생각했습니다. 저렴한 블루 필 보드와 같은 일종의 마이크로 컨트롤러 보드를 사용하는 것이 좋습니다. 10 개의 ADC 채널을 자유롭게 사용할 수있는 ARM M3이 있습니다. 3 개의 문자열로 구성된 3 개의 클러스터에 열을 배치하는 경우 9 개의 비어있는 ADC 채널에 연결하십시오. 다른 21 개의 핀을 사용하여 핀 행을 토글하여 총 63 개의 '프렛'을 만듭니다. 연결 매트릭스, 저항은 velostat 셀, gpio는 3.3v에서 구동 또는 입력 모드에 있으며 ADC 핀은 velostat 셀의 전압 강하를 측정합니다. 마이크로 컨트롤러에는 2Msp를 지원하기 위해 위상 지연과 함께 사용할 수있는 2 개의 1Msps 12 비트 ADC가 있습니다. 이는 해머를 놓치지 않거나 변조를 감지하지 않아야합니다. USB 연결을 사용하여 USB 미디 컨트롤러처럼 작동하게 할 수 있다고 생각합니다. 더 많은 입력을 위해 더 큰 마이크로 컨트롤러를 사용할 수는 있지만 30 프렛 이상으로 '프렛'간격을 관리하는 방법을 보지 못합니까? 아니면 터치 스크린과 비슷합니까?

나는 velostat 시트가 어떻게 작동하는지 정확히 알지 못하지만 더 큰 시트의 바닥에 작은 종단점을 두어 손가락의 위치와 압력을 여러 지점의 전압과 연관시킬 수는 없습니까? 그러면 감지가 훨씬 적어지고 구부러짐 및 비브라토와 같은 것을 지원할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.