🛠 Controla un motor BLDC con sincronización PWM/ADC en HPM5100

HPMicro HPM5100: Microcontrolador RISC-V de 400 MHz para control de motores y adquisición analógica · avance · Configurez les timers PWM et les ADC SAR 16 bits pour un contrôle moteur précis et temps réel.

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

Pasos

  1. 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
  1. 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);
  1. 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);
  1. 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);
  1. 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.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales