Versão ou configuração de codificação no PCB

10

Preciso codificar informações sobre a versão ou a configuração na placa / eletricamente, para que o firmware possa detectar qual layout da placa é usado.

Quais opções são possíveis e quais são seus prós / contras?

Henrik Hansen
fonte
1
Há também esse Q de um tempo atrás, as respostas são semelhantes aos já dada (que é bom!): Electronics.stackexchange.com/questions/41757/...
awjlogan

Respostas:

14

De cabeça para baixo, duas soluções fáceis me vêm à mente.

  1. Tenha n linhas conectadas ao GPIO do seu microcontrolador. Amarre-os alto ou baixo, dependendo da versão do seu quadro. Isto lhe daria opções de configuração da placa. Isso usaria n pinos no seu microcontrolador. O consumo de corrente estática seria insignificante.2n
  2. Faça uma entrada no ADC do microcontrolador e use um divisor de tensão com valores diferentes, dependendo da configuração da placa. Isso usaria apenas um único pino de microcontrolador. Isso tem a desvantagem de que haverá consumo de corrente estática através do divisor. Também seria propenso a erros de lista técnica, enquanto a primeira sugestão é conectada à placa.

Ambas as sugestões têm um ponto fraco: o usuário final pode alterá-las facilmente, digamos, para abrir recursos "bloqueados". Isso pode não ser uma preocupação para você, mas algo a ter em mente.

awjlogan
fonte
1
Há também uma combinação de [1] e [2]. Você pode usar um pino do microcontrolador para o ADC, mas use o mesmo componente de valor conectado em paralelo para formar um divisor de tensão. Portanto, por exemplo, você pode ter quatro resistores de 10k formando 10k / float (puxe para vcc), float / 10k (puxe para gnd), 10k / 10k (vcc / 2), 5k / 10k (2/3 de vcc), 10k / 5k (1/3 de vcc). Resumindo: uma linha na lista técnica, apenas quantidade diferente e uma entrada ADC necessária. Também ajuda visualmente.
Sócrates
2
Você pode se livrar do consumo de corrente estática da solução ADC se puder poupar um segundo pino: em vez de um divisor de tensão entre VCC e GND, substitua VCC ou GND pelo segundo pino - você só precisa ler a configuração da placa uma vez , no início do programa, defina o pino alto / baixo conforme necessário para ativar o divisor de tensão, faça a medição ADC e alterne o pino para que ambas as extremidades do divisor de tensão tenham o mesmo potencial e nenhum fluxo de corrente.
Aleksi Torhamo
1
A versão GPIO também é propensa a erros de lista técnica, porque geralmente isso é configurado com links de zero ohm. Você poderia fazer isso no esquema e no layout, mas isso é mais caro ( custos de tempo de layout ).
Graham
1
No ADC, é isso que usamos nos produtos em que atualmente trabalho. Você precisa ter cuidado com as tolerâncias do resistor. Se seus dois resistores tiverem 1% de tolerância, a tensão poderá atingir 2% de saída, portanto, no máximo, você terá 50 etapas que poderá resolver. Na prática, é mais seguro reduzir pela metade isso. Portanto, se você possui resistores de 1% e uma faixa de 5V no seu ADC, deseja que as versões sejam relatadas em etapas de 0,2V.
Graham
9

Eu usei um registrador de turno com pinos amarrados alto e baixo para codificar a revisão da placa antes de agora, se você já estiver usando o SPI para algo em sua placa, é trivial lê-la.

Se você precisar alterar o ID em tempo de execução, usar jumpers em vez de vincular as entradas com traços seria uma boa idéia.

Colin
fonte
Eu estava pesquisando por ICs de variantes de número de série de silício não exclusivos, mas essa é uma alternativa inteligente. Especialmente se você combiná-lo com um único expansor de E / S de fio.
Jeroen3
7

Algumas opções em que posso pensar: -

Links para resistores SMD PADS / O OHM. Use um sistema binário para configuração de hardware para reduzir a contagem de pinos para o seu processador.

Jumpers. A placa usaria pinos do conector 2xN, adicionando um jumper ao pino direito, permitindo selecionar sua configuração. Um erro é mais fácil de resolver. Isso pode ser um pouco caro e usar mais espaço na placa, dependendo do jumper.

Se você possui EEPROM na placa, pode ser possível incorporar a configuração na memória.

É possível alterar o firmware usando um #define ou similar? Então você não precisa de espaço na placa e pinos extras para a detecção de versão.

R.Joshi
fonte
1

As EEPROMs de uma ligação são uma boa solução, pois exigem apenas um GPIO, mas podem armazenar uma grande quantidade de informações de configuração. Eles também permitem que o microcontrolador grave essas informações durante o teste da placa (por exemplo, dados de calibração). Muitos possuem um pino de proteção contra gravação ou um bit programável único para evitar novas alterações.

Outras vantagens incluem recursos úteis, como números de série exclusivos garantidos.

Essa opção é usada em muitos sistemas, como sondas e baterias do osciloscópio, devido à necessidade de apenas uma única linha de dados. A EEPROM pode até ser alimentada a partir da própria linha de dados.

A principal desvantagem é o custo. O custo não é alto, mas em produtos produzidos em massa, alguns centavos podem importar.

Um exemplo dessa EEPROM é o DS2431, que armazena 1kb.

do utilizador
fonte