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

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

3天内不再提示

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

ZLG致远电子 2023-01-13 09:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

e1a3306e-918d-11ed-ad0d-dac502259ad0.jpg  简介

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

e1addf0a-918d-11ed-ad0d-dac502259ad0.png

图1

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


e1a3306e-918d-11ed-ad0d-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:反向。


e1a3306e-918d-11ed-ad0d-dac502259ad0.jpg  使用样例

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

1. PWM单通道输出功能{SDK}\demos\peripheral\pwm路径下为PWM例程,例程关键代码如下:

/** * \brief PWM演示例程入口 * \return 无 */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("\nPWM demo testing...\n"); fd = aw_open(CONFIG_DEMO_PWM_DEVICE_NAME, AW_O_RDWR, 0); if(fd < 0){ aw_kprintf("pwm open failed \r\n"); 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所示:

e1d4052c-918d-11ed-ad0d-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波形。

e1e4774a-918d-11ed-ad0d-dac502259ad0.png

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

e201504a-918d-11ed-ad0d-dac502259ad0.png

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

e2203c6c-918d-11ed-ad0d-dac502259ad0.png

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

e237f122-918d-11ed-ad0d-dac502259ad0.png

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

2.蜂鸣器输出{SDK}\demos\peripheral\buzzer路径下为蜂鸣器例程,例程关键代码如下:

/** * \brief 建立蜂鸣器例程入口 * \return 无 */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 \r\n"); 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所示。

e246bd9c-918d-11ed-ad0d-dac502259ad0.png

图7蜂鸣器位置

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

e26f7f70-918d-11ed-ad0d-dac502259ad0.png

图8蜂鸣器对应引脚

e27ac060-918d-11ed-ad0d-dac502259ad0.png

图9PWM对应引脚

e289286c-918d-11ed-ad0d-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外设通用接口为例,演示了单通道的输出以及接口特性,同时与蜂鸣器进行设备绑定,后续将会更详细的介绍多通道的输出以及相关特性,请持续关注后续推文~

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

    关注

    33

    文章

    9635

    浏览量

    157801
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5904

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    安森美 NTMYS1D2N04CL 单通道 N 沟道功率 MOSFET 详解

    安森美 NTMYS1D2N04CL 单通道 N 沟道功率 MOSFET 详解 在电子设备的设计中,功率 MOSFET 是至关重要的元件,它直接影响着设备的性能和效率。今天,我们就来详细了解一下安森美
    的头像 发表于 04-10 09:35 171次阅读

    onsemi NVTYS007N04CL单通道N沟道功率MOSFET详解

    onsemi NVTYS007N04CL单通道N沟道功率MOSFET详解 在电子设计领域,功率MOSFET是不可或缺的关键元件,它广泛应用于各种电源管理、电机驱动等电路中。今天我们要深入探讨
    的头像 发表于 04-07 10:55 166次阅读

    ADE1201:单通道可配置隔离数字输入监测解决方案

    ADE1201:单通道可配置隔离数字输入监测解决方案 在能源传输和分配应用中,对于可靠、高效的数字输入监测解决方案的需求日益增长。ADI公司的ADE1201便是这样一款出色的产品,它为能源传输和分配
    的头像 发表于 03-27 14:15 223次阅读

    SGM25666:高性能单通道负载开关解析

    的SGM25666单通道负载开关,它具备诸多出色特性,适用于多种应用场景。 文件下载: SGM25666.pdf 一、产品概述 SGM25666是一款集成N - MOSFET的5.5V单通道负载开关。它能支持最高10A的连续负载
    的头像 发表于 03-25 09:15 343次阅读

    SGM2592 单通道电源分配开关设计详解

    SGM2592 单通道电源分配开关设计详解 在电子设计领域,电源分配开关是保障系统稳定供电的关键元素。今天我们就来深入剖析 SGMICRO 公司的 SGM2592 单通道电源分配开关,探究其特性
    的头像 发表于 03-24 17:25 621次阅读

    SGM2580 单通道功率分配开关:特性、应用及设计要点

    哪些独特的特性以及在实际应用中的表现。 文件下载: SGM2580.pdf 一、产品概述 SGM2580 是一款专为 USB 功率分配应用设计的单通道功率分配开关。它的工作电压范围为 2.5V 至
    的头像 发表于 03-24 15:25 230次阅读

    SGM2590/SGM2590D 单通道电源分配开关:设计与应用解析

    的影响。今天我们要介绍的是圣邦微(SG Micro Corp)推出的 SGM2590 和 SGM2590D 单通道电源分配开关,这两款产品在多个领域有着广泛的应用前景。 文件下载
    的头像 发表于 03-24 15:25 279次阅读

    SGM15UB1E2:超低压电容单通道ESD保护器件详解

    SGM15UB1E2:超低压电容单通道ESD保护器件详解 在电子设备的设计中,静电放电(ESD)是一个不容忽视的问题,它可能会对电路造成永久性损坏,影响设备的可靠性和稳定性。SGMICRO推出
    的头像 发表于 03-16 17:10 503次阅读

    固件烧录速度实测:JTAG比UART快6.8倍

    在批量生产场景中,固件烧录效率直接影响产线节拍与交付能力。如何选择最优烧录方式?本文以ZLG致远电子MR6450系列核心板为,通过实测数据为您解析。MR6450核心板MR6450是Z
    的头像 发表于 01-27 11:34 519次阅读
    固件烧录速度实测:JTAG比UART快6.8倍

    详解ADC3548与ADC3549:高性能单通道14位ADC的卓越之选

    详解ADC3548与ADC3549:高性能单通道14位ADC的卓越之选 引言 在电子工程领域,模拟到数字转换器(ADC)一直是至关重要的组件,它直接影响着系统对模拟信号的处理能力和精度。今天,我们要
    的头像 发表于 01-26 10:15 712次阅读

    汽车级单通道隔离栅极驱动器UCC23513-Q1技术详解

    汽车级单通道隔离栅极驱动器UCC23513-Q1技术详解 引言 在电子工程师的日常工作中,栅极驱动器的选择对于电路性能和可靠性至关重要。德州仪器(TI)推出的UCC23513-Q1单通道隔离栅极
    的头像 发表于 01-21 15:30 381次阅读

    汽车级单通道光耦模拟器 ISOM811x-Q1:设计与应用详解

    汽车级单通道光耦模拟器 ISOM811x-Q1:设计与应用详解 在电子设计领域,隔离器件一直是保障系统安全与性能的关键组件。汽车电子、工业自动化等应用场景对隔离器件的要求日益严苛,不仅需要具备
    的头像 发表于 01-20 14:00 375次阅读

    探索TS5A4597单通道8 - SPST模拟开关:特性、应用与电气参数详解

    探索TS5A4597单通道8-SPST模拟开关:特性、应用与电气参数详解 在电子设计领域,模拟开关是一种至关重要的元件,它能够实现信号的切换和路由,广泛应用于各种电子设备中。德州仪器(Texas
    的头像 发表于 01-15 11:00 465次阅读

    UCC2753x系列单通道高速栅极驱动器:特性、应用与设计要点详解

    UCC2753x系列单通道高速栅极驱动器:特性、应用与设计要点详解 引言 在电子电路设计中,栅极驱动器扮演着至关重要的角色,它能够有效驱动MOSFET和IGBT等功率开关,对于提高开关速度、降低
    的头像 发表于 01-09 16:05 1092次阅读

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

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