He diseñado la primera revisión de una placa controladora de BLDC (basada en los chips STM32 y DRV8323). Justo después de escribir el firmware, ¡noté que el acoplamiento de PWM en las señales de hall es muy terrible!
Los motores para los que diseñé este circuito tienen una potencia de ~20 Watts. Sus sensores de hall solo funcionan a 5V o más. Utilizo el modo XOR del temporizador STM32 para capturar y generar el evento de conmutación...el STM32 es de 3.3V...pero asumo que puede tolerar una entrada de 5V, aunque no sé cuál es la histéresis para detectar una señal baja o alta cuando los pines GPIO están configurados en modo XOR:
Por debajo del 100% de PWM, obtengo mucho ruido. La línea amarilla es uno de los sensores de hall (el azul es el evento de conmutación). Solo tengo 2 sondas, así que no pude capturar los 3 sensores y el evento de conmutación (alimentando un GPIO alto y bajo antes y después de actualizar la salida del temporizador). Como puedes ver, el ruido sobre el sensor de hall es bastante malo:
Yo culpo a 2 cosas:
1. El diseño: Como no tenía experiencia previa, y debido a que hay 2 conectores de motor, enruté los sensores de hall muy cerca de las señales de fase (los verdes son fases y los amarillos son halls).
2. Cable del Motor: Los cables del motor son simplemente 8 cables uno al lado del otro (sin torsión) durante casi 50 cm...así que incluso si hice el mejor diseño en el PCB, el cable en sí causaría el problema de acoplamiento.
He probado el controlador con 100% de PWM (lo que significa que no hay conmutación) y todo se ve mucho mejor (el ruido es muy pequeño y limitado a cuando los semipuentes cambian en la actualización del sensor de hall). Así que realmente necesito cuidar este ruido. Sé que puedo mitigar este efecto en el software (por ejemplo, insertando un tiempo de espera y otros métodos de filtrado...) pero nada supera tener una señal limpia de todos modos.
Entonces, para resumir, aquí están mis preguntas:
1) ¿Qué puedo mejorar en el diseño? ¿separación de los sensores de hall y las señales de fase en conectores diferentes?
2) Voy a desmontar el cable del motor y separar los halls de las fases y hacerlos en par trenzado...antes de comprometerme con esto, ¿crees que tiene sentido?
3) ¿Debería/puedo usar un nivelador y posiblemente un disparador de Schmitt para eliminar el ruido y convertir 5V a 3.3V antes de enviarlo al controlador STM32? Si es así, ¿qué chips sugieres?
ACTUALIZACIÓN:
Aquí está el filtro RC para los sensores de hall, colocado cerca de la entrada del MCU.