Versión de codificación o configuración en PCB

Necesito codificar información sobre la versión o la configuración en la placa/eléctricamente, para que el firmware pueda detectar qué diseño de placa se usa.

¿Qué opciones son posibles y cuáles son sus ventajas y desventajas?

También hay esta Q de hace un tiempo, las respuestas son similares a las que ya se dieron (¡lo cual es bueno!): electronics.stackexchange.com/questions/41757/…

Respuestas (4)

En la parte superior de mi cabeza, dos soluciones fáciles vienen a la mente.

  1. Tenga n líneas conectadas al GPIO de su microcontrolador. Átelos alto o bajo dependiendo de la versión de su tablero. esto te daría 2 norte Opciones de configuración de la placa. Esto usaría n pines en su microcontrolador. El consumo de corriente estática sería insignificante.
  2. Tenga una entrada para el ADC del microcontrolador y use un divisor de voltaje con diferentes valores según la configuración de la placa. Esto solo usaría un solo pin de microcontrolador. Esto tiene la desventaja de que habrá un consumo de corriente estática a través del divisor. También sería propenso a errores en la lista de materiales, mientras que la primera sugerencia está conectada a la placa.

Ambas sugerencias tienen la debilidad de que el usuario final podría modificarlas fácilmente, por ejemplo, para abrir funciones "bloqueadas". Esto puede no ser una preocupación para usted, pero algo a tener en cuenta.

También hay una combinación de [1] y [2]. Puede usar un pin de microcontrolador para ADC, pero use el mismo componente de valor conectado en paralelo para formar un divisor de voltaje. Entonces, por ejemplo, puede tener cuatro resistencias de 10k que forman 10k/float (tirar a vcc), float/10k (tirar a tierra), 10k/10k (vcc/2), 5k/10k (2/3 de vcc), 10k/ 5k (1/3 de vcc). En resumen: una línea en la lista de materiales, solo se requiere una cantidad diferente y una entrada ADC. También ayuda visualmente.
Puede deshacerse del consumo de corriente estática de la solución ADC si puede prescindir de un segundo pin: en lugar de un divisor de voltaje entre VCC y GND, reemplace VCC o GND con el segundo pin; solo necesita leer la configuración de la placa una vez. , al comienzo del programa, configure el pin alto/bajo según sea necesario para habilitar el divisor de voltaje, realice la medición de ADC, luego cambie el pin para que ambos extremos del divisor de voltaje tengan el mismo potencial y no fluya corriente.
La versión GPIO también es propensa a errores de lista de materiales, porque normalmente está configurada con enlaces de cero ohmios. Puede hacerlo en el esquema y el diseño, pero eso es más costoso ( costos de tiempo de diseño ).
Re el ADC, esto es lo que hemos usado en los productos en los que trabajo actualmente. Sin embargo, debe tener cuidado con las tolerancias de resistencia. Si sus dos resistencias tienen una tolerancia del 1%, el voltaje puede tener una salida de hasta el 2%, por lo que como máximo obtiene 50 pasos que puede resolver. En la práctica, es más seguro reducirlo a la mitad. Entonces, si tiene resistencias del 1% y un rango de 5V en su ADC, desea que las versiones se informen en pasos de 0.2V.

He usado un registro de desplazamiento con pines atados arriba y abajo para codificar la revisión de la placa antes, si ya está usando SPI para algo en su placa, es trivial leerlo.

Si necesita poder cambiar la ID en tiempo de ejecución, sería una buena idea usar puentes en lugar de vincular las entradas con rastros.

Estaba buscando en Google IC de variante de número de serie de silicio no único, pero esta es una alternativa inteligente. Especialmente si lo combina con un expansor de E/S de un solo cable.
¿Cómo se cargan los datos de la versión en el registro de desplazamiento?
Si usa un 74xx165 (o un paralelo similar en el registro), puede conectar sus entradas a Vdd y Vss para configurar lo que obtiene cuando registra los datos.
Lo tengo. Entonces, conecta las entradas paralelas, conecta la salida en serie a un pin GPIO y luego necesita alguna forma de controlar el reloj y restablecer los pines (probablemente también GPIO en mi caso). Estoy usando una Raspberry PI para controlar varios relés, por lo que tendría que dedicar ~3 pines GPIO al control de versiones. Si creo que tendré más de 4 versiones, esta sería una buena manera de hacerlo.

Algunas opciones que se me ocurren:-

SMD PADS/ O OHM Resistor Links. Utilice un sistema binario para la configuración del hardware a fin de reducir el número de pines de su procesador.

Saltadores. La placa tendría pines de conector 2xN agregando un puente al pin derecho que le permitiría seleccionar su configuración. Un error es más fácil de resolver. Esto puede ser un poco costoso y usar más espacio en la placa dependiendo del saltador.

Si tiene EEPROM en la placa, es posible que pueda incrustar la configuración en la memoria.

¿Es posible que cambie el firmware en sí usando un #define o similar? Entonces no necesita espacio en la placa ni pines adicionales para la detección de versiones.

Las EEPROM de un cable son una buena solución porque solo requieren un GPIO pero pueden almacenar una gran cantidad de información de configuración. También permiten que el microcontrolador escriba esa información durante la prueba de la placa (por ejemplo, datos de calibración). Muchos tienen un pin de protección contra escritura o un bit programable de una sola vez para evitar más cambios.

Otras ventajas incluyen características útiles como números de serie únicos garantizados.

Esta opción se utiliza en muchos sistemas, como sondas de osciloscopio y baterías, debido a que solo se necesita una línea de datos. La EEPROM puede incluso ser alimentada desde la propia línea de datos.

La principal desventaja es el costo. El costo no es alto, pero en productos producidos en masa, unos pocos centavos pueden importar.

Un ejemplo de tal EEPROM es el DS2431, que almacena 1kb.