Đọc một số lượng lớn các cảm biến tương tự trong thời gian thực


17

Tôi đang cố gắng xây dựng một bộ điều khiển giống như MIDI có cổ như đàn guitar. Trên cổ đó, có một ma trận cảm biến áp suất rất lớn. Bộ điều khiển sẽ mô phỏng 3 chuỗi.

Cách thức hoạt động này là: Có 3 dải băng đồng hai mặt dài (chiều rộng 0,5 cm, dài bằng cổ) được kết nối với nguồn điện (có lẽ 3,3V hoặc 5V, hiện tại không thành vấn đề). Trên các dải này là một lớp Velifier, thay đổi điện trở suất dựa trên áp suất. Trên đầu của bộ điều tốc sẽ là một lớp khác của các hàng hoặc các ô của băng đồng, được kết nối với một cái gì đó, tạo ra sự đọc điện áp thông qua lớp bộ điều tốc. Vì cổ dài khoảng 40 cm, sẽ có ít nhất 80 hàng.

Nếu bạn tưởng tượng 3 dải băng đồng dưới cùng là các cột của biểu đồ dọc theo cổ, các cảm biến sẽ là các ô hoặc hàng, tùy thuộc vào phương pháp đo (tôi nghĩ người ta cũng có thể ghép nhiều cột có thể có hàng.) Có một vài điều kiện đặc biệt có thể làm cho việc này dễ dàng hơn: Vì đây là bộ điều khiển giống như guitar, không phải mọi tương tác đều cần được đo! Chỉ có cảm ứng gần nhất với cơ thể của bộ điều khiển có vấn đề. Ngoài ra độ phân giải 8 bit phải đủ chính xác. 255 mức áp suất có lẽ nhiều hơn mức cần thiết.

Bây giờ các bit khó khăn:

Phép đo cần phải đủ thời gian thực để phát hiện các búa, v.v. (không biết tốc độ mẫu cần phải cao đến mức nào - ước tính ở mức vài kHz để có thể đo và phát tốt) và đầu ra kỹ thuật số của bộ điều khiển phải là MIDI (trên 3 kênh riêng biệt - một kênh trên mỗi chuỗi) hoặc tín hiệu kỹ thuật số có thể được xử lý bằng Raspberry Pi.

Bây giờ vì kiến ​​thức của tôi rất hạn chế, tôi không thể nghĩ ra các công cụ phù hợp cho công việc. Những gì tôi biết mặc dù là: Nó có thể. Có một bộ điều khiển tương tự nhưng khác nhau sử dụng một kỹ thuật rất giống nhau (mà tôi thực tế đã đảo ngược cho đến khi tôi nhận thấy rằng họ có bằng sáng chế và thông tin về cách họ làm nó không phức tạp như tôi nghĩ), nó được gọi là ROLI Biển.

TL; DR:

  • khoảng 240 cảm biến

  • có thể được tách thành các nhóm 80 được cung cấp bởi cùng một dòng

  • Đây là một ứng dụng thời gian thực, tôi cần phải chịu áp lực từ mọi cảm biến khi chạm vào (một số điều kiện áp dụng, xem ở trên)

Cảm ơn trước, tôi biết nó rất nhiều để đọc. Tôi rất biết ơn về bất kỳ đề nghị nào và sẽ rất vui mừng nếu bạn có thể giúp tôi hoàn thành mớ hỗn độn khủng khiếp mà tôi đặt ra để sản xuất!

Những điều tôi đã nghĩ đến cho đến nay:

Ghép các hàng và cột, đọc từng ô với một MCP3008 hoặc ADC lớn hơn và xâu chuỗi (chuỗi daisy hoặc cây giống như) ATmegas chỉ đẩy tương tác thấp nhất theo vị trí đến tín hiệu cuối cùng, nhưng từ tính toán của tôi, có thể bị tắc nghẽn bởi các chi phí liên lạc. Ngoài ra một mô hình trước đó bao gồm chiết áp ruy băng, mà tôi đã loại bỏ, bởi vì thiết kế rất tệ (một vài lần thử, không đủ mát).

CHỈNH SỬA / CẬP NHẬT:

Cảm ơn những lời đề nghị tốt cho đến nay! Nhờ họ mà giờ đây tôi có thể diễn đạt vấn đề của mình rõ ràng hơn nhiều:

Tôi có một ma trận gồm 80 hàng * 3 cột cảm biến áp suất. Khi một người đang tương tác với ma trận cảm biến, một số cảm biến ở gần sẽ nhấc cảm ứng, nhưng chỉ dọc theo một cột. Các cột được phân tách cơ học. Các cảm biến có điện trở trong khoảng từ 100 Ohm đến 1 kOhm. Tất cả các cảm biến này cần được đọc với độ sâu 8 bit, được xử lý và kết quả cần được gửi với tốc độ ít nhất là 1 kHz. Vì vậy, một lần đọc / xử lý cần phải mất ít hơn một phần nghìn giây. Đầu ra cuối cùng cho mỗi cột cần phải là: 4 byte cho float32 và 1 byte cho uint8. Float32 sẽ chỉ ra vị trí trung bình của tương tác đầu tiên dọc theo cột. Một tương tác được định nghĩa là một cụm cảm biến liên tiếp có áp suất trên một ngưỡng nhất định. Đây là nơi xử lý được đưa vào hỗn hợp: cột sẽ được chuyển xuống dưới cho đến khi đọc vượt qua một ngưỡng. Điều này sau đó sẽ được tính là bắt đầu của một tương tác. Áp suất và vị trí của mọi cảm biến được ghi nhớ cho đến khi cảm biến đầu tiên rơi xuống dưới ngưỡng với tối đa (có thể) 4 cảm biến liên tiếp. Từ tất cả các cảm biến của tương tác được ghi lại, chỉ có hai cảm biến sẽ được xử lý - một cảm biến đọc áp suất cao nhất (điện trở thấp nhất) và cao nhất trực tiếp trên hoặc dưới nó. Vị trí điểm nổi được tính bằng cách lấy trung bình hai vị trí cảm biến có trọng số bởi áp lực của chúng. Áp lực chung của sự tương tác sẽ chỉ là việc thêm cả hai áp suất được kẹp trong khoảng từ 0 đến 255 (thêm cả hai áp lực của đơn vị8 vào một uint16 và chia cho 2 mà không làm tròn, loại bỏ các bit không cần thiết - việc này sẽ nhanh). Điều này cần phải xảy ra cho mỗi cột. Kết quả của kích thước 15 byte sau đó sẽ được gửi qua SPI đến một máy tính nhỏ (Raspberry Pi B3) hoạt động như một bộ tổng hợp. Tôi không được thiết lập về phương pháp truyền tải. Nếu SPI không phải là công cụ phù hợp cho công việc, tôi sẵn sàng thực hiện bất kỳ phương thức giao tiếp nào mà Raspberry Pi có thể xử lý. Vì đây là một ứng dụng tương tác âm nhạc, độ trễ là rất quan trọng.

Câu hỏi chính xác của tôi là: Điều này có thể được giải quyết với một vi điều khiển duy nhất mà không phá vỡ ngân hàng không? Tôi không đủ khả năng để mua IC trị giá hàng trăm đô la cho một dự án sở thích. Bạn muốn giới thiệu phần cứng nào? Có những cảnh báo không rõ ràng tôi cần phải cảnh giác?

Cách tiếp cận tôi rút ra từ các câu trả lời cho đến bây giờ là cấp nguồn cho từng cột riêng lẻ, sau đó đọc các hàng với 5 ADC 16 kênh (ADS7961) được kết nối với Arduino qua SPI. Tôi lo lắng rằng đây có thể không phải là cách tiếp cận dễ nhất / rẻ nhất hoặc không đủ nhanh để đạt tốc độ> 1 kHz.

Tuyên bố miễn trừ trách nhiệm: Tôi thường là một nhà hóa học lý thuyết và là một kẻ nghiệp dư khủng khiếp khi nói về kỹ thuật điện, mọi thứ tôi biết là tự học và không có bất kỳ nền tảng chuyên môn nào (đó là lý do tôi tìm kiếm sự giúp đỡ từ những người hiểu biết hơn). Tôi biết cách của tôi xung quanh phần mềm mặc dù. Bất cứ điều gì liên quan đến phần mềm, tôi sẽ tìm ra với đủ thời gian. Ngoài ra, tôi là người Đức, vì vậy xin vui lòng loại trừ các lỗi ngữ pháp không thường xuyên.


chỉ là một ý tưởng .... có thể có sự cải thiện tốc độ nếu các mux được xen kẽ .... mux0 sẽ quét băn khoăn 0,8,16,24, v.v ... mux1 - 1,9,17,25 ... lên đến mux7 (hoặc cao hơn) ... theo cách đó 8 phím đầu tiên được đọc cùng lúc bởi 8 mux ... sau đó là 8 phím tiếp theo ... vv
jsotola

2
Thuật ngữ 'thời gian thực' có thể không chính xác. Điều đó có nghĩa là dữ liệu rời khỏi hệ thống với cùng tốc độ mà nó nhập vào (Một mẫu trong, một mẫu ra). Nhưng nó không nói gì về độ trễ - thời gian cần thiết để xử lý nó. Để sử dụng âm nhạc, bạn cần độ trễ tổng thể (bao gồm cả thời gian để tổng hợp / phát lại âm thanh cuối cùng) dưới 10 - 15 ms, tốt nhất là dưới 5.
Schizomorph

Sự khác nhau về sức đề kháng giữa ép và không ép là gì?
Trevor_G

trong khoảng từ 10 đến 1000 ohm (khoảng)
d.oelert

Các yêu cầu là loại trộn lẫn với việc thực hiện đề xuất. Bạn có thể đã trả lời những câu hỏi này. Người biểu diễn có thể thực hiện một slide, sao cho nhạc cụ cần có khả năng phát hiện một loạt các vị trí giữa các phím đàn liền kề? Bạn có cần phải có khả năng hỗ trợ một nhạc cụ không có tiếng, hoặc các phím đàn có thể là một phần của giải pháp không?
Wayne Conrad

Câu trả lời:


7

Tùy thuộc vào phạm vi giá của bạn, bạn có thể muốn xem xét sử dụng một GPU giữa Raspberry Pi và ADC của mình, chẳng hạn như Bảng DE0-Nano , có hỗ trợ tốt như một bảng phát triển đồ họa giới thiệu. Giải pháp này có ưu điểm là cho phép bạn viết mã sẽ đồng hồ nhiều / nhiều ADC cùng lúc và định dạng dữ liệu của bạn theo cách có thể hiển thị cho Raspberry Pi.

Bạn đã đề cập rằng bạn đang xem xét MCP3008. Con chip này là SPI, vì vậy bạn có thể kết nối một vài thiết bị với nhau trên cùng một bus với các chân CS khác nhau. Giả sử bạn đã kết nối ba chip với một bus, do đó cung cấp cho bạn 24 kênh ADC trên 6 chân (ba dòng dữ liệu và ba dòng CS). Điều này có nghĩa là 240 kênh cho 60 chân, dễ dàng nằm trong khả năng của FPGA.

Nếu bạn chạy dòng đồng hồ MCP3008 ở tần số tối đa 2 MHz, sẽ mất (15 đồng hồ / kênh) * (8 kênh / chip) * (3 chip / bus) * (1/2000000 giây / xung nhịp) = 0,18ms đọc tất cả 240 cảm biến, tương ứng với tốc độ mẫu 5,56kHz.


Nghe có vẻ là một cách tiếp cận tuyệt vời! tôi chắc chắn sẽ xem xét điều đó Tôi không có kinh nghiệm với các GPU mặc dù vậy, vì vậy điều này có thể là quá nhiều đối với tôi để xử lý ... mặt khác tôi đã luôn tìm kiếm một cái cớ để vào các
GPU

Bạn có thể sử dụng chip ARM với nhiều dòng SPI. Bằng cách đó, bạn sẽ tránh được chi phí cho FPGA và nhận được gấp ba tốc độ mẫu (nếu bạn có 3 bộ điều khiển SPI). Hãy nhớ rằng bạn phải quản lý độ trễ do xử lý nội bộ (di chuyển các bài đọc bên trong MCU đến một nơi nào đó mà Pi có thể nhận được) và MCU-> Pi liên lạc.
Ronan Paixão

Nhân tiện, PI cũng có bộ điều khiển SPI.
Ronan Paixão

Ý tưởng đằng sau FPGA là bạn có thể tạo ra 10 bộ điều khiển SPI riêng biệt (sử dụng số từ ví dụ tôi cung cấp) và dễ dàng vận hành chúng song song hoàn hảo. Và đúng vậy, Pi có bộ điều khiển SPI nhưng nó không ở đâu nhanh hoặc song song như một công nghệ đồ họa sẽ cho phép người ta tạo ra.
Billy Kalfus

Nếu bạn có thể tìm thấy một FPGA hoặc CPLD với các đầu vào không có bộ đệm, bạn thậm chí có thể tạo ra một MUX tương tự 80: 1. Đó là một cú sút xa, nhưng nó có thể hoạt động.
Caleb Reister

10

Câu trả lời rõ ràng là muxing, điều này có nghĩa là bạn tạo ra đường dẫn điện một cách linh hoạt. Vì vậy, chỉ cần lặp qua toàn bộ ma trận, mỗi lần một hoặc nhiều đầu vào ADC (Analog sang Digital Converter) như bạn có.

Nếu bạn có 3 ADC thì bạn có thể đọc một hàng một lần, sau đó bạn thay đổi đầu vào thành mux và voilla, bây giờ bạn đang đọc hàng thứ hai, và sau đó bạn tiếp tục. Vấn đề với thiết lập này là bạn có 80 hàng và không có bất kỳ 80: 1 (tám mươi đầu vào cho một đầu vào) mà tôi biết. Nhưng có những mux 16: 1 mà bạn có thể ghép lại để có được 16 * 5 = 80 đầu vào.

Nó sẽ trông giống như thế này:

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 tín hiệu đầu vào cho các mux 16: 1 có thể được kết nối với nhau.

Vì vậy, cuối cùng bạn có một byte với các tín hiệu điều khiển trong mẫu này:

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

Điều này có nghĩa là bạn sẽ cần các mux 5 × 16: 1 và một mux 8: 1 mux = 6 IC,

Nhân số đó với 3 vì bạn có thể muốn đọc một hàng tại một thời điểm.

Điều này có nghĩa là bạn sẽ có 18 IC, 7 tín hiệu điều khiển. Bạn có thể giảm số lượng IC nếu bạn sẽ tăng số lượng đầu vào tương tự. Đó là 18 chỉ với 3 đầu vào tương tự.

Thay vào đó, nếu bạn đã sử dụng 240/16 = 15 IC, thì bạn đã nhận được 15 đầu ra tương tự từ các mux 15 × 16: 1. Sau đó, bạn có thể xếp tầng với mux 16: 1 hoặc 16: 8. Cuối cùng, nó sẽ là 16 IC nếu bạn "tối ưu hóa" nó với các mux 16: 1. Nhưng điều này có nghĩa là giải pháp phần mềm của bạn sẽ không ... thanh lịch như trên, nó sẽ lan tỏa và mô đun và các thứ khác, nhưng này, bạn tiết kiệm được 2 IC.

10,8mS= =1,25kHz

Có thể, nhưng nó không phải là một thiết kế tốt.

Hãy giải quyết vấn đề này theo một cách khác ... hiệu quả hơn về không gian và tiền bạc.

* 20 phút sau * Hmmm ... tất cả các giải pháp tôi đưa ra đều quá khó để thiết lập và / hoặc yêu cầu một số hiệu chuẩn nâng cao ...

Ồ, vậy thì tôi cho rằng thiết kế của bạn phù hợp với nhiệm vụ của bạn.

May mắn nhất.


Tôi tự hỏi những giải pháp khác là gì. Quan tâm chia sẻ? - phá hoại98

OP muốn đo vị trí và áp lực. Đó là hai thông số. Điều này có nghĩa là chúng ta cần phải đóng gói thông tin đó bên trong tín hiệu điện áp để chúng ta có thể đọc và giải mã nó. Hoặc chúng ta cần phải đóng gói nó vào một số đơn vị khác, như ohm, điện cảm, điện dung.

Đây là một số ý tưởng của tôi, nơi tôi chỉ nghĩ về một cột. Chỉ cần nhân ý tưởng với 3 và bạn có toàn bộ giải pháp cho một cây đàn guitar 3 cột.

Ý tưởng đầu tiên:

Sử dụng hai dây song song (điện trở thấp) đi từ dưới cùng của guitar đến cổ của guitar. Kết nối mặt đất với một trong các dây ở dưới cùng của guitar. Tạo một hệ thống đo LR và đo độ tự cảm và điện trở từ dây khác, cũng ở phía dưới.

Khi bạn chạm vào cả hai dây bằng một ngón tay, bạn sẽ kết nối hai dây và sẽ có một số điện cảm ở đây. Bạn càng chạm vào cây đàn guitar, mạch sẽ càng dài và bạn sẽ đo được độ tự cảm nhiều hơn. Bạn càng nhấn mạnh, diện tích bề mặt giữa hai dây càng nhiều và điện trở của nó càng ít.

Nó không phải là hai "dây", có thể là hai băng dẫn, hoặc cái gì khác.

Tại sao tôi không chia sẻ điều này trước đây: Để điều này đáng tin cậy, bạn cần hiệu chỉnh các cảm biến cho từng cá nhân vì mỗi người có lượng kháng thuốc khác nhau trên da. Bất cứ khi nào bạn chơi, bạn sẽ đổ mồ hôi và do đó làm giảm sức đề kháng hơn nữa, vì vậy bạn sẽ cần phải bù đắp cho điều này. Mọi người đều đổ mồ hôi khác nhau nhiều, vì vậy điều này cũng sẽ phải được hiệu chỉnh cho mỗi người.

Vậy độ tự cảm => vị trí của ngón tay. Sức đề kháng => bạn đã nhấn mạnh như thế nào.

Độ lệch của các giá trị bạn sẽ đo sẽ nằm trong nano và nano H, điều này có nghĩa là bạn sẽ cần một số kiến ​​thức phù hợp về CMRR và SNR. Nếu không, tất cả những gì bạn sẽ thấy sẽ là điện áp nguồn, giả sử điều này sẽ được thực hiện trong nhà. Hoặc một số tần số khác từ wifi hoặc đèn hoặc một số nguồn tiếng ồn khác. Vì vậy, có lẽ một bộ lọc kỹ thuật số thích hợp sẽ là cần thiết. Và ... có lẽ nó đã nằm ngoài phạm vi khả năng của OP và nỗ lực tinh thần chấp nhận được. Vì vậy, ý tưởng này bị ném đi.

Ý tưởng thứ hai:

Tạo một bề mặt dẫn điện phẳng trên cây đàn guitar được kết nối với mặt đất.

Sử dụng một dây, hoặc băng dẫn hoặc chỉ một dây dẫn phẳng. Đặt một số sơn không dẫn điện lên nó, hoặc một số băng không dẫn điện thông thường trên nó.

Dây đeo nó qua cây đàn guitar từ dưới lên cổ của cây đàn guitar. Kết nối dây ở dưới cùng của guitar với tần số cao, trong phạm vi hàng trăm MHz. Bây giờ bạn sẽ bắt đầu nhận được phản ánh đáng chú ý. Bởi vì về mặt kỹ thuật bạn có một đường truyền .... xấu trong đó chỉ có một bên được che chắn.

Vì vậy, bạn sẽ gửi một số xung sóng vuông ngắn và đo thời gian để nó quay trở lại do thời gian phản xạ do ngón tay của bạn nằm trên dây cách điện. Và sau đó bạn đo biên độ của gai phản xạ ở dưới cùng của cây đàn guitar. Vì vậy thời gian di chuyển => vị trí của ngón tay. Biên độ của sự phản chiếu => bạn đã nhấn mạnh đến mức nào.

Đây không phải là điều dễ nhất để thiết lập ... nếu bạn không biết bạn đang làm gì. Vì vậy, một lần nữa, điều này có thể là quá nhiều nỗ lực để OP giải quyết. Vì vậy, ý tưởng này bị ném đi.


Nó sẽ trông giống như thế này:

nhập mô tả hình ảnh ở đây

Tôi đã giả sử trở kháng đặc tính là 150, nói cách khác là đường truyền rất tệ. Trong thực tế nó có thể tồi tệ hơn, tôi không biết tôi chưa bao giờ làm điều này.

Đây là liên kết trong trường hợp ai đó muốn gây rối.

Một trong những phần khó nhất sẽ là khớp điểm cuối với một số điện trở, vì điều này bạn có thể cần một máy hiện sóng hoặc một số dụng cụ đắt tiền khác.

Phần khó khăn khác là thực sự đo TOF (Thời gian bay), có một số IC ngoài đó, nhưng chúng không rẻ .. nhưng bạn luôn có thể tạo ra một nguồn dòng không đổi và lấp đầy một tụ điện nhỏ và sau đó chỉ cần đọc điện áp.

Ý tưởng ở đây là khi một ngón tay đến gần dây, ngón tay của bạn sẽ trở thành một phần của mạch điện và hoạt động như một tụ điện. Ngón tay của bạn càng gần, điện dung càng nhiều. Đây là lý do tại sao điện trở tại điểm ngón tay sẽ đi xuống.

https://en.wikipedia.org/wiki/Transmission_line cuộn xuống một chút và bạn sẽ thấy rằng tham số điện dung là một phần của mẫu số.

Bất cứ khi nào một điểm trên dây sẽ không khớp, thì sẽ có một sự phản chiếu và bạn có thể đọc điều này ở "đầu ra" nơi tín hiệu của bạn bắt nguồn từ đó. Nếu không có phản xạ ở bất cứ đâu thì tín hiệu của bạn sẽ bị chấm dứt tại một trong hai điểm cuối.

Bạn càng ấn mạnh xuống, càng nhiều khu vực ngón tay của bạn sẽ bị xẹp => nhiều điện dung hơn do diện tích. Ngoài ra, bất kỳ vật liệu không dẫn điện nào bạn có giữa dây và ngón tay của bạn sẽ bị bóp nhẹ để tăng điện dung hơn nữa.

Ý tưởng thứ ba:

Dán một Theremin bên trong cây đàn guitar và đo tần số và biên độ. Tôi không biết chính xác những gì một Theremin sẽ tạo ra, nhưng chắc chắn một cái gì đó có thể được sử dụng.

Tại thời điểm này tôi đang cạn kiệt ý tưởng và nói rằng tôi đã dành 20 phút. Khi trong thực tế tôi có thể dành 10. Oh tốt. Bây giờ tôi chắc chắn đã dành thêm 10 phút để viết bài này, vì vậy tất cả đều cộng lại.


1
Tôi cảm thấy việc gỡ lỗi liên quan đến việc gắn 15 IC vào 3 bộ 80 cảm biến có thể là ... đáng kể. Ngoài ra, chắc chắn thứ này sẽ không bao giờ đủ mạnh để sử dụng, do hàng trăm dây treo từ mảng cảm biến.
BeB00

Tôi nghĩ rằng điều này thực sự khá khả thi, và nếu được thực hiện đúng cách sẽ làm giảm lượng dây dẫn cần thiết.
pjc50

Tôi tự hỏi những giải pháp khác là gì. Quan tâm chia sẻ?
PNDA

1
@ pandalion98 Hmmm ... có lẽ ý tưởng thứ hai không phải là một ý tưởng tồi như vậy. Ồ tốt
Harry Svensson

6

Ba ý tưởng:

1. Thực hiện một số ghép kênh ở phía cung

Thực tế, mạch bạn đã mô tả là một số lượng lớn điện trở thay đổi, mỗi điện áp có một đầu nối với điện áp cung cấp. Bạn muốn đọc tất cả các giá trị điện trở và các phản hồi khác cho đến nay hầu hết được đề xuất các cách tiếp cận để ghép tín hiệu ở phía tương tự.

Nhưng bạn cũng có thể thực hiện một số hoặc tất cả việc ghép kênh này ở phía cung , bằng cách chia 'đường ray' cung cấp thành n phần. Kết nối các bộ miếng cảm biến n mà mỗi bộ có một đường ray cung cấp khác nhau. Bây giờ chỉ cấp năng lượng cho một đường ray cung cấp tại một thời điểm và sử dụng một đầu vào ADC để đọc từng bộ miếng đệm. (Đây là cách mạch đọc bàn phím máy tính thường hoạt động và cách các công tắc được nối dây thường được gọi là 'công tắc chéo'.) Cuối cùng, bạn chỉ có thể sử dụng một ADC, được kết nối với tất cả các 'đường ray', và làm tất cả các bộ ghép kênh bằng cách kết nối nguồn với từng miếng đệm lần lượt.

Điều hấp dẫn duy nhất là tất cả các miếng đệm khác cần được cách ly khỏi đường ray điện, không được kết nối với mặt đất, đó sẽ là trường hợp nếu bạn chỉ sử dụng một đầu ra kỹ thuật số cho mỗi cái. Có một số cách bạn có thể giải quyết vấn đề này bao gồm đấu dây từng miếng thông qua một diode, bóng bán dẫn lưỡng cực hoặc FET hoặc - Tôi không biết điều này có thể được thực hiện nhanh như thế nào trong thực tế nhưng về nguyên tắc - có thể sử dụng chân đầu ra của một vi điều khiển và đặt nó thành đầu ra cao hoặc là đầu vào, khi nó cần có trở kháng tương đối cao.

Độ chính xác của việc đo cảm biến của bạn bằng kỹ thuật này có thể không hoàn hảo so với sử dụng một nguồn điện áp cố định duy nhất và bộ ghép kênh tương tự chất lượng cao, nhưng tôi nghi ngờ nó sẽ đủ tốt, đặc biệt là vì tôi chắc chắn rằng cảm biến áp suất sẽ có một số dung sai điện trở của chúng - bạn có thể cần phải hiệu chỉnh điều này cho mỗi cảm biến bằng cách sử dụng một lực tham chiếu.

2. Sử dụng một số bộ vi điều khiển có nhiều đầu vào ADC

Ví dụ, PICAXE 40X2 có 27 chân có thể được sử dụng làm chất tương tự, vì vậy bạn có thể đáp ứng nhu cầu của mình với 9 trong số chúng. Nó được lập trình bằng ngôn ngữ BASIC đơn giản và có thể hoạt động như một nô lệ i2c - vì vậy bạn có thể đọc 9 chip với một vi điều khiển tiếp theo - hoặc bạn có thể chỉ cần gửi đầu ra từ mỗi chip dưới dạng dữ liệu nối tiếp và đọc nó vào máy tính chủ thông qua bộ chuyển đổi nối tiếp sang USB. Tôi không thể hứa chính xác tốc độ sẽ đi nhanh như thế nào nhưng tôi nghĩ nó sẽ hoạt động tốt nếu bạn đồng hồ PICAXE ở tốc độ tối đa (64 MHz, sử dụng bộ cộng hưởng ngoài 16 MHz). Tất nhiên, nếu bạn hài lòng với lập trình vi điều khiển trong C thì bạn có thể làm điều tương tự với PIC18F45K22 mà PICAXE dựa trên.

3. Sử dụng các đơn vị đầu vào tương tự có sẵn

Cuối cùng, nếu bạn không ngại chi tiền để tiết kiệm thời gian và tính di động không phải là ưu tiên cao - ví dụ: nếu thiết bị được buộc vào giá đỡ thiết bị bằng một số dây cáp dày - bạn có thể mua đủ cao các thiết bị đầu vào tương tự đếm kênh để đo tất cả các cảm biến cùng một lúc. Ví dụ: Máy tính đo lường USB-2633 đọc 64 đầu vào tương tự với giá hơn 1 nghìn đô la Mỹ.


4

Có thể đáng để xem xét một bộ điều hòa tín hiệu lực mạnh (có thể bị động), theo sau là các ADC nhỏ hoặc MCU / ADC với 16 đầu vào ADC của MUX'd trở lên. Đó chỉ là 40 chip. Một ví dụ về chip có thể hoạt động là ADS7961QDBTRQ1 , có chế độ kênh tăng tự động và 16 đầu vào.

Tốc độ dữ liệu tổng thể thậm chí ở tốc độ mẫu 4kHz và 240byte trên mỗi mẫu là khoảng 1MB / s, điều này không quá đáng sợ. Có lẽ một CPU chủ với bus SPI 10 MHz hoặc 20 MHz giao tiếp với các nô lệ. Sử dụng 2 bus SPI nếu băng thông không có. Phần được đề cập ở trên hoạt động ở 20 MHz nên một SPI duy nhất sẽ làm.

Hoặc có thể bạn có thể sử dụng một chip TI duy nhất - DDC2256AZZF , có lấy mẫu đồng thời 64 kênh và 256 đầu vào .. nhưng nó không đặc biệt rẻ (khoảng 350 USD) và đi kèm với một mảng LFBA 14x14mm, vì vậy nó sẽ không làm việc với một bảng mạch trắng.


3

Đối với một ứng dụng giao diện người thời gian thực, tỷ lệ mẫu đa khz có vẻ cao. 50Hz có lẽ là đủ ( https://en.wikipedia.org/wiki/Input_lag#Typical_overall_response_times ). Điều này có nghĩa là bạn phải lấy mẫu tất cả các cảm biến trong <20ms, vì vậy 80us cho mỗi cảm biến. Điều này không quá khó và có thể được quản lý bởi tất cả các bộ vi điều khiển 8 bit thông thường (tức là Atmega88 có thể làm điều đó trong <30us).

Bạn cũng có thể đo lường tất cả các tương tác và sau đó loại bỏ những thứ bạn không cần, xem như đo tất cả chúng không phải là khó khăn về mặt công nghệ. Vấn đề xuất phát từ việc ghép kênh. Tôi có một chút bối rối tại bài viết của bạn, bởi vì nó nói rằng các cảm biến được cấp nguồn 80 tại một thời điểm? Điều thường làm là, như bạn nói, các cột và hàng ghép kênh. Nếu bạn không làm điều đó, bạn sẽ phải đối phó với> 80 dây ra khỏi thiết bị của bạn, đây thực sự không phải là một ý tưởng tuyệt vời. Bạn cần tìm cách chia nó thành một ma trận, để bạn có được 30 dây (vẫn còn rất nhiều). Sau đó, bạn có thể ghép chúng, v.v., nhưng nếu tôi là bạn, tôi sẽ chỉ có nhiều bộ vi điều khiển và nối chúng với chủ. Bạn có thể sử dụng một ADC chuyên dụng thay vì MCU nô lệ, nhưng cá nhân tôi sẽ gắn bó với MCU.

Bạn đã xác định chính xác rằng truyền thông có thể là một vấn đề, nhưng đây không phải là vấn đề lớn, ít nhất là giữa các MCU. Một Atmega ở 8 MHz có thể thực hiện SPI ở mức 2 MHz, vì vậy việc gửi tất cả dữ liệu cảm biến sẽ mất <1ms. Câu hỏi sau đó là bạn muốn làm gì với dữ liệu này sau khi MCU chính có nó.


2
Khi phản ứng với một đầu vào 50 Hz thường được coi là "đủ" trong các thuật ngữ GUI nói chung, nhưng theo kinh nghiệm của riêng tôi với các thẻ âm thanh, chơi nhạc với độ trễ 200 ms hoàn toàn không phải là một trải nghiệm thú vị (nghĩ rằng gây nhiễu giọng nói). Tôi tưởng tượng rằng độ trễ 0-200 ms có thể thay đổi sẽ khiến nhạc cụ hầu như không thể chơi được, vì bất kỳ cảm giác nhịp điệu nào chắc chắn sẽ bị giết chết. Tần số bỏ phiếu khoảng một kHz sẽ là điểm tối thiểu tốt, methinks.
Dampmaskin

1
@Dampmaskin 50 Hz = 20ms, không phải 200ms. 20ms có lẽ hợp lý hơn
Steven Waterman

1
Lỗi của tôi. 20 ms có thể có thể sử dụng được nếu đó là 20 ms, nhưng độ trễ ít hơn luôn tốt hơn. Dù sao, sẽ luôn có độ trễ nhiều hơn trong chuỗi tín hiệu.
Dampmaskin

@Dampmaskin đó chính xác là vấn đề tôi thấy với cách tiếp cận được mô tả. Tôi cần "tiết kiệm" càng nhiều độ trễ càng tốt cho các thành phần sau này trong chuỗi, vì tôi đang cố gắng kết nối một quả mâm xôi pi synth và lý tưởng là tôi muốn duy trì dưới 15-20ms tổng độ trễ. Nếu bộ điều khiển đã chiếm 20ms, thì không còn khoảng trống nào.
d.oelert

@StevenLowes 20ms là quá dài đối với hầu hết các nhạc sĩ. Điều đó thậm chí nằm ngoài khoảng cách Haas đối với một số âm thanh. Cá nhân tôi thực sự không thể xử lý độ trễ hơn 10ms và tôi biết một nghệ sĩ piano đơn giản là không thể tuân thủ độ trễ 6ms.
Todd Wilcox

3

Phương pháp đơn giản nhất của bạn có thể là xây dựng toàn bộ mọi thứ trên một mạch uốn dài với chuỗi 10 chuỗi bộ thu mở tám bit đến các thanh ghi song song được phân phối xuống flex để cấp nguồn cho từng cột của miếng đệm.

Bạn có thể sử dụng chúng để điều khiển từng cột trong tất cả các hàng đồng thời và ghép các dòng trả về chung cho ADC của bạn. Các đường trở lại sẽ cần các pull-up thích hợp để bạn có được điện áp chia điện trở với điện trở nút.

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab

Sau đó, micro điều khiển sẽ gửi một bit zero xuống chuỗi các thanh ghi để chỉ có một cột được cấp nguồn theo thời gian. Các kết nối còn lại sẽ nổi.


1

Cách rõ ràng để làm điều này (vì bạn chỉ cần nhìn thấy một lần chạm trên mỗi chuỗi) là kết nối các phím với một bộ chia điện áp và sau đó đo điện áp trên mỗi chuỗi

Điều đó sẽ cho bạn biết vị trí chạm.

để có được áp lực cảm ứng, đặt một tụ điện từ mặt đất đến từng băn khoăn và đo điện trở AC trên mỗi chuỗi.

mặt trái của phương pháp này là các chuỗi sẽ đáp ứng với các lần chạm cao hơn


2
xin lỗi nếu bạn hiểu lầm nhưng không có cổ guitar thực sự liên quan và cũng không có dây. nó chỉ là một tấm gỗ với ma trận cảm biến áp suất ở trên, mô phỏng kiểu chơi mà bạn sẽ sử dụng trên một tấm ván thực sự. Cảm ơn về đầu vào mặc dù, tôi có thể ghi nhớ điều đó cho các dự án trong tương lai!
d.oelert

bởi các phím tắt và chuỗi ở trên tôi có nghĩa là các dải đồng mà bạn đề cập trong câu hỏi của bạn,
Jasen

ah tôi hiểu ý của bạn bây giờ, xin lỗi đó là dày đặc. Cách tiếp cận này có thể bị phá vỡ, khi các ghi chú được chơi legato, vì sau đó chắc chắn sẽ có nhiều lần chạm trên cùng một chuỗi. chỉ những vấn đề thấp nhất
d.oelert

Ngoài ra, trong khi tôi thực sự thích cách tiếp cận của bạn, thì điều này không trả lời câu hỏi ban đầu của tôi, đó là cách người ta thường xử lý một số lượng lớn các cảm biến analog, cần được xử lý trong thời gian thực.
d.oelert

máy ảnh có số lượng lớn cảm biến analog ...
Jasen

0

Nếu bạn có thể có được một số dây có điện trở đồng đều hợp lý trên mỗi inch trong khoảng từ 100 ohms đến 100K cho chiều dài của đàn guitar, bạn có thể chỉ cần làm cho cổ ra khỏi một vật liệu có độ dẫn vừa phải, với điện trở bề mặt mà giảm với áp lực, và sau đó đo điện trở giữa cổ và mỗi đầu của mỗi chuỗi. Tổng các điện trở, trừ đi điện trở của một chuỗi, sẽ chỉ ra hai lần điện trở của điểm tiếp xúc. Sau khi trừ đi điện trở điểm tiếp xúc từ mỗi điện trở đo được, tỷ lệ của các điện trở còn lại sẽ chỉ ra điểm tiếp xúc trên cổ.

Lưu ý rằng phương pháp này sẽ có thể phát hiện các lần nhấn đồng thời trên cả ba chuỗi, nhưng sẽ không hoạt động nếu một chuỗi có thể được nhấn ở nhiều nơi. Trên một cây đàn guitar, một thiết kế như vậy sẽ ngăn cản việc sử dụng hợp âm barre - một hạn chế khá nghiêm trọng - nhưng các nhạc cụ khác có thể không yêu cầu chạm dây ở nhiều điểm.


" Nếu bạn có thể có được một số dây có điện trở đồng đều hợp lý trên mỗi inch nằm trong khoảng từ 100 ohms đến 100K cho chiều dài của cây đàn guitar " - tôi nghi ngờ rằng anh ấy có thể tìm thấy loại dây đó.
Harry Svensson

Tôi không đồng ý; Tôi có dây điện trở trong văn phòng của tôi là 1717 ohm / m, vì vậy điều đó không khó để tìm thấy. Tôi không nói rằng nó dễ làm việc với nó, vì đây là dây Ø50, nhưng không khó để có được.
MrGerber

@MrGerber: Tôi đã quên rằng điện trở của dây nichrom ở nhiệt độ lạnh thấp hơn nhiều so với nhiệt độ ấm hơn, và vì vậy có lẽ tốt hơn là thay đổi mạch để hoạt động trên một cái gì đó gần 10 ohms, nhưng khái niệm cơ bản có thể hoạt động. Ngoài ra, có cổ là một vật liệu dẫn điện yếu và có dây làm cho kết nối với đó cũng có thể hoạt động.
supercat

Đây không phải là NiCr, mà là FeCrAl và điện trở không thay đổi nhiều so với nhiệt độ. Loại tôi có đang thay đổi khoảng 8% từ 100 C thành 1300 C. Tham khảo: Kanthal D (Và không, tôi không tạo ra E-cigs.)
MrGerber

@MrGerber: Được rồi, điều đó không tệ. Đáp lại bình luận trước đó, tôi đã tra cứu một số bảng và thấy các điện trở tăng theo một độ lớn theo nhiệt độ.
supercat

0

Tôi đã thấy bài đăng này và tôi đã suy nghĩ, nó có thể là có thể với một con chip duy nhất. Tôi muốn nâng cao bạn lấy một số loại bảng vi điều khiển, như bảng bluepill giá rẻ. Nó có ARM M3, với 10 kênh ADC miễn phí sử dụng. Nếu bạn đặt các cột thành 3 cụm 3 chuỗi, hãy kết nối chúng với 9 kênh ADC miễn phí. Sử dụng 21 chân khác để chuyển đổi các hàng chân, với tổng số 63 "phím tắt". Ma trận kết nối, điện trở là các ô điều hòa, các ổ gpio ở mức 3,3v hoặc ở chế độ đầu vào, các chân ADC đo điện áp rơi trên ô điều hòa Bộ vi điều khiển có hai ADC 1 Msps 12 bit có thể được sử dụng với độ trễ pha để hỗ trợ 2Msps, rất nhiều để không bao giờ bỏ lỡ búa hoặc chú ý bất kỳ điều chế nào. Tôi nghĩ bạn có thể sử dụng kết nối USB và làm cho mọi thứ hoạt động giống như bộ điều khiển midi USB. Bạn có thể sử dụng một bộ vi điều khiển lớn hơn cho nhiều đầu vào hơn, nhưng tôi không thấy cách bạn sẽ quản lý khoảng cách 'băn khoăn' với hơn 30 phím tắt, hay nó sẽ giống màn hình cảm ứng hơn?

Tôi không biết chính xác làm thế nào các tấm điều hòa hoạt động, nhưng bạn không thể đặt các điểm chấm dứt nhỏ ở dưới cùng của một tấm lớn hơn và tương quan vị trí và áp lực của ngón tay với điện áp ở nhiều điểm? Sau đó, bạn có thể có thể thoát khỏi với rất ít cảm giác, và hỗ trợ những thứ như uốn cong và rung.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.