Como fazer um teclado - Matrix
Postado por : Komar aka Michał Trybus; Tradução Inglês-Russo : firerockOriginal : blog.komar.be/how-to-make-a-keyboard-the-matrixEste é o primeiro post de uma série de teclados; Espero que ele não seja o último. Gostaria de terminar um curso de fabricação de teclado do zero. Hoje vou falar sobre matrizes de entrada e saída digitais e teclados. Arme-se com o conhecimento básico da escola no campo da eletrônica - e vamos lá.Por que uma matriz?
E como vamos fazer a matriz? E o mais importante - por que é necessário? Bem, isso se deve principalmente às limitações físicas dos microcontroladores nos quais os teclados são construídos. O fato é que, com um aumento no número de saídas para microcontroladores e circuitos lógicos programáveis, seu tamanho também aumenta, o que, por sua vez, acarreta um aumento no consumo de energia, nas capacidades, mas o mais importante, nos preços. Como resultado, você pode escolher um chip barato com um desempenho pequeno (que combina bem com você), mas com um pequeno número de entradas e saídas, ou um chip mais poderoso, cujo desempenho, no entanto, excede em muito os seus requisitos. Mas apenas este chip poderoso terá saídas suficientes para conectar cada botão do teclado.Ao longo de décadas, a prática se desenvolveu em eletrônica, com a ajuda de vários truques para expandir artificialmente os recursos de comunicação internos de processadores e controladores. Um desses métodos, adequado para contatos mecânicos (botões), é a criação de uma matriz. Para entender como funciona, é necessário algum conhecimento básico. Antes de continuarmos, atualize a lei de Ohm .Pouco de teoria
Para entender como a eletrônica digital funciona, você precisa aprender dois princípios básicos.O princípio 1 diz que o processo de comunicação dentro de um circuito não é transmitir ou receber algo lá. Para garantir a comunicação entre os dois dispositivos, basta conectar as descobertas entre si com material eletricamente condutor. Depois disso, assume-se que o estado do material (tensão e corrente) nas duas extremidades será o mesmo. Na realidade, é claro, não é assim, mas para comunicações lentas e condutores curtos, nossa suposição funciona bem. Acontece que enviar e receber informações é, na verdade, seu compartilhamento.Do lado do transmissor, você simplesmente altera o estado elétrico do condutor (injetando corrente direta nele, alterando seu potencial), esperando que o receptor possa detectar essa alteração e entendê-la corretamente.Também resulta deste princípio que não há relação entre a direção da comunicação e a direção da corrente elétrica. Muitas pessoas assumem erradamente o contrário, e isso as impede de entender como a eletrônica funciona.Se você deseja enviar um nível lógico de "0", normalmente, para isso, a tensão na saída do transmissor é reduzida para 0 V, e a corrente começa a fluir do receptor para o transmissor, para que o receptor possa determinar que o nível lógico corresponde a "0". (Enquanto a direção reversa da corrente significaria que em algum ponto do circuito existe um potencial negativo - e isso, em regra, não ocorre na eletrônica digital.) Por outro lado, para transmitir o nível lógico “1”, aplica-se uma tensão igual à tensão de alimentação, e como essa é geralmente a tensão mais alta do circuito, não resta mais nada para a corrente elétrica do que fluir do transmissor para o receptor.Princípio número doisreside no fato de que é impossível determinar o estado do condutor sem alterar esse estado. Não importa se você vai medir tensão ou corrente - em qualquer caso, para isso, é necessário que os elétrons fluam através do seu dispositivo de medição. O fluxo de elétrons - essa é a corrente elétrica e, uma vez que flui, significa que no nó ao qual você está conectado para medição, as correntes e a tensão já mudaram (consulte as leis de Kirchhoff ). Daqui resulta que, se você precisar "transmitir" informações alterando o estado da saída conectada eletricamente a outra saída, será necessário manter esse estado, o que significa que você deve cumprir todos os requisitos impostos pelo receptor.Botão
Um botão mecânico (e, neste contexto, a palavra "mecânico" não está conectado à frase "teclado mecânico") é apenas um par de contatos metálicos que, em contato, conectam eletricamente os dois terminais. Obviamente, existem outros tipos de comutadores que são estruturalmente mais complexos e têm mais saídas, mas eles não são interessantes para nós porque não são usados em teclados.
Botão Cherry MX. Fonte da imagem: Deskthority wikiBem, e como vamos conectar o botão à entrada do microcontrolador? Fundamentalmente, qualquer entrada pode operar com dois níveis lógicos possíveis: "0" e "1". É prática comum aceitar tensões próximas a 0 V como zero lógico e tensões próximas a uma tensão de alimentação (normalmente 5 V ou 3,3 V) como uma unidade lógica. Mas o problema é que o botão mecânico sozinho não pode controlar a tensão. Ele controla a corrente - ou seja, se conectarmos dois nós com potencial elétrico diferente através do botão, a corrente entre esses nós fluirá se e somente quando o botão for pressionado.Mas se adicionarmos um resistor, podemos converter muito facilmente a corrente em tensão.
Botão de resistência do pull-upDê uma olhada neste diagrama. Quando o botão não é pressionado (o circuito está quebrado), a corrente não flui através dele; portanto, a tensão no nó "A" estará próxima da tensão de alimentação VCC (de fato, menor que VCC pelo valor da queda de tensão no resistor igual a R • I). Quando o botão é pressionado (circuito fechado), a corrente flui através do resistor para o terra. Dado que a resistência do botão fechado é muito pequena (da ordem de centenas de milionésimos), a tensão no nó "A" será próxima de "0".Nesta configuração, o resistor é chamado de pull-up porque "puxa a tensão" para o nível VCC. E sem conectar à fonte de alimentação através do resistor, não haveria tensão no nó "A" (neste caso, a saída do microcircuito é chamada de "suspensa no ar" ou em um estado de alta impedância).Deve-se notar que dentro dos microcontroladores mais modernos já existem resistores pull-up que podem ser rapidamente conectados ou desconectados usando o programa. Portanto, a principal maneira de conectar o botão ao microcontrolador é a seguinte: um pino do botão está na entrada do microcontrolador, o outro pino do botão está no chão. Nesse caso, se o botão não for pressionado, "1" será enviado ao microcontrolador e, se for pressionado, "0". Talvez isso contradiga a intuição, mas esse método de conexão é o mais popular.Observe que, se deixarmos um dos pinos do botão pendurado no ar, ou seja, se não o conectarmos em nenhum lugar, esse botão não funcionará: se você não pressioná-lo, não afetará o estado elétrico da saída do microcontrolador. Ainda usaremos essa propriedade quando compormos a matriz.Princípio da matriz
O princípio básico da matriz do teclado é a capacidade de conectar mais de um botão a uma entrada do microcontrolador.Usando transistores ou saídas de microcontrolador corretamente configuradas , podemos fazer com que os botões se conectem ao solo, um de cada vez, enquanto o restante fica no ar. As conclusões restantes de cada um dos botões são combinadas em um nó e conectadas à entradamicrocontrolador. Abaixei o resistor de pull-up, pois sabemos que ele já está presente dentro do microcontrolador, em seu estágio de entrada. Nos revezamos "ligando" cada botão, conectando seu número de saída 1 ao terra através da saída correspondente do microcontrolador, após o qual podemos ler o estado do botão na entrada removendo a tensão do seu número de saída 2. Outros botões conectados à mesma entrada não afetam em sua condição, porque suas conclusões número 1 estão atualmente pairando no ar. O diagrama a seguir ilustra essa ideia.
Muitos botões, uma entrada (nó "A")"A" é a única entrada do microcontrolador e "C1" .. "Cn" são suas saídas. Em uma das saídas é definido um "0" lógico, ou seja, dentro do microcircuito, esse contato é de alguma forma conectado ao terra - portanto, a corrente sempre flui para esse contato (de acordo com o primeiro princípio básico). Agora, quando o botão conectado a esta saída for pressionado, a entrada "A" será imediatamente "pressionada" no chão e será ajustada para "0". Pressionar os outros botões não mudará nada, porque suas saídas de terra não estão conectadas em nenhum lugar no momento. Quando precisamos pesquisar o próximo botão, removemos o “0” lógico da saída atual e ajustamos esse nível para a próxima saída, para que a qualquer momento apenas uma das saídas do microcontrolador seja ativada.Essa configuração (quando a saída é conectada ao terra ou desativada) é chamada de saída de dreno aberto (OS) (historicamente, com um coletor aberto (OK)). Aqui fiz algumas simplificações - na verdade, um contato não pode ser completamente desconectado do circuito, a menos que seja fisicamente cortado dele. Mas para E / S digital simples, essa simplificação é bastante adequada. A maioria dos microcontroladores fornece a capacidade de configurar programaticamente seus contatos de saída para trabalhar no modo OS. Mas e se não tivermos essa oportunidade? Há outra configuração - modo push-pull; Hoje esta opção é uma das mais populares. Essa configuração funciona um pouco diferente. No estado "0", a saída ainda é empurrada para o chão, mas quando ocorre o estado "1", é puxada para a tensão de alimentação do VCC,para que a saída no ar não pare mais, agora ela mesma pode se tornar uma fonte de corrente.Que mudanças isso acarreta no design da matriz? Se não vamos pressionar vários botões ao mesmo tempo, então nenhum. Mas se formos, dê uma olhada no desenho e imagine por um segundo o que acontecerá então. Ao clicar nos dois botões, conectamos as duas saídas inferiores em um loop fechado. Se ao mesmo tempo um deles estiver no estado "0" e o outro no estado "1", uma corrente elétrica fluirá da saída configurada para "1" para a saída configurada para "0". E como essa corrente não é limitada por nada (não há resistores), o circuito não apenas se torna instável, como também pode sair do chip. Bem, é claro, é improvável que seja possível considerar normalmente um estado lógico.Adicionando linhas
Você pode considerar o exemplo anterior como uma matriz que consiste em uma linha. Agora vamos aumentá-lo adicionando linhas extras. De fato, se podemos pendurar uma linha inteira em uma entrada, por que não podemos pendurar uma coluna inteira de botões em uma saída? É verdade que existe um pré-requisito - cada botão da coluna deve ser conectado a uma entrada separada do microcontrolador.Se organizarmos os botões na forma de uma matriz regular, essa condição será preenchida automaticamente. E a figura a seguir mostra como será a matriz de botões que consiste em n colunas e m linhas ( não preste atenção nas figuras verdes ainda ).
Matriz de teclado simplesA leitura dessa matriz é muito simples. Votamos uma coluna por vez. A coluna de leitura é selecionada conectando uma das saídas “C1”. “Cn” ao terra (a saída no modo OS é traduzida para “0”). Agora, pesquisando alternadamente as linhas "R1" .. "Rm", podemos determinar o estado de cada botão da coluna selecionada. Os botões de outras colunas não afetam nada, mesmo que sejam pressionados, porque no momento seus cabos de aterramento estão suspensos no ar (ou, como costumam dizer nos eletrônicos, estão no estado Hi-Z).Depois que a coluna inteira é pesquisada, passamos para a próxima, deixando de lado a saída atual e empurrando a próxima para zero. A varredura de matriz é considerada completa quando todas as colunas são pesquisadas. Se tudo for feito com rapidez suficiente, o tipógrafo mais rápido não notará os intervalos entre as pesquisas de coluna. Mesmo com um microcontrolador de 16 MHz, podemos digitalizar facilmente toda a matriz milhares de vezes por segundo, enquanto o tipógrafo mais rápido do teste no hi-games.net alcançou uma velocidade de 203 palavras por minuto (wpm) - ou seja, pouco menos de 17 cliques segundo.Ao projetar um teclado usando uma matriz, reduzimos o número de pinos necessários para conectar todas as teclas. Mas, para reduzir o número de conclusões ao mínimo possível, precisamos compor uma matriz para que o número de colunas seja o mais próximo possível do número de linhas. Em uma situação ideal, se o número de botões for n² , o melhor que podemos obter com a matriz é 2nPinos de microcontrolador ocupados. No entanto, hoje, ao compilar matrizes, raramente alguém procura minimizar o número de pernas envolvidas, porque os microcontroladores modernos, em regra, têm um número suficiente de conclusões gratuitas. Além disso, a otimização máxima da matriz pode subsequentemente causar transtornos - a fiação da placa ou a distribuição de fios no dispositivo final será visivelmente mais complicada. Portanto, vale a pena seguir o caminho mais conveniente: ao compilar a matriz, tente seguir o arranjo físico dos botões. Nesse caso, para um teclado de computador padrão, a matriz mais simples terá apenas 6 linhas e um certo número de colunas, dependendo do layout desejado. Obviamente, do ponto de vista do número de conclusões envolvidas, essa solução não é a mais ótima, mas, no futuro, pelo menos a fiação será simplificada.Mas e se não tivermos saídas de dreno abertas?
Você pode perguntar: o que devemos fazer se ainda não houver um modo OS no microcontrolador selecionado? Bem, já descobrimos que tipo de problema pode acontecer, e que puxar as saídas para o VCC (ou seja, “conectá-las” à fonte de alimentação) não é uma boa ideia. Existem muitas maneiras de resolver esse problema; Entre eles, existem não apenas buffers especiais de saída do sistema operacional, mas até registros de deslocamento com saídas do sistema operacional - para minimizar ainda mais o número de etapas envolvidas. Mas há outra técnica muito popular, que é frequentemente usada no design de teclados de computador (na verdade, era amplamente usada nos velhos tempos).O problema das colunas conectadas às saídas push-pull aparece no momento em que dois botões localizados na mesma linha são pressionados juntos e, ao mesmo tempo, pressionar o botão pesquisará a coluna na qual um dos botões está localizado.
O problema das saídas push-pullNa saída, que é puxada para "1" (e não trava no estado Hi-Z), uma corrente começa a fluir. Ele passa pelo botão fechado mais próximo, depois pelo botão fechado na coluna interrogada e, finalmente, flui diretamente para a saída definida como "0". Isso pode levar a qualquer coisa - desde a impossibilidade de leitura confiável do status do teclado até a falha do próprio microcontrolador.Porém, como somos forçados a lidar com esse problema, podemos aplicar um grande truque: transformar uma saída push-pull em uma espécie de saída de dreno aberto. Muitas vezes encontrei essa solução nos designs de teclados antigos. Dado que a corrente deve fluir apenas para as saídas (conectadas às colunas), mas nunca fluir para fora delas, podemos limitar a direção da corrente usando diodos. Um diodo é um dispositivo simples que permite que a corrente flua em apenas uma direção. Na imagem do diodo no circuito elétrico, o triângulo simboliza a seta que indica essa direção. Se colocarmos um diodo entre cada saída do microcontrolador e o condutor da coluna correspondente da matriz, alcançaremos nosso objetivo - agora a corrente só pode fluir para as saídas, porque esses condutores atingem cada botão de sua coluna. Aconteceque a partir da saída definida como "1", a corrente não flui em lugar algum, e isso quase a transforma em uma saída de dreno aberto. Obviamente, ele não alcança o sistema operacional real, mas resolve o nosso problema de um circuito de corrente fechado na matriz do teclado. Volte para a penúltima imagem da matriz, mas desta vezconsidere os diodos verdes para entender como esse truque funciona.Naturalmente, faz sentido minimizar o número de diodos. Para fazer isso, você pode reduzir o número de colunas aumentando o número de linhas. E se o resultado resultante não se encaixar bem no layout real do teclado, você pode "girar" a matriz 90 ° (trocar linhas por colunas). As possibilidades são infinitas. Atualmente, no entanto, um grande número de microcontroladores parece ser fácil de usar e conveniente para hobbies; portanto, hoje a técnica descrita praticamente não é usada em projetos de teclado caseiro. Felizmente.Cliques fantasmas (fantasma)
Se você está interessado em clavs, já deve ter conhecido esse termo. Infelizmente, no mundo dos teclados, muitas vezes é interpretado incorretamente.Já estamos familiarizados com a situação em que o pressionamento simultâneo de vários botões localizados na mesma linha pode interferir na leitura normal da matriz. E esse problema, podemos dizer, foi resolvido por nós. Agora vamos ver o que acontece se você clicar em vários botões simultaneamente na mesma linha e na mesma coluna.
Exemplo de pressão fantasmaNa figura, três botões são pressionados ao mesmo tempo. Dois deles estão na coluna "C2" e dois na linha "Rm". Isso significa que um dos botões pressionados compartilha a linha com o outro botão pressionado e a coluna com o terceiro botão pressionado. É nessa situação que ocorre a prensagem fantasma. Imagine que atualmente estamos interrogando a coluna "C1" (ou seja, ela é pressionada no chão - está no estado "0"). Esse acorde característico dos botões pressionados leva ao seguinte: mesmo que o botão superior esquerdo não seja pressionado, a linha "R2" está no estado "0", porque é pressionada no chão pela coluna "C1" (localizada em "0") através de três botões pressionados. Como resultado, o controlador do teclado lê o botão superior esquerdo como "pressionado", independentemente de estar ou não pressionado. A situação descrita é chamada de pressão fantasma ( fantasma ), porque algumas combinações de botões pressionados simultaneamente causam respostas fantasmas de outros botões (teclas fantasmas), embora fisicamente esses outros botões não sejam pressionados.Obviamente, existem maneiras de proteger tipógrafos e jogadores de respostas fantasmas, e esses métodos são amplamente utilizados nos teclados modernos de computadores. Você pode capturar o momento da ocorrência de pressão fantasma e bloqueá-lo. Uma pessoa comum não é capaz de pressionar ou soltar simultaneamente duas teclas com precisão perfeita. Portanto, digitalizando a matriz com rapidez suficiente, podemos supor que entre duas passagens pela matriz, não mais que um botão possa alterar seu estado. Nesse caso, o controlador aceita pressionamentos simples e monitora a ocorrência de situações quando dois ou mais botões são pressionados entre as passagens da matriz. Dado que a varredura da matriz ocorre a uma velocidade em que a ocorrência regular de tais situações é extremamente improvável, podemos concluir que um dos botões pressionados é um fantasma.Portanto, o controlador deve ignorar todos esses cliques. Além disso, é mais seguro não informar imediatamente o computador sobre as alterações de status do teclado - no início, faz sentido esperar até que todas essas operações desapareçam.Existe outra abordagem. Você pode identificar a situação quando o botão "terceiro" é acionado e bloquear essa pressão e todas as seguintes. Não solte a trava até que a resposta fantasma desapareça e a situação volte ao normal. Para implementar essa abordagem, o programa deve se lembrar de quais botões estão pressionados no momento (e geralmente se lembra dessa maneira) para rejeitar operações subseqüentes de botões, nas linhas e colunas nas quais cliques simultâneos já são registrados. Se você escrever o programa com sabedoria, apenas as respostas problemáticas serão bloqueadas e todas as subsequentes serão aceitas como de costume - exceto as que violarem as regras novamente. Depois que o controlador rejeita pressionar cada botão que já possui operações simultâneas em sua linha e coluna, verifica-se que, dependendo do status de alguns botões,outros podem não estar registrados. Essa situação é comumente conhecida comobloqueio ( bloqueio ). Ou seja, botões que impedem a operação simultânea de outros botões, ao que parece, "bloqueiam" parte do teclado.Do ponto de vista do usuário, é possível pressionar simultaneamente todos os botões de uma coluna (sem pressionar os botões de outra), mas simultaneamente pressionar todos os botões de uma linha apenas se cada um deles não tiver mais que uma operação na coluna. O mesmo se aplica ao pressionar botões de uma única coluna - gatilhos adicionais são registrados apenas se os botões estiverem em linhas que “não estão ocupadas”.As pessoas frequentemente confundem “ gatilho fantasma ” e “ gatilho bloqueador ” (“ fantasma ” e “jamming "), que é um mistério para mim pessoalmente - na minha opinião, esses termos são bastante intuitivos.Nos teclados que utilizam matrizes como acabamos de examinar, nem respostas fantasmas nem bloqueios podem ser evitados. Como as respostas fantasmas no trabalho cotidiano são inaceitáveis, para combatê-las, quase todos os fabricantes de teclados com domo de borracha usam vários truques, e o bloqueio entra em ação. Pergunta: como compor uma matriz de tal maneira que o bloqueio ocorra o mais raramente possível e não seja causado por combinações comuns de teclado? De fato, este é um bom tópico para todo o livro; é por isso que matrizes de teclados de bens de consumo são tão confusas e sempre bloqueiam o bom humor (como um trocadilho).Diodos para todos os botões - uma solução cardinal
Se você olhar novamente para a foto sobre cliques fantasmas, poderá notar que o botão inferior direito é o culpado.Mas esse botão é o único pelo qual a corrente nessa situação flui "para cima". Portanto, se não queremos que as correntes atuais “para cima” nos impeçam de ler a matriz normalmente, vamos introduzir diodos para que a corrente possa fluir através das colunas estritamente de cima para baixo, fluindo para as saídas do microcontrolador.Infelizmente, não é possível salvar aqui - você precisa colocar um diodo em cada botão. Se falamos de polaridade, você deve ter percebido que, nesse caso em particular, os diodos devem passar a corrente “de cima para baixo”, ou seja, seus catodos (“pontas de flechas”) devem observar as saídas do microcontrolador (colunas), enquanto os ânodos devem endereçado às entradas (linhas).
Matriz de resumoNão importa em que lado do botão o diodo está localizado; o principal é observar a polaridade correta. Lembre-se de que, neste caso, a corrente sempre fluirá das entradas às saídas. A propósito, se as entradas forem puxadas para a energia e as saídas estiverem no modo OS, isso sempre acontecerá.Com essa abordagem, verifica-se que a corrente sempre flui "para baixo", e isso elimina a aparência de loops de corrente fechados quando vários botões são pressionados simultaneamente. Além disso, esse design é o único que pode fornecer ao teclado NKRO completo. Além disso, vale ressaltar (embora isso pareça óbvio) que o problema das saídas do microcontrolador que não possuem o modo OS agora foi resolvido automaticamente. Os diodos instalados sequencialmente com cada botão salvam as saídas de um circuito não pior do que a opção considerada anteriormente, na qual deveria colocar adicionalmente um diodo em cada coluna.Rolagem
Sim, eu sei que o texto já é muito longo. Mas ainda adiciono este último capítulo, porque, na minha opinião, sem ele o artigo estaria incompleto. Portanto, a rolagem é a capacidade do teclado de dar vários toques ao mesmo tempo.xKRO
KRO é rollover chave ( um capotamento chave ), e, geralmente, esta abreviatura tem direito por algum número. Por exemplo, 2KRO significa uma substituição de duas chaves. Um teclado possui uma substituição da tecla x se, e somente se, é capaz de registrar x pressionamentos de tecla simultâneos, além disso, independentemente de quais botões e sequência foram usados. Os teclados de dome de borracha mais modernos têm 2KRO. No entanto, não se segue que o número permitido de pressionamentos de teclas nesses teclados sempre seja limitado a x . Na verdade, isso significa que o suporte ao x- click é garantido exatamente.Dependendo do design da matriz e do tipo de controlador, dois teclados 2KRO de diferentes fabricantes podem se comportar de maneira muito diferente. Um pode sempre aceitar apenas dois cliques simultâneos e o outro pode digerir facilmente ainda mais. Parece que o último teclado foi anunciado pelo 2KRO porque algumas combinações de teclas (provavelmente improváveis) ainda farão com que ele bloqueie o pressionamento de outros botões. E como isso significa que, ao trabalhar com este teclado, certas combinações de três teclas e mais não funcionarão, a empresa anunciou o 2KRO.Nkro
O termo NKRO significa substituição de teclas N e é usado para designar teclados que suportam, apesar de tudo, qualquer combinação de teclas pressionadas simultaneamente. Mas lembre-se de que as matrizes NKRO e os teclados NKRO são duas grandes diferenças. Por exemplo, se a implementação final da matriz, examinada no artigo, oferecer suporte ao NKRO (levando em consideração o firmware corretamente escrito), isso não significa que o teclado que utiliza essa matriz também suporte o NKRO. Isso pode ser devido a restrições impostas pelas portas de comunicação às quais o teclado está conectado; outro motivo poderia ser a frugalidade dos fabricantes, sempre economizando aqui e ali. Vou tentar explicar o problema do NKRO ao conectar ao PS / 2 e USB nas seguintes partes.Sumário
Obviamente, a folha saiu muito bem, mas o conceito não é tão simples - especialmente para o leitor, que não é um engenheiro eletrônico. Espero ter conseguido explicar tudo; seja como for, tentei escrever o mais claramente possível. Portanto, para alguns de vocês, o artigo pode parecer um pouco chato. Bem, se você se atrapalhar com a eletrônica, provavelmente não deveria ter lido nada;)De qualquer forma, informe- me se o artigo acabou sendo útil para você e se vale a pena escrever uma sequência. Se sim, então vou me sentar para a próxima "série".Michał Trybus
2 de setembro de 2013 Source: https://habr.com/ru/post/pt394585/
All Articles