hpm5100_pwm_motor_control.ino

HPMicro HPM5100 : Microcontrôleur RISC-V 400 MHz avec analogique intégré · Fichier : hpm5100_pwm_motor_control.ino · Langage : C · Usage : Générer un signal PWM pour contrôler la vitesse d'un moteur via un pont en H.

Configure le module PWM pour générer un signal à 20 kHz avec un rapport cyclique de 50%.

Utilise le contrôleur PWM dédié du HPM5100. Le calcul du reload dépend de la fréquence d'horloge AXI. Idéal pour la commande de moteur ou l'éclairage LED. Vérifiez la correspondance des broches PWM physiques avec le canal logiciel choisi.

hpm5100_pwm_motor_control.ino

#include "board.h"
#include "hpm_pwm_drv.h"
#include "hpm_clock_drv.h"

#define PWM_CHANNEL 0
#define PWM_FREQ_HZ 20000
#define PWM_DUTY_CYCLE 50

void init_pwm(void)
{
    pwm_config_t pwm_config;
    pwm_channel_config_t channel_config;
    uint32_t period;

    clock_add_to_group(clock_pwm0, 0);
    
    pwm_get_default_config(&pwm_config);
    pwm_config.clk_src = pwm_clk_src_axi;
    pwm_config.reload = (clock_get_frequency(clock_pwm0) / PWM_FREQ_HZ) - 1;
    pwm_init(HPM_PWM0, &pwm_config);

    pwm_channel_get_default_config(&channel_config);
    channel_config.mode = pwm_mode_edge_aligned;
    pwm_channel_init(HPM_PWM0, PWM_CHANNEL, &channel_config);
    
    period = pwm_config.reload;
    pwm_channel_set_duty_cycle(HPM_PWM0, PWM_CHANNEL, period * PWM_DUTY_CYCLE / 100);
    pwm_channel_enable(HPM_PWM0, PWM_CHANNEL, true);
    pwm_enable(HPM_PWM0, true);
}

void main(void)
{
    board_init();
    init_pwm();
    while (1) {
        /* Dynamic duty cycle adjustment can be added here */
        board_delay_ms(1000);
    }
}

← Retour à la fiche