Cómo hacer el control de corriente para un motor DC con PWM

Estamos intentando hacer un sistema de balanceo (con una rueda de reacción) con control PID de corriente y ángulo.

Todo el circuito consta de un motor de CC, una fuente de alimentación, un sensor de corriente y un MPU6050 (para ángulo). El proceso del sistema es que el control PID de ángulo determina la cantidad de corriente requerida (en forma de ciclo de trabajo para PWM en un Arduino) y pasa el control PID actual para generar la cantidad de par requerido (para evitar que se sobrecargue). Actual).

Simulé partes de todo el sistema en Simulink y Matlab, pero la implementación importa.

ingrese la descripción de la imagen aquí

Ahora estoy trabajando en la parte actual. Primero instalé un sensor de corriente (INA260) en la línea + del motor DC, pero el problema es que los datos de corriente deben ser continuos. El motor está controlado por PWM en el controlador del motor y, por lo tanto, los datos tienen mucho ruido debido a las señales PWM (lo verifiqué graficando en una PC).

Anteriormente usé un sensor de corriente analógico ACS758, pero tampoco pude manejar este problema. Hasta donde yo sé, el uso de filtros para la señal actual podría generar algún retraso en el sistema, pero no conozco una buena forma de reunir datos sin un filtro.

¿Y cómo puedo hacer el control PI actual? ¿Hay alguna buena solución para eso?

ingrese la descripción de la imagen aquí

  • Ajuste PWM = 3000 Hz
  • MCU = Arduino Uno
  • MPU6050 (sensor de ángulo)
  • MD30C (controlador de motor)
  • SPG300 (motor de CC de 300 W)
  • INA260 (sensor de corriente/basado en resistencia de derivación/I2C/hasta 15 A)
  • ACS758 (sensor de corriente/sensor Hall/analógico/hasta 15 A))

Señal actual recogida:

ingrese la descripción de la imagen aquí

su INA ni siquiera puede hacer 1000 muestras por segundo. averigüe cuántos puede hacer, entonces tendrá un objetivo aproximado para su filtro. incluso a "solo" 3k, debe tener suficiente tiempo para filtrar sin disminuir la frecuencia de muestreo o desenfocar la información útil.

Respuestas (2)

Esta es una pregunta de hace un año, y no hemos recibido respuesta del OP, pero pensé que podría hacer algunas sugerencias en caso de que alguien más tenga un problema similar.

Puede eliminar de manera efectiva el ruido en la señal actual muestreándola justo después de que la señal PWM se ENCIENDA. Al menos esto debería dar una lectura consistente proporcional a la corriente. Y podría muestrear el PWM de 3 kHz a quizás 10 a 20 muestras por segundo y realizar un cálculo rápido de RMS real.

Un sensor de efecto Hall es una buena manera de leer la corriente del motor, pero también hay sensores de derivación de corriente lateral alta como el HV7800 y el INA195 que son económicos y lo suficientemente rápidos.

El filtro de paso bajo analógico es obligatorio para el suavizado de ADC. Debe aumentar la frecuencia PWM, usar una frecuencia de muestreo lo suficientemente alta para el ADC con un LPF analógico con una frecuencia de muestreo de corte de 1/3 x ADC. Luego procese todo en la MCU usando un filtro digital LPF FIR. Por supuesto habrá un ligero retraso que limitará la dinámica del sistema, pero no tanto si se hace correctamente.

Supongo que necesitarías una MCU con suficientes recursos (velocidad de cómputo).