简介:
本文档总结自B站教程“博流智能BL618开发教程8——BL616d的PWM”,本节内容主要介绍BL618如何配置和使用PWM。
视频链接:https://www.bilibili.com/video/BV1F14y1o7P5/?spm_id_from=333.999.0.0
硬件介绍:
数据手册:https://gitee.com/verimaker/BL618EVB/raw/master/BL616_BL618_DS_zh_CN_1.4(open).pdf
BL618拥有4个通道输出PWM,每个通道可以输出2路互补PWM,总共可以从8个引脚输出8路PWM。
引脚定义:
- 在默认情况下(即reg_pwm1_io_sel=0),GPIO 24 - GPIO 27和GPIO 28 - GPIO 31相同,对应PWM的通道0 - 通道3的正向输出。
- 当reg_pwm1_io_sel=1时,GPIO 24为通道0的正向输出,GPIO 25为通道0的反向输出; 同理,GPIO 26/27、28/29、30/31分别为通道1-3的正/反向输出。
开发文档介绍:
文档参考:https://bl-mcu-sdk.readthedocs.io/zh_CN/stable/api_reference/peripherals/pwm_v2.html
(BL616仅支持pwm_v2样例,不支持pwm_v1样例)
PWM的频率可以通过以下三个参数来设置,具体公式如下。四个通道的PWM共用一个频率,但每个通道可以单独配置占空比。
PWM的占空比可以通过以下四个参数来设置,具体公式如下。
配置PWM通道的输出方式的属性如下。
文档中列出了所有PWM相关的函数,具体可参考文档的'Functions'章节。
样例项目1:
本项目主要介绍如何将PWM设置为正常输出/互补输出。
打开bouffalo_sdk_vmg0\examples\peripherals\pwm_v2\pwm_all_channels
项目。
代码简介:
打开mian.c
文件。
board_pwm_gpio_init()
函数用于初始化GPIO 24 - 31,来源于bouffalo_sdk_vmg0\bsp\board\bl616g0\board.c
文件。
目前的PWM引脚设定为默认状态(即reg_pwm1_io_sel=0)。编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
将PWM设置为2路互补(即reg_pwm1_io_sel=1)。
打开bouffalo_sdk_vmg0\bsp\board\bl616g0\board.c
文件,将peripheral_clock_init(void)
函数的GLB_Set_PWM1_IO_Sel(GLB_PWM1_IO_SINGLE_END);
改为GLB_Set_PWM1_IO_Sel(GLB_PWM1_IO_DIFF_END);
编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
样例项目2:
本项目主要介绍如何单独配置每个通道的输出方式。
打开bouffalo_sdk_vmg0\examples\peripherals\pwm_v2\pwm_config_channel
项目。
代码简介:
打开mian.c
文件。
注意,若.positive_polarity和.negative_polarity同时设为HIGH或LOW,则此通道为2路互补输出;若.positive_polarity和.negative_polarity分别设置为HIGH和LOW,则此通道的2路输出相同。
编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
样例项目3:
本项目主要介绍如何定义PWM的死区时间。
打开bouffalo_sdk_vmg0\examples\peripherals\pwm_v2\pwm_deadtime
项目。
死区时间定义如下,具体可参考数据手册。
代码简介:
打开mian.c
文件。
编译、烧录后运行,打开逻辑分析仪可以看见结果如下。