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

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

3天内不再提示

【产品应用】AWorksLP 样例详解(MR6450)——PWM(单通道)

AGk5_ZLG_zhiyua 来源:未知 2023-01-04 23:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

AWorksLP 对外设进行了高度抽象化,为同一类外设提供了相同的接口,应用程序可以轻松跨平台。本文以MR6450(点击了解详情)平台为例,介绍AWorksLP PWM 外设基本用法。

6086d666-8c42-11ed-bfe3-dac502259ad0.jpg  简介

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。以下简述几个关键的概念:

60961ae0-8c42-11ed-bfe3-dac502259ad0.png

图1

  • PWM周期:指信号从高电平到低电平再回到高电平的时间,如上图T所示。
  • PWM频率一秒内PWM周期的次数。
  • 占空比:一个周期内高电平持续时间所占的比例即(T1 / T)。
  • 脉宽时间:高电平时间。

6086d666-8c42-11ed-bfe3-dac502259ad0.jpg  接口介绍

函数列表:

函数原型 简要描述
aw_err_t aw_pwm_enable (int fd); 使能PWM设备输出
aw_err_t aw_pwm_disable (int fd); PWM设备输出停止
aw_err_t aw_pwm_accurate_output (int fd, uint32_t period_num); 精确输出 period_num 个周期PWM
aw_err_t aw_pwm_config_set (int fd, aw_const aw_pwm_config_t *p_config); 设置PWM设备参数配置
aw_err_t aw_pwm_config_get (int fd, aw_pwm_config_t *p_config); 获取PWM设备的配置参数
aw_err_t aw_pwm_config_frac_set (int fd, aw_const aw_pwm_config_frac_t *p_config); 以更加精确的形式设置PWM设备的参数
aw_err_t aw_pwm_config_frac_get (int fd, aw_pwm_config_frac_t *p_config); 获取PWM设备的分数形式配置参数

下表为PWM接口相关结构体类型。

结构体类型表:

类型

简要描述

aw_pwm_config_t

PWM配置参数结构体

aw_pwm_config_frac_t

PWM配置参数结构体(分数形式),用分数表示,更精确

PWM 配置信息说明:

1. aw_pwm_config_t

typedef struct { 
    uint32_t duty_ns;
    uint32_t period_ns;
    uint32_t is_inverse;
} aw_pwm_config_t;
PWM配置参数结构体。

成员详解:

  • duty_ns:pwm周期中高电平的有效时间 ns为单位。
  • period_ns:pwm周期ns为单位。
  • is_inverse:输出波形是否反相,0表示不反相。

2. aw_pwm_config_frac

typedef struct aw_pwm_config_frac { 


    uint32_t duty_numerator;
    uint32_t duty_denominator; 
    uint32_t period_numerator;
    uint32_t period_denominator;
    uint32_t is_inverse;
} aw_pwm_config_frac_t;

PWM配置参数结构体(分数形式),用分数表示,更精确。

成员详解:
  • duty_numerator:PWM周期中高电平的有效时间分子部分。

  • duty_denominator:PWM周期中高电平的有效时间分母部分。

  • period_numerator:PWM周期分子部分。

  • period_denominator:PWM周期分母部分。

  • is_inverse:PWM输出波形输出是否反向,0:不反向,1:反向。

6086d666-8c42-11ed-bfe3-dac502259ad0.jpg  使用样例

AWorksLP SDK相关使用请参考《AWorksLP SDK快速入门(MR6450)——开箱体验》一文,本文不在赘述。

1. PWM单通道输出功能{SDK}demosperipheralpwm路径下为PWM例程,例程关键代码如下:
/**
 * rief PWM演示例程入口
 * 
eturn 无
 */
aw_local void* __task_handle (void *arg)
{
    uint32_t    period1 = 2000000;      /* (ns) */
    uint32_t    period2 = 1000000;      /* (ns) */
    int         fd;
    int         ret;
    aw_pwm_config_t         pwm_config;


    aw_kprintf("
PWM demo testing...
");
    fd = aw_open(CONFIG_DEMO_PWM_DEVICE_NAME, AW_O_RDWR, 0);
    if(fd < 0){
        aw_kprintf("pwm open failed 
");
        aw_close(fd);
        return 0;
    }
    ret = aw_pwm_config_get(fd, &pwm_config);


    /* period 配置不可以为0
     * duty配置为0,这时可以配置成功:输出一直为低
     * duty配置为peroid,占空比为100%,也可配置成功:输出一直为高
     * PWM正在进行输出,不可配置 */
    pwm_config.duty_ns = period1 / 2;
    pwm_config.is_inverse = 0;
    pwm_config.period_ns = period1;
    aw_pwm_config_set(fd, &pwm_config);
    while(1) {


        /* 配置 PWM 的有效时间(高电平时间)50% ,周期 period1*/
        aw_pwm_config_set(fd, &pwm_config);
        aw_pwm_enable(fd);      /* 使能通道 */
        aw_mdelay(250);
        aw_pwm_disable(fd);     /* 禁能通道 */
        aw_mdelay(250);
        
        /* 输出五个周期pwm波*/
        aw_pwm_accurate_output(fd, 5);


        /* 配置 PWM 的有效时间(高电平时间)2% ,周期 period1*/
        pwm_config.duty_ns =  period1 / 50;
        aw_pwm_config_set(fd, &pwm_config);
        aw_pwm_enable(fd);      /* 使能通道 */
        aw_mdelay(250);
        aw_pwm_disable(fd);     /* 禁能通道 */
        aw_mdelay(250);


        pwm_config.duty_ns = period2 / 2;
        pwm_config.period_ns = period2;
        /* 配置 PWM 的有效时间(高电平时间)50% ,周期 period2*/
        aw_pwm_config_set(fd, &pwm_config);
        aw_pwm_enable(fd);      /* 使能通道 */
        aw_mdelay(250);
        aw_pwm_disable(fd);     /* 禁能通道 */
        aw_mdelay(250);




        /* 配置 PWM 的有效时间(高电平时间)2% ,周期 period2*/
        pwm_config.duty_ns = period2 / 50;
        aw_pwm_config_set(fd, &pwm_config);
        aw_pwm_enable(fd);      /* 使能通道 */
        aw_mdelay(250);
        aw_pwm_disable(fd);     /* 禁能通道 */
        aw_mdelay(250);


        pwm_config.duty_ns = period1 / 2;
        pwm_config.period_ns = period1;
    }


    return 0;
}
例程默认使用pwm3_chan4对应开发板的位置如图2所示:

60d23bec-8c42-11ed-bfe3-dac502259ad0.png

图2pwm排针

上述代码中使用aw_pwm_config_get接口获取PWM当前的配置信息,PWM周期中高电平的有效时间为1000000ns,PWM周期为2000000ns,也就是设置PWM的占空比为50%。使用aw_pwm_config_set接口设置PWM。使用aw_pwm_enable接口使能PWM,使用aw_pwm_disable接口关闭PWM,使用aw_pwm_accurate_output接口输出任意个PWM波。

在while循环中每间隔一段时间通过设置PWM的参数,从而输出各种PWM的波形,下图为例程中输出的各种PWM波形。

60eead72-8c42-11ed-bfe3-dac502259ad0.png

图3占空比50%,周期2ms

60fe2356-8c42-11ed-bfe3-dac502259ad0.png

图4占空比2%,周期2ms

610c8892-8c42-11ed-bfe3-dac502259ad0.png

图5占空比50%,周期1ms

6121e552-8c42-11ed-bfe3-dac502259ad0.png

图6占空比2%,周期1ms

2.蜂鸣器输出{SDK}demosperipheraluzzer路径下为蜂鸣器例程,例程关键代码如下:
/**
 * rief 建立蜂鸣器例程入口
 * 
eturn 无
 */
aw_local void* __task_handle (void *arg)
{
    int             fd;
    fd = aw_open("/dev/Buzzer", AW_O_RDWR, 0);
    if(fd < 0){
        aw_kprintf("Buzzer open failed 
");
        aw_close(fd);
        return 0;
    }


    while(1) {
        /* 强度调节设备驱动无源蜂鸣器 */
        aw_buzzer_loud_set(fd, 80); /* 设置蜂鸣器鸣叫强度 */
        aw_buzzer_beep(fd, 500);    /* 启动蜂鸣器延时500ms */


        /* GPIO驱动直流蜂鸣器 */
        aw_buzzer_loud_set(fd, 50); /* 设置蜂鸣器鸣叫强度 */
        aw_buzzer_on(fd);         /* 启动蜂鸣器 */
        aw_mdelay(500);         /* 延时500ms */
        aw_buzzer_off(fd);        /* 关闭蜂鸣器 */
        aw_mdelay(500);         /* 延时500ms */
    }
    aw_close(fd);
    return 0;
}

蜂鸣器在开发板上的位置如图7所示。

6136b6e4-8c42-11ed-bfe3-dac502259ad0.png

图7蜂鸣器位置

蜂鸣器引脚所对应的PWM通道为pwm3_chan1,如下图所示。

615e5b2c-8c42-11ed-bfe3-dac502259ad0.png

图8蜂鸣器对应引脚

61721518-8c42-11ed-bfe3-dac502259ad0.png

图9PWM对应引脚

6183dd8e-8c42-11ed-bfe3-dac502259ad0.png

图10蜂鸣器对应的PWM通道

上述代码中在while循中环使用aw_buzzer_loud_set接口设置蜂鸣器的鸣叫程度为80,相当于调节PWM的占空比。然后使用aw_buzzer_beep接口使蜂鸣器鸣叫一段时间后关闭。再设置蜂鸣器的鸣叫程度为50,使用aw_buzzer_on接口启动蜂鸣器,相当于使能PWM,延时一段时间后用aw_buzzer_off接口关闭蜂鸣器,相当于关闭PWM,然后再延时一段时间。实验现象为蜂鸣器先以较大的声音鸣叫一段时间后以较小的声音鸣叫一段时间后停止鸣叫,持续一段时间后再次循环。在PWM例程中,PWM作为设备资源被Buzzer引用,可在配置界面中查看所有可引用资源,也可以在界面中查看当前平台所有PWM资源,以便在软件设计过程中查看修改。本文以PWM外设通用接口为例,演示了单通道的输出以及接口特性,同时与蜂鸣器进行设备绑定,后续将会更详细的介绍多通道的输出以及相关特性,请持续关注后续推文~


原文标题:【产品应用】AWorksLP 样例详解(MR6450)——PWM(单通道)

文章出处:【微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。


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

    关注

    13

    文章

    421

    浏览量

    32375

原文标题:【产品应用】AWorksLP 样例详解(MR6450)——PWM(单通道)

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    原厂 FZH13 高精度的单通道LED恒流驱动芯片

    的调光深度 。芯片 具有过温保护功能,当芯片结温达到 135℃时,随着芯片温度继续上升,芯片会线性降低输出电流。 FZH13质量可靠,性能优秀,在各种 LED照明产品中非常简单易用。功能特点Ø 单通道恒流
    发表于 11-14 09:20

    SSP2617单通道H桥驱动芯片

    在物联网与智能硬件飞速发展的今天,高效、可靠的电机驱动技术成为机器人、智能玩具及消费电子产品的核心需求。上海矽朋微电子推出的‌SSP2617单通道H桥驱动芯片‌,以其卓越的功率处理能力、灵活的PWM
    的头像 发表于 08-04 17:32 735次阅读
    SSP2617<b class='flag-5'>单通道</b>H桥驱动芯片

    AD74115单通道软件可配置的输入和输出技术手册

    AD74115是一款单通道、软件可配置输入和输出器件,适用于工业控制应用。AD74115提供各种单芯片集成用。这些用包括模拟输出、模拟输入、数字输出、数字输入、电阻温度检测器(RTD)和热电偶
    的头像 发表于 06-01 16:12 763次阅读
    AD74115<b class='flag-5'>单通道</b>软件可配置的输入和输出技术手册

    无杂散、50 MHz 至 2.1 GHz 单通道小数 N 分频频率合成器 skyworksinc

    电子发烧友网为你提供()无杂散、50 MHz 至 2.1 GHz 单通道小数 N 分频频率合成器相关产品参数、数据手册,更有无杂散、50 MHz 至 2.1 GHz 单通道小数 N 分频频率合成器
    发表于 05-23 18:30
    无杂散、50 MHz 至 2.1 GHz <b class='flag-5'>单通道</b>小数 N 分频频率合成器 skyworksinc

    700–1000 MHz 高线性度、单通道上/下变频混频器 skyworksinc

    电子发烧友网为你提供()700–1000 MHz 高线性度、单通道上/下变频混频器相关产品参数、数据手册,更有700–1000 MHz 高线性度、单通道上/下变频混频器的引脚图、接线图、封装手册
    发表于 05-21 18:30
    700–1000 MHz 高线性度、<b class='flag-5'>单通道</b>上/下变频混频器 skyworksinc

    1700–2100 MHz 高线性度、单通道上/下变频混频器 skyworksinc

    电子发烧友网为你提供()1700–2100 MHz 高线性度、单通道上/下变频混频器相关产品参数、数据手册,更有1700–2100 MHz 高线性度、单通道上/下变频混频器的引脚图、接线图、封装手册
    发表于 05-20 18:32
    1700–2100 MHz 高线性度、<b class='flag-5'>单通道</b>上/下变频混频器 skyworksinc

    湖南银河电气有限公司产品应用案例

    湖南银河电气有限公司产品应用案例
    发表于 04-23 11:21 0次下载

    PC1702单通道H桥栅极驱动器中文手册

    产品简述: PC1702 是一款小型单通道 H 桥栅极驱动器。它使用四个外部 N 通道 MOSFET,驱动一个双向刷式直流电机。PH/EN、独立半桥或 PWM 允许轻松连接到控制器电路
    发表于 03-14 17:57 0次下载

    DLPDLCR4710EVM-G2如何实现单通道无闪烁地图像输出?

    想要用DLPDLCR4710EVM-G2实现单通道投影,虽然在GUI程序里可以控制RGB三色LED的开关,只点亮其中一路LED,但是输出图像用相机拍摄会有闪烁,特别是将曝光率调小后闪烁特别明显,请问是否可以通过编程或者烧写固件的方式实现单通道无闪烁地输出图像?
    发表于 02-20 08:05

    深度解析 | 基于HPM6450的RISC-V核心板究竟有哪些过人之处?

    本文导读随着AIoT时代的到来,RISC-V作为新兴架构,其精简及开源的特性在物联网的应用领域有很大的优势,为此ZLG致远电子推出MR6450系列是基于先楫HPM6450的全新RISC-V核心板
    的头像 发表于 02-08 13:45 1341次阅读
    深度解析 | 基于HPM<b class='flag-5'>6450</b>的RISC-V核心板究竟有哪些过人之处?

    谈谈单通道注射泵的组成系统

    单通道注射泵以其精密、稳定、抗干扰能力强等优点被广泛应用于微流控相关领域。该设备使用方便,操作简单。流体控制的参数设置、修改和查看可在启动主界面完成。在参数输入过程中,可以直接从列表中选择注射器
    的头像 发表于 02-07 15:59 524次阅读

    tlv5610是否可以控制单通道输出?

    8通道DA芯片tlv5610,输出第一个通道同时,第二个通道会得到一的输出。 请问该芯片是否可以控制单通道输出?
    发表于 01-24 07:37

    如何使用ADC08D1000的芯片进行1G双通道采样或2G单通道采样?

    我们现在要使用ADC08D1000的芯片进行1G双通道采样或2G单通道采样,需要对AD的前端用继电器进行信号调理处理,请问有没有相关的资料介绍,或相应参考设计的?
    发表于 01-21 10:08

    ADS8329是单通道,是不是获取数据还要发CMR 0X000?

    想问下ADS8329的 D[15:12]命令寄存器,ADS8329是单通道,是不是获取数据还要发CMR 0X000? 还有那么时序 自动触发和收到触发 是只有CONVST 不一吗 ? 还有那个Read while sampling 和Read while comver
    发表于 12-25 07:32

    浅谈瑞盟科技·MS30517SA——单通道、高速、低侧栅极驱动器

    MS30517SA 是单通道、高速、低侧栅极驱动器器件,能够有效地驱动 MOSFET 和 IGBT 开关 。提供FAE支持,欢迎咨询了解。单通道、高速、低侧栅极驱动器
    的头像 发表于 12-20 17:44 1317次阅读
    浅谈瑞盟科技·MS30517SA——<b class='flag-5'>单通道</b>、高速、低侧栅极驱动器