🛠 Controla un motor BLDC con sincronización PWM/ADC en HPM5100
Objetivos
Este tutorial explica cómo explotar las capacidades de control de motor del HPM5100 para manejar un motor sin escobillas (BLDC). El objetivo es entender la sincronización por hardware entre las señales PWM y el muestreo ADC, esencial para el control vectorial (FOC) o el manejo de seis pasos. Utilizaremos los 32 canales PWM y los 4 ADC SAR de 16 bits a 2 MSPS para minimizar la latencia y maximizar la precisión del par.
Material Necesario
- Placa de desarrollo HPM5100 (HPM5151)
- Kit de potencia BLDC adecuado (3 medio-puentes)
- Sondas de corriente y voltaje (o shunts integrados)
- Cables de programación JTAG/SWD
- PC con SDK HPM v1.13.0 instalado
Pasos
- Configuración del SDK : Asegúrese de que la variable de entorno apunta al SDK HPM v1.13.0. Abra una terminal y navegue al ejemplo básico de control de motor.
cd hpm_sdk/samples/drivers/motor_control/basic
- Inicialización de Timers PWM : El HPM5100 tiene timers sincronizados. Configure un timer principal (ej: TMR1) para generar las 6 señales PWM complementarias necesarias para el puente trifásico. La frecuencia debe ser alta (ej: 20 kHz) para reducir pérdidas.
pwm_init_config_t config = {
.clk_src = pwm_clk_src_axi,
.pwm_freq = 20000,
.pwm_sync_src = pwm_sync_src_none,
.pwm_sync_out_en = false,
.pwm_sync_in_en = false,
};
pwm_init(HPM_PWM1, &config);
- Configuración de ADC SAR : Seleccione dos ADC para las fases U y V. La tercera corriente se deduce. Configure un disparo por hardware vinculado al centro del período PWM para muestrear en el momento óptimo (cuando las corrientes son estables).
adc_init_config_t adc_cfg = {
.clk_src = adc_clk_src_ahb,
.sample_res = adc_sample_res_16bit,
.trigger_src = adc_trig_src_hw,
};
adc_init(HPM_ADC1, &adc_cfg);
- Vinculación de Disparo PWM-ADC : Vincule la señal de sincronización de PWM1 al disparo de hardware del ADC. Esto garantiza que cada conversión ADC comience exactamente en el medio de la ventana PWM activa, evitando picos de ruido de conmutación.
pwm_set_sync_in_source(HPM_PWM1, 0, pwm_sync_src_tmr1_sync_out);
adc_set_trigger_source(HPM_ADC1, ADC_TRIG_PWM1_SYNC_OUT);
- Bucle de Control : Implemente un bucle de control simple que lea los valores ADC, calcule el error respecto a la consigna y ajuste el ciclo de trabajo PWM mediante registros. Use DMA para transferir datos ADC a SRAM sin intervención de la CPU.
Verificación
Use un osciloscopio para verificar que los flancos de disparo ADC coincidan con el centro de los pulsos PWM. Asegúrese de que las formas de onda de salida del motor sean limpias y simétricas. Compruebe la ausencia de saturación del ADC durante los picos de corriente.
Para Ir Más Allá
Explore el uso de los 4 amplificadores operacionales PGA integrados para amplificar las señales de corriente de los shunts antes del ADC, mejorando la resolución efectiva sin ruido externo. Pruebe también secuencias de arranque en caliente con rutinas de precarga específicas.