《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第4章 TWen-ASR-ONE PWM调光

4.1 PWM简介

脉冲宽度调制(PWM),是英文“ Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制,指在一个周期内,控制信号处于高电平的时间占据整个信号周期的百分比,也就是调节占空比。

关于PWM网上资料很多,这里就不在赘述了。

4.2 PWM调光实现

这里再前一个例子上修改,这里还是来控制RGB灯。

在这里插入图片描述

以蓝灯为例。

图形代码如下:

在这里插入图片描述

字符代码如下:

#include "asr.h"
#include "setup.h"

uint32_t snid;
void ASR_CODE();

//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
/*描述该功能...
*/
void ASR_CODE(){
  if((snid) == 4){
    digitalWrite(13,1);
  }
  if((snid) == 6){
    digitalWrite(13,0);
  }
  if((snid) == 8){
    digitalWrite(13,0);
    setPinFun(12,SECOND_FUNCTION);
    pwm_set_duty(PWM3,500,1000);
  }
  if((snid) == 10){
    digitalWrite(13,0);
    setPinFun(12,SECOND_FUNCTION);
    pwm_set_duty(PWM3,10,1000);
  }
}

void setup()
{
  //{speak:小蝶-清新女声,vol:10,speed:10}
  //{playid:10001,voice:欢迎使用智能管家,用智能管家唤醒我。}
  //{playid:10002,voice:我退下了,用智能管家唤醒我}
  //{ID:2,keyword:"唤醒词",ASR:"智能管家",ASRTO:"我在"}
  //{ID:4,keyword:"命令词",ASR:"打开红灯",ASRTO:"好的,马上打开红灯"}
  //{ID:6,keyword:"命令词",ASR:"关闭红灯",ASRTO:"好的,马上关闭红灯"}
  //{ID:8,keyword:"命令词",ASR:"蓝灯中等亮度",ASRTO:"蓝灯中等亮度"}
  //{ID:10,keyword:"命令词",ASR:"蓝灯最小亮度",ASRTO:"蓝灯最小亮度"}
  PWM_enble(PWM3,1000,1000,1);
  setPinFun(12,FIRST_FUNCTION);
}
复制代码

PWM的开发很简单,天问Block IDE提供了以下模块:初始化、设置占空比。

在这里插入图片描述

但这里需要注意的是,需要改变GPIO的输出模式。根据参考手册。

在这里插入图片描述

PWM3默认的模式是普通的GPIO,需要将其设置为第二模式(PWM)。

接下来就和上一章一样,编译下载。 最后的效果如下:

我:智能管家

TWen-ASR-ONE:我在

我:蓝灯中等亮度

TWen-ASR-ONE:蓝灯中等亮度

在这里插入图片描述

我:蓝灯最小亮度

TWen-ASR-ONE:蓝灯最小亮度

在这里插入图片描述

Guess you like

Origin juejin.im/post/7040627966253989896