bldc se bloquea después de la detección cruzada '0'

0

Estoy diseñando un controlador BLDC (sin sensor) con el microcontrolador KL04. Estoy implementando una detección de cruce de cero para la conmutación de los estados. El flujo que estoy implementando es:

  1. duty cycly = 30%.
  2. el bldc busca el cruce '0' y lo encuentra.
  3. conmutaciones hechas en ese intervalo de tiempo después de eso. es entonces un bucle sin fin.

Los pasos anteriores están bien y estoy detectando que el '0' se cruza correctamente. Estoy usando un BLDC sin carga. Tenga en cuenta que estoy programando el software para que el ciclo de trabajo de PWM sea del 30%.

Ahora acabo de colocar una pequeña carga, una cuchilla / rotor para el motor. Lo que sucede a continuación es confuso.

El software detecta el cruce '0' y luego se bloquea. La onda del osciloscopio se muestra abajo

Muestra un '0' correcto. Esto sucede en una pequeña espiga amarilla. Pero luego, después de algún tiempo, se estrella. Incluso el pwm no se muestra en ese canal.

Sin la carga / cuchillas, mi motor toma alrededor de 1 amp y el rotor toma alrededor de 1.2 amps. Por lo tanto, sabemos que hay una carga.

¿Puede alguien explicar dónde estoy cometiendo algunos errores, por favor?

    
pregunta Board-Man

2 respuestas

2

Esto es solo un tiro en la oscuridad, porque hay muchas posibilidades de software y hardware. Por favor, no vote "abajo" mi respuesta, ya que solo trato de ayudarlo a solucionar problemas, incluso si no puedo ofrecer una solución segura.

Desde el punto de vista del software, me viene a la mente que cualquier procesamiento que se active después del cruce por cero en la detección, no siempre se completa lo suficientemente rápido como para estar listo para la próxima detección. No dijo si la detección de cruce 0 desencadena una interrupción de hardware o simplemente se detecta y trata dentro de un bucle de muestreo. La metodología de interrupción seguramente empeoraría las cosas si no tomara medidas para garantizar que la rutina de servicio de interrupción (ISR para abreviar) no se pudiera interrumpir nuevamente antes de completar. Pero incluso en un bucle simple, es posible que un error en la lógica del programa cause una "explosión" de la pila, si una subrutina puede llamarse a sí misma para responder a un evento (recursión) sin ninguna limitación. Para probar cosas como esta, es posible que tenga que agregar un LED o dos a su sistema que se puede controlar mediante programación con muy poca sobrecarga. Esto le permitirá hacer cosas como encender un LED cuando ingresa en una rutina y apagarlo cuando complete. O si se permite la recursión, encienda el LED cuando se exceda un contador de límite estático. Al menos, esto le dirá si siempre es la misma rutina o punto en el programa en el que se está atascando. Puede ser una tarea ardua y larga dividir sucesivamente un problema como este en posibilidades, para finalmente aislar el código del problema. Pero una vez que tenga algo como uno o dos LED adicionales para disparar, puede volver lentamente a la información que necesita para identificar el problema.

Ahora, también existe la posibilidad de que haya un problema de hardware insidioso aquí. Una regla de oro para mí (aunque no siempre es fácil de saber) es que cuanto más aleatoria es la naturaleza de una falla, más probable es que sea un problema de hardware. Por el contrario, cuanto más previsible sea un fallo, más probable es que esté programando. Ahora dijo "después de un tiempo" se bloquea y se bloquea. Si este "while" siempre es de 1.745 segundos (solo un número de ejemplo), entonces sospecharé que está programando. Pero si "en cualquier lugar es instantáneamente a muchos segundos después", luego consideraría algunos problemas de hardware. Por ejemplo, si el problema es realmente dependiente de la carga, puede ser que bajo carga el motor esté generando más emi o picos de ruido en el bus de alimentación, cualquiera de los cuales podría regresar a su electrónica o MCU.

Buena suerte, y espero que algo de esto ayude.

    
respondido por el Randy
2

Llámeme anticuado y sin conocimiento de estos nuevos motores sin escobillas, pero no se supone que la conmutación ocurra cuando la corriente cae a cero, no el voltaje. Cualquier motor bajo carga se parece principalmente a una resistencia. La resistencia representa la potencia entregada a la carga mecánica (y también las pérdidas en el motor), pero siempre hay inductancia de fuga y esto está en serie con el motor y la inductancia de fuga puede "aparecer" ser muy grande en cargas ligeras.

Esto significa que la corriente aún podría ser un valor muy alto cuando el voltaje cae a cero y, sin tener esto en cuenta, se libera energía muy rápidamente, lo que podría provocar una chispa y EMI, al restablecer la CPU.

Habiendo dicho eso, este mecanismo no debería hacer que la CPU se bloquee a menos que tenga un diseño de PCB deficiente o una placa base pobre.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas