nRF52832-基本外设使用:PWM使用

nRF52832-PWM使用

环境介绍

PC环境:Windows
IDE环境:ARM-MDK5
SDK环境:nRF5 SDK v15.1.0
硬件环境:nRF52832开发板(外设配置与官方pca10040开发板一致)

使用官方的pwm_library例程,该位于nRF5_SDK_15.1.0_a8c0c4d\examples\peripheral\pwm_library\pca10040\blank\arm5_no_packs目录下。
注:pca10040代表nRF52832例程,blank代表基础应用工程,ARM-MDK5选择arm5_no_packs

PWM使用配置

PWM配置步骤如下:

  1. 使用定时器实例化PWM
  2. 实现回调函数
  3. PWM配置,可选择同时配置1个通道或两个通道以及其输出引脚,其他配置可使用独立函数进行配置
  4. 初始化PWM配置
  5. 使能PWM

PWM相关参数说明:

  • 定时器一共有5个:timer0~4,所以最多实例5个PWM
  • 使用SoftDevice时,timer0不能使用
  • 每个PWM实例最多可配置2个通道

官方源码分析

官方源码中PWM应用在main.c文件实现,本文根据个人理解作相应的注释,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
APP_PWM_INSTANCE(PWM1,1);                   // 使用定时器1实例化PWM,命名为PWM1

static volatile bool ready_flag; // PWM指示标志位

void pwm_ready_callback(uint32_t pwm_id) // PWM回调函数
{
ready_flag = true;
}

int main(void)
{
ret_code_t err_code;

/* 2-channel PWM配置, 频率200Hz, 输出在P17、P18引脚. */
app_pwm_config_t pwm1_cfg = APP_PWM_DEFAULT_CONFIG_2CH(5000L, BSP_LED_0, BSP_LED_1);

/* 切换第二通道的极性. */
pwm1_cfg.pin_polarity[1] = APP_PWM_POLARITY_ACTIVE_HIGH;

/* 初始化和使能 PWM. */
err_code = app_pwm_init(&PWM1,&pwm1_cfg,pwm_ready_callback);
APP_ERROR_CHECK(err_code);
app_pwm_enable(&PWM1);

uint32_t value;
while (true)
{
for (uint8_t i = 0; i < 40; ++i)
{
value = (i < 20) ? (i * 5) : (100 - (i - 20) * 5);

ready_flag = false;
/* 设置通道0的占空比(1~100),并等到设置完成 */
while (app_pwm_channel_duty_set(&PWM1, 0, value) == NRF_ERROR_BUSY);

/* 等待回调函数处理,然后设置通道1的占空比 */
while (!ready_flag);
APP_ERROR_CHECK(app_pwm_channel_duty_set(&PWM1, 1, value));
nrf_delay_ms(25); //每25ms改变一次
}
}

}

官方的例程实现过程以及效果:

  • 通过定时器1来实例化PWM1
  • 实现PWM1的回调函数
  • 在主函数中配置PWM1的同个通道:周期200Hz,使用P17、P18引脚
  • 单独配置通道1的输出极性搞(通道0输出极性默认低)
  • 初始化和使能PWM1
  • 每25ms设置一次通道0、1的占空比(两个通道占空比一样,极性相反)

实现效果:LED1(P17)由亮变暗和LED2(P18)由暗变亮

注:占空比的设置必须在PWM使能后

使用示波器检测P17、P18引脚的效果如下:

资源参考

官方文档:http://infocenter.nordicsemi.com/index.jsp

例程说明位于官方文档目录:Software Development Kit > nRF5 SDK > nRF5 SDK v15.1.0 > Examples > Hardware peripheral examples > PWM Library Example

timer相关API函数说明位于官方目录:Software Development Kit > nRF5 SDK > nRF5 SDK v15.1.0 > API Reference > SDK common libraries > Pulse-width modulation (PWM)

代码烧录

  1. 擦除FLASH
  2. 烧写应用程序

具体操作参考:nRF52832-程序下载

本文标题:nRF52832-基本外设使用:PWM使用

文章作者:LGG001

发布时间:2018年09月09日 - 13:09

最后更新:2019年01月21日 - 20:01

原始链接:http://yoursite.com/2018/09/09/nRF52832-基本外设使用-PWM使用/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
Thank You For Your Approval !