0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

WiFi-IoT套件的LED灯控制以及PWM控制

电子工程师 来源:HarmonyOS社区 作者:HarmonyOS社区 2021-01-13 10:00 次阅读

功能很简单,就是操作GPIO控制LED亮灭以及PWM输出控制LED明亮度,但是在这个过程中遇到很多问题。

首先是GPIO输出高低电平控制LED灯亮灭。查看官方文提供的原理图,找到灯部分的电路。发现灯板其实有两块,只是其中一块是交通灯板,另外一块是三色RGB灯。控制引脚完全相同。这里以RGB灯板为例。

根据接口再去底板接口那里去查看,可以对应出:

红色--GPIO10_PWM1

绿色--GPIO11_PWM2

蓝色--GPIO12_PWM3

核心板的LED1--GPIO9

接下来的修改就是直接在SDK中的ap/iothardware/led_example.c中进行修改了。里面已经有了GPIO的初始化以及调用了,这里只是增加和修改引脚而已。

注意:例程里面用的GPIO9,也就是核心板上的LED1.如果插上的是RGB灯板,则LED1始终亮,不会随引脚改变而改变。这一点让我怀疑代码怀疑了很久,后来查电路图才发现RGB灯板GPIO9引脚接了红外检测引脚。这个引脚是上拉的,也就是说就是主控下拉让LED1灭,实际上也不会灭。

34a6eeca-5146-11eb-8b86-12bb97331649.png

到这里操作GPIO就完成了,很简单,就在官方的例程里面修改就行了。但是,还没结束,上面也说了,RGB这三个引脚是复用功能,可以复用PWM输出功能,这里继续将代码改为PWM控制。

首先初始化GPIO,然后将这3个引脚设为PWM复用输出功能,并指定PWM的时钟

#define LED_RED WIFI_IOT_IO_NAME_GPIO_10#define LED_GREEN WIFI_IOT_IO_NAME_GPIO_11#define LED_BLUE WIFI_IOT_IO_NAME_GPIO_12

GpioInit();

IoSetFunc(LED_RED, WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);

GpioSetDir(LED_RED, WIFI_IOT_GPIO_DIR_OUT);

IoSetFunc(LED_GREEN, WIFI_IOT_IO_FUNC_GPIO_11_PWM2_OUT);

GpioSetDir(LED_GREEN, WIFI_IOT_GPIO_DIR_OUT);

IoSetFunc(LED_BLUE, WIFI_IOT_IO_FUNC_GPIO_12_PWM3_OUT);

GpioSetDir(LED_BLUE, WIFI_IOT_GPIO_DIR_OUT);

hi_pwm_init(HI_PWM_PORT_PWM1);

hi_pwm_init(HI_PWM_PORT_PWM2);

hi_pwm_init(HI_PWM_PORT_PWM3);

hi_pwm_set_clock(PWM_CLK_160M);

完成初始化后就是功能了,控制pwm占空比调节led亮度。

void LedPWM(uint16 pwm_r, uint16 pwm_g, uint16 pwm_b){

hi_pwm_start(HI_PWM_PORT_PWM1, pwm_r, 1600);

hi_pwm_start(HI_PWM_PORT_PWM2, pwm_g, 1600);

hi_pwm_start(HI_PWM_PORT_PWM3, pwm_b, 1600);}

这一段在while(1)里面循环执行,改变PWM占空比的值。

switch(sta) { case 0: if(pwm_R 《 1500) pwm_R += 5; else { sta = 1; pwm_R = 2; pwm_G = 2; pwm_B = 2; }

break; case 1: if(pwm_G 《 1200) pwm_G += 5; else { sta = 2; pwm_R = 2; pwm_G = 2; pwm_B = 2; }

break; case 2: if(pwm_B 《 1200) pwm_B += 5; else { sta = 0; pwm_R = 2; pwm_G = 2; pwm_B = 2; }

break; } LedPWM(pwm_R, pwm_G, pwm_B); usleep(2);

PWM相关的函数都是在hi_PWM.h中定义的,所以要引用这个头文件,另外这个例子所在的BUILD.gn文件中也要新增其所在的位置:“//vendor/hisi/hi3861/hi3861//include”。

在app所在的BUILD.gn里面的features项目中加入新增的led_example.c所在的路径:“iothardware:led_example”,到这里貌似都完成了设置以及实现。但是编译的时候直接报错:undefined reference to hi_PWM_start以及其他几个函数的错误。

这个问题纠结了我好久。后来还是看连志安的ole驱动中的IIC操作才知道要在hi3861驱动中配置打开PWM功能才会编译PWM部分进代码,不然始终找不到具体的实现。编译通不过。

具体在vendor/hisi/hi3861/hi3861/build/config/usr_config.mk文件中新增CONFIG_PWM_SUPPORT=y 才行。

不熟悉整个框架遇到问题并不好处理。

另外调试PWM过程中发现hi_PWM_start函数中的duty参数不要设置为0。在调试3色时候两色设为0,实际上是白色,都亮了。后来设置为2就ok,三色互不影响。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1551

    浏览量

    107029
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4896

    浏览量

    209880
  • GPIO
    +关注

    关注

    16

    文章

    1132

    浏览量

    50560
  • OpenHarmony
    +关注

    关注

    23

    文章

    3259

    浏览量

    15159

原文标题:WiFi-IoT套件的LED灯控制以及PWM控制

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PWM控制和强制PWM控制的特点

    与不使线圈电流逆流的PWM控制PWM Control)不同,允许线圈电流逆流的PWM控制称为强制PWM
    的头像 发表于 11-01 09:52 1175次阅读
    <b class='flag-5'>PWM</b><b class='flag-5'>控制</b>和强制<b class='flag-5'>PWM</b><b class='flag-5'>控制</b>的特点

    Arduino提供的PWM控制功能入门(2)

    上回我们用 PWM 控制了一盏 LED 灯的亮度,实现了渐明渐暗的效果。
    的头像 发表于 10-31 16:37 775次阅读
    Arduino提供的<b class='flag-5'>PWM</b><b class='flag-5'>控制</b>功能入门(2)

    Arduino提供的PWM控制功能入门(1)

    今天来学习一下 Arduino 提供的 PWM 控制功能,它可以用来控制电机转速,LED 明亮等。
    的头像 发表于 10-31 16:32 1116次阅读
    Arduino提供的<b class='flag-5'>PWM</b><b class='flag-5'>控制</b>功能入门(1)

    单片机pwm控制继电器可以控制LED吗?

    单片机pwm控制继电器可以控制LED
    发表于 10-17 06:58

    单片机PWM控制LED输出呼吸的效果,这个PWM的频率应该设置成多少呢 ?

    单片机PWM控制LED输出呼吸的效果,这个PWM的频率应该设置成多少呢 ?
    发表于 10-15 11:47

    PWM控制方式的幻彩LED控制器电路原理图

    常规的LED控制一般采用PWM信号,通过调节占空比控制一路至多路MOS管或IC进行调光调色功能,市面上大部分LED台灯上采用的就是
    发表于 10-13 10:38 707次阅读
    非<b class='flag-5'>PWM</b><b class='flag-5'>控制</b>方式的幻彩<b class='flag-5'>LED</b><b class='flag-5'>控制</b>器电路原理图

    如何使用MS51 PWM控制UART的RGB LED

    应用:本样本代码使用MS51 PWM控制UART的RGB LED。 BSP 版本: MS51_Series_BSP_Keil_V1.00.004 硬件:NuTiny-MS51FB V1.1 此
    发表于 08-29 06:03

    WIFI控制LED界面

    ledWIFI
    sipower
    发布于 :2023年07月29日 22:19:35

    使用IOT BOLT和SmartPhone控制LED的强度

    电子发烧友网站提供《使用IOT BOLT和SmartPhone控制LED的强度.zip》资料免费下载
    发表于 07-04 10:19 0次下载
    使用<b class='flag-5'>IOT</b> BOLT和SmartPhone<b class='flag-5'>控制</b><b class='flag-5'>LED</b>的强度

    使用Bolt IoT和智能手机控制LED的强度

    电子发烧友网站提供《使用Bolt IoT和智能手机控制LED的强度.zip》资料免费下载
    发表于 06-30 09:51 0次下载
    使用Bolt <b class='flag-5'>IoT</b>和智能手机<b class='flag-5'>控制</b><b class='flag-5'>LED</b>的强度

    如何控制IoT ONE Nixie时钟背光—开/关以及颜色和亮度

    电子发烧友网站提供《如何控制IoT ONE Nixie时钟背光—开/关以及颜色和亮度.zip》资料免费下载
    发表于 06-14 14:26 0次下载
    如何<b class='flag-5'>控制</b><b class='flag-5'>IoT</b> ONE Nixie时钟背光—开/关<b class='flag-5'>以及</b>颜色和亮度

    如何通过MQTT控制RGB LED

    条驱动板。如果我将一个简单的草图上传到控制 PWM 的 WeMos,我的 RGB LED 带会在颜色之间淡化。所以所有硬件都在工作。我
    发表于 05-23 06:44

    如何使用ESP32的LEDC进行PWM控制

    LEDC(LED控制器)是ESP32中的一个功能强大的PWM(脉冲宽度调制)控制器。
    发表于 05-19 11:14 1937次阅读
    如何使用ESP32的LEDC进行<b class='flag-5'>PWM</b><b class='flag-5'>控制</b>?

    PWM输出控制电机

    PWM 输出控制电机电机系列 一、PWM 输出控制电机 1 、相关 IO 介绍 2 、编写 PWM 输出库函数
    发表于 05-06 11:03 2次下载
    <b class='flag-5'>PWM</b>输出<b class='flag-5'>控制</b>电机

    基于51单片机的PWM控制LED灯渐亮渐灭设计资料源程序

    基于51单片机的PWM控制LED灯渐亮渐灭设计资料源程序
    发表于 04-27 15:09 20次下载