Lendo um grande número de sensores analógicos em tempo real


17

Estou tentando construir um controlador tipo MIDI que tem um pescoço como uma guitarra. Nesse pescoço, há uma enorme matriz de sensores de pressão. O controlador emulará 3 strings.

A maneira como isso funciona é: Existem 3 tiras longas de fita de cobre de dupla face (0,5 cm de largura, desde que o pescoço) estão conectadas à energia (provavelmente 3,3V ou 5V, não importa por enquanto). Nestas tiras, há uma camada de Velostat, que altera a resistividade com base na pressão. No topo do velostat haverá outra camada de linhas ou células de fita de cobre, conectada a algo, que cospe uma leitura da tensão através da camada de velostat. Como o pescoço tem cerca de 40 cm de comprimento, haverá pelo menos 80 linhas.

Se você imaginar as três tiras inferiores da fita de cobre como colunas de um gráfico ao longo do pescoço, os sensores serão as células ou as linhas, dependendo do método de medição (pensei que seria possível multiplexar as colunas também, pode haver linhas.) Existem algumas condições especiais que podem facilitar isso: como esse é um controlador de guitarra, nem toda interação precisa ser medida! Apenas o toque mais próximo do corpo do controlador é importante. Também uma resolução de 8 bits deve ser precisa o suficiente. 255 níveis de pressão provavelmente são mais do que o necessário.

Agora os bits difíceis:

A medição precisa ser em tempo real y o suficiente para detectar interferências, etc. (não faz ideia do quanto a taxa de amostragem precisa - estimada em vários kHz para uma boa medição e jogabilidade) e a saída digital do controlador deve ser MIDI (em 3 canais separados - um por sequência) ou um sinal digital que pode ser processado com um Raspberry Pi.

Agora, como meu conhecimento é realmente limitado, não consegui pensar nas ferramentas certas para o trabalho. O que sei, porém, é: é possível. Existe um controlador semelhante, mas diferente, que usa uma técnica muito semelhante (que eu praticamente inverta a engenharia até que notei, que eles têm uma patente e as informações sobre como fazem isso não são tão misteriosas quanto eu pensava), é chamado de ROLI Seaboard.

TL; DR:

  • aproximadamente 240 sensores

  • pode ser separado em grupos de 80 que são alimentados pela mesma linha

  • como é uma aplicação em tempo real, preciso adquirir pressão de todos os sensores à medida que são tocados (algumas condições se aplicam, veja acima)

Agradecemos antecipadamente, eu sei que é muito para ler. Sou grato por qualquer sugestão e ficaria muito feliz se você pudesse me ajudar a realizar a terrível bagunça que me propus a produzir!

Coisas em que pensei até agora:

Multiplexação de linhas e colunas, lendo cada célula com um ADC MCP3008 ou superior e encadeando (cadeia daisy ou árvore) ATmegas, que apenas empurram a menor interação em termos de posição para o sinal final, mas, pelos meus cálculos, isso pode ser prejudicado por a sobrecarga de comunicação. Também um modelo anterior incluía potenciômetros de fita, que eu descartei, porque o design era ruim (várias tentativas, não era legal o suficiente).

EDIT / UPDATE:

Obrigado pelas boas sugestões até agora! Graças a eles, agora sou capaz de expressar meu problema com muito mais clareza:

Eu tenho uma matriz de 80 linhas * 3 colunas de sensores de pressão. Quando um humano está interagindo com a matriz do sensor, vários sensores próximos captam o toque, mas apenas ao longo de uma coluna. As colunas são separadas mecanicamente. Os sensores têm uma resistência entre 100 Ohm e 1 kOhm. Todos esses sensores precisam ser lidos com profundidade de 8 bits, processados ​​e os resultados precisam ser enviados com uma taxa de pelo menos 1 kHz. Portanto, uma única leitura / processamento precisa levar menos de um milissegundo. A saída final por coluna precisa ser: 4 bytes para um float32 e 1 byte para um uint8. O float32 indicará a posição média da primeira interação ao longo da coluna. Uma interação é definida como um cluster consecutivo de sensores com uma pressão acima de um determinado limite. É aqui que o processamento entra na mistura: a coluna será deslocada para baixo até que uma leitura ultrapasse um limite. Isso contará como o início de uma interação. A pressão e a posição de cada sensor são memorizadas até o primeiro sensor, que fica abaixo do limite com um máximo de (provavelmente) 4 sensores consecutivos. De todos os sensores da interação gravada, apenas dois sensores serão processados ​​- aquele que lê a pressão mais alta (menor resistência) e o mais alto diretamente acima ou abaixo dela. A posição do ponto flutuante é calculada calculando a média das duas posições do sensor ponderadas por suas pressões. A pressão geral da interação será apenas a adição de ambas as pressões presas entre 0 e 255 (adicione ambas as pressões da unidade8 em um uint16 e divida por 2 sem arredondamento, descarte os bits desnecessários - isso deve ser rápido). Isso precisa acontecer para todas as colunas. O resultado do tamanho de 15 bytes será enviado pelo SPI para um computador pequeno (Raspberry Pi B3) que atua como sintetizador. Eu não estou definido no método de transmissão. Se o SPI não for a ferramenta certa para o trabalho, estou disposto a adotar qualquer método de comunicação que um Raspberry Pi possa manipular. Como esse é um aplicativo interativo musical, a latência é crucial.

Minhas perguntas exatas são: Isso pode ser resolvido com um único microcontrolador sem gastar muito? Não posso me dar ao luxo de comprar várias centenas de dólares em ICs para um projeto de hobby. Qual hardware você recomendaria? Existem advertências não óbvias que eu preciso tomar cuidado?

A abordagem que deduzi das respostas até agora era alimentar cada coluna individualmente e, em seguida, ler as linhas com 5 ADCs de 16 canais (ADS7961) conectados a um Arduino sobre SPI. Estou preocupado que essa possa não ser a abordagem mais fácil / barata ou não seja rápida o suficiente para atingir uma taxa de> 1 kHz.

Isenção de responsabilidade: normalmente sou um químico teórico e um péssimo amador quando se trata de engenharia elétrica, tudo o que sei é autodidata e sem formação profissional (o que, por sua vez, é a razão pela qual estou buscando ajuda de pessoas mais conhecedoras). Eu sei o meu caminho em torno de software embora. Qualquer coisa relacionada a software, vou descobrir com tempo suficiente. Além disso, eu sou alemão, então desculpe falhas gramaticais ocasionais.


apenas uma idéia .... pode haver uma melhoria na velocidade se os muxes forem intercalados .... mux0 varreria o traste 0,8,16,24, etc ... mux1 - 1,9,17,25 ... até mux7 (ou superior) ... dessa forma primeira 8 trastes são lidos ao mesmo tempo por 8 muxes ... então no próximo 8 trastes ... etc
jsotola

2
O termo "tempo real" pode não ser exatamente o correto. Isso significa que os dados estão deixando o sistema na mesma taxa em que entram (uma amostra entra, uma amostra sai). Mas não diz nada sobre a latência - o tempo necessário para processá-la. Para uso musical, você precisa da latência total (incluindo o tempo para sintetizar / reproduzir o som final) seja inferior a 10-15 ms, de preferência inferior a 5.
Schizomorph

Qual é a variação na resistência entre pressionado e não pressionado?
Trevor_G

entre 10 e 1000 ohm (aproximadamente)
d.oelert

Os requisitos são meio que confusos com a implementação proposta. Você já pode ter respondido a estas perguntas. O artista será capaz de executar um slide, de modo que o instrumento precise detectar uma faixa de posições entre os trastes adjacentes? Você precisa ser capaz de suportar um instrumento sem trastes ou os trastes podem fazer parte da solução?
Wayne Conrad

Respostas:


7

Dependendo da sua faixa de preço, considere o uso de um FPGA entre o Raspberry Pi e os ADCs, como o DE0-Nano Board , que possui um bom suporte como um board de desenvolvimento FPGA introdutório. Esta solução tem a vantagem de permitir que você escreva códigos que cronometrem vários / muitos ADCs ao mesmo tempo e formate seus dados de uma maneira que seja apresentável ao Raspberry Pi.

Você mencionou que estava considerando o MCP3008. Esse chip é SPI, portanto, você pode conectar alguns dispositivos no mesmo barramento com pinos CS diferentes. Suponha que você conectou três chips a um barramento, de modo a fornecer 24 canais ADC por 6 pinos (três linhas de dados e três linhas CS). Isso significa 240 canais para 60 pinos, o que está facilmente dentro dos recursos do FPGA.

Se você executar a linha do relógio MCP3008 em sua frequência máxima de 2 MHz, seriam necessários (15 relógios / canal) * (8 canais / chip) * (3 chips / barramento) * (1/2000000 segundos / relógio) = 0,18 ms para leia todos os 240 sensores, correspondendo à taxa de amostragem de 5,56kHz.


soa como uma abordagem incrivelmente legal! Definitivamente vou olhar para isso. Porém, eu não tenho experiência com FPGAs, então isso pode ser demais para eu lidar ... por outro lado, eu sempre
procurei

Você pode usar um chip ARM com várias linhas SPI. Dessa forma, você evita o custo do FPGA e obtém o triplo da taxa de amostragem (se você tiver 3 controladores SPI). Lembre-se de que você precisa gerenciar o atraso devido ao processamento interno (mover as leituras dentro do MCU para algum lugar onde o Pi possa chegar) e as comunicações MCU-> Pi.
Ronan Paixão

A propósito, o PI também possui um controlador SPI.
Ronan Paixão

A idéia por trás do FPGA é que você pode criar, digamos, 10 controladores SPI separados (usando o número do exemplo que forneci) e operá-los facilmente perfeitamente em paralelo. E sim, o Pi tem um controlador SPI, mas não é nem tão rápido ou paralelo quanto um FPGA permitiria criar.
Billy Kalfus

Se você pudesse encontrar um FPGA ou CPLD com entradas sem buffer, poderá criar um MUX analógico 80: 1. É um tiro no escuro, mas pode funcionar.
Caleb Reister

10

A resposta óbvia é muxing, isso significa que você faz o caminho elétrico dinamicamente. Então, basta percorrer toda a matriz, uma de cada vez, ou tantas entradas ADC (Conversor Analógico para Digital) quanto você tiver.

Se você possui 3 ADCs, pode ler uma linha de cada vez, alterar as entradas para mux e voilla, agora está lendo a segunda linha e continuar. O problema com essa configuração é que você tem 80 linhas e não há nenhum mux 80: 1 (oitenta entradas para uma entrada) que eu saiba. Mas existem 16: 1 muxes que você pode montar para obter 16 * 5 = 80 entradas.

Seria algo como isto:

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

Os 4 sinais de entrada dos 16: 1 muxes podem ser conectados juntos.

Então, no final, você tem um byte com sinais de controle neste padrão:

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

Isso significa que você precisará de 5 × 16: 1 muxes e um 8: 1 mux = 6 ICs,

Multiplique isso por 3, pois você pode ler uma linha de cada vez.

Isso significa que você terá 18 ICs, 7 sinais de controle. Você pode reduzir o número de ICs se aumentar o número de entradas analógicas. São 18 com apenas 3 entradas analógicas.

Se você usou 240/16 = 15 ICs, obteve 15 saídas analógicas dos muxes 15 × 16: 1. Em seguida, você pode cascatear com um mux 16: 1 ou 16: 8. No final, seriam 16 ICs se você o "otimizasse" com 16: 1 muxes. Mas isso significaria que sua solução de software não seria tão ... elegante como acima, seria cruzada, módulo e outras coisas, mas, ei, você economiza 2 ICs.

10.8ms=1.25kHz

É possível, mas é não um bom design.

Vamos resolver isso de outra maneira ... mais eficiente em termos de espaço e dinheiro.

* 20 minutos depois * Hmmm ... todas as soluções que eu encontrei são muito difíceis de configurar e / ou requerem alguma calibração avançada ...

Bem, então eu assumo que seu design é apropriado para sua tarefa em mãos.

Boa sorte.


Eu me pergunto quais são essas outras soluções. Cuidado em compartilhar? - pandalion98

O OP quer medir a posição e a pressão. São dois parâmetros. Isso significa que precisamos agrupar essas informações dentro de um sinal de tensão para que possamos lê-las e decifrá-las. Ou precisamos empacotá-lo em alguma outra unidade, como ohm, indutância, capacitância.

Aqui estão algumas das minhas ideias, nas quais penso apenas em uma coluna. Basta multiplicar a idéia por 3 e você terá toda a solução para um violão de 3 colunas.

Primeira ideia:

Use dois fios paralelos (baixa resistência) que vão da parte inferior do violão até o braço do violão. Conecte o terra a um dos fios na parte inferior do violão. Faça um sistema de medição LR e meça a indutância e a resistência do outro fio, também na parte inferior.

Ao tocar nos dois fios com um dedo, você conectará os dois fios e haverá alguns indutância aqui. Quanto mais alto o violão você tocar, mais longo será o circuito e mais indutância você medirá. Quanto mais você pressiona, maior a área de superfície entre os dois fios e menor a resistência.

Não precisa ser de dois "fios", pode ser duas fitas condutoras ou algo mais.

Por que eu não compartilhei isso antes: Para que isso seja confiável, você precisa calibrar os sensores de cada indivíduo, porque todo mundo tem uma quantidade diferente de resistência em sua pele. Sempre que jogar, você suará e, portanto, reduzirá ainda mais a resistência, portanto precisará compensar isso. Todo mundo sua de maneira diferente, então isso também precisará ser calibrado por pessoa.

Então a indutância => posicional do dedo. A resistência => quão duro você estava pressionando.

O desvio dos valores que você medirá será no nano Ω e nano H, isto significa que você precisará de algum conhecimento adequado sobre CMRR e SNR. Caso contrário, tudo o que você verá será a tensão da rede, assumindo que isso será feito em ambientes fechados. Ou algumas outras frequências do wifi ou lâmpadas ou outras fontes de ruído. Portanto, talvez seja necessário um filtro digital adequado. E ... provavelmente já está fora do escopo das capacidades do OP e do esforço mental aceitável. Portanto, essa idéia é jogada fora.

Segunda ideia:

Faça uma superfície condutora plana na guitarra conectada ao chão.

Use um fio ou fita condutora ou apenas um condutor plano. Coloque um pouco de tinta não condutora sobre ela ou alguma fita não condutora regular sobre ela.

Amarre-o na guitarra, da parte inferior ao braço da guitarra. Conecte o fio na parte inferior do violão às altas frequências, na faixa de centenas de MHz. Agora você começará a receber reflexões visíveis. Porque tecnicamente você tem uma .... linha de transmissão ruim, onde apenas um lado está protegido.

Então, você enviará um pulso de onda quadrada curta e medirá quanto tempo leva para ele voltar devido à reflexão devido ao fato de seu dedo estar em cima do fio isolado. E então você mede a amplitude do pico refletido na parte inferior do violão. Então o tempo de viagem => posicional do dedo. A amplitude da reflexão => quão duro você estava pressionando.

Esta não é a coisa mais fácil de configurar ... se você não sabe o que está fazendo. Então, novamente, isso pode ser um esforço demais para o OP enfrentar. Portanto, essa idéia é jogada fora.


Seria algo como isto:

insira a descrição da imagem aqui

Eu assumi a impedância característica como 150 Ω, em outras palavras, uma linha de transmissão muito ruim. Na realidade, pode ser pior, não sei, nunca fiz isso.

Aqui está o link , caso alguém queira mexer.

Uma das partes mais difíceis será combinar os pontos finais com alguma resistência; para isso, pode ser necessário um osciloscópio ou outro instrumento caro.

A outra parte difícil será realmente medir o TOF (tempo de voo), existem alguns CIs por aí, mas eles não são baratos .. mas você sempre pode criar uma fonte de corrente constante e encher um pequeno capacitor e depois apenas leia a voltagem.

A idéia aqui é que, quando um dedo se aproxima do fio, ele se torna parte do circuito e atua como um capacitor. Quanto mais próximo o dedo estiver, mais capacitivo. É por isso que a resistência no ponto do dedo diminui.

https://en.wikipedia.org/wiki/Transmission_line role um pouco para baixo e você verá que o parâmetro capacitivo faz parte do denominador.

Sempre que um ponto no fio for incompatível, haverá uma reflexão e você poderá ler isso na "saída" de onde o sinal é originário. Se não houver reflexão em nenhum lugar, seu sinal será encerrado em um dos pontos finais.

Quanto mais você pressionar, mais área do seu dedo ficará achatada => mais capacitância devido à área. Além disso, qualquer material não condutor que você tenha entre o fio e o dedo será espremido levemente para aumentar ainda mais a capacitância.

Terceira ideia:

Coloque um theremin dentro do violão e meça a frequência e a amplitude. Não sei exatamente o que um theremin produzirá, mas certamente algo pode ser usado.

Neste ponto, estou ficando sem ideias e digo que passei 20 minutos. Quando na realidade eu talvez passei 10. Oh, bem. Agora eu certamente passei mais 10 minutos para escrever isso, então tudo se resume.


1
Eu sinto que a depuração envolvida na conexão de 15 ICs a 3 conjuntos de 80 sensores pode ser ... significativa. Além disso, certamente essa coisa nunca será robusta o suficiente para usar, devido às centenas de fios pendurados no conjunto de sensores.
BeB00

Eu acho que isso é realmente viável e, se feito corretamente, reduz a quantidade de fiação que seria necessária.
Pjc50

Eu me pergunto quais são essas outras soluções. Cuidado em compartilhar?
PNDA

1
@ pandalion98 Hmmm ... talvez a segunda ideia não tenha sido tão ruim assim. Ah bem.
Harry Svensson

6

Três idéias:

1. Faça multiplexação no lado da fonte

Efetivamente, o circuito que você descreveu é um grande número de resistências variáveis, cada uma com uma extremidade comum a uma tensão de alimentação. Você deseja ler todos os valores de resistência e as outras respostas até agora sugeriram principalmente abordagens para multiplexar o sinal no lado analógico.

Mas você também pode fazer parte ou toda essa multiplexação no lado da oferta , dividindo o 'trilho' da oferta em n seções. Conecte conjuntos de n blocos de sensores, cada um com um trilho de suprimento diferente. Agora energize apenas um trilho de suprimento por vez e use uma entrada ADC para ler cada conjunto de blocos. (É assim que o circuito que lê um teclado de computador geralmente funciona, e a maneira como os comutadores são conectados é geralmente chamada de 'comutador de ponto cruzado'.) Por fim, você pode usar apenas um único ADC, conectado a todos os 'trilhos', e toda a multiplexação conectando energia a cada bloco por vez.

O único problema é que todas as outras almofadas precisam estar isoladas do trilho de força, não conectadas ao terra, o que seria o caso se você usasse apenas uma saída digital para cada uma. Existem várias maneiras de resolver isso, incluindo a fiação de cada bloco através de um diodo, transistor bipolar ou FET, ou - eu não sei o quão rápido isso pode ser feito na prática, mas é possível em princípio - usando o pino de entrada e saída de um microcontrolador e configurá-lo para produzir alta ou ser uma entrada, quando deve ter uma impedância relativamente alta.

A precisão de medir seus sensores por essa técnica pode não ser perfeita em comparação com o uso de uma única fonte de tensão fixa e multiplexadores analógicos de alta qualidade, mas suspeito que seja bom o suficiente, especialmente porque tenho certeza de que os sensores de pressão terão alguma tolerância. sua resistência - você pode precisar calibrar isso para cada sensor usando uma força de referência de qualquer maneira.

2. Use alguns microcontroladores com muitas entradas ADC

Por exemplo, o PICAXE 40X2 possui 27 pinos que podem ser usados ​​como entrada analógica, para que você possa atender às suas necessidades com 9 deles. Ele é programado em uma linguagem BASIC simples e pode funcionar como um escravo i2c - para que você possa ler os 9 chips com mais um microcontrolador - ou você pode enviar a saída de cada chip como dados seriais e lê-la no computador host via conversores seriais para USB. Não posso prometer exatamente o quão rápido isso vai acontecer, mas acho que deve funcionar bem se você registrar o PICAXE na velocidade máxima (de 64 MHz, usando um ressonador externo de 16 MHz). Obviamente, se você estiver satisfeito com a programação do microcontrolador em C, poderá fazer o mesmo com o PIC18F45K22 no qual o PICAXE se baseia.

3. Use unidades de entrada analógica prontas para uso

Por fim, se você não se importa em gastar dinheiro para economizar tempo, e a portabilidade não é uma alta prioridade - por exemplo, se não há problema em o instrumento ser preso a um rack de equipamento por alguns cabos grossos - você pode comprar apenas o suficiente. dispositivos de entrada analógica com contagem de canais para medir todos os sensores de uma só vez. Por exemplo, o Measurement Computing USB-2633 lê 64 entradas analógicas por pouco mais de US $ 1k.


4

Pode valer a pena considerar um condicionamento de sinal de força bruta (talvez passivo) seguido por ADCs pequenos ou MCU / ADC com 16 ou mais entradas ADC MUX cada. São apenas 40 fichas. Um exemplo de chip que pode funcionar é o ADS7961QDBTRQ1 , que possui um modo de canal de incremento automático e 16 entradas.

A taxa geral de dados, mesmo na taxa de amostragem de 4kHz e 240 bytes por amostra, é de cerca de 1 MB / s, o que não é muito assustador. Talvez uma CPU mestre com um barramento SPI de 10 MHz ou 20 MHz se comunicando com os escravos. Use 2 barramentos SPI se a largura de banda não estiver lá. A parte mencionada acima funciona a 20 MHz, portanto, um único SPI funcionará.

Ou talvez você possa usar um único chip de TI - o DDC2256AZZF , que possui amostragem simultânea de 64 canais e 256 entradas. trabalhe com uma placa de ensaio de painel branco.


3

Para um aplicativo de interface humana em tempo real, uma taxa de amostragem geral de multi-khz parece alta. Provavelmente é suficiente 50Hz ( https://en.wikipedia.org/wiki/Input_lag#Typical_overall_response_times ). Isso significa que você precisa amostrar todos os sensores em <20ms, então 80us por sensor. Isso não é muito difícil e pode ser gerenciado por basicamente todos os microcontroladores normais de 8 bits (ou seja, o Atmega88 pode fazê-lo em <30us).

Você também pode medir todas as interações e depois descartar as que não precisa, pois medir todas elas não é tecnologicamente difícil. O problema vem da multiplexação. Estou um pouco confuso com o seu post, porque diz que os sensores são alimentados 80 por vez? O comum é fazer, como você diz, colunas e linhas multiplexadas. Se você não fizer isso, terá que lidar com mais de 80 fios saindo do seu dispositivo, o que não é realmente uma boa ideia. Você precisa encontrar uma maneira de dividi-lo em uma matriz, para obter 30 fios (o que ainda é muito). Você poderia então multiplexá-los, etc., mas se eu fosse você, teria apenas vários microcontroladores e os conectaria a um mestre. Você poderia usar um ADC dedicado em vez dos MCUs escravos, mas eu pessoalmente ficaria com os MCUs.

Você identificou corretamente que as comunicações podem ser um problema, mas isso não é grande coisa, pelo menos entre as MCUs. Um Atmega a 8MHz pode executar SPI a 2MHz, portanto, o envio de todos os dados do sensor levará <1ms. A questão é o que você deseja fazer com esses dados depois que o MCU principal os tiver.


2
Ao reagir a uma única entrada, 50 Hz é geralmente considerado "suficiente" em termos gerais da GUI, mas, por minha própria experiência com placas de som, tocar música com uma latência de 200 ms não é uma experiência agradável (pense em interferência de voz). Imagino que uma latência variável de 0 a 200 ms tornaria o instrumento praticamente impossível de reproduzir, pois qualquer senso de ritmo certamente seria morto. Uma frequência de polling de cerca de um kHz seria um bom ponto de partida mínimo, parece.
Dampmaskin

1
@Dampmaskin 50 Hz = 20ms, não 200ms. 20ms é provavelmente mais razoável
Steven Waterman

1
Foi mal. Provavelmente, 20 ms podem ser úteis se forem 20 ms, mas menos latência é sempre melhor. Sempre haverá mais latência posteriormente na cadeia de sinal.
Dampmaskin

@ Dammaskin isso é exatamente o problema que vejo com a abordagem descrita. eu preciso "salvar" o máximo de latência possível para os componentes posteriores da cadeia, pois estou tentando conectar um sintetizador de raspberry pi e, idealmente, gostaria de ficar abaixo de 15 a 20ms da latência total. Se o controlador já demorar 20ms, não resta espaço para sobra.
precisa

@StevenLowes 20ms é muito longo para a maioria dos músicos. Isso é mesmo fora da distância Haas para alguns sons. Pessoalmente, não consigo lidar com mais de 10ms de latência e conheço um pianista que simplesmente não pode suportar 6ms de latência.
Todd Wilcox

3

Seu método mais simples pode ser construir tudo em um circuito flexível longo com uma cadeia de 10 coletores abertos de oito bits em série para registros paralelos distribuídos pelo cabo flexível para alimentar cada coluna de blocos individualmente.

Você pode usá-los para conduzir cada coluna em todas as linhas simultaneamente e multiplexar as linhas de retorno comuns ao seu ADC. As linhas de retorno precisariam de extensões apropriadas para obter uma tensão do divisor do resistor com a resistência do botão.

esquemático

simular este circuito - esquemático criado usando o CircuitLab

O micro controlador enviaria um bit zero zero na cadeia de registros para que apenas uma coluna fosse alimentada por vez. As conexões restantes estariam flutuando.


1

a maneira óbvia de fazer isso (visto que você só precisa ver um único toque em cada corda) é conectar os trastes a um divisor de tensão e depois medir a tensão em cada corda

isso informará o local de toque.

para obter pressão de toque, coloque um capacitor do chão para cada traste e meça a resistência CA em cada corda.

O lado negativo dessa abordagem é que as cordas responderão a toques mais altos


2
desculpe se você entendeu errado, mas não há um braço de guitarra envolvido e nem cordas. é apenas uma placa de madeira com uma matriz de sensores de pressão na parte superior, que simula o estilo de jogo que você usaria em uma placa com trastes real. Obrigado pela contribuição, porém, posso ter isso em mente para projetos futuros!
precisa saber é o seguinte

por trastes e cordas acima Quero dizer as tiras de cobre que você menciona na sua pergunta,
Jasen

ah entendo o que você quer dizer agora, desculpe, isso foi denso. essa abordagem pode ser interrompida quando as notas são tocadas legato, porque, inevitavelmente, haverá vários toques na mesma corda.
Porém

Embora eu realmente goste da sua abordagem, isso não responde à minha pergunta original, que é como se costuma lidar com um grande número de sensores analógicos, que precisam ser processados ​​em tempo real.
precisa

câmeras têm um grande número de sensores analógicos ...
Jasen

0

Se você conseguir um fio com uma resistência por polegada razoavelmente uniforme que esteja entre 100 ohms e 100K para o comprimento do violão, você poderá simplesmente fazer o pescoço de um material que seja moderadamente condutor, com uma resistência superficial que diminui com a pressão e mede a resistência entre o pescoço e cada extremidade de cada corda. A soma das resistências, menos a resistência de uma corda, indicaria o dobro da resistência do ponto de contato. Após subtrair a resistência do ponto de contato de cada resistência medida, a proporção de resistências restantes indicaria o ponto de contato no pescoço.

Observe que essa abordagem seria capaz de detectar pressões simultâneas nas três cadeias, mas não funcionaria se uma cadeia pudesse ser pressionada em vários locais. Em um violão, esse design impediria o uso de acordes de barra - uma limitação bastante severa - mas outros instrumentos podem não exigir o toque de cordas em vários pontos.


" Se você conseguir um fio com uma resistência por polegada razoavelmente uniforme, algo entre 100 ohms e 100K para o comprimento do violão " - duvido que ele possa encontrar esse tipo de fio.
Harry Svensson

Discordo; Eu tenho um fio de resistência no meu escritório de 1717 ohm / m, de modo que não deve ser difícil de encontrar. Não estou dizendo que é fácil trabalhar, já que esse é um fio de Ø50 µm, mas não é difícil de adquirir.
precisa saber é o seguinte

@ MrGerber: eu tinha esquecido que a resistência do fio de nicromo é muito menor em temperaturas mais baixas do que as mais quentes, e provavelmente seria melhor mudar o circuito para trabalhar em algo mais próximo de 10 ohms, mas o conceito básico poderia ser trabalhado. Como alternativa, o pescoço é um material pouco condutor e as cordas fazem a conexão com o que também pode funcionar.
supercat

Isso não é NiCr, mas FeCrAl, e a resistência não está mudando muito com a temperatura. O tipo I tem está mudando cerca de 8% a partir de 100 C a 1300 C. Ref: Kanthal D (E não, não estou fazendo E-cigarros.)
MrGerber

@ MrGerber: Ok, isso não é ruim. Em resposta ao comentário anterior, procurei algumas tabelas e vi resistências que estavam aumentando em uma ordem de magnitude com a temperatura.
supercat

0

Eu vi esse post e estava pensando, seria possível com um único chip. Eu suponho que você pegue algum tipo de placa de microcontrolador, como a placa barata de bluepill. Possui um ARM M3, com 10 canais ADC gratuitos para uso. Se você colocar as colunas em 3 grupos de 3 seqüências, conecte-os a 9 canais ADC gratuitos. Use os outros 21 pinos para alternar as linhas de pinos, para um total de 63 'trastes'. matriz de conexão, os resistores são as células velostat, o gpio aciona a 3,3v ou está no modo de entrada, os pinos do ADC medem a queda de tensão na célula velostat O microcontrolador possui dois ADCs de 1 Msps e 12 bits que podem ser usados ​​com atraso de fase para suportar 2Msps, o que deve ser suficiente para nunca perder um martelo ou observar qualquer modulação. Eu acho que você pode usar a conexão USB e fazer a coisa funcionar como um controlador midi USB. Você poderia usar um microcontrolador maior para obter mais entradas, mas não vejo como você gerenciará o espaçamento 'fret' com mais de 30 trastes, ou será mais como uma tela de toque?

Não sei exatamente como essas folhas de velostat funcionam, mas você não pode colocar pequenos pontos de terminação no fundo de uma folha maior e correlacionar a localização e a pressão do dedo com a tensão em vários pontos? Então você provavelmente conseguirá muito menos sensibilidade e apoiará coisas como curvas e vibrato.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.