hpm5100_pwm_motor_control.ino
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);
}
}