1 votos

Hardware ID - Detección de variantes con 1 pin digital de la MCU

Tengo una placa, que es el anfitrión de varios sensores diferentes. Todos los sensores tienen el mismo conector de 4 pines con la siguiente distribución de pines:

  1. Pin: VDD
  2. Pin: Señal
  3. Alfiler: Gratis
  4. Pin: VSS

Es decir, tengo 1 clavija libre, en cada enchufe.

Todos los enchufes/sensores deben ser intercambiables y la MCU debe ser capaz de determinar qué sensor está conectado.

Mi MCU, no tiene suficientes pines analógicos, si no podría hacer algo como poner un divisor de tensión en cada placa y leer el valor analógico.

Todavía me quedan bastantes clavijas digitales.

Me gustaría poder determinar al menos 20 tipos de sensores diferentes, mejor 32.

¿Hay algún truco para conseguirlo?


Algunas otras preguntas de SE, que están en un tema similar, pero no resolvió mi problema:

¿Cuál es una buena manera de que la mcu determine la versión de hardware en la que se está ejecutando?

Versión de codificación o configuración en la placa de circuito impreso

4voto

Kartman Puntos 381

Memoria Dallas de 1 hilo o Microcontrolador muy pequeño o Circuito RC. Medir el tiempo de carga/descarga. Poner el pin bajo durante X tiempo de descarga. Poner el pin en alto durante Y tiempo. Poner el pin en entrada - estado de prueba. Enjuague y repita hasta que esté en alto. A continuación, haga lo mismo a la inversa: cargue en alto y luego descargue mientras prueba el pin. Basado en el tiempo de carga/descarga te da un valor.

1voto

Surendra Patil Puntos 11

El divisor de tensión sigue siendo la opción más sencilla. Sólo necesitas una resistencia en cada placa de sensores, la segunda resistencia está en la principal.

El hecho de no tener entradas ADC disponibles no significa que no se pueda utilizar. Hay cientos de chips ADC disponibles en pequeños paquetes de 5/6 pines, como ADC081S021 con interfaz SPI o MCP3021 con interfaz I2C. También utilizan la alimentación como referencia, lo que los hace ideales para leer los divisores de tensión.

Yo optaría por SPI porque no necesita pull-ups. A menos que ya uses I2C en la placa, en cuyo caso ni siquiera necesitarás pines adicionales de la MCU.

En realidad, utilizamos este método para establecer los ID de los nodos CANOpen. Las placas portadoras tienen resistencias y cuando conectamos la placa MCU a la placa portadora, la aplicación puede averiguar fácilmente su ID. Las resistencias se calculan de tal manera que la simple división del valor del ADC por alguna constante produce el ID real. Si la misma placa portadora puede ser utilizada para nodos con diferentes IDs, ponemos interruptores DIP en ellos para cambiar fácilmente la resistencia sin necesidad de soldar.

Alternativas

No has especificado qué tipo de "señal" tienes. Pero si diseñas tú mismo los sensores tienes múltiples opciones a tu disposición. Algunos ejemplos:

  • Si su interfaz es digital, puede añadir datos de "tipo de sensor" a su protocolo;
  • si tu interfaz es analógica puedes añadir un simple multiplexor controlado por el pin libre - si el pin es alto la "señal" es la salida del sensor, si el pin es bajo entonces la "señal" es el tipo de sensor codificado como voltaje del divisor en la placa.

0voto

Damien Puntos 136

Kartman ha dado una buena respuesta, pero también hay otra forma sencilla.

  • La capacitancia, funciona pero es bastante compleja de implementar y la fiabilidad puede no ser la mejor.
  • La EEPROM es buena, pero luego hay que programarlas todas, lo que lleva mucho tiempo.

Una forma más sencilla en mi opinión, si su pin tiene un ADC (la mayoría de MCU tiene), es simplemente hacer diferentes divisores de tensión entre VCC y GND, y detectar la tensión en el pin. Simplemente necesitas 2 resistencias y cambiarlas por diferentes versiones de hardware para tener diferentes salidas de voltaje, por ejemplo, pasos de 0.5V.

El costo es bajo y se puede ver visualmente lo que es ID "programado" aka qué resistencias se sueldan.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X