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