🛠 Pilotez un moteur BLDC avec synchronisation PWM/ADC sur HPM5100

HPMicro HPM5100 : Microcontrôleur RISC-V 400 MHz pour la commande moteur et l'acquisition analogique · avance · Configurez les timers PWM et les ADC SAR 16 bits pour un contrôle moteur précis et temps réel.

Objectifs

Ce tutoriel explique comment exploiter les capacités de gestion moteur du HPM5100 pour piloter un moteur sans balais (BLDC). L'objectif est de comprendre la synchronisation matérielle entre les signaux PWM et les échantillonnages ADC, essentielle pour le contrôle vectoriel (FOC) ou le six-step. Nous utiliserons les 32 canaux PWM et les 4 ADC SAR 16 bits cadencés à 2 MSPS pour minimiser la latence et maximiser la précision du couple.

Matériel nécessaire

Étapes

  1. Configuration du SDK : Assurez-vous que la variable d'environnement pointe vers le SDK HPM v11.3.0. Ouvrez un terminal et naviguez vers l'exemple de base moteur.
cd hpm_sdk/samples/drivers/motor_control/basic
  1. Initialisation des Timers PWM : Le HPM5100 possède des timers synchronisés. Configurez un timer principal (ex: TMR1) pour générer les 6 signaux PWM complémentaires nécessaires au pont triphasé. La fréquence doit être élevée (ex: 20 kHz) pour réduire les pertes.
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. Paramétrage des ADC SAR : Sélectionnez deux ADC pour la phase U et V. Le troisième courant est déduit. Configurez un déclenchement matériel (trigger) lié au centre de la période PWM pour échantillonner au moment optimal (quand les courants sont stables).
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. Liaison Trigger PWM-ADC : Liez le signal de synchronisation du PWM1 au trigger matériel de l'ADC. Cela garantit que chaque conversion ADC commence exactement au milieu de la fenêtre PWM active, évitant les pics de bruit de commutation.
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. Boucle de contrôle : Implémentez une boucle de contrôle simple qui lit les valeurs ADC, calcule l'erreur par rapport à la consigne, et ajuste le rapport cyclique PWM via les registres. Utilisez les DMA pour transférer les données ADC vers la SRAM sans intervention CPU.

Vérification

Utilisez un oscilloscope pour vérifier que les fronts de déclenchement ADC coïncident bien avec le centre des impulsions PWM. Assurez-vous que les formes d'onde sur les sorties moteur sont propres et symétriques. Vérifiez l'absence de saturation des ADC lors des pics de courant.

Pour aller plus loin

Explorez l'utilisation des 4 amplificateurs opérationnels PGA intégrés pour amplifier les signaux des shunts de courant avant l'ADC, améliorant ainsi la résolution effective sans bruit externe. Testez également le démarrage à chaud avec une séquence de pré-charge spécifique.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels