Solución minimalista
La implementación más simple posible es usar una sola resistencia (!) para proteger el pin de entrada, como se describe en esta fuente. Las entradas del AVR están protegidas contra sobre / bajo voltaje por diodos de silicio internos D1 y D2. La resistencia de entrada debe tener un tamaño tal que no conduzca más de 1 mA cuando el diodo de sujeción interno, D1, conduzca a Vcc + 0,5 V o 5,5 V en este caso. Una resistencia de 22K podría funcionar en este caso si usamos nuestro suministro de 24V para el sensor. Nuestra corriente a través del diodo de sujeción se calcula según la ley de Ohm como (24 V - 5,5 V) / 22 K = 0,84 mA.
Sin embargo, en este caso no hay razón para cortar tan cerca del hueso. No necesitamos una detección de velocidad particularmente alta para esta aplicación, por lo que una resistencia de 100K sería una mejor opción y limita el diodo D1 a 0.19 mA. Esto brinda protección adicional para picos de voltaje.
Esta solución funciona bien hasta que el diodo interno se estropea por un pico o sobrevoltaje, por lo que es mucho mejor agregar redundancia y usar un par de diodos de sujeción Schottky externos que tienen una caída de voltaje directa más baja y se conducirán antes que los diodos de silicio internos.
Entonces, mi solución (la que planeo implementar pronto en mi propia Ender 3 Pro *) es de este artículo original y tiene este aspecto:
Donde R1, D3 y D4 son mis componentes externos como se describe, y C1 se omite por simplicidad. (Si se usa C1, forma un filtro RC de paso bajo, por lo que deberá ajustar el tamaño apropiado. Si encontramos que el ruido o el 'rebote' es un problema, podemos agregar C1 fácilmente más adelante).
En mi opinión, una sola resistencia de 100K y dos diodos Schottky son una protección adecuada para este circuito, y el sensor de proximidad de 6-36V funcionará muy bien con el suministro de 24V disponible.
* Basado en el primer comentario a esta solución propuesta, reconozco la necesidad de mirar cuidadosamente aquí la propiedad a prueba de fallas. Dependiendo de si el tope final Z existente está incluido en el bucle, y cómo Marlin maneja esto también determinará si esta es una solución satisfactoria. Dejaré mi parte de la discusión allí por ahora, hasta que me acerque al diseño y la implementación en mi propia máquina.