简介:
本文档总结自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。
![](https://verimake.com/assets/files/2023-08-03/1691049526-673832-image.png)
引脚定义:
- 在默认情况下(即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://verimake.com/assets/files/2023-08-03/1691049536-333161-image-5.png)
开发文档介绍:
文档参考:https://bl-mcu-sdk.readthedocs.io/zh_CN/stable/api_reference/peripherals/pwm_v2.html
(BL616仅支持pwm_v2样例,不支持pwm_v1样例)
PWM的频率可以通过以下三个参数来设置,具体公式如下。四个通道的PWM共用一个频率,但每个通道可以单独配置占空比。
![](https://verimake.com/assets/files/2023-08-03/1691049542-6914-image-1.png)
PWM的占空比可以通过以下四个参数来设置,具体公式如下。
![](https://verimake.com/assets/files/2023-08-03/1691049548-378344-image-4.png)
配置PWM通道的输出方式的属性如下。
![](https://verimake.com/assets/files/2023-08-03/1691049553-508320-image-2.png)
文档中列出了所有PWM相关的函数,具体可参考文档的'Functions'章节。
![](https://verimake.com/assets/files/2023-08-03/1691049558-28602-image-3.png)
样例项目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
文件。
![](https://verimake.com/assets/files/2023-08-03/1691049563-941743-image-7.png)
![](https://verimake.com/assets/files/2023-08-03/1691049567-717729-image-6.png)
目前的PWM引脚设定为默认状态(即reg_pwm1_io_sel=0)。编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
![](https://verimake.com/assets/files/2023-08-03/1691049572-539526-image-8.png)
将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);
![](https://verimake.com/assets/files/2023-08-03/1691049578-709540-image-9.png)
编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
![](https://verimake.com/assets/files/2023-08-03/1691049582-877591-image-10.png)
样例项目2:
本项目主要介绍如何单独配置每个通道的输出方式。
打开bouffalo_sdk_vmg0\examples\peripherals\pwm_v2\pwm_config_channel
项目。
代码简介:
打开mian.c
文件。
![](https://verimake.com/assets/files/2023-08-03/1691049599-277056-image-11.png)
注意,若.positive_polarity和.negative_polarity同时设为HIGH或LOW,则此通道为2路互补输出;若.positive_polarity和.negative_polarity分别设置为HIGH和LOW,则此通道的2路输出相同。
![](https://verimake.com/assets/files/2023-08-03/1691049604-44599-image-12.png)
![](https://verimake.com/assets/files/2023-08-03/1691049607-718705-image-13.png)
编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
![](https://verimake.com/assets/files/2023-08-03/1691049611-145776-image-14.png)
样例项目3:
本项目主要介绍如何定义PWM的死区时间。
打开bouffalo_sdk_vmg0\examples\peripherals\pwm_v2\pwm_deadtime
项目。
死区时间定义如下,具体可参考数据手册。
![](https://verimake.com/assets/files/2023-08-03/1691049621-479421-image-15.png)
代码简介:
打开mian.c
文件。
![](https://verimake.com/assets/files/2023-08-03/1691049625-394339-image-16.png)
![](https://verimake.com/assets/files/2023-08-03/1691049628-817968-image-17.png)
![](https://verimake.com/assets/files/2023-08-03/1691049633-23975-image-18.png)
编译、烧录后运行,打开逻辑分析仪可以看见结果如下。
![](https://verimake.com/assets/files/2023-08-03/1691049641-271747-image-19.png)