¿Qué problemas podrían ocurrir al encadenar 40 registros de desplazamiento?

Estoy planeando encadenar 40 registros de desplazamiento x 74HC595 . Toda la cadena de 74HC595 estará controlada por un microcontrolador de 5 V, que generará las señales SDI, CLOCK& .LATCH

Cada registro de desplazamiento y el microcontrolador tendrán su propia PCB, como se ilustra en el siguiente diagrama:

diagrama

Debido a limitaciones mecánicas, la distancia entre cada registro de desplazamiento será de unos 30 cm (12 pulgadas), por lo que las señales de control viajarán a lo largo de una distancia de aprox. 12 m (40 pies). Además, todo el sistema se montará en un entorno muy ruidoso (cerca de luces fluorescentes, cables de alimentación, etc.)

Mi preocupación es que las señales de control serán muy ruidosas y los registros de desplazamiento podrían generar cosas incorrectas. Estaba pensando en:

  • Usando un circuito integrado de búfer en cada placa, para almacenar en búfer las señales de control. ¿Cuál recomendarías?
  • Uso de cables apantallados entre las placas para las señales
  • Bajando la CLOCKfrecuencia tanto como sea posible. Solo necesito actualizar el contenido de los registros unas cuantas veces al día.

¿Son buenas las soluciones anteriores? ¿Qué más puedo hacer para mantener al mínimo el ruido (potencial) en los cables de señal?

Esto suena como un candidato fantástico para un CPLD en lugar de los 40 registros de desplazamiento.
@JoelB Puede sonar como una buena opción para un CPLD, pero eso significaría tener 320 (= 40 * 8) señales que van desde la placa principal (CPLD) a todo el lugar. Sería muy difícil de instalar, en mi caso, en ese entorno; y será muy difícil de mantener. Además, las señales, aunque más cortas, seguirán estando sujetas a ruido.
@Joel: Digikey enumera solo algunos CPLD con 320 E/S, y todos son BGA. También son más caros que los 40 '595 y, como dice m.Alin, no tienes la ventaja de las señales distribuidas. Desde un punto de vista lógico, este es un trabajo perfecto para un CPLD, desde un punto de vista práctico, no tanto.
@m.Alin - Tienes toda la razón. Acabo de leer 40 registros de desplazamiento y escribí CPLD. Después de leer la pregunta detenidamente, cómo lo está haciendo tiene sentido.

Respuestas (3)

Utilice búferes de activación Schmitt en las entradas de cada placa. Limpiarán las señales para que cualquier ruido no dé pulsos falsos en el reloj, por ejemplo. El 74LVC3G17 es un búfer triple no inversor.

Además, pase las señales almacenadas en búfer a la siguiente placa. De lo contrario, todas las entradas serían paralelas y es posible que exceda la distribución del microcontrolador de conducción (estoy pensando especialmente en la carga capacitiva total). La cadena de margaritas de las señales de reloj y pestillo dará un retraso de ondulación a lo largo de la cadena, pero los datos también lo harán, y de todos modos planea ir a baja velocidad.

No puede decir que no tiene espacio para el 3G17: el paquete XSON8 es de 1,0 mm x 1,2 mm, paso de 0,3 mm. :-)
Oh... eso no es bueno. Difícilmente los vería :-)
@m.Alin - No te preocupes, también está disponible en TSSOP. Todavía pequeño, pero debe ser manejable. En cualquier caso, no cuentes con DIP para este tipo de dispositivos, definitivamente eso es cosa del pasado. Si desea DIP, eche un vistazo a la serie 74HC más clásica.
Gracias, Steven. TSSOP debería estar bien. Hablando en teoría, digamos que no usaré los búferes. Entonces, las señales de entrada estarían en paralelo, excediendo el fan-out del microcontrolador. ¿Podría resolver esto manejando las salidas de la uC con algunos transistores?
@m.Alin - Sí, una etapa push-pull estaría bien. Pero recomendaría encarecidamente los búferes, no solo por la capacidad de la unidad, sino especialmente por la histéresis del disparador Schmitt , que evitará pulsos de reloj falsos causados ​​por ruido alrededor del umbral.
@stevenvh ¿Es mejor colocar amortiguadores antes o después del cable que toma las señales de una placa? En mi caso, tengo buffers antes del cable pero ninguno después.
@Saad: ¿quieres decir que el búfer conduce la señal al cable? Lo bueno es entonces que proporcionará una baja impedancia que reduce el ruido. Pero si hubiera ruido en el lado del receptor, no puede hacer nada al respecto en el lado del envío. Por lo tanto, es el receptor el que necesita una buena inmunidad al ruido, que proporciona el disparador Schmitt.
@stevenvh Entonces, la mejor solución, si espera ruido en el receptor pero también desea proporcionar baja impedancia a la fuente, ¿es colocar amortiguadores en ambos extremos?
@Saad: sí, pero en este caso parece excesivo: los cables tienen solo 30 cm de largo y ya tiene un repetidor/búfer en cada placa.
@stevenvh Sí, estaba hablando en general. ¡Tus publicaciones tienen una gran cantidad de información y casi siempre aprendo algo nuevo! En este caso, tengo búferes en una placa controladora que se conectan a un cable que se conecta a una 'placa secundaria'. No espero mucho ruido, así que podría quedarme con mi arreglo. Solo tengo búfer allí para que mi fuente no termine manejando 8 dispositivos (con capacitancia de entrada de 8pF + rastreo y capacitancia de cable).
@Saad - ¡Gracias por las flores! :-) Vigile la capacitancia del cable, especialmente si tiene más de un metro de largo. Regla general: 100 pF/m, eso es mucho más que la capacitancia de entrada.

El problema que puede ocurrir es que algunos SR registren antes que el siguiente SR registre, por lo que el próximo SR registrará los datos incorrectos. Una solución (¿estándar?) para esto es cablear el reloj comenzando en el último SR.

Consideraría agregar un búfer (¿schmit-trigger?) En cada placa para las 3 líneas de señal.

(editar) Bajar la frecuencia del reloj no ayudará (a menos que fuera demasiado alta para empezar). Los problemas que puede tener ocurren en los bordes del reloj, que tendrá de todos modos, sin importar qué tan baja elija su frecuencia de reloj.

El mayor problema al encadenar registros de desplazamiento es garantizar que la relación de tiempo entre el reloj utilizado por cada placa para recibir datos y el cambio en los datos de la placa anterior sea predecible. El hecho de que la salida del 74HC595 cambie en el mismo borde que el reloj es un poco molesto en ese sentido. Sugeriría que la señal del reloj debe almacenarse en un búfer a medida que pasa por cada placa y que la señal de datos que sale del 74HC595 de una placa debe pasar por un búfer que la retrasará un poco más que el búfer del reloj.

Alternativamente, podría usar un registro de desplazamiento como el 74HC4094 que tiene su cambio de salida de datos en el borde descendente del reloj, o podría agregar un flip flop entre la salida del último 74HC595 en el tablero y el siguiente tablero, y tener ese flip flop enganche su salida en el flanco descendente del reloj que impulsa los 74HC595 (tal vez pase el reloj a través de dos inversores para amortiguarlo y alimentar la señal del reloj invertido al flip flop).

Si el número de salidas 74HC595 que utilizará es uno (o más) menos que el número proporcionado por sus chips (por ejemplo, en una placa con dos 74HC595, en realidad solo necesita 15 salidas), puede alimentar el último 74HC595 en una placa con un reloj invertido de los demás, pero eso le costaría el uso de una salida 74HC595 por cada vez que la señal pasa entre un 74HC595 de reloj no invertido y un 74HC595 de reloj invertido.