PWM 驱动
更新时间:2017-08-08 阅读:2515
前言
PWM(pulse-width modulation)指脉宽调制技术,以每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。QN902x包含两路PWM周期和占空比都是8位的PWM输出通道。
初始化
参照例程的system_init进行初始化,配置GPIO。
SystemInit(); pwm_io_config();
PWM_CH0使用
首先进行PWM_CH0(GPIO_P27)的测试。
初始化PWM_CH0以及开启PWM中断
pwm_init(PWM_CH0);
配置PWM输出参数
pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(400, PWM_PSCAL_DIV));
-
PWM_PSCAL_DIV
为PWM的时钟分频系数,在使用开启Timer Bypass的时候为63,不开启时为15,默认开启。 -
PWM_COUNT_US(1000, PWM_PSCAL_DIV)
表示配置PWM的时钟周期为1000us。 -
PWM_COUNT_US(400, PWM_PSCAL_DIV)
表示配置PWM的脉冲宽度为400us。
使能PWM_CH0输出
pwm_enable(PWM_CH0, MASK_ENABLE);
使能后,直接更改PWM的配置,可以实现不同的占空比输出
pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(800, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(1000, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(0, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(400, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(800, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(1000, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(0, PWM_PSCAL_DIV)); pwm_config(PWM_CH0, PWM_PSCAL_DIV, PWM_COUNT_US(1000, PWM_PSCAL_DIV), PWM_COUNT_US(800, PWM_PSCAL_DIV));
禁止PWM_CH0输出
pwm_enable(PWM_CH0, MASK_DISABLE);
禁止PWM的IO复用
pwm_io_dis_config();
PWM_CH1使用
PWM_CH1采用了更大的自定义分频系数配置PWM_CH1的输出。
先初始化PWM_CH1,打开中断。
pwm_io_config(); pwm_init(PWM_CH1);
配置PWM_CH1的输出参数,采用了自定义分频系数
//P2.6 will output pwm wave with period for 1500us and pulse for 1000us pwm_config(PWM_CH1, 119, PWM_COUNT_US(1500, 119), PWM_COUNT_US(1000, 119));
使能PWM_CH1的输出
pwm_enable(PWM_CH1, MASK_ENABLE); pwm_io_dis_config();