发帖
12 0 0

【PWM】基于AI-M61-32s

WangChong
论坛元老

77

主题

859

回帖

1万

积分

论坛元老

积分
11388
小安派&M61基本系统教程 2149 12 2023-10-27 12:09:00
本帖最后由 WangChong 于 2023-10-27 12:14 编辑

PWM的详细教程请参考泽哥的文章,当前文章基于泽哥的文章进行补充。



1- 零基础开发小安派-Eyes_DU之【PWM循环呼吸灯】
http://ai-thinker.com/forum.php?mod=viewthread&tid=279
(出处: 物联网开发者社区-安信可论坛)

2- http://ai-thinker.com/forum.php? ... pwm&_dsign=d510fc0b


直接上代码,我的代码也是基于泽哥的。
  1. #include "bflb_mtimer.h"
  2. #include "bflb_pwm_v2.h"
  3. #include "bflb_clock.h"
  4. #include "bflb_gpio.h"
  5. #include "board.h"

  6. struct bflb_device_s *pwm;
  7. struct bflb_device_s *gpio;

  8. #define PWM_PERIOD_MAX 255

  9. int main(void)
  10. {
  11.     int i;
  12.     board_init();

  13.     pwm = bflb_device_get_by_name("pwm_v2_0");
  14.     gpio = bflb_device_get_by_name("gpio");

  15.     // 白灯
  16.     bflb_gpio_init(gpio, 29, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  17.     /* period = .XCLK / .clk_div / .period = 40MHz / 40 / 1000 = 1KHz */
  18.     struct bflb_pwm_v2_config_s cfg = {
  19.         .clk_source = BFLB_SYSTEM_XCLK,
  20.         .clk_div = 40,
  21.         .period = PWM_PERIOD_MAX,
  22.     };

  23.     /*初始化PWM输出*/
  24.     bflb_pwm_v2_init(pwm, &cfg);
  25.     bflb_pwm_v2_start(pwm);

  26.     while (1)
  27.     {

  28.         // 白灯呼吸亮灭
  29.         bflb_pwm_v2_channel_positive_start(pwm, PWM_CH1); // 使能白灯通道

  30.         for (i = 0; i < PWM_PERIOD_MAX; i++)
  31.         {
  32.             bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH1, 0, i);

  33.             bflb_mtimer_delay_ms(5);
  34.         }
  35.         for (i = PWM_PERIOD_MAX; i > 0; i--)
  36.         {
  37.             bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH1, 0, i);

  38.             bflb_mtimer_delay_ms(5);
  39.         }
  40.         bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH1); // 失能白灯通道
  41.     }
  42. }
复制代码
这里主要说明的是这个文档的信息。我需要额外补充一下。
  • 首先,[color=rgba(0, 0, 0, 0.87)]Ai-M61-32S-Kit 的规格书中,只说明了哪些端口可以用PWM0,并没有说明哪些端口用什么通道。
  • [color=rgba(0, 0, 0, 0.87)]需要查看具体的通道的话则需要查看,BL616/618的文档。文档如下:

上传的附件: bl616_bl618_ds_zh_cn_1.4.pdf (1023.13 KB, 下载次数: 3)
[color=rgba(0, 0, 0, 0.87)]

解释说明:
关于通道,请查看管脚定义的章节。 拿GPIO21 举例(开发板上的引脚),如下代表这个IO可以支持两个PWM通道,正PWM通道1, 和负PWM通道2,其他的同理.
360截图16770813227872.png

下图为树莓派PICO逻辑分析仪捕获的数据:

360截图16570131356235.png

360截图176402118311197.png


360截图18720123286649.png





──── 0人觉得很赞 ────

使用道具 举报

2023-10-27 12:29:08
插个眼给七哥看,证明我来过
2023-10-27 13:43:22
2023-10-27 14:16:26
插个眼给七哥看,证明我来过
2023-10-27 15:04:41
学习学习
2023-10-27 17:03:28
2023-10-27 17:52:29
学习学习
2023-10-27 20:54:32
王哥666
2023-10-27 21:34:40
王哥666
2023-10-27 22:06:40
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 28290 个
  • 话题数: 40269 篇