SAMD que controla los restablecimientos de BLDC durante un pico de corriente alta; ¿Problema de EMI?

He estado haciendo un controlador de motor de CC sin escobillas que se controla a través de un controlador ATSAMD21E16L y un controlador mosfet MIC4609. Con corrientes promedio bajas de 2A o más, conduzco bien el motor, pero cuando le doy al motor un pico de corriente alto, como cuando trato de arrancarlo rápidamente a una potencia alta, o aumento la corriente de accionamiento de una corriente ya alta, el microcontrolador se reiniciará.

Actualmente tengo una configuración en la que conduzco el motor con 17 V y un ciclo de trabajo de arranque de aproximadamente el 33 %, lo que hace que el reinicio se produzca de forma fiable e instantánea. He usado esta confiabilidad para sondear todos los pines conectados al microcontrolador en busca de cualquier cosa sospechosa, pero todo parece normal. El pin de reinicio tiene un pequeño transitorio de 3,3 V a 3,2 V. Los pines de detección de la bobina ven los transitorios que no alcanzan más de 1,5 V. El pin de detección de corriente no alcanza más de 2V. El reloj de depuración de un solo cable y los pines io también cambian solo marginalmente. El PWM y los valores de habilitación que van al controlador mosfet también tienen pequeños transitorios.

Básicamente, no puedo encontrar nada en mi alcance que esté fuera de las especificaciones y, sin embargo, el microcontrolador se reinicia de manera confiable de esta manera. También tengo una placa separada construida de la misma manera con el mismo problema.

Dado que existe una buena cantidad de protección entre las cosas de alta corriente y voltaje que impulsan el motor y el microcontrolador, estoy empezando a preguntarme si es posible que EMI de alguna manera esté llegando al interior del microcontrolador para restablecerlo. Realmente no tengo ni idea de lo que está pasando.

También intenté agregar un límite de 100nF de RESET a GND, pero esto no hizo ninguna diferencia.

¡Cualquier idea sobre lo que puede estar pasando o cómo solucionarlo es muy apreciada!

esquema general esquema de conducción de motores Capa frontal de PCB Capa posterior de PCB

EDITAR: Hay un electrolítico de 330uF en +V_MOTOR (usando el pad GND que se muestra en el render frontal a continuación). Las conexiones a tierra y de alimentación del motor están directamente en las almohadillas que se muestran en esta vista frontal. Mi esperanza es que las conexiones cortas de baja impedancia (con la ayuda de un poco de cable de cobre adicional en esas tiras) signifique que las grandes corrientes del motor tengan un camino lo suficientemente corto como para no afectar demasiado al resto del circuito.

Tampoco tengo habilitadas las interrupciones.

La potencia lógica es una fuente de potencia completamente diferente a la tensión del motor. El voltaje del motor ahora proviene de una fuente de alimentación de banco y el suministro lógico es de un Arduino.

Cortar RESET a +3.3V tampoco ayudó.

Renderizado frontal de PCB

Conclusión: cambiar las resistencias de compuerta lateral alta de 4,7 ohmios a 100 ohmios hace que los reinicios ocurran solo la mitad del tiempo en mi configuración de prueba. Entonces, aunque no sé exactamente cómo la EMI está afectando al microcontrolador, sí sé que la reducción de los transitorios de arranque está ayudando.

Parece que revisaste la línea de reinicio. Esa habría sido mi primera conjetura. La segunda conjetura sería una línea de interrupción. Si un pin de interrupción se activa por un ruido transitorio, a veces puede enviar el procesador a un lugar extraño. Así que asegúrese de que las interrupciones no utilizadas estén deshabilitadas, o coloque pequeños condensadores en las líneas de interrupción para que sean más inmunes a los transitorios.
Al diseño parece no importarle lo suficiente separar las rutas de alta corriente de las líneas sensibles. Por ejemplo, veo en la parte superior la conexión izquierda de la derivación de 2 mohm que está prácticamente perdida en un plano de tierra casi desconectado, no puedo ver ninguna conexión de servicio pesado alrededor. También tiene planos de tierra bastante ineficaces en la parte superior e inferior. Están tan marcados por otras huellas. Además, no puedo ver ningún condensador de búfer en el suministro del motor. Por último, pero no menos importante, me pregunto de dónde viene el suministro lógico y su relación con el poder uno. Un diseño tan potente y denso probablemente requiera una acumulación de 4 capas

Respuestas (1)

¿Estás seguro de que es un reinicio real? Podría ser un pico inducido por EMI en otra entrada que controla algún tipo de cambio de modo operativo en su MCU (en mi caso, fue la línea de índice en la entrada del codificador. Si esa cosa falla, desincroniza todo. Fue sucediendo en las entradas del codificador A y B también, pero eso solo hace que el codificador se detenga un poco, mientras que algo como la línea de índice haría que la MCU cambiara completamente los estados operativos).

También podría ser un apagón o un rebote a tierra porque no veo ningún condensador de desacoplamiento grande (es decir, >470uF) para las corrientes del motor.

También podría ser EMI como fue el caso en mi circuito. Cuando me encontré con él, estaba trabajando en un FPGA, así que pude hacer un filtro digital donde todas las entradas infractoras (incluido el reinicio) tendrían que ser estables durante n ciclos antes de ser aceptadas. En una MCU no puede hacer esto, por lo que tendría que fortalecer sus entradas de MCU colocando un filtro RC en la entrada vulnerable lo más cerca posible de la entrada. Hay otras medidas que también puede tomar, como un diseño de PCB ajustado con buenos planos de tierra y bucles pequeños.

También puede ayudar aumentando el tamaño de las resistencias de la puerta (o reemplazándolas con cuentas de ferrita cuya impedancia alcanza su punto máximo en la frecuencia de timbre que mide en el pin de la puerta MOSFET). También puede agregar amortiguadores RC a través de sus terminales de motor BLDC o MOSFET. Todas las cosas mencionadas en este párrafo funcionan para reducir los tiempos de subida/bajada de los transitorios en la parte de potencia de su circuito, lo que reducirá la EMI.

Pero si es EMI, no estoy seguro de por qué no puede verlo en el alcance. En mi caso, pude medir la línea y verla muy claramente (pero es una línea vertical muy delgada). ¿Es posible que su alcance no sea lo suficientemente bueno o que sus cables de medición sean demasiado largos?

EDITAR: en realidad creo que mentí. No recuerdo haber visto mi pico de EMI en el osciloscopio hasta DESPUÉS de que corrigí el problema para que el sistema pudiera operar a través del pico porque si el sistema falla, deja de ver nada y los picos de EMI son eventos espurios que son difíciles de desencadenar en un alcance. Pierde ese extremo final crítico de los datos donde ocurre el evento único no desencadenable en un alcance. Es posible que necesite un DAQ en ejecución donde grabe anchos de banda altos durante minutos para poder desplazarse por todas las formas de onda después del hecho para ver las cosas. La mía fue una corrección de software, por lo que no cambió el EMI en sí, por lo que pude examinarlo después de que se arreglaron las cosas. Con una solución de hardware, por lo que es posible que no lo vea en un alcance después de que se solucione el problema.

Si está desesperado, también puede reducir el tamaño de la resistencia pull-up del pin de reinicio con un capacitor a tierra. Posiblemente incluso reemplazándolo con una derivación para que pueda cortocircuitarlo directamente a +V. Esta es la medida más desesperada pero simple de probar para confirmar si es EMI en el pin de reinicio si no puede observarlo en el alcance. Desafortunadamente, esto no funciona en otras líneas que necesitan cambiar de estado durante la operación.