hpm5100_pwm_motor_control.ino

HPMicro HPM5100: Microcontrolador RISC-V de 400 MHz con analógica integrada · Archivo : hpm5100_pwm_motor_control.ino · Lenguaje : C · Uso : Générer un signal PWM pour contrôler la vitesse d'un moteur via un pont en H.

Configura el módulo PWM para generar una señal de 20 kHz con un ciclo de trabajo del 50%.

Utiliza el controlador PWM dedicado del HPM5100. El cálculo de recarga depende de la frecuencia de reloj AXI. Ideal para control de motores o iluminación LED. Verifique la correspondencia de los pines PWM físicos con el canal de software elegido.

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);
    }
}

← Volver a la ficha