DA14683的PWM操作
Date: 2018.11.12
Create: Jim
工程例程
我们打开开发环境,导入以下Demo:
这个Demo有所有外设的使用例程。
初始化定时器PWM
找到 peripherals_demo->demos->demo_timer2.c
以下是demo程序使用定时器PWM的关键接口:
void demo_timer2_init(void)
这个函数主要把PWM参数置0
然后设置Timer2的时钟分频为4,这里系统时钟是16M,4分频就是4M.
再调用hw_timer2_set_frequency(100);把PWM输出频率设置为40K,计算方法是:
Fre=(sys_clock/div/100)
假设不改变系统时钟和分频的情况下,我们要把PWM输出频率设置为10K,则只要把
hw_timer2_set_frequency这个函数传入的形参改为400即可。
PWM输出参数修改
修改PWM输出频率
当我们初始化完PWM参数以后,如果想修改PWM输出频率,可以直接调用以下接口:
hw_timer2_set_frequency(pwm_freq);
pwm_freq参数的使用为:
Fre=(sys_clock/div/pwm_freq)
修改PWM输出占空比
修改PWM引脚的输出占空比,可以调用以下函数实现:
通道选择
HW_TIMER2_PWM是TIMER2的PWM输出通道选择,可选通道如下:
TIMER2总共有三个PWM通道,在DA14683的DateSheet中可以找到相关描述:
在参考原理图中,这三个引脚是以LED123的形式标注出来的,如果我们项目中并未使用到TIMER2的PWM,我们可以把这三个引脚当普通GPIO口来用,分别对应P2_5,P2_6,P2_7
占空比
void hw_timer2_set_pwm_start_end(HW_TIMER2_PWM pwm, uint16_t start, uint16_t stop)
这个函数的后面两个形参分别代表PWM在一个周期内开始输出高电平和结束高电平的时间。
如果我们的PWM输出频率是10K,那么就代表一秒震动10000次,即0.1ms一个周期。
如果uint16_t start这个型参传入的是0
uint16_t stop 传入的是pwm_freq_q
(pwm_freq_q = hw_timer2_get_frequency() / 4; // 1/4占空比)
注:hw_timer2_get_frequency()这个函数是获取当前PWM频率的函数。
那么PWM对应通道的输出就是从周期起始处开始输出高电平。
如果start形参传入的是5,stop形参传入的是pwm_freq_q(25)
那么PWM对应通道的输出就是从周期1/5处开始输出高电平。
需要更详细的说明可以参考以下SDK中的说明:
到此,我们的占空比修改就结束了。
暂停PWM输出
用户可以调用以下接口来暂停PWM输出:
hw_timer2_set_sw_pause(true);
取消暂停则传入形参false,如下:
hw_timer2_set_sw_pause(false);
检擦当前PWM状态
static inline bool hw_timer2_get_sw_pause(void)
调用这个接口可以检查当前PWM是输出状态还是暂停状态。