🛠 Pilotez un moteur BLDC avec synchronisation PWM/ADC sur HPM5100
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
- Carte de développement HPM5100 (HPM5151)
- Kit de puissance BLDC adapté (3 demi-ponts)
- Sondes de courant et de tension (ou shunts intégrés au kit)
- Câbles de programmation JTAG/SWD
- PC avec SDK HPM v1.13.0 installé
Étapes
- 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
- 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);
- 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);
- 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);
- 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.