PWM 使用指南¶
概述¶
BK7238有六个32位PWM通道,标记为PWM0~5(支持定时器模式)。每个PWM通道有三个模式:定时器模式、PWM模式和捕获模式。 每个通道的每个模式都用32位计数进行多路复用。
PWM模块的主要功能如下所示:
计数器在一个方向上增加,并在溢出到最大值时自动从0开始继续计数
每个通道可以单独启用,每个通道的模式可以单独配置。
在捕获模式下,能够在两个上升沿、两个下降沿或双沿之间连续计数
每个PWM通道的可配置PWM周期和占空比
可以在定时器模式下读取实时计数值。
PWM模式¶
//开启 PWM
channel=1; //pwm1
frequency=(260000/1000)*2000; //2 KHz
duty_cycle1= frequency/4; //高电平占空比 1/4
duty_cycle12= 0;
duty_cycle13= 0;
bk_pwm_initialize(channel, (260000/1000)*frequency, duty_cycle1,duty_cycle12,duty_cycle13);
bk_pwm_start(channel1);
//更新pwm 参数
frequency=(260000/1000)*1000; //1 KHz
duty_cycle1= frequency/2; //高电平占空比 1/2
bk_pwm_update_param(channel, frequency, duty_cycle1);
捕获模式¶
#define PWM_CAP_POS_MODE (0x04) // Capture (pos -> pos)
#define PWM_CAP_NEG_MODE (0x05) // Capture (neg -> neg)
#define PWM_CAP_EDGE_MODE (0x06) // Capture (edge -> edge)
//开启 PWM 捕获
channel=1;
cap_mode=PWM_CAP_POS_MODE;
bk_pwm_capture_initialize(channel, cap_mode);
bk_pwm_start(channel);
//读取捕获值
cap_value = bk_pwm_get_capvalue(channel1);
bk_printf("pwm : %d cap_value=%x \r\n", channel1, cap_value);